Package Registry Publishing¶
Distribution plan for the Language Check CLI binary across package registries.
crates.io¶
The Rust crate is published directly from the rust-core directory.
cd rust-core
cargo publish --dry-run
cargo publish
Checklist:
Ensure
Cargo.tomlhas correctname,version,description,license,repositoryAdd
categoriesandkeywordsfor discoverabilityVerify
README.mdis included viareadmefield
Homebrew (macOS/Linux)¶
Formula¶
class LanguageCheck < Formula
desc "Fast multi-engine prose linter for Markdown, HTML, and LaTeX"
homepage "https://github.com/KaiErikNiermann/LangCheck"
version "0.1.0"
on_macos do
if Hardware::CPU.arm?
url "https://github.com/KaiErikNiermann/LangCheck/releases/download/v0.1.0/language-check-server-aarch64-apple-darwin.tar.gz"
sha256 "PLACEHOLDER"
else
url "https://github.com/KaiErikNiermann/LangCheck/releases/download/v0.1.0/language-check-server-x86_64-apple-darwin.tar.gz"
sha256 "PLACEHOLDER"
end
end
on_linux do
if Hardware::CPU.arm?
url "https://github.com/KaiErikNiermann/LangCheck/releases/download/v0.1.0/language-check-server-aarch64-unknown-linux-gnu.tar.gz"
sha256 "PLACEHOLDER"
else
url "https://github.com/KaiErikNiermann/LangCheck/releases/download/v0.1.0/language-check-server-x86_64-unknown-linux-gnu.tar.gz"
sha256 "PLACEHOLDER"
end
end
def install
bin.install "language-check-server"
end
test do
assert_match "language-check", shell_output("#{bin}/language-check-server --version")
end
end
Tap setup¶
# Create a tap repository: homebrew-lang-check
brew tap KaiErikNiermann/lang-check
brew install KaiErikNiermann/lang-check/language-check
winget (Windows)¶
Manifest¶
Create manifests/g/KaiErikNiermann/language-check/0.1.0/ in the winget-pkgs repository:
KaiErikNiermann.language-check.yaml:
PackageIdentifier: KaiErikNiermann.language-check
PackageVersion: 0.1.0
PackageName: Language Check
Publisher: KaiErikNiermann
License: ISC
ShortDescription: Fast multi-engine prose linter
InstallerType: portable
Installers:
- Architecture: x64
InstallerUrl: https://github.com/KaiErikNiermann/LangCheck/releases/download/v0.1.0/language-check-server-x86_64-pc-windows-msvc.exe
InstallerSha256: PLACEHOLDER
ManifestType: singleton
ManifestVersion: 1.6.0
Submit via PR to microsoft/winget-pkgs.
AUR (Arch Linux)¶
PKGBUILD¶
# Maintainer: KaiErikNiermann
pkgname=language-check-bin
pkgver=0.1.0
pkgrel=1
pkgdesc="Fast multi-engine prose linter for Markdown, HTML, and LaTeX"
arch=('x86_64' 'aarch64')
url="https://github.com/KaiErikNiermann/LangCheck"
license=('ISC')
provides=('language-check')
source_x86_64=("$url/releases/download/v$pkgver/language-check-server-x86_64-unknown-linux-gnu")
source_aarch64=("$url/releases/download/v$pkgver/language-check-server-aarch64-unknown-linux-gnu")
sha256sums_x86_64=('PLACEHOLDER')
sha256sums_aarch64=('PLACEHOLDER')
package() {
install -Dm755 "language-check-server-"* "$pkgdir/usr/bin/language-check-server"
}
Publishing¶
# Clone AUR package
git clone ssh://aur@aur.archlinux.org/language-check-bin.git
cd language-check-bin
# Add PKGBUILD and .SRCINFO
makepkg --printsrcinfo > .SRCINFO
git add PKGBUILD .SRCINFO
git commit -m "Initial upload: language-check-bin 0.1.0"
git push
Debian/Ubuntu (.deb)¶
Using cargo-deb¶
cd rust-core
cargo install cargo-deb
cargo deb
Add to Cargo.toml:
[package.metadata.deb]
name = "language-check"
maintainer = "KaiErikNiermann <noreply@KaiErikNiermann.dev>"
depends = "$auto"
section = "text"
priority = "optional"
assets = [
["target/release/language-check-server", "/usr/bin/", "755"],
]
Release Automation¶
GitHub Actions workflow¶
name: Release
on:
push:
tags: ["v*"]
jobs:
build:
strategy:
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-apple-darwin
os: macos-latest
- target: aarch64-apple-darwin
os: macos-latest
- target: x86_64-pc-windows-msvc
os: windows-latest
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- run: cargo build --release --target ${{ matrix.target }}
working-directory: rust-core
- name: Create checksum
run: sha256sum target/${{ matrix.target }}/release/language-check-server* > language-check-server-${{ matrix.target }}.sha256
- uses: softprops/action-gh-release@v2
with:
files: |
rust-core/target/${{ matrix.target }}/release/language-check-server*
language-check-server-${{ matrix.target }}.sha256
publish-crate:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo publish --token ${{ secrets.CARGO_TOKEN }}
working-directory: rust-core
publish-homebrew:
needs: build
runs-on: ubuntu-latest
steps:
- uses: dawidd6/action-homebrew-bump-formula@v4
with:
token: ${{ secrets.HOMEBREW_TOKEN }}
formula: language-check