codeburn/.github/workflows/build-windows-installer.yml
2026-08-13 19:47:31 +05:30

88 lines
2.6 KiB
YAML

name: Build Windows installer
on:
workflow_dispatch:
inputs:
release_tag:
description: Existing desktop-v* release to verify after manual asset upload
required: false
type: string
pull_request:
paths:
- .github/workflows/build-windows-installer.yml
- app/**
- src/**
- scripts/**
- package.json
- package-lock.json
push:
tags:
- 'desktop-v*'
release:
types: [published]
permissions:
contents: read
jobs:
nsis:
if: ${{ github.event_name != 'release' && !(github.event_name == 'workflow_dispatch' && inputs.release_tag != '') }}
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 22.13.0
cache: npm
cache-dependency-path: |
package-lock.json
app/package-lock.json
- name: Install CLI dependencies
run: npm ci
- name: Install desktop dependencies
run: npm ci --prefix app
- name: Test installer verifier
run: npm --prefix app test -- scripts/verify-windows-installer.test.ts
- name: Build NSIS installer
run: npm --prefix app run package:win
- name: Verify installer manifest
shell: pwsh
run: |
if ($env:GITHUB_REF_TYPE -eq 'tag') {
node app/scripts/verify-windows-installer.mjs --tag $env:GITHUB_REF_NAME
} else {
node app/scripts/verify-windows-installer.mjs
}
- name: Upload installer artifact
uses: actions/upload-artifact@v6
with:
name: CodeBurn-Windows-Installer
path: |
app/release/CodeBurn-Setup-*.exe
app/release/CodeBurn-Setup-*.exe.blockmap
if-no-files-found: error
retention-days: 30
verify-release-assets:
if: ${{ (github.event_name == 'release' && startsWith(github.event.release.tag_name, 'desktop-v')) || (github.event_name == 'workflow_dispatch' && inputs.release_tag != '') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Verify live desktop release assets
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.release_tag }}
run: |
gh api "repos/${{ github.repository }}/releases/tags/$RELEASE_TAG" \
--jq '[.assets[].name]' > "$RUNNER_TEMP/release-assets.json"
node app/scripts/verify-windows-installer.mjs \
--tag "$RELEASE_TAG" \
--release-assets "$RUNNER_TEMP/release-assets.json"