Distributing packages and containers
Description:
It would be useful to simply download binary with your preferred packaged manager instead of building your own or downloading from releases. There should also exist some automated way to build and deliver the new release packages.
Solution:
One way to do that is by using some tool like goreleaser:
Homebrew:
- With homebrew we need first to make Paddler be accepted in Homebrew/core. By creating a formulae. One would already be able to download Paddler from there.
- After that we can start to create Homebrew Taps so we can have some way to get
Homebrew/corePaddler versions up to date. A new repodistantmagic/homebrew-tapmust be created anddistantmagic/Paddlershould contain agoreleaser.ymlfile which will be triggered with new relelased and updatedistantmagic/homebrew-tap/Formula/paddler.rbto update Paddler tap.
Scoop:
- Maybe Paddler doesn't fit Scoop Main criteria:
e.g. if it's a GitHub project, it should have at least 500 stars and 150 forks.
- One would generally fork either fork Main or Extra (in case Paddler doesnt fit main criteria) and commit some artifact to the bucket, So Paddler would be downloadable through Scoop if accepted.
- We could just make
distantmagic/paddlerour bucket .goreleasercan automate that. So instead of creating a manifest for ScoopInstaller. Apaddler.jsonmanifest would be created, then one could add the distantmagicorg bucket:
scoop bucket add org https://github.com/distantmagic/paddler.git
scoop install distantmagic/paddler
Winget:
- Winget has Contributor License Agreement(CLA).
- We need to fork winget-pkgs in a new repo inside the org and PR that with new update. That would be something like
https://github.com/microsoft/winget-pkgs/blob/master/manifests/p/Paddler/1.2.1/paddler_installer.yamlprobably. -
goreleasercan commit to a repo and make a PR:
GoReleaser can generate and publish a winget manifest and commit to a git repository, and PR it to winget-pkgs if instructed to.
Cloudsmith:
- It's some alternative for creating
.debfiles easily. And distantcmagic org might be created at cloudsmith. - Cloudsmith works with Github Actions.
- Cloudsmith also works with
goreleaserour of the box, creating new.deb,alpineoryumfiles and packaging on a trigger. - Cloudsmith supports a set of package managers including
apt,chocolateyandcargo.
Dockerhub:
-
goreleaserhas binding for dockhub releases. - A new organization must be created at DockerHub to support new Paddler images.## Debian-based and Fedora OSs packages:
OBS
- OBS works out-of-the-box with several CI servers, including GHA.
- We just need to install the
oscbinary. - We need to specify the target builds, as it supports several OSs and architectures:
OBS can create images and installable packages for a wide range of operating systems (SUSE, Debian, Ubuntu, Red Hat, Windows, etc.) and hardware architectures (x86, AMD64, z Systems, POWER etc.).
Launchpad
- Launchpad doesn't seem to have some GitHub Actions webhook for uploading
.dscto PPAs, it has a git hook which triggers with new projects or branches pushed:
git:push:0.1: Any time a Git repository is pushed; this includes creating or deleting branches
- Launchpad uses this command to upload to a PPA as pointed in this LaunchPad section:
dput ppa:your-lp-id/ppa <source.changes>
- it uploads just the changes (source.changes) of the source package, created using:
debuild -S
There is an example of implementing this workflow in a Github pipeline.
COPR
- COPRs are Fedora PPAs equivalent. Uploads packages in SRPM (Source RPM) format.
- Packages are uploaded using a POST request in a custom way.
- It has GitHub hook. We can enable that in the Paddler project and and set a JSON to be sent to COPR instead of manually like before in registries on a new tag creation trigger:
If you want to react to Tag push events click Let me select individual events. and then select Branch or tag creation.