Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
90d721c
Deduplicate CI matrix lane assertions
Widthdom Aug 11, 2026
d13351b
Streamline release validation lanes
Widthdom Aug 11, 2026
ff80298
Scale TRX telemetry for the full suite
Widthdom Aug 11, 2026
ce0b889
Parallelize independent C# query regressions
Widthdom Aug 11, 2026
8258d6d
Parallelize query JSON contract regressions
Widthdom Aug 11, 2026
da68ea2
Parallelize search fixture guard regressions
Widthdom Aug 11, 2026
f69fd56
Parallelize status readiness regressions
Widthdom Aug 11, 2026
fd6aa62
Parallelize query bound parser coverage
Widthdom Aug 11, 2026
2959892
Parallelize find limit regressions
Widthdom Aug 11, 2026
375f8a9
Parallelize query path filter regressions
Widthdom Aug 11, 2026
f77758b
Parallelize find terminal metadata regressions
Widthdom Aug 11, 2026
7098509
Parallelize search guidance regressions
Widthdom Aug 11, 2026
6b4f310
Parallelize audit SARIF budget regressions
Widthdom Aug 11, 2026
4c23efb
Parallelize search recovery guidance regressions
Widthdom Aug 11, 2026
b6dec8c
Parallelize validate contract checks
Widthdom Aug 11, 2026
0147c8c
Parallelize batch parsing and budget checks
Widthdom Aug 11, 2026
0381edf
Parallelize report argument parser coverage
Widthdom Aug 11, 2026
479ecea
Parallelize metrics parser and retry checks
Widthdom Aug 11, 2026
bbe11a9
Parallelize database command parser coverage
Widthdom Aug 11, 2026
c487da3
Parallelize project path classification checks
Widthdom Aug 11, 2026
006a3cd
Isolate nested batch console regressions
Widthdom Aug 11, 2026
2c37d6d
Isolate MCP audit stderr diagnostics
Widthdom Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 60 additions & 22 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,16 +83,24 @@ jobs:
include:
- os: ubuntu-24.04
rid: linux-x64
cross_compile: false
run_tests: true
- os: ubuntu-24.04
rid: linux-arm64
cross_compile: true
run_tests: false
- os: windows-2022
rid: win-x64
cross_compile: false
run_tests: false
- os: windows-2022
rid: win-arm64
cross_compile: true
run_tests: false
- os: macos-14
rid: osx-arm64
cross_compile: false
run_tests: false
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
Expand All @@ -101,42 +109,37 @@ jobs:
fetch-depth: 0
ref: ${{ needs.preflight.outputs.ref }}

- name: Configure Windows test host
if: runner.os == 'Windows' && !matrix.cross_compile
shell: pwsh
run: ./.github/scripts/configure-windows-test-host.ps1 -Workspace "${{ github.workspace }}"

- name: Set up .NET SDKs
if: ${{ !matrix.cross_compile }}
if: matrix.run_tests
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0
with:
dotnet-version: |
8.0.413
9.0.301

- name: Set up cross-compile .NET SDK
if: matrix.cross_compile
- name: Set up publish-only .NET SDK
if: ${{ !matrix.run_tests }}
uses: actions/setup-dotnet@9a946fdbd5fb07b82b2f5a4466058b876ab72bb2 # v5.3.0
with:
dotnet-version: 9.0.301

- name: Cache native NuGet packages
if: ${{ !matrix.cross_compile }}
- name: Cache test-lane NuGet packages
if: matrix.run_tests
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.nuget/packages
~\AppData\Local\NuGet\packages
key: ${{ runner.os }}-release-nuget-${{ hashFiles('src/CodeIndex/packages.lock.json', 'tests/CodeIndex.HookIsolationFixture/packages.lock.json', 'tests/CodeIndex.Tests/packages.lock.json', 'tools/CodeIndex.Changelog/packages.lock.json', 'tools/CodeIndex.PackageNormalize/packages.lock.json', 'tools/CodeIndex.TestTelemetry/packages.lock.json') }}

- name: Cache cross-compile NuGet packages
if: matrix.cross_compile
- name: Cache publish-only NuGet packages
if: ${{ !matrix.run_tests }}
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.nuget/packages
~\AppData\Local\NuGet\packages
key: ${{ runner.os }}-release-cross-nuget-${{ hashFiles('src/CodeIndex/packages.lock.json') }}
key: ${{ runner.os }}-release-publish-nuget-${{ hashFiles('src/CodeIndex/packages.lock.json') }}

# --locked-mode requires every resolved package to match the committed
# packages.lock.json so an unexpected transitive bump (including silent
Expand All @@ -147,19 +150,19 @@ jobs:
# bump が公開アーティファクトに紛れ込まず release restore で気付ける。
# 詳細は issue #1556 参照。
- name: Restore test dependencies
if: ${{ !matrix.cross_compile }}
if: matrix.run_tests
run: dotnet restore tests/CodeIndex.Tests/CodeIndex.Tests.csproj -p:RestoreTargetFrameworks=net8.0 --locked-mode

