# .github/workflows/release.yml name: Release (Linux tarball + Windows zip) on: push: tags: - "v*.*.*" permissions: contents: write jobs: build-linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: targets: x86_64-unknown-linux-musl - name: Install musl tools run: | sudo apt-get update sudo apt-get install -y musl-tools - name: Build tarball run: make tarball - name: Upload artifact (Linux) uses: actions/upload-artifact@v4 with: name: linux-dist path: | dist/*.tar.gz dist/*.buildinfo dist/*.sha256 if-no-files-found: error build-windows: runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: toolchain: stable - name: Download WinDivert-2.2.2 and unzip shell: pwsh run: | Invoke-WebRequest -Uri "https://reqrypt.org/download/WinDivert-2.2.2-A.zip" -OutFile WinDivert.zip Expand-Archive -Path WinDivert.zip -DestinationPath .\ Remove-Item .\WinDivert.zip - name: Run PowerShell build shell: pwsh run: ./build.ps1 zipball - name: Upload artifact (Windows) uses: actions/upload-artifact@v4 with: name: windows-dist path: | dist/*.zip dist/*.buildinfo dist/*.sha256 if-no-files-found: error release: runs-on: ubuntu-latest needs: [build-linux, build-windows] steps: - name: Download Linux artifacts uses: actions/download-artifact@v4 with: name: linux-dist path: upload - name: Download Windows artifacts uses: actions/download-artifact@v4 with: name: windows-dist path: upload - name: Generate base release note from github api run: | gh api repos/${{ github.repository }}/releases/generate-notes \ -f tag_name=${{ github.ref_name }} \ -q .body > auto_notes.md env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Format download link run: | { echo "## Downloads" for f in upload/*.{tar.gz,zip}; do [ -e "$f" ] || continue base=$(basename "$f") echo "- [$base](https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/$base)" done } >> auto_notes.md - name: Format and append buildinfo run: | { echo "## Build Info" shopt -s nullglob files=(upload/*.buildinfo) for f in "${files[@]}"; do echo "" echo "### $(basename "$f")" while IFS=: read -r key value; do key=$(echo "$key" | xargs) value=$(echo "$value" | xargs) echo "- **$key**: $value" done < "$f" done } >> auto_notes.md env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: body_path: auto_notes.md prerelease: ${{ contains(github.ref_name, '-') }} files: | upload/*.tar.gz upload/*.zip upload/*.sha256 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}