Skip to content

Release

Release #17

Workflow file for this run

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 }}