Skip to content

Per-distribution uploads to prefix.dev and/or anaconda.org; humble off robostack-staging - #120

Open
Tobias-Fischer wants to merge 4 commits into
mainfrom
upload-both-hosts
Open

Tobias-Fischer wants to merge 4 commits into
mainfrom
upload-both-hosts

Conversation

@Tobias-Fischer

@Tobias-Fischer Tobias-Fischer commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Each distribution now uploads to its channel on the servers upload_to in its distro.yaml lists, with the same channel name on each. As agreed with prefix.dev for now:

Distribution upload_to read_from
lyrical prefix.dev, anaconda.org prefix.dev
rolling prefix.dev prefix.dev
jazzy anaconda.org (prefix.dev mirrors it) anaconda.org
humble anaconda.org (prefix.dev mirrors it) anaconda.org

This replaces the hourly robostack-staging → robostack-humble copy (copy-staging-packages.yml in robostack.github.io) for humble, and is the step towards retiring robostack-staging.

What changes:

  • tools/robostack.py upload():
    • prefix.dev as before (trusted publishing, attestation, --skip-existing);
    • anaconda.org with rattler-build upload anaconda -o <channel>, using each distribution's own token: the repository secret ANACONDA_API_TOKEN_<DISTRO>, which its generated build.yaml passes to the upload as ANACONDA_API_TOKEN (vinca-gha's secrets.ANACONDA_API_TOKEN is rewritten per distribution instead of stripped).
    • rattler-build's anaconda upload has no --skip-existing, so files anaconda.org already has (checked through api.anaconda.org/dist/…) are skipped, which keeps re-runs idempotent.
    • Each upload is retried up to three times; a missing token fails the upload step with a clear message.
  • ROBOSTACK_UPLOAD_CHANNEL (test channel) still uploads to that one prefix.dev channel only, and none still skips uploads.
  • distro.yaml:
    • upload_to is new (default: both);
    • upload_target becomes read_from (prefix | anaconda), which only says where the builds look up what's already published (skip-existing, released_builds, the stale check, the ABI check);
    • humble: channel_name: robostack-staging → robostack-humble.
    • rs check validates both keys, and new-distro copies them.
  • README: channel table and the new credentials.
  • Tests: test_upload.py (both servers, anaconda.org only, skip-existing on anaconda.org, the test-channel override, a missing token) and test_generate_gha.py (each distribution's workflow uses its own secret).

pixi run rs check and the tool tests pass. Nothing was uploaded: the upload path hasn't run against the real channels yet, so the first post-merge build is its real test.

Set up (done): the anaconda.org organization robostack-lyrical; the repository secrets ANACONDA_API_TOKEN_HUMBLE, ANACONDA_API_TOKEN_JAZZY and ANACONDA_API_TOKEN_LYRICAL (each its organization's token, scope api:write); prefix.dev Repository Access for this repository's build.yaml on robostack-lyrical and robostack-rolling. rolling uploads to prefix.dev only, so it needs no anaconda.org token.

After merging:

  • Remove humble's job from copy-staging-packages.yml in robostack.github.io.
  • noetic still uploads to robostack-staging and is copied to robostack-noetic by the same workflow, so the workflow, the script and robostack-staging can only go once noetic uploads to robostack-noetic directly (its own repository).
  • Moving humble or jazzy to prefix.dev later only needs upload_to/read_from in their distro.yaml, once prefix.dev's mirrors of them become regular channels.

Merge before the rosdistro syncs, at least before lyrical's (#60): its full rebuild then uploads every lyrical package to the new robostack-lyrical on anaconda.org too. Merged after it, those packages would already be on prefix.dev, the builds would skip them, and anaconda.org would only get later builds. The syncs then get a trivial conflict in distro.yaml (this PR's channel lines next to their pinning line). CI is held with [skip ci]: this touches shared tooling, so a CI run would build every distribution.

🤖 Generated with Claude Code

Tobias-Fischer and others added 2 commits October 20, 2026 14:13
Each distribution's packages now go to its channel on both servers (same
channel name): prefix.dev with trusted publishing as before, and anaconda.org
with the ANACONDA_API_TOKEN secret that vinca-gha already passes to the build
jobs (no longer stripped). rattler-build's anaconda upload has no
--skip-existing, so files anaconda.org already has are skipped first, keeping
re-runs idempotent. ROBOSTACK_UPLOAD_CHANNEL still sends uploads to one
prefix.dev (test) channel only.

distro.yaml's upload_target becomes read_from: it now only says where the
builds look up what is already published (humble and jazzy keep reading from
anaconda.org until their prefix.dev channels hold their packages).

humble moves from robostack-staging to robostack-humble, so it no longer
needs the hourly staging -> robostack-humble copy in robostack.github.io.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…and jazzy to anaconda.org [skip ci]

distro.yaml gets upload_to (prefix and/or anaconda; both by default). As
agreed with prefix.dev for now: lyrical and rolling upload to prefix.dev and
anaconda.org, humble and jazzy to anaconda.org only (prefix.dev mirrors
them). rs check validates the setting, and new distributions inherit it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer Tobias-Fischer changed the title Upload every distribution to both prefix.dev and anaconda.org; humble off robostack-staging Per-distribution uploads to prefix.dev and/or anaconda.org; humble off robostack-staging Oct 20, 2026
Tobias-Fischer and others added 2 commits October 20, 2026 15:06
Each robostack-<distro> organization gets its own token: the repository
secret ANACONDA_API_TOKEN_<DISTRO>. The generated build workflow of each
distribution reads its own secret (instead of vinca-gha's
secrets.ANACONDA_API_TOKEN) into ANACONDA_API_TOKEN, which the upload uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There's no access to the robostack-rolling organization on anaconda.org,
so rolling keeps uploading to prefix.dev only (as now).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer
Tobias-Fischer marked this pull request as ready for review October 20, 2026 10:05
@Tobias-Fischer

Copy link
Copy Markdown
Collaborator Author

This is ready for review :)

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