Skip to content

Upload every distribution to robostack-<distro> on anaconda.org and prefix.dev; noetic's staging copy moves here - #97

Open
Tobias-Fischer wants to merge 2 commits into
mainfrom
channels/copy-and-mirror
Open

Tobias-Fischer wants to merge 2 commits into
mainfrom
channels/copy-and-mirror

Conversation

@Tobias-Fischer

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

Copy link
Copy Markdown
Collaborator

Every distribution uploads its packages directly to robostack-<distro> on both anaconda.org and prefix.dev, instead of a separate mirror job, as discussed in #54. Nothing goes to robostack-staging anymore:

  • humble's channel becomes robostack-humble, the one documented for years;
  • rolling's and lyrical's anaconda.org channels get populated, so -c robostack-rolling works.

Upload (pixi run rs <distro> upload, run by the staged build workflows):

  1. anaconda.org first: rattler-build upload anaconda -o robostack-<distro> --force. The token comes from the ANACONDA_API_TOKEN secret, which the generated build.yaml already passes, and goes in through the environment, never the command line.
  2. Then prefix.dev: rattler-build upload prefix -c robostack-<distro> --skip-existing --generate-attestation, with trusted publishing as before.

prefix.dev decides what gets built (skip_existing), so it must never have a package that anaconda.org lacks:

  • If anaconda.org fails after its retries, nothing goes to prefix.dev.
  • If prefix.dev fails, the next run builds the package again, and --force replaces the anaconda.org copy, so both channels end up with that build.
  • A missing token fails the upload.

The builds read prefix.dev. ROBOSTACK_UPLOAD_CHANNEL (a test channel) or none still redirect or skip all uploads, as before.

channel_name and upload_target leave distro.yaml: every distribution's channel is robostack-<distro>, and rs.channel_name() is the one place for that (also used by the ABI check, the stale and build-number lookups, new-distro and import_distro).

Staging copy for noetic: tools/copy_staging_packages.py + the hourly copy-staging-packages.yaml move here from RoboStack/robostack.github.io (RoboStack/robostack.github.io#205 removes them there). They now only copy noetic, which RoboStack/ros-noetic still uploads to robostack-staging, on to robostack-noetic. The job is skipped without its ROBOSTACK_NOETIC_ANACONDA_API_TOKEN secret.

Before merging:

  • prefix.dev: robostack-humble and robostack-jazzy are mirrors of anaconda.org today. They need to become regular channels, with Repository Access for this repository (build.yaml, read/write), like rolling and lyrical.
  • anaconda.org: create robostack-lyrical (it doesn't exist yet). The robostack-humble, robostack-jazzy and robostack-rolling channels exist.
  • Secrets: ANACONDA_API_TOKEN (an account that can upload to all four robostack-<distro> channels) and ROBOSTACK_NOETIC_ANACONDA_API_TOKEN. Then merge Move the channel copy script to the RoboStack monorepo robostack.github.io#205.

After this, the humble and jazzy sync PRs drop channel_name/upload_target from their distro.yaml when they're rebased.

Tests: 6 new upload tests (order, a failed anaconda.org upload, the missing token, the override, none); all 56 tool tests pass, and so does rs check. The README lists both hosts per distribution, the credentials and the noetic copy. Labelled build:humble.

🤖 Generated with Claude Code

@Tobias-Fischer Tobias-Fischer added the build:humble PR build: build only humble (with other build:<distro> labels: only those) label Oct 16, 2026
Tobias-Fischer added a commit to RoboStack/robostack.github.io that referenced this pull request Oct 16, 2026
The staging copy (scripts/copy-to-distro-specific-channel.py and the hourly
copy-staging-packages workflow) now lives in RoboStack/robostack#97,
together with the prefix.dev -> anaconda.org mirror. With it go its tests (the last
ones here: pytest, the test task and its CI step) and anaconda-client.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer Tobias-Fischer changed the title Channel maintenance moves here: staging copy and prefix.dev → anaconda.org mirror Upload every distribution to robostack-<distro> on anaconda.org and prefix.dev; noetic's staging copy moves here Oct 16, 2026
Tobias-Fischer and others added 2 commits October 17, 2026 12:31
…da.org mirror

From RoboStack/robostack.github.io: tools/copy_staging_packages.py (was
scripts/copy-to-distro-specific-channel.py) copies humble's and noetic's packages from
robostack-staging on to their own channels, hourly as before; tools/mirror_to_anaconda.py
(from RoboStack/robostack.github.io#205) uploads what a prefix.dev channel has and its
old anaconda.org channel doesn't, started by hand until the prefix.dev channels exist.
A job without its token secret is skipped, so nothing fails before the secrets are
set here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…refix.dev

Instead of a mirror job (#54): the build uploads each package to anaconda.org (token
ANACONDA_API_TOKEN, --force) and then to prefix.dev (trusted publishing), both
robostack-<distro>; the builds read prefix.dev. Nothing goes to robostack-staging
anymore: humble's channel is robostack-humble, and rolling and lyrical get their
anaconda.org channels populated. channel_name and upload_target leave distro.yaml.
anaconda.org goes first so that prefix.dev, which decides what is built, never has a
package anaconda.org lacks; a rebuild replaces the anaconda.org file. The staging copy
stays for noetic only (RoboStack/ros-noetic still uploads to robostack-staging).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Tobias-Fischer
Tobias-Fischer force-pushed the channels/copy-and-mirror branch from 7b335ee to b08129b Compare October 17, 2026 02:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build:humble PR build: build only humble (with other build:<distro> labels: only those)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant