name: Release on: push: tags: - 'v*' jobs: build: name: Build ${{ matrix.target }} runs-on: ${{ matrix.os }} strategy: matrix: include: # Linux - os: ubuntu-latest target: x86_64-unknown-linux-gnu artifact_name: owlen-linux-x86_64-gnu - os: ubuntu-latest target: x86_64-unknown-linux-musl artifact_name: owlen-linux-x86_64-musl - os: ubuntu-latest target: aarch64-unknown-linux-gnu artifact_name: owlen-linux-aarch64-gnu - os: ubuntu-latest target: aarch64-unknown-linux-musl artifact_name: owlen-linux-aarch64-musl - os: ubuntu-latest target: armv7-unknown-linux-gnueabihf artifact_name: owlen-linux-armv7-gnu - os: ubuntu-latest target: armv7-unknown-linux-musleabihf artifact_name: owlen-linux-armv7-musl # Windows - os: windows-latest target: x86_64-pc-windows-msvc artifact_name: owlen-windows-x86_64 - os: windows-latest target: aarch64-pc-windows-msvc artifact_name: owlen-windows-aarch64 # macOS - os: macos-latest target: x86_64-apple-darwin artifact_name: owlen-macos-x86_64 - os: macos-latest target: aarch64-apple-darwin artifact_name: owlen-macos-aarch64 steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Rust uses: https://github.com/dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Install cross-compilation tools (Linux) if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y musl-tools gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf - name: Build shell: bash run: | case "${{ matrix.target }}" in aarch64-unknown-linux-gnu) export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc ;; aarch64-unknown-linux-musl) export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-gnu-gcc export CC_aarch64_unknown_linux_musl=aarch64-linux-gnu-gcc ;; armv7-unknown-linux-gnueabihf) export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc ;; armv7-unknown-linux-musleabihf) export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER=arm-linux-gnueabihf-gcc export CC_armv7_unknown_linux_musleabihf=arm-linux-gnueabihf-gcc ;; esac cargo build --release --all-features --target ${{ matrix.target }} - name: Package binaries (Unix) if: runner.os != 'Windows' run: | mkdir -p dist cp target/${{ matrix.target }}/release/owlen dist/owlen cp target/${{ matrix.target }}/release/owlen-code dist/owlen-code cd dist tar czf ${{ matrix.artifact_name }}.tar.gz owlen owlen-code cd .. mv dist/${{ matrix.artifact_name }}.tar.gz . - name: Package binaries (Windows) if: runner.os == 'Windows' shell: bash run: | mkdir -p dist cp target/${{ matrix.target }}/release/owlen.exe dist/owlen.exe cp target/${{ matrix.target }}/release/owlen-code.exe dist/owlen-code.exe cd dist 7z a -tzip ../${{ matrix.artifact_name }}.zip owlen.exe owlen-code.exe - name: Upload artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.artifact_name }} path: | ${{ matrix.artifact_name }}.tar.gz ${{ matrix.artifact_name }}.zip release: name: Create Release needs: build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - name: Create source tarball run: | git archive --format=tar.gz --prefix=owlen/ -o owlen-${{ github.ref_name }}.tar.gz ${{ github.ref_name }} - name: Generate checksums shell: bash run: | cd artifacts find . -name "*.tar.gz" -exec mv {} . \; 2>/dev/null || true find . -name "*.zip" -exec mv {} . \; 2>/dev/null || true cd .. mv artifacts/*.tar.gz . 2>/dev/null || true mv artifacts/*.zip . 2>/dev/null || true sha256sum *.tar.gz *.zip > checksums.txt 2>/dev/null || sha256sum * > checksums.txt - name: Create Release uses: https://gitea.com/gitea/release-action@main with: files: | *.tar.gz *.zip checksums.txt api_key: ${{ secrets.RELEASE_TOKEN }}