Compare commits

..
Author SHA1 Message Date
12aa310b8d
fix(ci): detect existing R versions via public object HEAD probe
The existing-version check listed the bucket with an anonymous curl, but
Backblaze B2 requires authentication for the list-bucket API, so it returned
AccessDenied and r-versions-existing.txt was always empty -> every version
was rebuilt despite already existing in s3. Signing the request is not
workable here: the B2 credentials are scoped to the plugin-s3 image in crow
and are not injected into this plain alpine step.

Individual artifacts are public-read, so probe each expected object URL with
an anonymous HEAD instead. The filename mirrors what nfpm produces (version
and release pinned to 1): r-<ver>_1_<arch>.{apk,deb} for alpine/ubuntu and
R-<ver>-1-1.<arch>.rpm for el*. Verified against the live bucket for all
three packager families.

Shell variables use bare $name rather than ${name}: crow runs its own
${VAR} substitution over the commands before the shell executes, so a
${VAR} naming a shell var (BASE, VERSION) was blanked to empty -- only
matrix vars resolve at that stage. Build the filename with printf to avoid
the ${VERSION}_1 brace requirement entirely.
2026-06-29 14:14:27 +02:00

View file

@ -1,13 +0,0 @@
# CLAUDE.md
CI pipelines (Crow, in `.crow/`) that build R binaries and upload them to Backblaze B2.
## Conventions
- **PRs:** the remote is Forgejo on `git.devxy.io`; use `fj -H git.devxy.io` (not `gh`).
- **Storage:** Backblaze B2 bucket `devxy-r-builds` (endpoint configured in `.crow/build.yaml`).
## Gotchas
- **B2 requires authentication for the list-bucket API.** Anonymous GET only works for individual public-read objects — an empty bucket listing usually means missing credentials, not an empty bucket. This silently broke rebuild dedup once.
- When a pipeline fails, fetch the Crow logs yourself instead of asking the user to paste them, and monitor reruns in the background until green.