name: Build permissions: contents: write on: workflow_dispatch: inputs: fail_fast: description: 'Fail fast strategy' required: false default: 'true' push: tags: - 'v*.*.*' paths-ignore: - README.md - .gitignore - LICENSE - run.sh pull_request: paths-ignore: - README.md - .gitignore - LICENSE - run.sh env: CARGO_TERM_COLOR: always jobs: build: strategy: fail-fast: ${{ startsWith(github.ref, 'refs/tags/') || github.event.inputs.fail_fast == 'true' }} matrix: include: - os: ubuntu-latest target: x86_64-unknown-linux-musl - os: ubuntu-latest target: aarch64-unknown-linux-musl linker: gcc-aarch64-linux-gnu - os: ubuntu-latest target: armv7-unknown-linux-gnueabihf linker: gcc-arm-linux-gnueabihf - os: macos-latest target: x86_64-apple-darwin - os: macos-latest target: aarch64-apple-darwin - os: windows-latest target: x86_64-pc-windows-msvc - os: windows-latest target: aarch64-pc-windows-msvc runs-on: ${{ matrix.os }} name: release-${{ matrix.target }} steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: toolchain: stable targets: ${{ matrix.target }} - uses: Swatinem/rust-cache@v2 - name: Install Linker if: matrix.linker run: | sudo apt-get update sudo apt-get install ${{ matrix.linker }} # ensure has a newline at the end [ "$(tail -c 1 .cargo/config.toml)" != "" ] && echo >> .cargo/config.toml cat .cargo/config.github.toml >> .cargo/config.toml - name: Build run: cargo build --verbose --release --target ${{ matrix.target }} - name: Run tests run: cargo test --verbose - name: Export Package Version run: echo "PACKAGE_VERSION=$(grep '^version = ' Cargo.toml | sed 's/version = \"\(.*\)\"/\1/')" >> $GITHUB_ENV shell: sh - name: Package Artifacts shell: bash run: | src=$(pwd) stage= case $RUNNER_OS in Linux) stage=$(mktemp -d) ;; macOS) stage=$(mktemp -d -t tmp) ;; esac RELEASE_VERSION=v${{ env.PACKAGE_VERSION }} ARCHIVE="spotify-player-quickauth-$RELEASE_VERSION-${{ matrix.target }}" if [[ "$RUNNER_OS" == "Windows" ]]; then ARCHIVE="$ARCHIVE.tar.gz" cp target/${{ matrix.target }}/release/spotify-player-quickauth.exe ./ tar czf "$ARCHIVE" ./spotify-player-quickauth.exe else ARCHIVE="$ARCHIVE.tar.gz" cp target/${{ matrix.target }}/release/spotify-player-quickauth ./ tar czf "$ARCHIVE" ./spotify-player-quickauth fi echo "ARCHIVE_PATH=$(pwd)/$ARCHIVE" >> $GITHUB_ENV - name: Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: files: ${{ env.ARCHIVE_PATH }} generate_release_notes: true fail_on_unmatched_files: true # Publish flow # - name: cargo login # run: cargo login ${{ secrets.CRATES_IO_API_TOKEN }} # - name: "cargo release publish" # run: cargo release publish --workspace --all-features --allow-branch HEAD --no-confirm --no-verify --execute