5.1 KiB
Dragon Fork — Upstream Rebase Policy
Tracks the relationship between forge.wilddragon.net/zgaetano/datarhei-dragonfork-core
(this fork) and upstream github.com/datarhei/core.
Baseline
| Point | Value |
|---|---|
| Fork date | 2026-04-17 |
| Fork commit | 0de97f4 ("Add linux/arm/v8 build") |
| Upstream module path | github.com/datarhei/core/v16 (kept — see NOTES.md) |
| First rebase target | upstream main (post-v16.16.0) |
Cadence
Rebase against upstream main monthly, timed to follow an upstream
minor release (v16.X.0) appearing on the upstream default branch.
Emergency rebases (CVE in a transitive dependency, critical upstream fix) are performed ad-hoc following the same procedure, just sooner.
Strategy: Rebase, Not Merge
Use git rebase upstream/main rather than git merge upstream/main.
- Keeps a linear history;
git log --onelinestays readable. - Dragon Fork commits remain visually distinct from upstream commits.
- Conflicts surface one commit at a time rather than in a single merge blob.
Merge commits are only used for feature branches merging into main via PR.
Divergence Boundaries
Files exclusively owned by Dragon Fork (expect zero conflicts)
These paths did not exist upstream at fork time and are not being upstreamed:
| Path | Description |
|---|---|
app/webrtc/ |
WebRTC app subsystem |
core/webrtc/ |
Pion peer factory, Source, ICE helpers |
deploy/truenas/ |
TrueNAS deployment bundle |
docs/design/ |
Dragon Fork design documents |
docs/REBASE.md |
This file |
.forgejo/ |
Forgejo CI workflows |
test/load/ |
WHEP load-test harness |
Files modified from upstream (higher conflict risk)
| Path | Our change | Conflict strategy |
|---|---|---|
go.mod / go.sum |
Added Pion + Prometheus deps | Accept upstream base; re-add our require blocks; run go mod tidy |
http/server.go |
WebRTC handler registration | Search for WebRTC in diff; reapply our three-line wiring |
restream/ |
ProcessHooks interface + SetHooks |
Check if upstream changed hook shape; adapt our callbacks |
config/ |
DataWebRTC config block |
Keep our field additions; adopt upstream structural changes |
README.md |
Dragon Fork branding | Keep our content; cherry-pick upstream security notices |
CHANGELOG.md |
Dragon Fork version entries | Keep our entries at top; adopt upstream format changes |
Pre-Rebase Checklist
[ ] git fetch upstream # confirm new upstream commits exist
[ ] CI is green on current main
[ ] go mod vendor is clean:
go mod vendor && git diff --quiet vendor/ # commit if dirty
[ ] Tag current tip:
git tag pre-rebase-v<upstream-ver> # e.g. pre-rebase-v16.17.0
First Rebase Procedure
Run these commands locally (or on any machine with the repo checked out):
# 1. Add upstream remote (idempotent)
git remote add upstream https://github.com/datarhei/core.git 2>/dev/null || true
# 2. Fetch
git fetch upstream
# 3. Tag current tip
UPSTREAM_VER=$(git describe --tags upstream/main --abbrev=0 2>/dev/null || echo manual)
git tag pre-rebase-${UPSTREAM_VER}
# 4. Rebase
git rebase upstream/main
# On conflict:
# git diff — see what conflicted
# <edit the file>
# git add <file>
# git rebase --continue
# 5. Update vendored dependencies
go mod tidy
go mod vendor
git add vendor/ go.mod go.sum
git commit -m "chore: update vendor after upstream rebase to ${UPSTREAM_VER}"
# 6. Run verification gate (see below)
# 7. Push
git push origin main
Post-Rebase Verification Gate
All of the following must pass before pushing the rebased main:
| Check | Command |
|---|---|
| Build | go build ./... |
| Vet | go vet ./... |
| Unit + race | go test -race -short -count=1 ./... |
| WebRTC smoke | go test -race -count=1 -v -run 'TestIntegration_|TestSubsystem_|TestHandler_' ./app/webrtc/... ./core/webrtc/... |
| Latency gate | go test -tags latency -timeout 90s -race -count=1 -run TestLatencyServerHop ./app/webrtc/... -v |
| TrueNAS smoke | Deploy to staging, subscribe one WHEP peer, verify video renders |
Forgejo CI covers the first four automatically on push. The latency gate and TrueNAS smoke are manual.
go.mod / Vendored Dependencies
After rebasing and running go mod tidy:
- Confirm Pion packages (
github.com/pion/*) remain invendor/at our required versions. - If upstream bumped a shared dep (e.g.
labstack/echo), review that dep's changelog before accepting the version bump. - Commit
vendor/,go.mod, andgo.sumtogether:chore: update vendor after upstream rebase to v<X>
CI Automation (Future)
Automated monthly rebase via a Forgejo-Actions scheduled workflow is a v0.3 consideration. Blocked on: runner having a git identity for push, and a strategy for surfacing conflict PRs when automation fails.
Record-Keeping
After each successful rebase, append a row to this table:
| Date | Upstream version | Pre-rebase tag | Conflicts | Notes |
|---|---|---|---|---|
| (first rebase pending) | v16.X.0 | pre-rebase-v16.X.0 | — | run locally per procedure above |