From 8be40d75a978767286522c56cd4c41a0c0056aed Mon Sep 17 00:00:00 2001 From: Nico Wagner Date: Sun, 9 Feb 2025 20:12:07 +0100 Subject: [PATCH] Refactor release workflow Signed-off-by: Nico Wagner --- .github/workflows/release.yml | 119 ++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..eeb5f3251 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,119 @@ +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 "$BINARAY" "$ARCHIVE"/ + cp "{README.md, 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 }}