Release #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| schedule: | |
| - cron: "0 0 * * 0" | |
| release: | |
| types: [ released ] | |
| permissions: | |
| contents: write | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| release: | |
| name: Release - ${{ matrix.platform.target }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: | |
| - os: windows-2025 | |
| target: x86_64-pc-windows-msvc | |
| inno_arch: x64 | |
| - os: windows-2025 | |
| target: aarch64-pc-windows-msvc | |
| inno_arch: arm64 | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| bins: cargo-zigbuild, cargo-deb, cargo-generate-rpm | |
| - os: ubuntu-latest | |
| target: aarch64-unknown-linux-gnu | |
| bins: cargo-zigbuild, cargo-deb, cargo-generate-rpm | |
| - os: macos-latest | |
| target: x86_64-apple-darwin | |
| - os: macos-latest | |
| target: aarch64-apple-darwin | |
| runs-on: ${{ matrix.platform.os }} | |
| steps: | |
| - name: Clone repository | |
| uses: actions/checkout@v5 | |
| - uses: mlugg/setup-zig@v2 | |
| if: contains(matrix.platform.bins, 'cargo-zigbuild') | |
| - uses: moonrepo/setup-rust@v1 | |
| with: | |
| targets: ${{ matrix.platform.target }} | |
| bins: ${{ matrix.platform.bins }} | |
| cache: false | |
| - name: Build binary | |
| shell: bash | |
| env: | |
| GLIBC_VERSION: 2.35 | |
| run: | | |
| if [[ "${{ matrix.platform.bins }}" == *"zigbuild"* ]]; then | |
| build="cargo zigbuild --target ${{ matrix.platform.target }}.${GLIBC_VERSION}" | |
| else | |
| build="cargo build --target ${{ matrix.platform.target }}" | |
| fi | |
| eval "$build --release --locked" | |
| - name: Create Deb package | |
| if: contains(matrix.platform.bins, 'cargo-deb') | |
| shell: pwsh | |
| run: | | |
| $nightly = if ($env:GITHUB_EVENT_NAME -ne 'release') { "--deb-version=2.nightly" } else { "" } | |
| cargo deb --target ${{ matrix.platform.target }} --no-build --no-strip $nightly | |
| - name: Create RPM package | |
| if: contains(matrix.platform.bins, 'cargo-generate-rpm') | |
| shell: pwsh | |
| run: | | |
| if ($env:GITHUB_EVENT_NAME -ne 'release') { | |
| cargo generate-rpm --target ${{ matrix.platform.target }} --set-metadata='version="nightly"' | |
| } else { | |
| cargo generate-rpm --target ${{ matrix.platform.target }} | |
| } | |
| - name: Rename binary | |
| id: rename_binary | |
| shell: pwsh | |
| run: | | |
| $bin = if ($env:RUNNER_OS -eq 'Windows') { "komac.exe" } else { "komac" } | |
| $newName = "komac" | |
| if ($env:GITHUB_EVENT_NAME -ne 'release') { | |
| $newName += "-nightly" | |
| } else { | |
| $newName += "-$($env:GITHUB_REF_NAME.TrimStart('v'))" | |
| } | |
| $newName += "-${{ matrix.platform.target }}" | |
| if ($env:RUNNER_OS -eq 'Windows') { | |
| $newName += ".exe" | |
| Rename-Item -Path "target/${{ matrix.platform.target }}/release/$bin" -NewName "$newName" | |
| } | |
| "name=$newName" >> $env:GITHUB_OUTPUT | |
| - name: Create Tar archive | |
| if: ${{ runner.os != 'Windows' }} | |
| run: | | |
| tar -cvf ${{ steps.rename_binary.outputs.name }}.tar.gz \ | |
| --use-compress-program="gzip -9" \ | |
| -C target/${{ matrix.platform.target }}/release komac \ | |
| -C ../../../ LICENSE.md | |
| rm target/${{ matrix.platform.target }}/release/komac | |
| - name: Create Inno Installer | |
| if: ${{ runner.os == 'Windows' }} | |
| shell: pwsh | |
| run: | | |
| winget install --exact JRSoftware.InnoSetup --scope machine --silent --accept-package-agreements --accept-source-agreements --disable-interactivity | |
| $input = "../../target/${{ matrix.platform.target }}/release/${{ steps.rename_binary.outputs.name }}" | |
| & "${env:ProgramFiles(x86)}\Inno Setup 6\iscc.exe" assets/inno/installer.iss ` | |
| /DInputExecutable=$input ` | |
| /DArchitecture=${{ matrix.platform.inno_arch }} ` | |
| /F$("${{ steps.rename_binary.outputs.name }}".Replace("komac", "komac-setup").TrimEnd(".exe")) | |
| - name: Set Release variables | |
| id: set_release_vars | |
| shell: pwsh | |
| run: | | |
| if ($env:GITHUB_EVENT_NAME -ne 'release') { | |
| "name=Nightly release" >> $env:GITHUB_OUTPUT | |
| "tag_name=nightly" >> $env:GITHUB_OUTPUT | |
| "prerelease=true" >> $env:GITHUB_OUTPUT | |
| "generate_release_notes=false" >> $env:GITHUB_OUTPUT | |
| } else { | |
| "prerelease=false" >> $env:GITHUB_OUTPUT | |
| "generate_release_notes=true" >> $env:GITHUB_OUTPUT | |
| } | |
| - name: Release binaries | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| name: ${{ steps.set_release_vars.outputs.name }} | |
| tag_name: ${{ steps.set_release_vars.outputs.tag_name }} | |
| prerelease: ${{ steps.set_release_vars.outputs.prerelease }} | |
| generate_release_notes: ${{ steps.set_release_vars.outputs.generate_release_notes }} | |
| files: | | |
| target/${{ matrix.platform.target }}/release/${{ steps.rename_binary.outputs.name }} | |
| target/${{ matrix.platform.target }}/debian/*.deb | |
| target/${{ matrix.platform.target }}/generate-rpm/*.rpm | |
| ${{ steps.rename_binary.outputs.name }}.tar.gz | |
| assets/inno/Output/* | |
| generate-sha256sums: | |
| name: Generate SHA256SUMS | |
| needs: release | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Set tag name | |
| id: set_tag | |
| run: | | |
| if [ "${{ github.event_name }}" != "release" ]; then | |
| echo "tag=nightly" >> $GITHUB_OUTPUT | |
| else | |
| echo "tag=${{ github.ref_name }}" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Download release assets | |
| uses: robinraju/release-downloader@v1 | |
| with: | |
| repository: ${{ github.repository }} | |
| tag: ${{ steps.set_tag.outputs.tag }} | |
| fileName: "*" | |
| out-file-path: ./release-assets | |
| - name: Compute SHA256SUMS | |
| run: | | |
| cd release-assets | |
| rm --force SHA256SUMS | |
| sha256sum --binary * > SHA256SUMS | |
| cat SHA256SUMS | |
| - name: Upload SHA256SUMS to release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ steps.set_tag.outputs.tag }} | |
| files: release-assets/SHA256SUMS | |
| upload-virus-total: | |
| needs: release | |
| if: ${{ github.event_name == 'release' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: VirusTotal Scan | |
| uses: crazy-max/ghaction-virustotal@v4 | |
| with: | |
| vt_api_key: ${{ secrets.VT_API_KEY }} | |
| request_rate: 4 | |
| files: | | |
| .exe$ | |
| .deb$ | |
| .rpm$ | |
| .tar.gz$ | |
| publish-crates-io: | |
| needs: release | |
| if: ${{ github.event_name == 'release' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Clone repository | |
| uses: actions/checkout@v5 | |
| - uses: moonrepo/setup-rust@v1 | |
| with: | |
| cache: false | |
| - name: Publish to crates.io | |
| run: cargo publish | |
| env: | |
| CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
| publish-winget: | |
| needs: [ release, publish-crates-io ] | |
| if: ${{ github.event_name == 'release' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: vedantmgoyal9/winget-releaser@main | |
| with: | |
| identifier: RussellBanks.Komac | |
| installers-regex: 'komac-setup.*\.exe$' | |
| token: ${{ secrets.WINGET_TOKEN }} |