Skip to content

Wait for each object's own manifest-id - #106

Merged
ps-pufferfish merged 2 commits into
mainfrom
manifest-id
Sep 28, 2026
Merged

ps-pufferfish merged 2 commits into
mainfrom
manifest-id

Conversation

@ps-pufferfish

@ps-pufferfish ps-pufferfish commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Requires manifest-builder 0.8.0 exactly (PortSwigger/manifest-builder#149 and #150), which is published to PyPI and locked here.

manifest-builder 0.8.0 stamps each object with noa.re/manifest-id, a hash of its own content, and returns the expected id of each changed object in GenerationResult.manifest_ids. It no longer returns a deploy-id. So:

  • Detection: wait_for_success takes a mapping from each created or modified object to its manifest-id, and waits for each object to carry its own id.
  • Deploy-id removed: there is no deploy-id any more. Logs and errors name the output a change went to instead, and deploy_id is gone from the change response's outputs and from the changed-objects progress event. The check that failed detection when manifest-builder returned no deploy-id goes too: relcoord always generates into a git checkout.
  • Diff comment: drops noa.re/manifest-id lines, and still drops noa.re/deploy-id so the migration commit (which swaps one for the other on every manifest) reads as no change. The deploy-id handling can go once every output has been through that commit.

Output check: 0.8.0's output was compared with 0.7.14's across all 14 system targets. Apart from deploy-id becoming manifest-id on the same line, the only difference is 23 manifests gaining an annotations block that holds only the manifest-id.

Rollout risk: the first generation after this deploys rewrites every manifest in an output. Under the linear [[rollout]] in system, each stage then waits on every object in its cluster within the 300s detection timeout, and a timeout stops the stages after it. Objects already applied pass on the first check, so this should be fine if Argo syncs promptly. Worth watching on the first change.

Validation: all 472 tests pass, as do ruff check, ruff format --check and ty check, run with uv run --locked --group dev as pr-checks.yml does.

manifest-builder now stamps every object with a hash of its own content instead
of one deploy-id per generation, and reports the expected id of each changed
object. A live object carrying its id holds the content that was written, so
detection compares each object against its own id. The deploy-id stays as the
name of the change in logs and responses.

The diff comment drops both annotations. The old one has to stay until every
output has gone through the first generation that swaps it for the new one.
manifest-builder 0.8.0 no longer returns one: each object's manifest-id is what
detection waits on, and the output a change went to names it well enough in
logs and errors. The deploy_id field goes from the change response and progress
events with it.
@ps-pufferfish
ps-pufferfish marked this pull request as ready for review September 28, 2026 13:17
@ps-pufferfish
ps-pufferfish merged commit 67f749f into main Sep 28, 2026
4 checks passed
@ps-pufferfish
ps-pufferfish deleted the manifest-id branch September 28, 2026 13:20
ps-pufferfish added a commit that referenced this pull request Sep 28, 2026
4.2.4 is gone from Docker Hub, which now publishes 4.3.0 and latest and nothing else non-dev, so the image build for #106 failed resolving the first line of the Dockerfile.
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.

1 participant