chore: resolve latest bincraft release dynamically (no hardcoded pins) #107

Merged
pat-s merged 1 commit from chore/dynamic-bincraft-version into main 2026-07-01 08:10:03 +00:00
Owner

Summary

Stop hardcoding the bincraft version. Every .crow workflow and the build-one image pinned @vX.Y.Z (and a packageVersion() != "X.Y.Z" guard), so each bincraft release meant editing the version in ~8 places — and it was easy to miss one (the Dockerfile lagged at v4.2.1; v4.4.1 shipped without the empty-env fix because of exactly this churn).

Change

New local/install-bincraft.R resolves the latest release tag dynamically:

  • git ls-remote --tags on the public repo (no token),
  • keep vX.Y.Z tags, pick the highest version (filtered/sorted in R for portability, not via git --sort/refspec which behaved inconsistently under system2()),
  • pak::pak("git::…@<latest>") — idempotent on the git ref, so re-runs keep the package unless a newer tag exists.

All call sites now invoke the helper instead of a pinned version:

  • .crow/build-all-versions.yaml (primary + per-minor pass)
  • .crow/build-all-versions-install-deps.yaml
  • .crow/process-updates.yaml (primary + per-minor pass)
  • .crow/weekly-rebuild-missing.yaml
  • .crow/archive-missed-packages.yaml
  • docker/build-one.Dockerfile (ships the helper into the image; ensure_bincraft sources it)

Effect

Tag a new bincraft release → the next CI run / just rebuild picks it up automatically. No more pin edits, and no more "forgot to bump the Dockerfile" drift.

Verified

  • Resolver returns the current latest tag (v4.4.2) via git ls-remote + R-side version sort.
  • All five workflow YAMLs parse; helper R parses; air/editorconfig clean.

Note: this tracks the latest tag, so cutting a release is still the deliberate gate — CI won't pick up un-tagged main.

## Summary Stop hardcoding the bincraft version. Every `.crow` workflow and the build-one image pinned `@vX.Y.Z` (and a `packageVersion() != "X.Y.Z"` guard), so each bincraft release meant editing the version in ~8 places — and it was easy to miss one (the Dockerfile lagged at v4.2.1; v4.4.1 shipped without the empty-env fix because of exactly this churn). ## Change New `local/install-bincraft.R` resolves the **latest release tag dynamically**: - `git ls-remote --tags` on the public repo (no token), - keep `vX.Y.Z` tags, pick the highest version (filtered/sorted in R for portability, not via git `--sort`/refspec which behaved inconsistently under `system2()`), - `pak::pak("git::…@<latest>")` — idempotent on the git ref, so re-runs keep the package unless a newer tag exists. All call sites now invoke the helper instead of a pinned version: - `.crow/build-all-versions.yaml` (primary + per-minor pass) - `.crow/build-all-versions-install-deps.yaml` - `.crow/process-updates.yaml` (primary + per-minor pass) - `.crow/weekly-rebuild-missing.yaml` - `.crow/archive-missed-packages.yaml` - `docker/build-one.Dockerfile` (ships the helper into the image; `ensure_bincraft` sources it) ## Effect Tag a new bincraft release → the next CI run / `just rebuild` picks it up automatically. No more pin edits, and no more "forgot to bump the Dockerfile" drift. ## Verified - Resolver returns the current latest tag (`v4.4.2`) via `git ls-remote` + R-side version sort. - All five workflow YAMLs parse; helper R parses; air/editorconfig clean. Note: this tracks the latest **tag**, so cutting a release is still the deliberate gate — CI won't pick up un-tagged main.
Replace the hardcoded bincraft pin (@vX.Y.Z, repeated across every .crow
workflow and the build-one image) with local/install-bincraft.R, which lists
the remote tags via git ls-remote, picks the highest vX.Y.Z, and installs it
with pak (idempotent on the git ref). Now a new bincraft release is picked up
automatically on the next run -- no more editing the version in many places.

Filtering/sorting is done in R (not git --sort / refspec) for portable
behaviour, and GIT_TERMINAL_PROMPT=0 keeps non-interactive runs from hanging.
pat-s merged commit 1ad7a6bfe9 into main 2026-07-01 08:10:03 +00:00
pat-s deleted branch chore/dynamic-bincraft-version 2026-07-01 08:10:03 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
devxy/build-cran-binaries!107
No description provided.