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-*