Skip to content

Tool to publish & distribute CLI tools

License

Notifications You must be signed in to change notification settings

termapps/publisher

Repository files navigation

publisher

Zulip Crates.io

Tool to publish & distribute CLI tools

Getting started

  1. Usage
  2. Package Repositories
  3. Install
  4. Configuration
  5. Changelog

Usage

NOTE: Only supports tools hosted in GitHub for now.

Setup publishing configuration. (Only needed for first time setup).

publisher init

Setup your CI pipeline to build release artifacts. (Only needed for first time setup).

publisher generate ci

Update your code, commit and push to repository with a version tag.

git tag v1.0.0
git push --tags

Check that you meet all requirements for publishing to configured package repositories.

publisher check

Run the following to publish a version to configured package repositories.

publisher publish 1.0.0

Discover more subcommands and options.

publisher help

Package Repositories

Used for installing the built binary:

Used for building from source:

Install

publisher is available on Linux, macOS & Windows

With Cargo

cargo install publisher
brew install termapps/tap/publisher
yay -S publisher

With Scoop

scoop bucket add termapps https://github.com/termapps/scoop-bucket
scoop install publisher

With Nix

nix profile install github:termapps/nixpkgs#publisher

Direct

Pre-built binary executables are available at releases page.

Download, unarchive the binary, and then put the executable in $PATH.

Configuration

Publisher can be configured using publisher.toml file. The below options are avaialable:

Name Type Required Description
name string Yes1 Name of the binary
description string Yes1 Description of the project
homepage string Yes1 URL of the project homepage
license string Yes1 License
repository string Yes URI of the GitHub repository (ex: termapps/publisher)
exclude string[] No Package Repository selection
homebrew object Yes Homebrew
aur object No AUR
aur_bin object No AUR (binary)
scoop object Yes Scoop
nix object No Nix

Homebrew

Name Type Required Description
name string No Name of the formula
repository string Yes GitHub repository for the homebrew tap
  • name defaults to the binary name.

AUR

Name Type Required Description
name string No Name of the package
conflicts string[] No Packages in AUR that conflict with this
  • name defaults to the binary name.
  • Automatically adds AUR (binary) package to conflicts if it is selected.

AUR (binary)

Name Type Required Description
name string No Name of the package
conflicts string[] No Packages in AUR that conflict with this
  • name defaults to the binary name concatenated with -bin.
  • Automatically adds AUR package to conflicts if it is selected.

Scoop

Name Type Required Description
name string No Name of the app
repository string Yes GitHub repository for the scoop bucket
  • name defaults to the binary name.

Nix

Name Type Required Description
name string No Name of the package
repository string No GitHub repository for the nix package
path string No Path of the package in the repo
lockfile bool No Whether to update flake lockfile
  • name defaults to the binary name.
  • repository defaults to binary's GitHub repository.
  • path defaults to flake.nix.
  • %n can be used in path to substitute with name. For example, %n/flake.nix creates the package at publisher/flake.nix location.
  • lockfile defaults to true and is needed to install the package most of the time.

Package Repository selection

  • By default, all the available package repositories are selected if not specified in the subcommand.
  • If exclude is configured, then those will be excluded from the above selected package repositories.

Contributors

Here is a list of Contributors

TODO

  • Package repositories
    • Alpine Linux (#1)
    • Cargo
    • NPM
    • PyPi
  • Platforms (#4)
  • Shell completions (#8)
  • Manpages (#9)
  • Maintainer (#5)

Changelog

Please see CHANGELOG.md.

License

MIT/X11

Bug Reports

Report here.

Creator

Pavan Kumar Sunkara ([email protected])

Follow me on github, twitter

Footnotes

  1. If cargo binary and Cargo.toml file are present, they can be omitted from the config. 2 3 4