Skip to content

Small fixes from #39–#41; uploads without tokens - #46

Merged
Tobias-Fischer merged 1 commit into
mainfrom
small-fixes
Oct 10, 2026
Merged

Tobias-Fischer merged 1 commit into
mainfrom
small-fixes

Conversation

@Tobias-Fischer

Copy link
Copy Markdown
Collaborator

Replaces #42, which GitHub closed when main's history was rewritten into topic commits; same branch, rebased (the change is identical).

Takes the parts of @tdejager's #39, #40 and #41 that fix real problems on main, kept small (see the review comments there), and removes the upload tokens.

From #39

  • automerge: decides by the label the PR has now, since labeled/unlabeled events can arrive out of order. It also refuses to turn on without the bot app or PAT, because a merge made with GITHUB_TOKEN doesn't start the build workflow. A per-PR concurrency group is added too.
  • Locked installs: CI uses locked: true instead of frozen, so a lock file that doesn't match pixi.toml fails up front.
  • Generation: one build-branch generation per distribution at a time (generate-<distro> concurrency group). Two quick merges no longer push build branches in parallel.
  • check-patches: now also checks shared/patch. As in vinca, a distribution's patches for a package replace the shared ones. Until now, ros2-swri-serial-util.patch was never checked.

From #40

  • rs check accepts build_number: 0 (what new-distro writes) and an empty migration list.
  • The pinning renders migrations: [].
  • update-pinning fails when render-pinning fails.

From #41 (import_distro.py)

  • With --distro, ros-<source>-* names are converted using the source distribution.
  • Optional files the old repository no longer has are removed on re-import.
  • ci.yaml is kept on re-import.

Uploads without tokens

  • prefix.dev uploads use trusted publishing (OIDC) only: the PREFIX_API_KEY handling is gone.
  • The anaconda.org upload is removed as well: no ANACONDA_API_TOKEN, also stripped from the generated workflows, so no token appears on the command line any more.
  • Distributions whose channel is still on anaconda.org (humble, jazzy) are read from there and upload to ROBOSTACK_UPLOAD_CHANNEL. Without it, the upload fails with a clear message.

Left out

Verified

  • rs check passes, and actionlint is clean.
  • A regenerated jazzy workflow has no token lines and keeps id-token: write.
  • Upload dry runs:
    • jazzy without the redirect fails with the message;
    • jazzy with the test channel uploads to tobias-fischer/robostack-distro-test;
    • lyrical uploads to robostack-lyrical.
  • Patch discovery layers the directories as vinca does, and lyrical's check now includes the shared patch.

Fixes #27, fixes #29, fixes #32, fixes #36. Part of #26, #31, #34, #38.

🤖 Generated with Claude Code

From Tim's PRs (the parts that fix real problems on main):
- automerge goes by the label the PR has now (events can arrive out of order)
  and refuses to turn on without the bot token (a GITHUB_TOKEN merge doesn't
  start the build workflow)
- CI installs with locked: the lock file must match pixi.toml
- one build-branch generation per distribution at a time
- check-patches includes shared/patch (a distribution's patches for a
  package replace the shared ones, like in vinca)
- rs check accepts build_number 0 and an empty migration list; the pinning
  renders `migrations: []`; update-pinning fails when render-pinning does
- import_distro: names follow the source distribution with --distro, files
  the old repository no longer has are removed, ci.yaml is kept

Uploads use prefix.dev trusted publishing only: PREFIX_API_KEY and the
anaconda.org upload (ANACONDA_API_TOKEN, also stripped from the generated
workflows) are gone. Distributions whose channel is still on anaconda.org
are read from there and upload to ROBOSTACK_UPLOAD_CHANNEL.

Co-Authored-By: Tim de Jager <tdejager89@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer
Tobias-Fischer merged commit c55b4d6 into main Oct 10, 2026
22 checks passed
@Tobias-Fischer
Tobias-Fischer deleted the small-fixes branch October 10, 2026 01:04
Tobias-Fischer added a commit that referenced this pull request Oct 10, 2026
Jobs that declare permissions get none they don't list, so the generated
build jobs (id-token: write, attestations: write) had no contents permission;
checking out only worked because the repository is public. rs gha adds
contents: read to every job and refuses a job with permissions without it.
Closes #38: the other half, tokens on the command line, went with #46.

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

1 participant