ouch/.github/workflows/build-and-test.yml
2024-04-01 14:56:28 +08:00

137 lines
3.9 KiB
YAML

name: build-and-test
on:
push:
branches:
- main
tags:
- "[0-9]+.[0-9]+.[0-9]+"
pull_request:
jobs:
build:
name: build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
target:
# native
- x86_64-unknown-linux-gnu
- x86_64-pc-windows-gnu
- x86_64-pc-windows-msvc
- aarch64-pc-windows-msvc
- x86_64-apple-darwin
# cross
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-gnu
- aarch64-unknown-linux-musl
- armv7-unknown-linux-gnueabihf
- armv7-unknown-linux-musleabihf
include:
# default runner
- os: ubuntu-latest
# runner overrides
- target: x86_64-pc-windows-gnu
os: windows-latest
- target: x86_64-pc-windows-msvc
os: windows-latest
- target: aarch64-pc-windows-msvc
os: windows-latest
- target: x86_64-apple-darwin
os: macos-latest
# targets that use cross
- target: x86_64-unknown-linux-musl
use-cross: true
- target: aarch64-unknown-linux-gnu
use-cross: true
- target: aarch64-unknown-linux-musl
use-cross: true
- target: armv7-unknown-linux-gnueabihf
use-cross: true
- target: armv7-unknown-linux-musleabihf
use-cross: true
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust
run: |
rustup toolchain install stable nightly --profile minimal -t ${{ matrix.target }}
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: Install cross
if: matrix.use-cross
uses: taiki-e/install-action@cross
- name: Configure cargo-hack to use cross
if: matrix.use-cross
run: |
echo "CARGO_HACK_CARGO_SRC=cross" >> $GITHUB_ENV
- uses: Swatinem/rust-cache@v2
with:
key: "${{ matrix.target }}"
- name: Test on stable
# there's no way to run tests for ARM64 Windows for now
if: matrix.target != 'aarch64-pc-windows-msvc'
run: |
cargo +stable hack test --target ${{ matrix.target }} --feature-powerset --optional-deps unrar
- name: Release on nightly
env:
OUCH_ARTIFACTS_FOLDER: artifacts
run: |
cargo +nightly hack build --release --target ${{ matrix.target }} --feature-powerset --optional-deps unrar
# - name: Upload artifacts
# uses: actions/upload-artifact@v4
# with:
# name: ouch-${{ matrix.target }}-${{ steps.concat-features.outputs.FEATURES }}
# path: |
# target/${{ matrix.target }}/release/ouch
# target/${{ matrix.target }}/release/ouch.exe
# artifacts/
clippy-rustfmt:
name: clippy-rustfmt
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: "Cargo: clippy, fmt"
run: |
rustup toolchain install stable --profile minimal -c clippy
rustup toolchain install nightly --profile minimal -c rustfmt
cargo +stable clippy -- -D warnings
cargo +nightly fmt -- --check
github-release:
name: github-release
runs-on: ubuntu-latest
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
needs: build
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download artifacts
uses: dawidd6/action-download-artifact@v3
with:
path: artifacts
- name: Package release assets
run: scripts/package-release-assets.sh
- name: Create release
uses: softprops/action-gh-release@v2
with:
draft: true
files: release/ouch-*