diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml new file mode 100644 index 0000000..eecb82f --- /dev/null +++ b/.github/workflows/build-and-release.yml @@ -0,0 +1,94 @@ +name: Build and Release + +on: + push: + branches: [main] + tags: ['v*'] + # pull_request: + # branches: [main] + +permissions: + contents: write + discussions: write + pull-requests: read + +env: + CARGO_TERM_COLOR: always + BINARY_NAME: stakpak + +jobs: + build: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + artifact_name: stakpak-linux-x86_64 + - os: macos-latest + target: x86_64-apple-darwin + artifact_name: stakpak-darwin-x86_64 + - os: macos-latest + target: aarch64-apple-darwin + artifact_name: stakpak-darwin-aarch64 + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Rust Cache + uses: Swatinem/rust-cache@v2 + with: + shared-key: ${{ matrix.target }} + + - name: Build + run: cargo build --release --target ${{ matrix.target }} + + - name: Run tests + run: cargo test --target ${{ matrix.target }} + + - name: Prepare binary + if: startsWith(github.ref, 'refs/tags/') + run: | + cd target/${{ matrix.target }}/release + if [[ "${{ matrix.os }}" == "windows-latest" ]]; then + 7z a ../../../${{ matrix.artifact_name }}.zip ${{ env.BINARY_NAME }}.exe + else + tar czf ../../../${{ matrix.artifact_name }}.tar.gz ${{ env.BINARY_NAME }} + fi + + - name: Upload artifact + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.artifact_name }} + path: ${{ matrix.artifact_name }}.* + retention-days: 1 + + release: + needs: build + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + + steps: + - name: Download artifacts + uses: actions/download-artifact@v3 + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + files: | + stakpak-linux-x86_64/stakpak-linux-x86_64.tar.gz + stakpak-darwin-x86_64/stakpak-darwin-x86_64.tar.gz + stakpak-darwin-aarch64/stakpak-darwin-aarch64.tar.gz + draft: false + prerelease: false + generate_release_notes: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file