|
1 | 1 | # Distribution channels |
2 | 2 |
|
3 | | -How TronBrowser reaches users — the same channel set as pairux.com, kept in this |
4 | | -**single monorepo** (no per-package repos). GitHub Releases is the source of |
5 | | -truth; package managers consume the release assets. |
| 3 | +Every channel lives **here** in the one monorepo (no per-package repos), modeled |
| 4 | +on pairux.com. GitHub Releases is the source of truth; each channel consumes the |
| 5 | +release assets. Goal: every major OS + open-source platform. |
6 | 6 |
|
7 | | -## Channels |
| 7 | +## Platform matrix |
8 | 8 |
|
9 | | -| Channel | Manifest | Artifact | Status | |
| 9 | +| OS / family | Channel | Manifest | Status | |
10 | 10 | | --- | --- | --- | --- | |
11 | | -| `curl \| sh` | [`apps/web/public/install.sh`](../apps/web/public/install.sh) | linux tar.gz / macos zip | ✅ live | |
12 | | -| GitHub Releases | [`release.yml`](../.github/workflows/release.yml) | all | ✅ live | |
13 | | -| Homebrew | [`homebrew/tronbrowser.rb`](homebrew/tronbrowser.rb) | linux tar.gz / macos zip | 🟡 formula ready (needs `profullstack/homebrew-tap`) | |
14 | | -| AUR | [`aur/PKGBUILD`](aur/PKGBUILD) | linux tar.gz | 🟡 ready (needs `AUR_SSH_KEY`) | |
15 | | -| Nix | [`nix/tronbrowser.nix`](nix/tronbrowser.nix) | linux tar.gz | 🟡 ready | |
16 | | -| Gentoo | [`gentoo/`](gentoo/) | linux tar.gz | 🟡 ebuild ready | |
17 | | -| apt (.deb) | [`packaging/nfpm.yaml`](../packaging/nfpm.yaml) | built by nfpm in CI | 🟡 built, needs an apt repo | |
18 | | -| rpm (.rpm) | [`packaging/nfpm.yaml`](../packaging/nfpm.yaml) | built by nfpm in CI | 🟡 built, needs a yum repo | |
19 | | -| Scoop | [`scoop/tronbrowser.json`](scoop/tronbrowser.json) | win zip | ⬜ needs Windows artifact hash | |
20 | | -| winget | [`winget/`](winget/) | win zip | ⬜ needs Windows artifact + winget-pkgs PR | |
21 | | -| Chocolatey | [`chocolatey/`](chocolatey/) | win zip | ⬜ needs Windows artifact + `CHOCOLATEY_API_KEY` | |
| 11 | +| **All** | `curl \| sh` | [`apps/web/public/install.sh`](../apps/web/public/install.sh) | ✅ live | |
| 12 | +| **All** | GitHub Releases | [`release.yml`](../.github/workflows/release.yml) | ✅ live | |
| 13 | +| macOS / Linux | Homebrew | [`homebrew/`](homebrew/) | 🟡 formula ready (needs tap repo) | |
| 14 | +| Windows | Scoop | [`scoop/`](scoop/) | ⬜ needs win zip hash | |
| 15 | +| Windows | winget | [`winget/`](winget/) | ⬜ needs winget-pkgs PR | |
| 16 | +| Windows | Chocolatey | [`chocolatey/`](chocolatey/) | ⬜ needs `CHOCOLATEY_API_KEY` | |
| 17 | +| Debian / Ubuntu | apt (.deb) | [`deb-rpm/`](deb-rpm/) (nfpm) | ✅ built in CI | |
| 18 | +| RedHat / Fedora / SUSE | rpm (.rpm) | [`deb-rpm/`](deb-rpm/) (nfpm) | ✅ built in CI | |
| 19 | +| Arch | AUR | [`aur/PKGBUILD`](aur/PKGBUILD) | 🟡 needs `AUR_SSH_KEY` | |
| 20 | +| Gentoo | ebuild | [`gentoo/`](gentoo/) | 🟡 overlay ready | |
| 21 | +| NixOS | Nix | [`nix/tronbrowser.nix`](nix/tronbrowser.nix) | 🟡 ready | |
| 22 | +| Ubuntu / universal | Snap | [`snap/snapcraft.yaml`](snap/snapcraft.yaml) | 🟡 classic snap (Snap Store login) | |
| 23 | +| Universal Linux | Flatpak | [`flatpak/`](flatpak/) | 🟡 manifest ready (Flathub PR) | |
| 24 | +| Universal Linux | AppImage | [`appimage/`](appimage/) | ✅ built in CI | |
| 25 | +| FreeBSD | port | [`freebsd/`](freebsd/) | 🟡 port ready | |
| 26 | +| Librem 5 / PinePhone / Ubuntu Touch | `curl \| sh` (arm64) | install.sh | ✅ noarch launcher | |
| 27 | +| iOS / Android | Expo / EAS | [`apps/mobile`](../apps/mobile) | 🚧 Phase 2 | |
22 | 28 |
|
23 | 29 | ## CI/CD (per platform, one repo) |
24 | 30 |
|
25 | | -[`release.yml`](../.github/workflows/release.yml) runs on a `v*` tag: |
| 31 | +[`release.yml`](../.github/workflows/release.yml) on a `v*` tag: |
26 | 32 |
|
27 | | -1. **create-release** — open a draft GitHub Release. |
28 | | -2. **build** (matrix: `ubuntu-latest` → linux tar.gz + .deb + .rpm, |
29 | | - `macos-latest` → macos zip, `windows-latest` → win zip) — each runner builds |
30 | | - its platform's artifacts and `gh release upload`s them to the draft. |
31 | | -3. **publish** — un-draft once all platforms uploaded. |
| 33 | +1. **create-release** — draft GitHub Release. |
| 34 | +2. **build** matrix — `ubuntu` (linux tar.gz + .deb + .rpm + AppImage), |
| 35 | + `macos` (zip), `windows` (win zip); each uploads via `gh release upload`. |
| 36 | +3. **publish** — un-draft. |
32 | 37 |
|
33 | | -[`submit-packages.yml`](../.github/workflows/submit-packages.yml) runs on release |
34 | | -publish (or manual dispatch with `version` / `dry_run` / `package_managers`). It |
35 | | -runs [`scripts/submit-packages.mjs`](../scripts/submit-packages.mjs) to refresh |
36 | | -each manifest's version + sha256 from the release assets, then submits per |
| 38 | +[`submit-packages.yml`](../.github/workflows/submit-packages.yml) on release publish |
| 39 | +(or dispatch) runs [`scripts/submit-packages.mjs`](../scripts/submit-packages.mjs) |
| 40 | +to refresh each manifest's version + sha256 from the release assets and submit per |
37 | 41 | channel — gated on that channel's secret, dry-run by default. |
38 | 42 |
|
39 | | -## Secrets needed to actually submit |
40 | | - |
41 | | -`AUR_SSH_KEY`, `GPG_PRIVATE_KEY`/`GPG_PASSPHRASE`, `CHOCOLATEY_API_KEY`, |
42 | | -`PKG_SUBMIT_TOKEN` (for tap/bucket/winget-pkgs PRs). Until set, channels dry-run. |
43 | | - |
44 | | -## Bump a release |
| 43 | +## Build a single channel locally |
45 | 44 |
|
46 | 45 | ```bash |
47 | | -pnpm version:set 0.1.1 # sync all app/package versions |
48 | | -git tag v0.1.1 && git push origin v0.1.1 |
49 | | -# release.yml builds + publishes; submit-packages.yml refreshes manifests |
| 46 | +bash apps/desktop/scripts/build-release.sh v0.1.1 linux # tar.gz |
| 47 | +bash distribution/deb-rpm/build.sh v0.1.1 # .deb + .rpm (needs nfpm) |
| 48 | +bash distribution/appimage/build.sh v0.1.1 # .AppImage |
| 49 | +node scripts/submit-packages.mjs -v 0.1.1 -p all --dry-run |
50 | 50 | ``` |
| 51 | + |
| 52 | +## Secrets to actually publish |
| 53 | + |
| 54 | +`AUR_SSH_KEY`, `GPG_PRIVATE_KEY`/`GPG_PASSPHRASE`, `CHOCOLATEY_API_KEY`, |
| 55 | +`SNAPCRAFT_STORE_CREDENTIALS`, `PKG_SUBMIT_TOKEN` (tap/bucket/winget-pkgs/Flathub |
| 56 | +PRs). Until set, channels dry-run. |
0 commit comments