# Adapted from https://github.com/rust-lang/rustup/blob/master/.github/workflows/windows-builds-on-master.yaml name: Windows on: pull_request: branches: - "*" push: branches: - master - feature/* - hotfix/* tags: - v* schedule: - cron: "30 0 * * 0" # Every day at 00:30 UTC workflow_dispatch: jobs: build: strategy: fail-fast: true matrix: platform: - os-name: Windows-x86_64 runs-on: windows-latest target: x86_64-pc-windows-msvc - os-name: Windows-aarch64 runs-on: windows-latest target: aarch64-pc-windows-msvc runs-on: ${{ matrix.platform.runs-on }} permissions: write-all env: RUSTFLAGS: -Ctarget-feature=+crt-static -Dwarnings GH_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - run: rustup toolchain install stable --profile minimal - run: rustup toolchain install nightly --allow-downgrade -c rustfmt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" cache-all-crates: "true" key: ${{ matrix.platform.target }} - run: cargo +nightly fmt --check - run: cargo clippy - uses: houseabsolute/actions-rust-cross@v0 with: command: "build" target: ${{ matrix.platform.target }} args: "--locked --release" - run: | cargo install cargo-wix cargo wix --no-build -p komorebi --nocapture -I .\wix\main.wxs --target ${{ matrix.platform.target }} - uses: actions/upload-artifact@v4 with: name: komorebi-${{ matrix.platform.target }}-${{ github.sha }} path: | target/${{ matrix.platform.target }}/release/*.exe target/${{ matrix.platform.target }}/release/*.pdb target/wix/komorebi-*.msi retention-days: 14 nightly: needs: build runs-on: windows-latest permissions: write-all if: ${{ github.ref == 'refs/heads/master' && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' ) }} env: GH_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - shell: bash run: echo "VERSION=nightly" >> $GITHUB_ENV - uses: actions/download-artifact@v4 - run: | Compress-Archive -Force ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/x86_64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip Copy-Item ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/wix/*x86_64.msi -Destination ./komorebi-$Env:VERSION-x86_64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip" >checksums.txt Compress-Archive -Force ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/aarch64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip Copy-Item ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/wix/*aarch64.msi -Destination ./komorebi-$Env:VERSION-aarch64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip" >>checksums.txt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" cache-all-crates: "true" - shell: bash run: | if ! type kokai >/dev/null; then cargo install --locked kokai --force; fi git tag -d nightly || true git tag nightly kokai release --no-emoji --add-links github:commits,issues --ref nightly >"CHANGELOG.md" - shell: bash run: | gh release delete nightly --yes || true git push origin :nightly || true gh release create nightly \ --target $GITHUB_SHA \ --prerelease \ --title "komorebi nightly (${GITHUB_SHA})" \ --notes-file CHANGELOG.md \ komorebi-nightly-x86_64-pc-windows-msvc.zip \ komorebi-nightly-x86_64.msi \ komorebi-nightly-aarch64-pc-windows-msvc.zip \ komorebi-nightly-aarch64.msi \ checksums.txt release-dry-run: needs: build runs-on: windows-latest permissions: write-all if: ${{ github.ref == 'refs/heads/master' }} env: GH_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - shell: bash run: | TAG=${{ github.event.release.tag_name }} echo "VERSION=${TAG#v}" >> $GITHUB_ENV - uses: actions/download-artifact@v4 - run: | Compress-Archive -Force ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/x86_64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip Copy-Item ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/wix/*x86_64.msi -Destination ./komorebi-$Env:VERSION-x86_64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip" >checksums.txt Compress-Archive -Force ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/aarch64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip Copy-Item ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/wix/*aarch64.msi -Destination ./komorebi-$Env:VERSION-aarch64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip" >>checksums.txt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" cache-all-crates: "true" - shell: bash run: | if ! type kokai >/dev/null; then cargo install --locked kokai --force; fi git tag -d nightly || true kokai release --no-emoji --add-links github:commits,issues --ref "${{ github.ref_name }}" >"CHANGELOG.md" - uses: softprops/action-gh-release@v2 with: draft: true body_path: "CHANGELOG.md" files: | checksums.txt *.zip *.msi release: needs: build runs-on: windows-latest permissions: write-all if: startsWith(github.ref, 'refs/tags/v') env: GH_TOKEN: ${{ github.token }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - shell: bash run: | TAG=${{ github.ref_name }} echo "VERSION=${TAG#v}" >> $GITHUB_ENV - uses: actions/download-artifact@v4 - run: | Compress-Archive -Force ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/x86_64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip Copy-Item ./komorebi-x86_64-pc-windows-msvc-${{ github.sha }}/wix/*x86_64.msi -Destination ./komorebi-$Env:VERSION-x86_64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-x86_64-pc-windows-msvc.zip" >checksums.txt Compress-Archive -Force ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/aarch64-pc-windows-msvc/release/*.exe komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip Copy-Item ./komorebi-aarch64-pc-windows-msvc-${{ github.sha }}/wix/*aarch64.msi -Destination ./komorebi-$Env:VERSION-aarch64.msi echo "$((Get-FileHash komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip).Hash.ToLower()) komorebi-$Env:VERSION-aarch64-pc-windows-msvc.zip" >>checksums.txt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" cache-all-crates: "true" - shell: bash run: | if ! type kokai >/dev/null; then cargo install --locked kokai --force; fi git tag -d nightly || true kokai release --no-emoji --add-links github:commits,issues --ref "$(git tag --points-at HEAD)" >"CHANGELOG.md" - uses: softprops/action-gh-release@v2 with: body_path: "CHANGELOG.md" files: | checksums.txt *.zip *.msi winget: runs-on: ubuntu-latest needs: release if: startsWith(github.ref, 'refs/tags/v') steps: - uses: vedantmgoyal2009/winget-releaser@v2 with: identifier: LGUG2Z.komorebi token: ${{ secrets.WINGET_TOKEN }}