name: Release
on:
push:
tags:
- '*'
defaults:
run:
shell: bash
env:
RUSTFLAGS: --deny warnings
jobs:
prerelease:
runs-on: ubuntu-latest
outputs:
value: ${{ steps.prerelease.outputs.value }}
steps:
- name: Prerelease Check
id: prerelease
run: |
if [[ ${{ github.ref_name }} =~ ^[0-9]+[.][0-9]+[.][0-9]+$ ]]; then
echo value=false >> $GITHUB_OUTPUT
else
echo value=true >> $GITHUB_OUTPUT
fi
package:
strategy:
matrix:
target:
- aarch64-apple-darwin
- aarch64-pc-windows-msvc
- aarch64-unknown-linux-musl
- arm-unknown-linux-musleabihf
- armv7-unknown-linux-musleabihf
- loongarch64-unknown-linux-musl
- riscv64gc-unknown-linux-musl
- x86_64-apple-darwin
- x86_64-pc-windows-msvc
- x86_64-unknown-linux-musl
include:
- target: aarch64-apple-darwin
os: macos-latest
target_rustflags: ''
- target: aarch64-pc-windows-msvc
os: windows-latest
target_rustflags: ''
- target: aarch64-unknown-linux-musl
os: ubuntu-latest
target_rustflags: '--codegen linker=aarch64-linux-gnu-gcc'
- target: arm-unknown-linux-musleabihf
os: ubuntu-latest
target_rustflags: '--codegen linker=arm-linux-gnueabihf-gcc'
- target: armv7-unknown-linux-musleabihf
os: ubuntu-latest
target_rustflags: '--codegen linker=arm-linux-gnueabihf-gcc'
- target: loongarch64-unknown-linux-musl
os: ubuntu-latest
target_rustflags: '--codegen linker=loongarch64-linux-gnu-gcc-14'
- target: riscv64gc-unknown-linux-musl
os: ubuntu-latest
target_rustflags: '--codegen linker=riscv64-linux-gnu-gcc'
- target: x86_64-apple-darwin
os: macos-latest
target_rustflags: ''
- target: x86_64-pc-windows-msvc
os: windows-latest
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
target_rustflags: ''
runs-on: ${{matrix.os}}
needs:
- prerelease
steps:
- uses: actions/checkout@v6
- name: Install Target Dependencies
run: |
case ${{ matrix.target }} in
aarch64-pc-windows-msvc)
rustup target add aarch64-pc-windows-msvc
;;
aarch64-unknown-linux-musl)
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu libc6-dev-i386
;;
arm-unknown-linux-musleabihf|armv7-unknown-linux-musleabihf)
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf
;;
loongarch64-unknown-linux-musl)
sudo apt-get update
sudo apt-get install gcc-14-loongarch64-linux-gnu
;;
riscv64gc-unknown-linux-musl)
sudo apt-get update
sudo apt-get install gcc-riscv64-linux-gnu
;;
esac
- name: Generate Manpage
run: |
set -euxo pipefail
cargo build
mkdir -p man
./target/debug/just --man > man/just.1
- name: Package
id: package
env:
TARGET: ${{ matrix.target }}
REF: ${{ github.ref }}
OS: ${{ matrix.os }}
TARGET_RUSTFLAGS: ${{ matrix.target_rustflags }}
run: ./bin/package
shell: bash
- name: Publish Archive
uses: softprops/action-gh-release@v2.6.1
if: ${{ startsWith(github.ref, 'refs/tags/') }}
with:
draft: false
files: ${{ steps.package.outputs.archive }}
prerelease: ${{ needs.prerelease.outputs.value }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish Changelog
uses: softprops/action-gh-release@v2.6.1
if: >-
${{
startsWith(github.ref, 'refs/tags/')
&& matrix.target == 'x86_64-unknown-linux-musl'
}}
with:
draft: false
files: CHANGELOG.md
prerelease: ${{ needs.prerelease.outputs.value }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload Artifacts
if: >-
${{
matrix.target == 'aarch64-unknown-linux-musl'
|| matrix.target == 'x86_64-unknown-linux-musl'
}}
uses: actions/upload-artifact@v7
with:
name: ${{ matrix.target }}
path: ${{ steps.package.outputs.archive }}
checksum:
runs-on: ubuntu-latest
needs:
- package
- prerelease
steps:
- name: Download Release Archives
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: >-
gh release download
--repo casey/just
--pattern '*'
--dir release
${{ github.ref_name }}
- name: Create Checksums
run: |
cd release
shasum -a 256 * > ../SHA256SUMS
- name: Publish Checksums
uses: softprops/action-gh-release@v2.6.1
with:
draft: false
files: SHA256SUMS
prerelease: ${{ needs.prerelease.outputs.value }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
docker:
runs-on: ubuntu-latest
needs:
- package
- prerelease
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v6
- name: Log in to GitHub Container Registry
uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Download x86_64 Artifact
uses: actions/download-artifact@v8
with:
name: x86_64-unknown-linux-musl
- name: Download aarch64 Artifact
uses: actions/download-artifact@v8
with:
name: aarch64-unknown-linux-musl
- name: Extract Binaries
run: |
mkdir -p amd64 arm64
tar xzf just-${{ github.ref_name }}-x86_64-unknown-linux-musl.tar.gz --directory amd64 just
tar xzf just-${{ github.ref_name }}-aarch64-unknown-linux-musl.tar.gz --directory arm64 just
- name: Determine Tags
id: tags
run: |
VERSION=${{ github.ref_name }}
TAGS=ghcr.io/casey/just:${VERSION}
if [[ ${{ needs.prerelease.outputs.value }} == false ]]; then
TAGS=${TAGS},ghcr.io/casey/just:latest
fi
echo tags=${TAGS} >> $GITHUB_OUTPUT
- name: Build and Push
uses: docker/build-push-action@v7
with:
context: .
file: etc/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.tags.outputs.tags }}
pages:
runs-on: ubuntu-latest
needs:
- prerelease
permissions:
contents: write
steps:
- uses: actions/checkout@v6
- uses: Swatinem/rust-cache@v2
- name: Install `mdbook`
run: cargo install --locked mdbook@0.4.52
- name: Install `mdbook-linkcheck`
run: cargo install --locked mdbook-linkcheck@0.7.7
- name: Build book
run: |
cargo run --package generate-book
mdbook build book/en
mdbook build book/zh
- name: Deploy Pages
uses: peaceiris/actions-gh-pages@v4
if: ${{ needs.prerelease.outputs.value == 'false' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: www