|
| 1 | +# Distribution Blowup Plan |
| 2 | + |
| 3 | +> Get icey into every package manager that matters. Every registry page is a backlink to 0state.com/icey. Every mirror multiplies it. |
| 4 | +
|
| 5 | +This plan covers everything outside vcpkg and ConanCenter, which are tracked in [package-managers.md](package-managers.md). |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## Current State |
| 10 | + |
| 11 | +Packaging is no longer hypothetical. AUR and the dedicated Homebrew tap are live, the standalone Nix flake is validated in CI, and the remaining distro recipes now exist in-tree. Packaging CI now exercises release metadata, Debian source-package generation, RPM SRPM staging, and the repo-root flake build on every mainline push. |
| 12 | + |
| 13 | +| Registry | File exists | Published | Blocker | |
| 14 | +|---|---|---|---| |
| 15 | +| vcpkg | yes | no | see package-managers.md | |
| 16 | +| Conan | yes | no | see package-managers.md | |
| 17 | +| Homebrew | yes (`packaging/homebrew/`) | yes (`nilstate/homebrew-icey`) | formula needs ongoing release automation from `icey` | |
| 18 | +| Arch AUR | yes (`packaging/arch/`) | yes (`icey`) | keep pkgrel and checksum in sync with retags | |
| 19 | +| Debian | yes (`packaging/debian/`) | no | Launchpad / sponsor step still external | |
| 20 | +| Nix | yes (`flake.nix`, `packaging/nix/`) | yes (`nix build github:nilstate/icey`) | needs nixpkgs PR | |
| 21 | +| Fedora/RPM | yes (`packaging/rpm/`) | no | needs SRPM / Bugzilla review | |
| 22 | +| Alpine | yes (`packaging/alpine/`) | no | needs aports PR | |
| 23 | +| MacPorts | yes (`packaging/macports/`) | no | needs ports submission | |
| 24 | +| Spack | yes (`packaging/spack/`) | no | needs upstream PR | |
| 25 | +| conda-forge | yes (`packaging/conda-forge/`) | no | needs staged-recipes feedstock | |
| 26 | + |
| 27 | +--- |
| 28 | + |
| 29 | +## Pre-Publish Fixes |
| 30 | + |
| 31 | +Before pushing deeper into curated distro repos, keep these source-package surfaces healthy: |
| 32 | + |
| 33 | +1. **vcpkg portfile** — keep `REF` and `SHA512` pinned to the tagged release |
| 34 | +2. **Homebrew formula** — keep `icey.rb` and the live tap formula in sync with the tagged tarball hash |
| 35 | +3. **Conan test_package/build/** — keep local build artifacts ignored and out of commits |
| 36 | + |
| 37 | +These are the integrity checks. Everything downstream depends on a clean tagged release with real hashes. |
| 38 | + |
| 39 | +--- |
| 40 | + |
| 41 | +## Tier 1: Self-Service, No Gatekeepers |
| 42 | + |
| 43 | +These can ship within days. No review process, no sponsorship needed. |
| 44 | + |
| 45 | +### 1. Arch AUR |
| 46 | + |
| 47 | +Keep the published `icey` package on `aur.archlinux.org` in lockstep with the tagged release. |
| 48 | + |
| 49 | +- create an AUR account if needed |
| 50 | +- `git clone ssh://aur@aur.archlinux.org/icey.git` |
| 51 | +- copy PKGBUILD and .SRCINFO from `packaging/arch/` |
| 52 | +- push |
| 53 | + |
| 54 | +Repology auto-indexes AUR packages. This alone gets icey on repology.org. |
| 55 | + |
| 56 | +### 2. Homebrew Tap |
| 57 | + |
| 58 | +Maintain `nilstate/homebrew-icey` as the public tap. |
| 59 | + |
| 60 | +- keep `icey.rb`, `libdatachannel.rb`, and `icey-server.rb` live in the tap |
| 61 | +- users install via `brew tap nilstate/icey && brew install icey` |
| 62 | +- keep `icey-server` publication in `icey-cli`; keep `icey` publication in `icey` |
| 63 | + |
| 64 | +### 3. Ubuntu PPA (Launchpad) |
| 65 | + |
| 66 | +Use the existing `packaging/debian/` files. |
| 67 | + |
| 68 | +- create a PPA on launchpad.net under nilstate or 0state |
| 69 | +- `debuild -S` and `dput` the source package |
| 70 | +- target latest Ubuntu LTS + current release |
| 71 | +- PPA pages show up on pkgs.org and launchpad search |
| 72 | +- GitHub-side source-package build automation and PPA signing-key secrets are now in place; the remaining blocker is registering the public key with the Launchpad account and doing the first upload |
| 73 | + |
| 74 | +### 4. Nix Flake for icey lib |
| 75 | + |
| 76 | +icey-cli already has a flake. icey now also has a repo-root flake for the library. |
| 77 | + |
| 78 | +- output a nix package with split `out` / `dev` outputs |
| 79 | +- publish as a standalone flake: `nix build github:nilstate/icey` |
| 80 | +- prerequisite for the nixpkgs PR in tier 2 |
| 81 | + |
| 82 | +--- |
| 83 | + |
| 84 | +## Tier 2: Curated Registry PRs |
| 85 | + |
| 86 | +These require PRs and review, but massively expand reach. |
| 87 | + |
| 88 | +### 5. Nixpkgs |
| 89 | + |
| 90 | +Submit a PR to `github.com/NixOS/nixpkgs`. |
| 91 | + |
| 92 | +- add `pkgs/development/libraries/icey/default.nix` |
| 93 | +- include the nix flake from tier 1 as reference |
| 94 | +- nixpkgs has 100K+ packages and active contributors |
| 95 | +- once merged, appears on search.nixos.org and repology |
| 96 | + |
| 97 | +### 6. Homebrew Core |
| 98 | + |
| 99 | +After the tap proves stability, submit to homebrew-core. |
| 100 | + |
| 101 | +- must meet [Acceptable Formulae](https://docs.brew.sh/Acceptable-Formulae) criteria |
| 102 | +- needs notable usage (GitHub stars, dependents, or known adopters) |
| 103 | +- homebrew-core formulas appear on formulae.brew.sh — high-traffic, indexed by search engines |
| 104 | +- every bottle mirror (china mirrors, corporate caches) carries the metadata |
| 105 | + |
| 106 | +### 7. vcpkg + ConanCenter |
| 107 | + |
| 108 | +Tracked in [package-managers.md](package-managers.md). Highest priority C++ registries. |
| 109 | + |
| 110 | +--- |
| 111 | + |
| 112 | +## Tier 3: Distro Repos |
| 113 | + |
| 114 | +Landing in an official distro repo is the biggest backlink multiplier. Debian alone has 400+ mirrors worldwide. |
| 115 | + |
| 116 | +### 8. Fedora |
| 117 | + |
| 118 | +- write a .spec file (use `cmake/icey_package.cmake` as starting point) |
| 119 | +- file a Bugzilla review request with SRPM |
| 120 | +- once approved, package lands in Fedora and syncs to EPEL (CentOS/Rocky/RHEL) |
| 121 | +- register on release-monitoring.org (Anitya) for automatic new-version tracking |
| 122 | + |
| 123 | +### 9. Alpine |
| 124 | + |
| 125 | +- write an APKBUILD |
| 126 | +- submit PR to `gitlab.alpinelinux.org/alpine/aports` |
| 127 | +- alpine is the default Docker base image — huge container audience |
| 128 | +- alpine package search (pkgs.alpinelinux.org) is well-indexed |
| 129 | + |
| 130 | +### 10. Debian Proper |
| 131 | + |
| 132 | +- file an RFP (Request for Package) bug on wnpp |
| 133 | +- find a Debian Developer to sponsor the upload |
| 134 | +- once in Debian unstable, it syncs to testing → stable |
| 135 | +- auto-syncs to Ubuntu universe, eliminating the need for the PPA long-term |
| 136 | +- 400+ mirrors worldwide, each hosting package metadata with homepage URL |
| 137 | +- appears on packages.debian.org, packages.ubuntu.com, tracker.debian.org |
| 138 | + |
| 139 | +### 11. openSUSE |
| 140 | + |
| 141 | +- submit to openSUSE Build Service (OBS) |
| 142 | +- OBS can cross-build for Fedora, Debian, Ubuntu, Arch, and SUSE from one spec |
| 143 | +- appears on software.opensuse.org package search |
| 144 | + |
| 145 | +--- |
| 146 | + |
| 147 | +## Tier 4: Niche but High-Value |
| 148 | + |
| 149 | +### 12. MacPorts |
| 150 | + |
| 151 | +- write a Portfile |
| 152 | +- submit to `github.com/macports/macports-ports` |
| 153 | +- loyal macOS user base separate from Homebrew |
| 154 | +- appears on ports.macports.org |
| 155 | + |
| 156 | +### 13. Spack |
| 157 | + |
| 158 | +- write a `package.py` recipe |
| 159 | +- submit PR to `github.com/spack/spack` |
| 160 | +- HPC and scientific computing audience |
| 161 | +- appears on packages.spack.io |
| 162 | + |
| 163 | +### 14. conda-forge |
| 164 | + |
| 165 | +- create a feedstock via `conda-forge/staged-recipes` |
| 166 | +- ML and scientific Python users pull C++ deps through conda |
| 167 | +- appears on anaconda.org/conda-forge |
| 168 | + |
| 169 | +--- |
| 170 | + |
| 171 | +## Backlink Mechanics |
| 172 | + |
| 173 | +Every registry landing creates backlinks from multiple sources: |
| 174 | + |
| 175 | +| Source | How | Volume | |
| 176 | +|---|---|---| |
| 177 | +| Registry page | homepage field → 0state.com/icey | 1 per registry | |
| 178 | +| Repology | auto-aggregates once in 2+ repos | 1 page, updated continuously | |
| 179 | +| pkgs.org | indexes Debian/Ubuntu/Fedora/Arch/Alpine | 1 per distro | |
| 180 | +| Distro package search | packages.debian.org, packages.ubuntu.com, etc | 1 per distro | |
| 181 | +| Mirror networks | Debian: 400+, Ubuntu: 300+, Fedora: 200+ | metadata on every mirror | |
| 182 | +| Downstream dependents | any project with `depends: icey` | grows organically | |
| 183 | +| Search engines | registry pages rank for "icey c++ install" etc | compounds over time | |
| 184 | + |
| 185 | +### Metadata Consistency |
| 186 | + |
| 187 | +Every packaging file must set the homepage to `https://0state.com/icey`. This is the backlink payload. Verify this in: |
| 188 | + |
| 189 | +- `vcpkg.json` → `"homepage"` |
| 190 | +- `conanfile.py` → `url` and `homepage` |
| 191 | +- Homebrew formula → `homepage` |
| 192 | +- PKGBUILD → `url` |
| 193 | +- debian/control → `Homepage:` |
| 194 | +- .spec → `URL:` |
| 195 | +- APKBUILD → `url` |
| 196 | +- nix derivation → `meta.homepage` |
| 197 | +- Spack package.py → `homepage` |
| 198 | +- conda-forge meta.yaml → `home:` |
| 199 | +- MacPorts Portfile → `homepage` |
| 200 | + |
| 201 | +--- |
| 202 | + |
| 203 | +## Execution Order |
| 204 | + |
| 205 | +1. fix existing packaging files (SHA256, version pins, gitignore) |
| 206 | +2. push AUR (immediate, unblocks repology) |
| 207 | +3. create homebrew tap (immediate) |
| 208 | +4. create Ubuntu PPA (immediate) |
| 209 | +5. write nix flake for icey lib |
| 210 | +6. submit vcpkg + conan PRs (see package-managers.md) |
| 211 | +7. submit nixpkgs PR |
| 212 | +8. write fedora .spec, submit review |
| 213 | +9. write alpine APKBUILD, submit PR |
| 214 | +10. file debian RFP |
| 215 | +11. openSUSE OBS submission |
| 216 | +12. macports, spack, conda-forge |
| 217 | + |
| 218 | +--- |
| 219 | + |
| 220 | +## Definition of Done |
| 221 | + |
| 222 | +- icey installable from at least 6 public registries |
| 223 | +- 0state.com/icey as homepage in every package metadata file |
| 224 | +- icey appears on repology.org with version parity across registries |
| 225 | +- `brew install`, `apt install`, `pacman -S`, `nix build`, `vcpkg install`, `conan install` all work |
0 commit comments