Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
bb4adb0
fix(release): fail before unsigned tag push (#1884)
svelderrainruiz Mar 23, 2026
f335cb5
feat(release): automate signed tag publication contract (#1886)
svelderrainruiz Mar 23, 2026
41ed685
Surface workflow signing readiness blocker (#1887) (#1888)
svelderrainruiz Mar 23, 2026
24779b4
[governance]: project vi-history distributor dependency into governor…
svelderrainruiz Mar 23, 2026
859db5b
[runtime]: surface vi-history distributor dependency in queue-empty h…
svelderrainruiz Mar 23, 2026
be33a01
[release]: distinguish signing authority blockers in readiness (#1893…
svelderrainruiz Mar 23, 2026
78da928
[release] add repair mode for existing unsigned tags (#1895) (#1897)
svelderrainruiz Mar 23, 2026
aa45f5b
[release] route unsigned-tag trust failures to repair mode (#1896) (#…
svelderrainruiz Mar 23, 2026
6fc325b
[governance]: fix priority:pr GraphQL draft typing for same-owner for…
svelderrainruiz Mar 23, 2026
28f1ac2
Update issue/upstream-1877-release-tag-publication-current (#1900)
svelderrainruiz Mar 23, 2026
11a4fa1
Update for standing priority #1901 (#1902)
svelderrainruiz Mar 23, 2026
1d03dbb
Update issue/upstream-1877-release-idle-queue-health (#1903)
svelderrainruiz Mar 23, 2026
9ebc907
Update issue/upstream-1877-release-conductor-queue-evidence (#1904)
svelderrainruiz Mar 23, 2026
6df18a6
Update issue/upstream-1877-release-conductor-git-identity (#1906)
svelderrainruiz Mar 23, 2026
bbec746
[capital]: stamp automation GitHub comments with durable spend hook (…
svelderrainruiz Mar 23, 2026
65d3aee
[release]: derive workflow signing authority for #1877 (#1912)
svelderrainruiz Mar 23, 2026
f8dfa01
fix: unblock release-conductor identity bootstrap for #1877 (#1913)
svelderrainruiz Mar 23, 2026
3fc468a
fix: replay release publication after repaired tags for #1877 (#1914)
svelderrainruiz Mar 23, 2026
24bb2b2
Update for standing priority #1877 (#1916)
svelderrainruiz Mar 23, 2026
a507002
Add execution-cell bundle host contracts for #1905 (#1915)
svelderrainruiz Mar 24, 2026
781fe74
feat: concentrate execution topology in governor handoff #1905 (#1917)
svelderrainruiz Mar 24, 2026
0e377d9
feat: project TestStand process model into session receipts #1905 (#1…
svelderrainruiz Mar 24, 2026
8b028e3
feat: project TestStand process model into loop status #1905 (#1919)
svelderrainruiz Mar 24, 2026
4c7b221
feat: project TestStand runtime into governor topology (#1905) (#1920)
svelderrainruiz Mar 24, 2026
36e7e32
feat: project kernel coordinator topology into runtime state (#1905) …
svelderrainruiz Mar 24, 2026
38d7e08
feat: project execution cell topology into loop runtime surfaces (#19…
svelderrainruiz Mar 24, 2026
bbdeca3
feat: concentrate execution topology in runtime state #1905 (#1923)
svelderrainruiz Mar 24, 2026
253dc37
feat: prefer concentrated runtime topology in governor summary #1905 …
svelderrainruiz Mar 24, 2026
fad1bd7
[governor]: add Sagan context concentrator handoff receipts (#1910)
svelderrainruiz Mar 24, 2026
ba63715
Chore(deps): bump docker/setup-buildx-action from 3 to 4 (#1854)
dependabot[bot] Mar 24, 2026
a86587c
Chore(deps): bump actions/attest-build-provenance from 2 to 4 (#1855)
dependabot[bot] Mar 24, 2026
c073f03
Chore(deps): bump actions/download-artifact from 5 to 8 (#1856)
dependabot[bot] Mar 24, 2026
4516b0c
Chore(deps): bump actions/upload-artifact from 5 to 7 (#1857)
dependabot[bot] Mar 24, 2026
5969b91
Update for standing priority #1940 (#1941)
svelderrainruiz Mar 24, 2026
30cfd89
[release] repair replay publication automation routing (#1942)
svelderrainruiz Mar 25, 2026
cc732be
chore(release): prepare v0.6.4-rc.2
Mar 25, 2026
329a912
docs(release): align rc2 branch materials for #1877
Mar 25, 2026
f228d20
test(session-index): stabilize cutover checklist fixture for #1877
Mar 25, 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
6 changes: 3 additions & 3 deletions .github/workflows/cookiecutter-bootstrap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -232,13 +232,13 @@ jobs:
run: npm ci

- name: Download Linux bootstrap artifact
uses: actions/download-artifact@v5
uses: actions/download-artifact@v8
with:
name: cookiecutter-bootstrap-linux
path: tests/results/_agent

- name: Download Windows bootstrap artifact
uses: actions/download-artifact@v5
uses: actions/download-artifact@v8
with:
name: cookiecutter-bootstrap-windows
path: tests/results/_agent
Expand Down Expand Up @@ -282,7 +282,7 @@ jobs:

- name: Upload template verification report
if: ${{ always() }}
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: template-agent-verification-${{ github.run_id }}
path: tests/results/_agent/promotion/template-agent-verification-report.json
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/downstream-promotion.yml
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ jobs:

- name: Upload downstream promotion artifacts
if: ${{ always() && hashFiles('tests/results/_agent/onboarding/*.json', 'tests/results/_agent/promotion/*.json') != '' }}
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: downstream-promotion-${{ github.run_id }}
path: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-tools-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:
--labels-file "$RUNNER_TEMP/tools-image-labels.txt"

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: Log in to GitHub Container Registry
uses: docker/login-action@v4
Expand Down
80 changes: 80 additions & 0 deletions .github/workflows/release-conductor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ on:
required: false
default: false
type: boolean
repair_existing_tag:
description: 'Repair an existing authoritative tag as a signed annotated tag'
required: false
default: false
type: boolean
channel:
description: 'Release channel'
required: false
Expand Down Expand Up @@ -66,12 +71,82 @@ jobs:
run: |
pwsh -NoLogo -NoProfile -File tools/priority/Resolve-PolicyToken.ps1 -TokenFileName release-conductor-gh-token.txt

- name: Configure release tag signing material
shell: bash
env:
RELEASE_TAG_SIGNING_PRIVATE_KEY: ${{ secrets.RELEASE_TAG_SIGNING_PRIVATE_KEY }}
RELEASE_TAG_SIGNING_PUBLIC_KEY: ${{ secrets.RELEASE_TAG_SIGNING_PUBLIC_KEY }}
RELEASE_TAG_SIGNING_IDENTITY_NAME: ${{ vars.RELEASE_TAG_SIGNING_IDENTITY_NAME || '' }}
RELEASE_TAG_SIGNING_IDENTITY_EMAIL: ${{ vars.RELEASE_TAG_SIGNING_IDENTITY_EMAIL || '' }}
run: |
set -euo pipefail
if [[ -z "${RELEASE_TAG_SIGNING_PRIVATE_KEY:-}" ]]; then
echo "No release tag signing key configured; skipping workflow-owned signing setup."
exit 0
fi
if [[ -z "${GH_TOKEN:-}" ]]; then
echo "::error::GH_TOKEN is unavailable after Resolve-PolicyToken; cannot derive workflow signing identity."
exit 1
fi
signing_dir="$RUNNER_TEMP/release-tag-signing"
mkdir -p "$signing_dir"
private_key_path="$signing_dir/id_release_tag_signing"
public_key_path="${private_key_path}.pub"
signing_login="$(gh api user --jq '.login')"
signing_id="$(gh api user --jq '.id')"
signing_name="${RELEASE_TAG_SIGNING_IDENTITY_NAME:-}"
signing_email="${RELEASE_TAG_SIGNING_IDENTITY_EMAIL:-}"

if [[ -z "$signing_name" ]]; then
signing_name="$(gh api user --jq '.name // .login')"
fi
if [[ -z "$signing_email" ]]; then
signing_email="$(gh api user --jq '.email // ""')"
fi
if [[ -z "$signing_email" ]]; then
signing_email="${signing_id}+${signing_login}@users.noreply.github.com"
fi

identity_source="policy-token-user"
if [[ -n "${RELEASE_TAG_SIGNING_IDENTITY_NAME:-}" || -n "${RELEASE_TAG_SIGNING_IDENTITY_EMAIL:-}" ]]; then
identity_source="repo-variable-override"
fi

printf '%s\n' "$RELEASE_TAG_SIGNING_PRIVATE_KEY" > "$private_key_path"
chmod 600 "$private_key_path"

if [[ -n "${RELEASE_TAG_SIGNING_PUBLIC_KEY:-}" ]]; then
printf '%s\n' "$RELEASE_TAG_SIGNING_PUBLIC_KEY" > "$public_key_path"
else
ssh-keygen -y -f "$private_key_path" > "$public_key_path"
fi
chmod 644 "$public_key_path"

git config gpg.format ssh
git config user.signingkey "$public_key_path"
git config user.name "$signing_name"
git config user.email "$signing_email"
git config tag.gpgSign true

{
echo "RELEASE_TAG_SIGNING_BACKEND=ssh"
echo "RELEASE_TAG_SIGNING_SOURCE=workflow-secret"
echo "RELEASE_TAG_SIGNING_IDENTITY_NAME=$signing_name"
echo "RELEASE_TAG_SIGNING_IDENTITY_EMAIL=$signing_email"
echo "RELEASE_TAG_SIGNING_IDENTITY_LOGIN=$signing_login"
echo "RELEASE_TAG_SIGNING_IDENTITY_ID=$signing_id"
echo "RELEASE_TAG_SIGNING_IDENTITY_SOURCE=$identity_source"
} >> "$GITHUB_ENV"

- name: Run release conductor
shell: pwsh
env:
RELEASE_CONDUCTOR_ENABLED: ${{ vars.RELEASE_CONDUCTOR_ENABLED || '0' }}
RELEASE_TAG_SIGNING_BACKEND: ${{ env.RELEASE_TAG_SIGNING_BACKEND || '' }}
RELEASE_TAG_SIGNING_SOURCE: ${{ env.RELEASE_TAG_SIGNING_SOURCE || '' }}
run: |
npm ci --ignore-scripts
node tools/npm/run-script.mjs priority:queue:supervisor -- --dry-run --report tests/results/_agent/queue/queue-supervisor-report.json
node tools/npm/run-script.mjs priority:policy:snapshot -- --output tests/results/_agent/policy/policy-state-snapshot.json

$reportPath = 'tests/results/_agent/release/release-conductor-report.json'
Expand Down Expand Up @@ -105,6 +180,10 @@ jobs:
$args += '--dry-run'
}

if ('${{ inputs.repair_existing_tag }}' -eq 'true') {
$args += '--repair-existing-tag'
}

$channelInput = '${{ inputs.channel }}'
if (-not [string]::IsNullOrWhiteSpace($channelInput)) {
$args += @('--channel', $channelInput.Trim().ToLowerInvariant())
Expand Down Expand Up @@ -134,5 +213,6 @@ jobs:
name: release-conductor-${{ github.run_id }}
path: |
tests/results/_agent/release/release-conductor-report.json
tests/results/_agent/queue/queue-supervisor-report.json
tests/results/_agent/policy/policy-state-snapshot.json
if-no-files-found: error
Loading
Loading