- name: Restore publish dependencies
if: matrix.cross_compile
if: ${{ !matrix.run_tests }}
run: dotnet restore src/CodeIndex/CodeIndex.csproj --locked-mode

- name: Build tests
if: ${{ !matrix.cross_compile }}
if: matrix.run_tests
run: dotnet build tests/CodeIndex.Tests/CodeIndex.Tests.csproj --configuration Release --framework net8.0 --no-restore

- name: Test net8
if: ${{ !matrix.cross_compile }}
if: matrix.run_tests
run: dotnet test tests/CodeIndex.Tests/CodeIndex.Tests.csproj --configuration Release --framework net8.0 --no-build --no-restore --nologo

# Generate a CycloneDX SBOM once per release on the linux-x64 lane.
Expand Down Expand Up @@ -217,18 +220,18 @@ jobs:
# RestoreLockedMode=true here: publish for a new RID and trimming
# (Microsoft.NET.ILLink.Tasks) legitimately add lock entries that did
# not exist at the preceding locked restore (net8 test-project restore on
# native lanes, production-project restore on cross-compile lanes). The
# native restore covers the production dependency graph through the test
# the test lane, production-project restore on publish-only lanes). The
# test restore covers the production dependency graph through the test
# project's ProjectReference. The security guarantee against silent
# SQLitePCLRaw-style transitive drift is already enforced by that
# lane-appropriate restore. See issue #1556 / DEVELOPER_GUIDE.md.
# publish が target RID 向けに走らせる runtime-specific restore は
# Directory.Build.props の RestorePackagesWithLockFile=true により
# lock ファイルで固定された版を解決対象とする。ここで
# RestoreLockedMode=true を渡さないのは意図的で、publish 時に新規 RID と
# trimming(Microsoft.NET.ILLink.Tasks)が、直前の locked restore(native lane
# では net8 test project、cross-compile lane では production project)時には
# なかった lock エントリを正当に追加するため。native restore は test project
# trimming(Microsoft.NET.ILLink.Tasks)が、直前の locked restore(test lane
# では net8 test project、publish-only lane では production project)時には
# なかった lock エントリを正当に追加するため。test restore は test project
# の ProjectReference 経由で production dependency graph も検証する。
# SQLitePCLRaw のような推移依存ドリフトに対する保証は、その lane に対応する
# restore で確保済み。
Expand Down Expand Up @@ -307,6 +310,41 @@ jobs:
Remove-Item -LiteralPath $pfxPath -Force -ErrorAction SilentlyContinue
}

# Run the complete RID-independent source suite once on linux-x64, then
# exercise each natively runnable artifact itself. This preserves OS and
# bundled-SQLite coverage without repeating the same 8k-test suite on
# Windows and macOS release runners.
# RID 非依存の完全な source suite は linux-x64 で 1 回実行し、native 実行
# 可能な各 artifact 自体を検証する。Windows/macOS release runner で同じ
# 約 8k test を繰り返さず、OS と bundled SQLite の coverage を維持する。
- name: Smoke-test native release artifact (Linux/macOS)
if: runner.os != 'Windows' && !matrix.cross_compile
shell: bash
run: |
set -euo pipefail
smoke_root="$(mktemp -d)"
trap 'rm -rf "$smoke_root"' EXIT
printf 'namespace ReleaseSmoke; public sealed class Sample { public int Value => 1; }\n' > "$smoke_root/Sample.cs"
./publish/cdidx "$smoke_root" --db "$smoke_root/.cdidx/codeindex.db" --json
./publish/cdidx status --db "$smoke_root/.cdidx/codeindex.db" --json

- name: Smoke-test native release artifact (Windows)
if: runner.os == 'Windows' && !matrix.cross_compile
shell: pwsh
run: |
$smokeRoot = Join-Path $env:RUNNER_TEMP ([IO.Path]::GetRandomFileName())
New-Item -ItemType Directory -Force -Path $smokeRoot | Out-Null
try {
'namespace ReleaseSmoke; public sealed class Sample { public int Value => 1; }' |
Set-Content -Encoding utf8 (Join-Path $smokeRoot 'Sample.cs')
& .\publish\cdidx.exe $smokeRoot --db (Join-Path $smokeRoot '.cdidx\codeindex.db') --json
if ($LASTEXITCODE -ne 0) { throw "Published cdidx index smoke failed with exit code $LASTEXITCODE." }
& .\publish\cdidx.exe status --db (Join-Path $smokeRoot '.cdidx\codeindex.db') --json
if ($LASTEXITCODE -ne 0) { throw "Published cdidx status smoke failed with exit code $LASTEXITCODE." }
} finally {
Remove-Item -LiteralPath $smokeRoot -Recurse -Force -ErrorAction SilentlyContinue
}

- name: Add license and trademark notices to publish output (Linux/macOS)
if: runner.os != 'Windows'
run: cp LICENSE LICENSES/FSL-1.1-ALv2.txt LICENSES/Apache-2.0.txt COMMERCIAL_LICENSE.md INTEGRATION_POLICY.md TRADEMARKS.md publish/ && cp -R LICENSES publish/
Expand Down
Loading
Loading