Skip to content

Refactor release workflow #146

Refactor release workflow

Refactor release workflow #146

Workflow file for this run

name: Release
on:
pull_request:
paths:
- .github/workflows/*.yml
- Cargo.toml
- crates/**
- src/**
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_INCREMENTAL: 0
CARGO_TERM_COLOR: always
RUSTDOCFLAGS: "-Dwarnings"
RUSTUP_MAX_RETRIES: 10
RUST_BACKTRACE: 1
VERSION: "v1.0.0" # FIXME
permissions:
contents: write
jobs:
prepare:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Get release version
run: |
echo "VERSION=1.0.0" >> $GITHUB_ENV
- name: Show release version
run: |
echo "version is $VERSION"
- name: Create GitHub release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create "$VERSION" --draft --title "v$VERSION"
outputs:
version: ${{ env.VERSION }}
release:
needs: prepare
strategy:
matrix:
target:
- { os: ubuntu-latest, toolchain: stable, triple: x86_64-unknown-linux-gnu }
# - { os: windows-latest, toolchain: stable, triple: i686-pc-windows-msvc }
# - { os: macos-latest, toolchain: stable, triple: x86_64-apple-darwin }
runs-on: ${{ matrix.target.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.target.toolchain }}
targets: ${{ matrix.target.triple }}
# - name: Test workspace packages
# run: |
# cargo test -p pica-record --release --all-features
# cargo test -p pica-cli --release --all-features
- name: Build release binary
shell: bash
run: |
cargo build -p pica-cli --release --features performant
if [ "${{ matrix.target.os }}" = "windows-latest" ]; then
echo "BINARY=target/release/pica.exe" >> $GITHUB_ENV
else
echo "BINARY=target/release/pica" >> $GITHUB_ENV
fi
- name: Strip release binary
shell: bash
if: matrix.target.os == 'macos-latest'
run:
strip "$BINARY"
- name: Prepare archive
shell: bash
run: |
version="${{ needs.prepare.outputs.version }}"
triple="${{ matrix.target.triple }}"
ARCHIVE="pica-$version-$triple"
echo "ARCHIVE=$ARCHIVE" >> $GITHUB_ENV
mkdir -p "$ARCHIVE/complete"
cp "$BINARY" "$ARCHIVE"/
cp "README.md" "$ARCHIVE"/
cp "LICENSE" "$ARCHIVE"/
- name: Generate completions
shell: bash
run: |
pica completions bash -o "$ARCHIVE/complete/pica.bash"
pica completions elvish -o "$ARCHIVE/complete/pica.elv"
pica completions fish -o "$ARCHIVE/complete/pica.fish"
pica completions powershell -o "$ARCHIVE/complete/_pica.ps1"
pica completions zsh -o "$ARCHIVE/complete/_pica"
- name: Build Archive (Windows)
if: matrix.target.os == 'macos-latest'
shell: bash
run: |
7z a "$ARCHIVE.zip" "$ARCHIVE"
certutil -hashfile "$ARCHIVE.zip" SHA256 > "$ARCHIVE.zip.sha256"
echo "ASSET_CHECKSUM=$ARCHIVE.zip.sha256" >> $GITHUB_ENV
echo "ASSET=$ARCHIVE.zip" >> $GITHUB_ENV
- name: Build Archive (Unix)
if: matrix.target.os != 'macos-latest'
shell: bash
run: |
tar czf "$ARCHIVE.tar.gz" "$ARCHIVE"
shasum -a 256 "$ARCHIVE.tar.gz" > "$ARCHIVE.targz.sha256"
echo "ASSET_CHECKSUM=$ARCHIVE.tar.gz.sha256" >> $GITHUB_ENV
echo "ASSET=$ARCHIVE.tar.gz" >> $GITHUB_ENV
- name: Upload assets
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
version="${{ needs.prepare.outputs.version }}"
gh release upload "$version" ${{ env.ASSET_CHECKSUM }}
gh release upload "$version" ${{ env.ASSET }}