Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
d8dc316
feat(platform): extract calendar evaluation from casework-core
jeremi Sep 14, 2026
291b838
feat(auth): add scheduling bounds to task grants
jeremi Sep 14, 2026
f1e15f0
fix(platform): keep exceptional reopenings inside published hours
jeremi Sep 14, 2026
83f8b1a
feat(platform): export the scheduling permission and pin its wire form
jeremi Sep 14, 2026
3c5524c
test(breg): refuse a scheduling grant in the registry binding
jeremi Sep 14, 2026
2f1c555
feat(scheduling): add the offline core and authoring tooling
jeremi Sep 14, 2026
d2e325b
feat(scheduling): author reminder offsets on offerings
jeremi Sep 14, 2026
54ac415
feat(scheduling): add the wire documents to the core
jeremi Sep 14, 2026
6d49854
feat(scheduling): pin the problem status map in the core
jeremi Sep 14, 2026
e3a2fed
feat(scheduling): pin the HTTP wire names and catalogue listings
jeremi Sep 14, 2026
a94b64b
feat(scheduling): add the bounded Rust client
jeremi Sep 14, 2026
3880449
feat(scheduling): add the service layer over the capacity store
jeremi Sep 14, 2026
46ba81c
feat(scheduling): add schedulingctl records apply and package
jeremi Sep 14, 2026
13484ec
feat(scheduling): type the request edge as product problem codes
jeremi Sep 15, 2026
e661dcb
feat(scheduling): add the product checkpoint and starter example
jeremi Sep 15, 2026
18cda5d
fix(scheduling): correct review findings in the committed runtime half
jeremi Sep 15, 2026
a002675
feat(scheduling): serve the runtime edge with auth, workers, and schema
jeremi Sep 15, 2026
bffe2b5
feat(scheduling): register problem and schema identifiers
jeremi Sep 15, 2026
bf14ab5
docs(scheduling): describe the product in agent guidance
jeremi Sep 15, 2026
de120c5
feat(scheduling): publish the scheduling command lines in the CLI ref…
jeremi Sep 15, 2026
ff0ab60
feat(scheduling): add the local acceptance demo over the public contract
jeremi Sep 15, 2026
e928f42
feat(scheduling): generate the OpenAPI contract document with drift c…
jeremi Sep 15, 2026
2a4dec5
docs(scheduling): publish the Scheduling API reference on the docs site
jeremi Sep 15, 2026
28543c5
fix(ci): register the five Scheduling crates in the Rust shard inventory
jeremi Sep 15, 2026
4af803f
test(scheduling): require a database for the runtime commitment suite
jeremi Sep 15, 2026
9a6045f
fix(platform-calendar): name no caller's vocabulary in a gap or fold …
jeremi Sep 15, 2026
5be9eeb
fix(scheduling): resolve one location's openings into a canonical pub…
jeremi Sep 15, 2026
9d5de92
fix(scheduling): keep the reschedule exclusion inside the runtime's t…
jeremi Sep 15, 2026
28577e3
fix(scheduling): assess a subquota a proposal introduces, not only on…
jeremi Sep 15, 2026
37ee865
fix(scheduling): compare standing claims against the proposed window …
jeremi Sep 15, 2026
f66312c
fix(scheduling): refuse a staffing pool that an exact-time offering a…
jeremi Sep 15, 2026
4c1adaf
feat(scheduling): emit a runtime configuration example beside each in…
jeremi Sep 15, 2026
7fb7728
docs(scheduling): document every runtime configuration block and its …
jeremi Sep 15, 2026
74cc2c3
docs(scheduling): document the task-grant shape and how the runtime m…
jeremi Sep 15, 2026
f0692f3
docs(scheduling): add the product changelog and contributor orientation
jeremi Sep 15, 2026
bd350d3
docs(scheduling): state the product boundary, its exclusions, and its…
jeremi Sep 15, 2026
fafd8c5
docs: list Registry Scheduling among the stack's products
jeremi Sep 15, 2026
691ea6c
fix(scheduling): close the channel vocabulary a subquota is drawn from
jeremi Sep 15, 2026
a0c2217
fix(scheduling): refuse a leftover capacity policy nothing reads
jeremi Sep 15, 2026
58380ce
feat(scheduling): hold the product's security invariants in a checked…
jeremi Sep 15, 2026
d6920d9
docs: bound scheduling composition and ledger authority in agent guid…
jeremi Sep 15, 2026
b724798
docs(scheduling): state what the in-transaction grant re-check covers
jeremi Sep 15, 2026
a765f2f
ci(scheduling): run the product's gates and database suite on every c…
jeremi Sep 15, 2026
314eaaf
test(scheduling): make the checkpoint prove what it claims to check
jeremi Sep 15, 2026
4fc13ac
feat(scheduling): ship the runtime image and installer
jeremi Sep 15, 2026
b6a1f0d
refactor(casework): re-export only the calendar evaluator Casework uses
jeremi Sep 15, 2026
d969b8b
fix(scheduling): admit only the RFC 9068 access-token type
jeremi Sep 15, 2026
ed0ab0d
fix(scheduling): make a production deployment name the clients it admits
jeremi Sep 15, 2026
e07b13d
fix(scheduling): tombstone spent idempotency receipts instead of dele…
jeremi Sep 15, 2026
a857d6c
fix(scheduling): refuse a raced idempotency key instead of failing th…
jeremi Sep 15, 2026
62af60b
feat(scheduling): bind exchanged credentials to declared assertion au…
jeremi Sep 15, 2026
46d168d
fix(scheduling): admit commitments against the stored policy revision
jeremi Sep 15, 2026
e24bb21
fix(scheduling): hold a failing reminder intent until its back-off pa…
jeremi Sep 15, 2026
27d9a8c
fix(scheduling): answer a verifier outage with a retry, not a challenge
jeremi Sep 15, 2026
192016b
fix(scheduling): refuse to judge an expiry the clock cannot date
jeremi Sep 15, 2026
cf1280d
fix(scheduling): refuse a records swap that strands a live claim
jeremi Sep 15, 2026
76b024f
fix(schedulingctl): report calendar-only fixture failures per fixture
jeremi Sep 15, 2026
31d36e3
fix(scheduling): bound the caller strings a commitment stores
jeremi Sep 15, 2026
2ad5a6f
docs(scheduling): state the cursor actor-binding contract where it is…
jeremi Sep 15, 2026
b4f7cdd
fix(scheduling): name the step and the cause when the database fails …
jeremi Sep 15, 2026
0f75022
fix(schedulingctl): report ok:false when check --deny-findings or tes…
jeremi Sep 15, 2026
ad9ff09
fix(scheduling-client): declare a workspace.dependencies entry
jeremi Sep 15, 2026
0994669
fix(schedulingctl): accept --format human|json, matching every siblin…
jeremi Sep 15, 2026
f87788c
fix(scheduling): declare the refusal a malformed path segment already…
jeremi Sep 15, 2026
8fccddd
fix(schedulingctl): name the authored policy path by its own constant…
jeremi Sep 15, 2026
53cbb3e
fix(scheduling): audit a permission refused before the transaction opens
jeremi Sep 15, 2026
d2baf68
fix(scheduling): bound the caller-chosen duplicate key in the ledger
jeremi Sep 15, 2026
1f98a11
fix(scheduling): let a client outlive the deployment it reads
jeremi Sep 15, 2026
f832e30
fix(scheduling): answer an unknown offering and a malformed body thei…
jeremi Sep 15, 2026
215538e
feat(scheduling): read the delivery intents nothing will carry further
jeremi Sep 15, 2026
ed07650
fix(schedulingctl): print expected and actual codes for a failing fix…
jeremi Sep 15, 2026
58f5f80
fix(scheduling): say where and why a configuration was refused
jeremi Sep 15, 2026
08a4534
test(scheduling): pin that two callers racing for one unit book it once
jeremi Sep 15, 2026
49544e7
fix(scheduling): hold the caller, not just the pool, at the hold ceiling
jeremi Sep 15, 2026
dced861
test(scheduling): pin what the retention sweep erases and what it leaves
jeremi Sep 15, 2026
4fa555e
fix(scheduling): document the absence an unknown offering answers
jeremi Sep 15, 2026
42dd37d
fix(scheduling): publish the audit journal in the order it was written
jeremi Sep 15, 2026
1b085fa
fix(scheduling): name the package manifest apart from the policy
jeremi Sep 15, 2026
2970193
test(scheduling): pin what a dispatch pass sends and what it concludes
jeremi Sep 15, 2026
69a9f73
chore(identifiers): regenerate the catalog for the scheduling runtime…
jeremi Sep 15, 2026
9c85a15
feat(schedulingctl): read undelivered delivery intents
jeremi Sep 15, 2026
bb9f980
docs(scheduling): say which clients and which authorities a deploymen…
jeremi Sep 15, 2026
bdeb0fc
docs: answer an unknown offering as absent in the Scheduling API refe…
jeremi Sep 15, 2026
86b771f
docs(scheduling): record the deferred schedulingctl dev verb
jeremi Sep 15, 2026
6ddb7af
docs(schedulingctl): correct allowedClients and document assertionIss…
jeremi Sep 15, 2026
14ce505
fix(scheduling): name a member only when the offering books one
jeremi Sep 15, 2026
6caf9b9
chore(scheduling): write the store and runtime prose without em dashes
jeremi Sep 15, 2026
0efe114
feat(scheduling-core): say when an authored value's text is outside i…
jeremi Sep 15, 2026
c9272a6
feat(schedulingctl): refuse a malformed authored value unconditionally
jeremi Sep 15, 2026
bccee97
docs(scheduling): record the edge hardening as invariants rather than…
jeremi Sep 15, 2026
c1e476f
docs: say the journal records a permission refused before a commitment
jeremi Sep 15, 2026
8e06e1f
chore(scheduling): write the edge and core prose without em dashes
jeremi Sep 15, 2026
4975f16
chore(schedulingctl): write the records module doc without em dashes
jeremi Sep 15, 2026
16fefdf
feat(schedulingctl): give the arrival-window template a banded units …
jeremi Sep 15, 2026
0d31a26
fix(schedulingctl): keep the runtime database suite out of database-f…
jeremi Sep 15, 2026
3c33fa5
test(scheduling): gate that the database suites stay opt-in
jeremi Sep 15, 2026
e914d65
ci: run the Scheduling delivery intent suite
jeremi Sep 15, 2026
f9442ec
test(release): bind each PostgreSQL image pin to the job that runs it
jeremi Sep 15, 2026
a126183
test(schedulingctl): compare intent due times at the resolution Postg…
jeremi Sep 15, 2026
190d2c4
fix(scheduling): guard lifecycle revisions, dispatch ownership, and a…
jeremi Sep 17, 2026
ca44484
fix(scheduling): recheck the grant at commit and stop sends past the …
jeremi Sep 17, 2026
57c64d7
fix(scheduling): hold the database suites' opt-in gate under forwarding
jeremi Sep 17, 2026
2aeaeac
fix(scheduling): prove contract citations selectable and suites opt-in
jeremi Sep 17, 2026
60b7c06
feat(scheduling): deliver appointment observer hooks
jeremi Sep 19, 2026
e087b75
fix(scheduling): close beta release gaps
jeremi Sep 19, 2026
83fe97a
fix(scheduling): address beta review findings
jeremi Sep 20, 2026
cd6dbb8
chore(identifiers): refresh scheduling problem catalog
jeremi Sep 20, 2026
5e3c795
fix(scheduling): close beta review gaps
jeremi Sep 20, 2026
9bb8309
fix(scheduling): anchor arrival window records
jeremi Sep 20, 2026
5dab704
fix(scheduling): preserve window supply invariants
jeremi Sep 20, 2026
4212df0
docs(cli): refresh combined command review
jeremi Sep 20, 2026
00ef3b6
fix(scheduling): preserve commitment accounting
jeremi Sep 20, 2026
07aeed7
fix(scheduling): audit every refusal the capacity transaction decides
jeremi Sep 21, 2026
84c301b
docs: state the scheduling artifacts the release actually publishes
jeremi Sep 21, 2026
e807da4
docs(scheduling): record the unchecked combined policy and records in…
jeremi Sep 21, 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
12 changes: 12 additions & 0 deletions .github/scripts/ci_changes.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"registry-platform-audit",
"registry-platform-authcommon",
"registry-platform-buildinfo",
"registry-platform-calendar",
"registry-platform-canonical-json",
"registry-platform-config",
"registry-platform-crypto",
Expand Down Expand Up @@ -66,6 +67,12 @@
"registry-casework-client-node",
"registry-casework-client-py",
),
"scheduling": (
"registry-scheduling-core",
"registry-scheduling",
"registry-schedulingctl",
"registry-scheduling-client",
),
"stack-client": ("registry-record", "registry-stack-client"),
"evidence": (
"registry-evidence",
Expand Down Expand Up @@ -94,6 +101,7 @@
RELAY_CLIENT_PACKAGES = frozenset(SHARDS["relay-client"])
BREG_PACKAGES = frozenset(SHARDS["breg"])
CASEWORK_PACKAGES = frozenset(SHARDS["casework"])
SCHEDULING_PACKAGES = frozenset(SHARDS["scheduling"])
STACK_CLIENT_PACKAGES = frozenset(SHARDS["stack-client"])

# These are the cross-product semantic commitments implemented independently by
Expand Down Expand Up @@ -700,6 +708,8 @@ def classify(
seeds.update(BREG_PACKAGES)
elif path.startswith("products/casework/"):
seeds.update(CASEWORK_PACKAGES)
elif path.startswith("products/scheduling/"):
seeds.update(SCHEDULING_PACKAGES)
elif path.startswith("products/identifiers/"):
# The catalog gate compiles its focused Relay V2 exporter.
# Catalog-only tooling does not require the full Rust matrix.
Expand Down Expand Up @@ -952,7 +962,9 @@ def classify(
for path in paths
),
"evidence_contracts": bool(affected & EVIDENCE_PACKAGES),
"scheduling_contracts": bool(affected & SCHEDULING_PACKAGES),
"casework_postgres": bool(affected & CASEWORK_PACKAGES),
"scheduling_postgres": bool(affected & SCHEDULING_PACKAGES),
"release_tool": release_tool,
"release_source_proof": release_source_proof,
"docs": docs,
Expand Down
14 changes: 13 additions & 1 deletion .github/scripts/test_ci_changes.py
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,12 @@ def test_deferred_ci_work_keeps_its_selector_and_explicit_status_guard(
) -> None:
selectors = {
"casework-postgres": "needs.changes.outputs.casework_postgres == 'true'",
"scheduling-postgres": (
"needs.changes.outputs.scheduling_postgres == 'true'"
),
"scheduling-contracts": (
"needs.changes.outputs.scheduling_contracts == 'true'"
),
"platform-fuzz": "needs.changes.outputs.platform == 'true'",
"platform-coverage": "needs.changes.outputs.platform == 'true'",
"rust-quality": "needs.changes.outputs.rust == 'true'",
Expand Down Expand Up @@ -338,6 +344,8 @@ def test_ci_scheduling_graph_retains_every_job_and_aggregate_dependency(
"identifiers",
"rust-result",
"casework-postgres",
"scheduling-contracts",
"scheduling-postgres",
"release-tool",
"release-tool-required",
"release-source-proof",
Expand Down Expand Up @@ -371,6 +379,8 @@ def test_ci_scheduling_graph_retains_every_job_and_aggregate_dependency(
"breg-wasm",
"identifiers",
"casework-postgres",
"scheduling-postgres",
"scheduling-contracts",
),
"release-tool-required": ("changes", "release-tool"),
"release-source-proof-required": ("changes", "release-source-proof"),
Expand All @@ -394,6 +404,8 @@ def test_ci_scheduling_graph_retains_every_job_and_aggregate_dependency(
"breg-wasm",
"identifiers",
"casework-postgres",
"scheduling-postgres",
"scheduling-contracts",
"release-tool",
"release-source-proof",
"evidence-tutorials",
Expand Down Expand Up @@ -449,7 +461,7 @@ def test_final_aggregate_flattens_rust_results_with_equivalent_outcomes(
final_needs,
previous_final_needs.difference({"rust-result"}).union(rust_needs),
)
self.assertEqual(29, len(final_needs))
self.assertEqual(31, len(final_needs))

def embedded_python(job: dict[str, Any]) -> str:
run = job["steps"][0]["run"]
Expand Down
1 change: 1 addition & 0 deletions .github/scripts/test_nightly_rust_coverage.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def test_all_live_shards_have_stable_flags_and_owned_packages(self) -> None:
"relay-v2": "relay-v2",
"breg": "breg",
"casework": "casework",
"scheduling": "scheduling",
"stack-client": "stack-client",
"evidence": "evidence",
"developer-tools": "developer-tools",
Expand Down
95 changes: 93 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ jobs:
relay_client_contracts: ${{ steps.filter.outputs.relay_client_contracts }}
breg_contracts: ${{ steps.filter.outputs.breg_contracts }}
casework_postgres: ${{ steps.filter.outputs.casework_postgres }}
scheduling_postgres: ${{ steps.filter.outputs.scheduling_postgres }}
evidence_contracts: ${{ steps.filter.outputs.evidence_contracts }}
scheduling_contracts: ${{ steps.filter.outputs.scheduling_contracts }}
release_tool: ${{ steps.filter.outputs.release_tool }}
release_source_proof: ${{ steps.filter.outputs.release_source_proof }}
docs: ${{ steps.filter.outputs.docs }}
Expand Down Expand Up @@ -711,6 +713,88 @@ jobs:
CASEWORK_REVIEW_MIGRATION_TEST_DATABASE_URL: postgresql://casework:casework_test@localhost:${{ job.services.postgres.ports['5432'] }}/casework_review_migration
run: cargo test --locked --profile ci -p registry-casework --features postgres-test --test review_migration_postgres

scheduling-contracts:
name: Scheduling product contracts
needs: [changes, rust-policy]
if: ${{ !cancelled() && needs.changes.result == 'success' && needs.changes.outputs.scheduling_contracts == 'true' }}
runs-on: ubuntu-24.04
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
persist-credentials: false
submodules: false

- name: Cache Cargo registry
uses: Swatinem/rust-cache@f0d9c3887740aee45f6153b24b3a6b815192ec16 # v2
with:
shared-key: workspace-registry
cache-targets: false
save-if: ${{ github.ref == 'refs/heads/main' }}

- name: Scheduling contract consistency
run: products/scheduling/scripts/check-contracts.sh

scheduling-postgres:
name: Scheduling PostgreSQL transactions
needs: [changes, rust-policy]
if: ${{ !cancelled() && needs.changes.result == 'success' && needs.changes.outputs.scheduling_postgres == 'true' }}
runs-on: ubuntu-24.04
timeout-minutes: 30
services:
postgres:
image: postgres:17.11@sha256:67f41722b7a8cbdb868a44a4995c846eddfdc2973bccb291ce937dce88ad5675
env:
POSTGRES_DB: scheduling
POSTGRES_USER: scheduling
POSTGRES_PASSWORD: scheduling_test
options: >-
--health-cmd "pg_isready -U scheduling -d scheduling"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432/tcp
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
with:
persist-credentials: false
submodules: false
- name: Rust cache
uses: Swatinem/rust-cache@f0d9c3887740aee45f6153b24b3a6b815192ec16 # v2
with:
shared-key: workspace-registry
cache-targets: false
save-if: ${{ github.ref == 'refs/heads/main' }}
- name: Build the Scheduling authoring tool
run: cargo build --locked --profile ci -p registry-schedulingctl
- name: Verify Scheduling product contracts and offline authoring journeys
env:
SCHEDULINGCTL_BIN: ${{ github.workspace }}/target/ci/schedulingctl
run: products/scheduling/scripts/check-checkpoint.sh
- name: Verify commitment ledger transactions
env:
SCHEDULING_TEST_DATABASE_URL: postgresql://scheduling:scheduling_test@localhost:${{ job.services.postgres.ports['5432'] }}/scheduling
run: cargo test --locked --profile ci -p registry-scheduling --features postgres-test --test postgres_commitments
- name: Create isolated authoring-apply test database
env:
POSTGRES_CONTAINER_ID: ${{ job.services.postgres.id }}
run: docker exec "$POSTGRES_CONTAINER_ID" createdb -U scheduling scheduling_records_apply
- name: Verify offline authoring record application
env:
SCHEDULING_TEST_DATABASE_URL: postgresql://scheduling:scheduling_test@localhost:${{ job.services.postgres.ports['5432'] }}/scheduling_records_apply
run: cargo test --locked --profile ci -p registry-schedulingctl --features postgres-test --test records_apply_postgres
- name: Create isolated delivery-intent test database
env:
POSTGRES_CONTAINER_ID: ${{ job.services.postgres.id }}
run: docker exec "$POSTGRES_CONTAINER_ID" createdb -U scheduling scheduling_intents
- name: Verify undelivered delivery intent reads
env:
SCHEDULING_TEST_DATABASE_URL: postgresql://scheduling:scheduling_test@localhost:${{ job.services.postgres.ports['5432'] }}/scheduling_intents
run: cargo test --locked --profile ci -p registry-schedulingctl --features postgres-test --test intents_postgres

breg-contracts:
name: Base Registry Engine product contracts (${{ matrix.lane }})
needs: changes
Expand Down Expand Up @@ -786,15 +870,18 @@ jobs:
BREG_POSTGRES_LANE: ${{ matrix.lane }}
run: products/breg/scripts/test-postgres.sh --lane "$BREG_POSTGRES_LANE"

- name: Casework task approval through stock issuer and BReg
- name: Casework task approval through stock issuer to Evidence, BReg, and Scheduling
if: matrix.lane == 'postgres'
shell: bash
run: |
set -euo pipefail
cargo build --locked --profile ci -p registry-scheduling \
--example scheduling-auth-probe
SCHEDULING_AUTH_PROBE_BIN="${GITHUB_WORKSPACE}/target/ci/examples/scheduling-auth-probe" \
CASEWORK_ASSIGNMENT_TEST_DATABASE_URL="${BREG_TEST_DATABASE_URL}" \
cargo test --locked --profile ci -p registry-casework \
--features postgres-test --lib \
approved_casework_tasks_exchange_on_stock_thunderid_for_evidence_and_revoke_breg_writes \
approved_casework_tasks_reach_evidence_breg_and_scheduling_through_stock_thunderid \
-- --ignored
cargo build --locked --profile ci -p registry-casework -p registry-caseworkctl
cargo test --locked --profile ci -p registry-casework \
Expand Down Expand Up @@ -937,6 +1024,8 @@ jobs:
- breg-wasm
- identifiers
- casework-postgres
- scheduling-postgres
- scheduling-contracts
runs-on: ubuntu-slim
env:
RUST_JOB_RESULTS: ${{ toJSON(needs) }}
Expand Down Expand Up @@ -1938,6 +2027,8 @@ jobs:
- breg-wasm
- identifiers
- casework-postgres
- scheduling-postgres
- scheduling-contracts
- release-tool
- release-source-proof
- evidence-tutorials
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/release-canary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:
PY
printf '{"spdxVersion":"SPDX-2.3","name":"release-canary"}\n' \
> canary/bundle-root/registry-stack-${tag}.sbom.spdx.json
image_names=(relay evidence discovery breg casework)
image_names=(relay evidence discovery breg casework scheduling)

write_image_reports() {
local name="$1"
Expand Down Expand Up @@ -109,6 +109,7 @@ jobs:
"evidence-image",
"breg-image",
"casework-image",
"scheduling-image",
"relay-image"
]
}' > "${evidence_root}/advisory-verdict.json"
Expand Down
13 changes: 12 additions & 1 deletion .github/workflows/release-candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ jobs:
strategy:
fail-fast: false
matrix:
group: [core, breg, casework]
group: [core, breg, casework, scheduling]
steps:
- name: Checkout exact candidate source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down Expand Up @@ -340,6 +340,12 @@ jobs:
name: canonical-linux-binaries-casework-${{ needs.validate.outputs.source_sha }}-${{ github.run_id }}-${{ github.run_attempt }}
path: binary-shards/casework

- name: Download canonical Linux Scheduling binary shard
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: canonical-linux-binaries-scheduling-${{ needs.validate.outputs.source_sha }}-${{ github.run_id }}-${{ github.run_attempt }}
path: binary-shards/scheduling

- name: Merge and smoke the canonical Linux payload
run: |
set -euo pipefail
Expand All @@ -349,6 +355,7 @@ jobs:
--core binary-shards/core \
--breg binary-shards/breg \
--casework binary-shards/casework \
--scheduling binary-shards/scheduling \
--output dist \
--builder-image "${RELEASE_BUILDER_IMAGE}"
test "$("dist/bin/relay-${{ needs.validate.outputs.tag }}-linux-amd64" --version)" = \
Expand All @@ -369,6 +376,10 @@ jobs:
test "$("dist/bin/caseworkctl-${{ needs.validate.outputs.tag }}-linux-amd64" --version)" = \
"caseworkctl ${{ needs.validate.outputs.version }}"
fi
if (( release_major > 0 || release_minor >= 33 )); then
test "$(dist/image-bin/scheduling --version)" = \
"scheduling ${{ needs.validate.outputs.version }}"
fi

- name: Set up Docker Buildx
id: buildx
Expand Down
13 changes: 12 additions & 1 deletion .github/workflows/release-rehearsal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ jobs:
strategy:
fail-fast: false
matrix:
group: [core, breg, casework]
group: [core, breg, casework, scheduling]
steps:
- name: Checkout exact prepared source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down Expand Up @@ -225,6 +225,12 @@ jobs:
name: release-rehearsal-binaries-casework-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
path: binary-shards/casework

- name: Download canonical Linux Scheduling binary shard
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: release-rehearsal-binaries-scheduling-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
path: binary-shards/scheduling

- name: Merge and smoke the canonical Linux payload
env:
REHEARSAL_VERSION: ${{ inputs.version }}
Expand All @@ -237,6 +243,7 @@ jobs:
--core binary-shards/core \
--breg binary-shards/breg \
--casework binary-shards/casework \
--scheduling binary-shards/scheduling \
--output dist \
--builder-image "${RELEASE_BUILDER_IMAGE}"
test "$("dist/bin/breg-v${REHEARSAL_VERSION}-linux-amd64" --version)" = \
Expand All @@ -251,6 +258,10 @@ jobs:
test "$("dist/bin/caseworkctl-v${REHEARSAL_VERSION}-linux-amd64" --version)" = \
"caseworkctl ${REHEARSAL_VERSION}"
fi
if (( release_major > 0 || release_minor >= 33 )); then
test "$(dist/image-bin/scheduling --version)" = \
"scheduling ${REHEARSAL_VERSION}"
fi

- name: Set up Docker Buildx for advisory evidence
if: ${{ inputs.advisory_evidence }}
Expand Down
Loading
Loading