Skip to content

ci: land upstream's split CI workflows ahead of the upstream sync (#202) - #204

Merged
RossHartmann merged 1 commit into
mainfrom
ci/upstream-sync-workflows
Oct 17, 2026
Merged

RossHartmann merged 1 commit into
mainfrom
ci/upstream-sync-workflows

Conversation

@RossHartmann

@RossHartmann RossHartmann commented Oct 16, 2026 •

Copy link
Copy Markdown

Draft. Don't merge until main gives the go. It is sequenced with the upstream sync, #202.

Why

Kiingo's Spot runner admission (gha-runner-controller public-buzz.cjs) only admits a job whose workflow file is byte-identical to the file on fork main; otherwise it rejects the job with public_workflow_not_current. The upstream sync, #202, replaces ci.yml with upstream's split _ci-*.yml and changes docker.yml and a few others. As a result most of #202's CI can't run. This PR lands those workflow files on main first, so #202's workflows match main and its full CI can run.

What

  • Workflow files, taken unchanged from sync/upstream-60de1db0: ci.yml, the new _ci-clients.yml, _ci-desktop.yml, _ci-desktop-macos.yml, _ci-relay.yml, _ci-rust.yml and _ci-security.yml, plus docker.yml, sprig.yml, mesh-lifecycle.yml, push-gateway-helm-chart.yml, codex-security-review.yml, minio-image.yml, and .github/ci/minio, .github/scripts and CODEOWNERS.
  • CI-support files the workflows call:
    • scripts/ci-runtime-selection.mjs, ci-apt-retry.sh, postgres-test-*.sh, check-postgres-test-discovery.py, macos-icon.sh and generate-macos-icon.py;
    • the hermit pins for actionlint and uv, plus hermit.hcl;
    • .config/nextest.toml.
  • Inventory: a temporary upstream-ci-prelanding delta (drop/upstream-present), covering three newly modified upstream files (codex-security-review script and test, hermit.hcl). No budget amendment is needed: Ross's 2026-10-17 ceilings (fix(dm): make DM membership a privacy boundary and pin relay-signed metadata (Kiingo M-4017) #210) cover it. Sync upstream block/buzz main (97e1f6a0) into the Kiingo fork — DO NOT MERGE until main's go #202 removes both.

Policy review (Spot only, no tests, no hosted runners)

Can this PR run CI itself?

No, by design. Admission compares each job's workflow file with main, and this PR changes those files, so the changed workflows' jobs are rejected here too. Only workflows that are unchanged (Desktop Release Candidate, helm chart, CodeQL) can run. There is no way around this without weakening the admission rule that stops PR-authored workflow code from running on self-hosted runners, and I don't recommend that.

Risk: these workflows assume the post-sync tree

🤖 Generated with Claude Code

Comment on lines +157 to +210
name: Mobile Swift (${{ matrix.name }})
runs-on: macos-latest
timeout-minutes: 45
if: ${{ github.repository != 'Kiingo/buzz' && (inputs.lane == 'mobile-swift' && inputs.mobile) }}
strategy:
fail-fast: false
matrix:
include:
- name: Native
lane: native
- name: Release
lane: release
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: cashapp/activate-hermit@cea9af7913204a965fd488637a8d1811bba2e616 # v1
- name: Install Flutter dependencies
run: cd mobile && flutter pub get
- name: Build
if: matrix.lane == 'native'
run: swift build --package-path mobile/ios/BuzzPushKit
- name: Build release
if: matrix.lane == 'native'
run: swift build -c release --package-path mobile/ios/BuzzPushKit
- name: Test
if: matrix.lane == 'native'
run: swift test --package-path mobile/ios/BuzzPushKit
- name: Test native pagination geometry
if: matrix.lane == 'native'
run: /bin/bash scripts/test-mobile-pagination.sh
- name: Build complete iOS simulator app
if: matrix.lane == 'native'
run: cd mobile && flutter build ios --simulator --debug --no-pub
- name: Test native controls and push navigation bridge
if: matrix.lane == 'native'
run: |
device=$(xcrun simctl create "Pagination accessibility" "iPhone 16")
trap 'xcrun simctl shutdown "$device"; xcrun simctl delete "$device"' EXIT
xcrun simctl boot "$device"
xcrun simctl bootstatus "$device" -b
/bin/bash scripts/test-mobile-pagination-accessibility.sh "$device"
/bin/bash scripts/test-mobile-carousel.sh "$device"
/bin/bash scripts/test-mobile-member-picker.sh "$device"
xcodebuild -workspace mobile/ios/Runner.xcworkspace -scheme Runner \
-configuration Debug -destination "platform=iOS Simulator,id=$device" \
-parallel-testing-enabled NO \
-only-testing:RunnerTests/BuzzPushNavigationBridgeTests \
CODE_SIGNING_ALLOWED=NO test
- name: Build complete unsigned iOS release
if: matrix.lane == 'release'
run: |
/bin/bash scripts/test-mobile-gateway-recipes.sh
cd mobile && flutter build ios --release --no-codesign --no-pub

