Skip to content

Latest commit

 

History

History
78 lines (58 loc) · 3.06 KB

File metadata and controls

78 lines (58 loc) · 3.06 KB

Fork tracking — intarweb/docker-alpine

This is a soft fork of alpinelinux/docker-alpine. We track upstream HEAD and publish a HEAD-tracked image to GHCR with any open intarweb→upstream PRs cherry-picked on top.

All forks we manage with the sync-upstream + from-source-build pattern live under the intarweb GitHub org. See the ghcr-fork-mirror skill for the canonical recipe.

Branch model

Branch Purpose Source of truth
master Upstream-clean tracking + ops overlay (canonical workflows + FORK_INFO.md) upstream + us
intarweb-dev Deploy track — master + cherry-pick of every open intarweb→upstream PR. Drives :latest. us
feat/*, fix/* Individual patch branches we PR upstream us

Upstream sync

Property Value
Upstream alpinelinux/docker-alpine
Upstream branch tracked master
Sync cadence Hourly (gated by vars.SYNC_CADENCE_HOURS) + workflow_dispatch + fold-on-push re-trigger on PR-branch push
Sync mechanism Hard-reset master to upstream/master, re-apply ops overlay, regen intarweb-dev by cherry-picking every open intarweb→upstream PR
Sync workflow .github/workflows/sync-upstream.yml

Build pipeline

Property Value
Image ghcr.io/intarweb/alpine
:latest source Build-from-source on intarweb-dev (gated by vars.IS_SOURCE_BUILT == 'true')
:sha-<short> Every build
Tagged releases (v*, etc.) Mirror upstream's released tags via fork-publish.yml
Build workflow .github/workflows/build-from-source.yml
Smoke gate Fail-closed on cherry-pick conflict — prior :latest keeps serving (honest-fact #65).

Local patches we carry on intarweb-dev (vs upstream/master)

No open intarweb→upstream PRs — intarweb-dev matches upstream/master exactly.

How to consume

# docker-compose.yml
services:
  alpine:
    image: ghcr.io/intarweb/alpine:latest

Pin to a specific build for reproducibility:

    image: ghcr.io/intarweb/alpine:sha-<short>

Maintenance recipes

Manually re-sync onto upstream:

gh workflow run "Sync from upstream + auto-regen intarweb-dev" --repo intarweb/docker-alpine

Force a fresh build of :latest without an upstream change:

gh workflow run "Build from source → GHCR" --repo intarweb/docker-alpine --ref intarweb-dev

Add a new patch to intarweb-dev:

git checkout -b feat/my-thing upstream/master
# ...do work...
git push origin feat/my-thing
gh pr create --repo alpinelinux/docker-alpine --base master --head intarweb:feat/my-thing
# Next sync-upstream tick auto-cherry-picks the new PR onto intarweb-dev.