name: Build and Release on: push: tags: - "v*" permissions: contents: read env: CARGO_TERM_COLOR: always jobs: build: name: Build ${{ matrix.asset_name }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: ubuntu-latest asset_name: furumi-linux-x86_64 archive_ext: tar.gz binary_name: furumi - os: macos-latest asset_name: furumi-macos-x86_64 archive_ext: tar.gz binary_name: furumi - os: windows-latest asset_name: furumi-windows-x86_64 archive_ext: zip binary_name: furumi.exe steps: - name: Checkout uses: actions/checkout@v4 - name: Install Linux build dependencies if: runner.os == 'Linux' run: sudo apt-get update && sudo apt-get install -y --no-install-recommends libasound2-dev pkg-config - name: Show Rust version run: rustc --version && cargo --version - name: Build run: cargo build --release --locked - name: Package shell: bash run: | set -euo pipefail version="${GITHUB_REF_NAME#v}" archive_name="${{ matrix.asset_name }}-${version}.${{ matrix.archive_ext }}" package_dir="dist/${{ matrix.asset_name }}" mkdir -p "$package_dir" cp "target/release/${{ matrix.binary_name }}" "$package_dir/" cp README.md "$package_dir/" if [[ "${{ runner.os }}" == "Windows" ]]; then (cd dist && 7z a "../${archive_name}" "${{ matrix.asset_name }}") else tar -C dist -czf "${archive_name}" "${{ matrix.asset_name }}" fi - name: Upload build artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.asset_name }} path: ${{ matrix.asset_name }}-* if-no-files-found: error publish: name: Publish release assets needs: build runs-on: ubuntu-latest permissions: contents: write steps: - name: Download build artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Create release and upload assets env: GH_TOKEN: ${{ github.token }} RELEASE_TAG: ${{ github.ref_name }} run: | set -euo pipefail gh release create "$RELEASE_TAG" artifacts/*/* \ --title "furumi ${RELEASE_TAG}" \ --notes "Release ${RELEASE_TAG}" \ --verify-tag