results:
Comment thread .github/workflows/ci.yml
Comment on lines +192 to +201
name: Rust
needs: [changes]
if: ${{ github.repository != 'Kiingo/buzz' && (github.event_name == 'push' || needs.changes.outputs.rust == 'true') }}
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: cashapp/activate-hermit@cea9af7913204a965fd488637a8d1811bba2e616 # v1
- uses: rui314/setup-mold@7e4f20ad28a2e8ca6fd0892ccf72e2abb706b9c3 # v1
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2.9.1
with:
key: sherpa-cache-v1
save-if: ${{ github.event_name != 'pull_request' }}
- name: Install cargo-nextest
uses: taiki-e/install-action@0fd46367812ee04360509b4169d9f659d6892bb2 # v2.79.15
with:
tool: cargo-nextest@0.9.136
- name: Unit tests
if: ${{ github.repository != 'Kiingo/buzz' }}
run: just test-unit
if: github.event_name == 'push' || needs.changes.outputs.rust == 'true' || needs.changes.outputs.desktop-rust == 'true'
uses: ./.github/workflows/_ci-rust.yml
with:
rust: ${{ needs.changes.outputs.rust == 'true' }}
desktop_rust: ${{ needs.changes.outputs.desktop-rust == 'true' }}
lane: required

desktop-core:
name: Desktop Core
runs-on: ${{ fromJSON(github.repository == 'Kiingo/buzz' && '["self-hosted","linux","x64","kiingo-azure","untrusted-test","d4ads-v6","docker","kiingo-buzz-public"]' || '["ubuntu-latest"]') }}
timeout-minutes: 45
rust-cross-compile-domain:
Comment thread .github/workflows/ci.yml
Comment on lines +202 to +211
name: Rust Cross-Compile
needs: [changes]
if: github.event_name == 'push' || needs.changes.outputs.rust == 'true'
uses: ./.github/workflows/_ci-rust.yml
with:
rust: ${{ needs.changes.outputs.rust == 'true' }}
desktop_rust: ${{ needs.changes.outputs.desktop-rust == 'true' }}
lane: cross-compile

desktop-domain:
Comment thread .github/workflows/ci.yml
Comment on lines +212 to +221
name: Desktop Domain
needs: [changes]
if: github.event_name == 'push' || needs.changes.outputs.desktop == 'true' || needs.changes.outputs.desktop-rust == 'true' || needs.changes.outputs.rust == 'true'
permissions:
contents: read
uses: ./.github/workflows/_ci-desktop.yml
with:
rust: ${{ needs.changes.outputs.rust == 'true' }}
desktop: ${{ needs.changes.outputs.desktop == 'true' }}
desktop_rust: ${{ needs.changes.outputs.desktop-rust == 'true' }}

relay-artifacts-domain:
Comment thread .github/workflows/ci.yml
Comment on lines +222 to +232
name: Relay Artifact Producer
needs: [changes]
if: ${{ github.repository != 'Kiingo/buzz' && (github.event_name == 'push' || needs.changes.outputs.desktop == 'true' || needs.changes.outputs.desktop-rust == 'true' || needs.changes.outputs.rust == 'true') }}
uses: ./.github/workflows/_ci-relay.yml
with:
rust: ${{ needs.changes.outputs.rust == 'true' }}
desktop: ${{ needs.changes.outputs.desktop == 'true' }}
desktop_rust: ${{ needs.changes.outputs.desktop-rust == 'true' }}
lane: artifacts

postgres-domain:
Comment thread .github/workflows/ci.yml
Comment on lines +244 to +253
name: Desktop macOS Domain
needs: [changes]
if: ${{ github.repository != 'Kiingo/buzz' && (github.event_name == 'push' || needs.changes.outputs.desktop == 'true' || needs.changes.outputs.desktop-rust == 'true' || needs.changes.outputs.rust == 'true') }}
uses: ./.github/workflows/_ci-desktop-macos.yml
with:
rust: ${{ needs.changes.outputs.rust == 'true' }}
desktop: ${{ needs.changes.outputs.desktop == 'true' }}
desktop_rust: ${{ needs.changes.outputs.desktop-rust == 'true' }}

