element-x-ada/SYNC.md

2.8 KiB

Repo topology + upstream sync procedure

This repo is a fork of element-hq/element-x-android with a native Cardano wallet module added. The history is structured so that staying current with upstream — and one day proposing our additions back — stays possible.

Branches

Branch Role
main Tracks the upstream commit we are currently based on. Fast-forwarded to upstream/develop when we deliberately pull in changes. Nothing coop-specific lives here.
wallet main + all our wallet work. This is what we build APKs from. Linear history on top of main; rebased whenever main moves.
archive/project-docs Frozen snapshot of the planning docs and screenshots that lived on the original orphan main branch. Not part of the active graph.

When we ever want a clean "everything we'd propose upstream" branch, we cherry-pick the wallet commits off wallet onto a fresh branch rooted at main. Because every current commit on wallet is wallet-module work, that split is simple.

Remotes

origin → this Gitea repo (LAN, via the Rackham SSH tunnel when working remotely).

Add upstream on any local clone:

git remote add upstream https://github.com/element-hq/element-x-android.git
git fetch upstream

Sync with upstream

When you want to pick up the latest from element-hq/element-x-android:

# 1. Get the latest from upstream
git fetch upstream

# 2. Fast-forward main to upstream/develop
git checkout main
git merge --ff-only upstream/develop
git push origin main

# 3. Rebase wallet onto the new main
git checkout wallet
git rebase main
# → resolve conflicts, one commit at a time
# → conflict surface is small but real: our integration touches
#   libraries/matrix/{api,impl}, libraries/textcomposer/impl,
#   libraries/eventformatter/impl, libraries/mediaviewer/impl

# 4. Build + test the APK before force-pushing
./gradlew :app:assembleFdroidDebug   # or mainnet variant

# 5. Push the rebased wallet branch (force-with-lease, not plain force)
git push --force-with-lease origin wallet

If the rebase gets ugly, abort and try merging instead:

git rebase --abort
git merge upstream/develop
# resolves in one shot, one merge commit, less clean history

Why not a Gitea mirror?

Gitea only lets you configure a pull-mirror at repo-creation time, and mirroring a whole repo also means we can't commit to it. We want to keep our own commits, so upstream stays as a git remote you fetch from manually.

License

Upstream is AGPL-3.0. Every binary we hand out must be accompanied by the corresponding source under the same license. Keeping this Gitea repo accessible to recipients of the APK satisfies that. Don't ship binaries without also making the source reachable.