ci(drift): run the git-touching tests against a git version matrix on the cron #525

Closed
opened 2026-09-16 00:25:03 +00:00 by hexajon · 0 comments
Owner

Phase 2 of the git-currency work. See the epic. Do this after the contract is pinned.

What happens

CI runs in one container image, pinned by digest: docker.io/golang:1.26-trixie@sha256:771f3162... (.forgejo/workflows/ci.yml:107 and :213). So every test runs against exactly one git version, and the digest pin freezes that version until someone bumps the image.

git --version does run, at ci.yml:125 and :219, but only as a log line. Nothing asserts on it.

Users run a different git: Homebrew, Xcode, Alpine, RHEL, and Windows all ship their own. CI cannot see a git change, by construction.

The forge side already has the answer to this. .forgejo/workflows/drift.yml exists for "regressions that appear WITHOUT the code changing". It diffs the endpoints madtea calls against the vendored specs in docs/api-specs/, and it smoke-tests a live Forgejo. Git has no counterpart.

Fix

  • Add a job to drift.yml that runs the git-touching tests against several git versions: the documented minimum floor, the distro build, and the latest upstream release.
  • Put it on the daily cron, not on the PR path. drift.yml and ci.yml are both tuned to avoid container starts, and this check answers a question that changes while the tree does not.
  • Report which version failed, so the message names the git that broke.

Depends on

The contract pin first. A matrix over unversioned --porcelain output tests a contract that is not yet stated.

Acceptance

  • The cron runs the git-touching tests on more than one git version.
  • A deliberate parse break against a newer git fails the job, and the failure names the version.
Phase 2 of the git-currency work. See the epic. Do this after the contract is pinned. ## What happens CI runs in one container image, pinned by digest: `docker.io/golang:1.26-trixie@sha256:771f3162...` (`.forgejo/workflows/ci.yml:107` and `:213`). So every test runs against exactly one git version, and the digest pin freezes that version until someone bumps the image. `git --version` does run, at `ci.yml:125` and `:219`, but only as a log line. Nothing asserts on it. Users run a different git: Homebrew, Xcode, Alpine, RHEL, and Windows all ship their own. CI cannot see a git change, by construction. The forge side already has the answer to this. `.forgejo/workflows/drift.yml` exists for "regressions that appear WITHOUT the code changing". It diffs the endpoints madtea calls against the vendored specs in `docs/api-specs/`, and it smoke-tests a live Forgejo. Git has no counterpart. ## Fix - Add a job to `drift.yml` that runs the git-touching tests against several git versions: the documented minimum floor, the distro build, and the latest upstream release. - Put it on the daily cron, not on the PR path. `drift.yml` and `ci.yml` are both tuned to avoid container starts, and this check answers a question that changes while the tree does not. - Report which version failed, so the message names the git that broke. ## Depends on The contract pin first. A matrix over unversioned `--porcelain` output tests a contract that is not yet stated. ## Acceptance - The cron runs the git-touching tests on more than one git version. - A deliberate parse break against a newer git fails the job, and the failure names the version.
Sign in to join this conversation.
No milestone
No project
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.

Reference
sixfold-space/madtea#525
No description provided.