Publish immutable conformance bundles
This commit is contained in:
parent
03011f93cf
commit
1caa30473b
4 changed files with 75 additions and 0 deletions
48
.github/workflows/conformance.yml
vendored
Normal file
48
.github/workflows/conformance.yml
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
name: Eve conformance
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
locked-conformance:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Materialize public evidence workspace
|
||||||
|
shell: powershell
|
||||||
|
run: .\scripts\materialize-workspace.ps1
|
||||||
|
|
||||||
|
- name: Run locked conformance
|
||||||
|
shell: powershell
|
||||||
|
run: .\scripts\run-conformance.ps1 -WorkspaceRoot .\artifacts\workspace
|
||||||
|
|
||||||
|
- name: Pack immutable evidence bundle
|
||||||
|
id: pack
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
$archive = .\scripts\pack-conformance.ps1 -Version $env:GITHUB_SHA
|
||||||
|
"archive=$archive" >> $env:GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Upload conformance bundle
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: eve-conformance-${{ github.sha }}
|
||||||
|
path: ${{ steps.pack.outputs.archive }}
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
- name: Attach tagged release bundle
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
shell: powershell
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
run: |
|
||||||
|
gh release view $env:GITHUB_REF_NAME 2>$null
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
gh release create $env:GITHUB_REF_NAME --verify-tag --generate-notes
|
||||||
|
}
|
||||||
|
gh release upload $env:GITHUB_REF_NAME "${{ steps.pack.outputs.archive }}" --clobber
|
||||||
|
|
@ -26,3 +26,8 @@ powershell -ExecutionPolicy Bypass -File .\scripts\run-conformance.ps1 -Workspac
|
||||||
For development, `-WorkspaceRoot E:\Projects` verifies sibling checkouts only
|
For development, `-WorkspaceRoot E:\Projects` verifies sibling checkouts only
|
||||||
when every checkout already matches the lock. Local branch state is never
|
when every checkout already matches the lock. Local branch state is never
|
||||||
accepted as released conformance evidence.
|
accepted as released conformance evidence.
|
||||||
|
|
||||||
|
GitHub Actions runs the same locked workspace on every push and uploads a bundle
|
||||||
|
named for the EveConformance commit. A `v*` tag creates a GitHub release carrying
|
||||||
|
that exact lock, parity report, schema catalog, capability matrix, packs, and
|
||||||
|
typed witnesses.
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"materialize": "powershell -ExecutionPolicy Bypass -File ./scripts/materialize-workspace.ps1",
|
"materialize": "powershell -ExecutionPolicy Bypass -File ./scripts/materialize-workspace.ps1",
|
||||||
|
"pack": "powershell -ExecutionPolicy Bypass -File ./scripts/pack-conformance.ps1",
|
||||||
"test": "powershell -ExecutionPolicy Bypass -File ./scripts/run-conformance.ps1"
|
"test": "powershell -ExecutionPolicy Bypass -File ./scripts/run-conformance.ps1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
21
scripts/pack-conformance.ps1
Normal file
21
scripts/pack-conformance.ps1
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
param(
|
||||||
|
[string] $OutputDirectory = "artifacts\release",
|
||||||
|
[string] $Version = ""
|
||||||
|
)
|
||||||
|
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
$repoRoot = Split-Path -Parent $PSScriptRoot
|
||||||
|
$versionName = if ($Version) { $Version } else { (git -C $repoRoot rev-parse --short=12 HEAD) }
|
||||||
|
$outputRoot = if ([IO.Path]::IsPathRooted($OutputDirectory)) { $OutputDirectory } else { Join-Path $repoRoot $OutputDirectory }
|
||||||
|
$stage = Join-Path $outputRoot "eve-conformance-$versionName"
|
||||||
|
$archive = "$stage.zip"
|
||||||
|
|
||||||
|
if (Test-Path $stage) { Remove-Item -LiteralPath $stage -Recurse -Force }
|
||||||
|
if (Test-Path $archive) { Remove-Item -LiteralPath $archive -Force }
|
||||||
|
New-Item -ItemType Directory -Force -Path $stage | Out-Null
|
||||||
|
Copy-Item -LiteralPath (Join-Path $repoRoot "conformance-workspace.lock.json") -Destination $stage
|
||||||
|
Copy-Item -LiteralPath (Join-Path $repoRoot "artifacts\parity\latest.json") -Destination (Join-Path $stage "parity-report.json")
|
||||||
|
Copy-Item -LiteralPath (Join-Path $repoRoot "artifacts\parity\latest.md") -Destination (Join-Path $stage "parity-report.md")
|
||||||
|
Copy-Item -LiteralPath (Join-Path $repoRoot "artifacts\conformance\latest") -Destination (Join-Path $stage "conformance") -Recurse
|
||||||
|
Compress-Archive -LiteralPath $stage -DestinationPath $archive
|
||||||
|
Write-Output $archive
|
||||||
Reference in a new issue