Skip to content

Commit c8b595b

Browse files
committed
fix(Build): harden CI package and public API gates
1 parent f8aa26c commit c8b595b

3 files changed

Lines changed: 40 additions & 1 deletion

File tree

engineering/check-public-api.sh

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,17 @@ output_file="$output_dir/public-api.txt"
77

88
mkdir -p "$output_dir"
99

10-
if ! rg -n '^[[:space:]]*public[[:space:]]+((abstract|sealed|static|partial|readonly|record)[[:space:]]+)*(class|interface|enum|struct|record|delegate)[[:space:]]+' src --glob '*.cs' > "$output_file"; then
10+
public_api_pattern='^[[:space:]]*public[[:space:]]+((abstract|sealed|static|partial|readonly|record)[[:space:]]+)*(class|interface|enum|struct|record|delegate)[[:space:]]+'
11+
12+
if command -v rg >/dev/null 2>&1; then
13+
public_api_found=true
14+
rg -n "$public_api_pattern" src --glob '*.cs' > "$output_file" || public_api_found=false
15+
else
16+
public_api_found=true
17+
find src -name '*.cs' -print0 | xargs -0 grep -nE "$public_api_pattern" > "$output_file" || public_api_found=false
18+
fi
19+
20+
if [[ "$public_api_found" != true ]]; then
1121
printf 'No public API declarations found.\n' >&2
1222
exit 1
1323
fi

engineering/pack.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ mkdir -p "$package_output"
2626

2727
while IFS= read -r project; do
2828
if [[ "$no_build" == true ]]; then
29+
dotnet restore "$project" -p:Configuration="$configuration"
2930
dotnet pack "$project" --configuration "$configuration" --output "$package_output" --no-build -p:TreatWarningsAsErrors=true
3031
else
3132
dotnet pack "$project" --configuration "$configuration" --output "$package_output" -p:TreatWarningsAsErrors=true

tests/AtomUI.City.Build.Tests/EngineeringGateTests.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,34 @@ public void PackScriptTreatsWarningsAsErrors()
122122
Assert.Contains("-p:TreatWarningsAsErrors=true", script, StringComparison.Ordinal);
123123
}
124124

125+
[Fact]
126+
public void PackScriptRestoresSelectedConfigurationBeforeNoBuildPack()
127+
{
128+
var repositoryRoot = RepositoryPaths.FindRepositoryRoot();
129+
var scriptPath = Path.Combine(repositoryRoot, EngineeringScriptsDirectoryName, "pack.sh");
130+
131+
Assert.True(File.Exists(scriptPath), "Expected package script at engineering/pack.sh.");
132+
133+
var script = File.ReadAllText(scriptPath);
134+
135+
Assert.Contains("dotnet restore \"$project\" -p:Configuration=\"$configuration\"", script, StringComparison.Ordinal);
136+
}
137+
138+
[Fact]
139+
public void PublicApiScriptFallsBackWhenRipgrepIsUnavailable()
140+
{
141+
var repositoryRoot = RepositoryPaths.FindRepositoryRoot();
142+
var scriptPath = Path.Combine(repositoryRoot, EngineeringScriptsDirectoryName, "check-public-api.sh");
143+
144+
Assert.True(File.Exists(scriptPath), "Expected public API check script at engineering/check-public-api.sh.");
145+
146+
var script = File.ReadAllText(scriptPath);
147+
148+
Assert.Contains("command -v rg", script, StringComparison.Ordinal);
149+
Assert.Contains("find src -name '*.cs' -print0", script, StringComparison.Ordinal);
150+
Assert.Contains("xargs -0 grep", script, StringComparison.Ordinal);
151+
}
152+
125153
[Fact]
126154
public void CSharpSourceFilesDoNotUseRepositoryLicenseHeaders()
127155
{

0 commit comments

Comments
 (0)