paddler icon indicating copy to clipboard operation
paddler copied to clipboard

Distributing packages and containers

Open Propfend opened this issue 8 months ago • 0 comments

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/core Paddler versions up to date. A new repo distantmagic/homebrew-tap must be created and distantmagic/Paddler should contain a goreleaser.yml file which will be triggered with new relelased and update distantmagic/homebrew-tap/Formula/paddler.rb to update Paddler tap.

Scoop:

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/paddler our bucket .goreleaser can automate that. So instead of creating a manifest for ScoopInstaller. A paddler.json manifest would be created, then one could add the distantmagic org bucket:
scoop bucket add org https://github.com/distantmagic/paddler.git
scoop install distantmagic/paddler

Winget:

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 .deb files easily. And distantcmagic org might be created at cloudsmith.
  • Cloudsmith works with Github Actions.
  • Cloudsmith also works with goreleaser our of the box, creating new .deb, alpine or yum files and packaging on a trigger.
  • Cloudsmith supports a set of package managers including apt, chocolatey and cargo.

Dockerhub:

  • goreleaser has 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 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

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.

Propfend avatar May 23 '25 16:05 Propfend