relay-domain:
Comment thread .github/workflows/ci.yml
Comment on lines +254 to +264
name: Relay and PostgreSQL
needs: [changes, relay-artifacts-domain]
if: ${{ github.repository != 'Kiingo/buzz' && (github.event_name == 'push' || needs.changes.outputs.desktop == 'true' || needs.changes.outputs.desktop-rust == 'true' || needs.changes.outputs.rust == 'true') }}
uses: ./.github/workflows/_ci-relay.yml
with:
rust: ${{ needs.changes.outputs.rust == 'true' }}
desktop: ${{ needs.changes.outputs.desktop == 'true' }}
desktop_rust: ${{ needs.changes.outputs.desktop-rust == 'true' }}
lane: required

clients:
Comment thread .github/workflows/ci.yml
Comment on lines +265 to +274
name: Clients
needs: [changes]
if: github.event_name == 'push' || needs.changes.outputs.web == 'true' || needs.changes.outputs.mobile == 'true'
uses: ./.github/workflows/_ci-clients.yml
with:
web: ${{ needs.changes.outputs.web == 'true' }}
mobile: ${{ needs.changes.outputs.mobile == 'true' }}
lane: required

mobile-swift-domain:
Comment thread .github/workflows/ci.yml
Comment on lines +275 to +284
name: Mobile Swift Domain
needs: [changes]
if: ${{ github.repository != 'Kiingo/buzz' && (needs.changes.outputs.mobile == 'true') }}
uses: ./.github/workflows/_ci-clients.yml
with:
web: ${{ needs.changes.outputs.web == 'true' }}
mobile: ${{ needs.changes.outputs.mobile == 'true' }}
lane: mobile-swift

security-domain:
Comment thread .github/workflows/ci.yml
Comment on lines +285 to +292
name: Security Domain
needs: [changes]
if: github.event_name == 'push' || needs.changes.outputs.rust == 'true'
uses: ./.github/workflows/_ci-security.yml
with:
rust: ${{ needs.changes.outputs.rust == 'true' }}

rust-lint:
@RossHartmann
RossHartmann force-pushed the ci/upstream-sync-workflows branch from 3edefb3 to 3024128 Compare October 17, 2026 19:39
@RossHartmann

Copy link
Copy Markdown
Author

Taken over by C (2026-10-17). This is still a draft, sequenced with #202.

Rebased onto main f5e365e (#205–#209).

  • CODEOWNERS is no longer pre-landed. It isn't a workflow input, and the sync brings it in anyway.
  • Budget: needs approval. Three modified upstream files remain: the codex-security-review script and its test, plus bin/hermit.hcl. That puts main at 280 modified upstream files against Ross's approved 277. It's recorded as a PENDING amendment.
  • .github/workflows, .github/scripts, bin/hermit.hcl and kiingo-spot-ci.json are byte-identical to Sync upstream block/buzz main (97e1f6a0) into the Kiingo fork — DO NOT MERGE until main's go #202's head (1fbf7f4).
  • As before, only unchanged workflows can run CI on this PR.

Kiingo's Spot runner admission only runs a job whose workflow file matches
main (public_workflow_not_current), so the upstream sync PR (#202), which
replaces ci.yml with upstream's split _ci-*.yml, cannot run its own CI.
Land the workflow files and their CI-support scripts, hermit pins and
nextest config first, unchanged from the sync branch: Kiingo's Spot-only,
no-test policy is re-applied and upstream-only GitHub-hosted jobs are
skipped on Kiingo/buzz. Inventory: a temporary drop/upstream-present delta
and a four-file budget amendment, both removed by the sync.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Ross Hartmann <1750494+RossHartmann@users.noreply.github.com>
@RossHartmann
RossHartmann force-pushed the ci/upstream-sync-workflows branch from 3024128 to fc0c5f3 Compare October 17, 2026 20:59
@RossHartmann

Copy link
Copy Markdown
Author

Rebased onto main 765e8e8 (#210), now at fc0c5f3. The pending budget amendment is dropped because Ross's 2026-10-17 ceilings in #210 cover it (281 modified upstream files against a ceiling of 600). Workflows, scripts and hermit.hcl are still byte-identical to #202's head 192627b.

@RossHartmann
RossHartmann marked this pull request as ready for review October 17, 2026 21:49
@RossHartmann
RossHartmann merged commit 1a1ae14 into main Oct 17, 2026
RossHartmann pushed a commit that referenced this pull request Oct 17, 2026
Workflow files already match; the temporary upstream-ci-prelanding
delta is dropped because the sync moves upstreamSnapshot past those
files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants