Prepare the Gitea move: measured CI deviations, self-hosted Renovate, issue migration script

Groundwork for #225, built on a throwaway pull request against the Gitea
instance rather than on assumptions. The move itself is not part of this
change - no Actions are switched off, no mirror is enabled, no branch
protection is touched.

What the probe run measured, and what follows from it:

- Which jobs need a Docker socket: only the install-test. Measured per
  job - detect-changed-charts, build-chart, the quantity render and the
  Trivy config scan all pass on `ubuntu-latest`, which on that instance
  has no socket. The install-test dies there at "Create k3d cluster"
  with "Cannot connect to the Docker daemon", an error naming k3d and
  never the runner label. Its `runs-on` is now an expression: the label
  `ubuntu-docker` on Gitea, `ubuntu-latest` on GitHub, because the
  former does not exist there and a chart PR would otherwise queue
  forever during the handover. Gitea evaluates it - the probe job was
  taken by the docker runner.

- The install-test still cannot pass on Gitea. That daemon is rootless
  with "Cgroup Driver: none"; the k3s node restarts immediately with an
  empty log because k3s needs cgroup delegation. The label is necessary
  and not sufficient, and the fix is the maintainer's.

- aquasecurity/setup-trivy cannot be used on Gitea: it checks out
  aquasecurity/trivy from github.com with `github.token`, which there is
  a Gitea token, and ends on "could not read Username for
  https://github.com". Replaced by the release tarball - one request,
  same behaviour on both forges, green on the probe run.

Also in this change:

- .github/workflows/renovate.yml, Renovate in self-operation: a daily
  scheduled run in the official container, inert on github.com via a
  `github.server_url` guard. Every rule proved by dry run instead of
  assumed - the pinned Renovate image is tracked by the built-in
  github-actions manager (44.80.0 -> 44.87.1, minor), TRIVY_VERSION is
  still tracked after setup-trivy is gone (v0.72.0 -> v0.74.0, minor),
  and `ubuntu-docker` is not extracted by the github-runners manager at
  all, so nothing will quietly "correct" it.

- ci/migrate-issues-to-gitea.sh, runnable, with --dry-run, and NOT run.
  Its header names what it cannot do: comment authorship, the #<n>
  references between issues, and attachments.

- CLAUDE.md and README.md on the new flow: which forge and which tool,
  auto-merge on green checks in place of the merge queue Gitea does not
  have, and the measured differences of the two CIs.

Refs #225 - deliberately no "Fixes": the move is not finished with this.
This commit is contained in:
jklein committed 2026-09-14 17:07:31 +02:00
1 parent 055d9f6a31
commit a6c27ebef3
6 files changed
+469 -17

No files matched your search

+10 -5
View File
@@ -49,7 +49,9 @@
// allowedCommands: ["^ci/renovate-bump-chart\\.sh"]
//
// Without that entry Renovate skips the task silently and every chart PR
// stays red on the version-bump check.
// stays red on the version-bump check. On Gitea, where this repo runs
// Renovate itself, "the instance config" is .github/workflows/renovate.yml -
// it sets RENOVATE_ALLOWED_COMMANDS to exactly that value.
postUpgradeTasks: {
commands: ["ci/renovate-bump-chart.sh {{{packageFileDir}}}"],
fileFilters: ["**/Chart.yaml"],
@@ -80,10 +82,13 @@
matchUpdateTypes: ["patch", "minor", "digest"],
automerge: true,
automergeType: "pr",
// Renovate waits for the checks itself instead of handing the PR to
// GitHub's auto-merge. GitHub would merge immediately when the branch has
// no required status checks configured — and validate-charts is not (yet)
// a required check.
// Renovate waits for the checks itself instead of handing the PR to the
// forge's own auto-merge. Both of them — GitHub's, and the auto-merge
// that takes the merge queue's place on Gitea, which has none — merge
// immediately when the branch has no required status checks configured,
// and validate-charts is not (yet) a required check on either side. This
// is a statement about the branch protection, not about the platform:
// once required checks exist on `main`, true is the better value.
platformAutomerge: false,
// A release that is hours old should not walk into main unattended; a
// chart publish follows the merge straight away.