chore: bump version to 1.0.1 #1
Workflow file for this run
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: Windows Release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| release_tag: | |
| description: "GitHub release tag to publish artifacts to" | |
| required: true | |
| default: "v1.0.0" | |
| push: | |
| tags: | |
| - "v*" | |
| permissions: | |
| contents: write | |
| jobs: | |
| build-windows: | |
| name: Build Windows package | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: x86_64-pc-windows-msvc | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Run frontend tests | |
| run: npm test | |
| - name: Run Rust tests | |
| working-directory: src-tauri | |
| run: cargo test | |
| - name: Build Windows app | |
| run: npm run tauri build -- --ci | |
| env: | |
| TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} | |
| TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} | |
| - name: Collect Windows artifacts | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| VERSION="$(node -p "require('./package.json').version")" | |
| mkdir -p artifacts | |
| # Search for MSI and NSIS (.exe) installer files under targets | |
| MSI_PATH="$(find src-tauri/target -type f -name "*.msi" -print -quit)" | |
| EXE_PATH="$(find src-tauri/target -type f -name "*.exe" -not -path "*/target/release/deps/*" -not -path "*/target/release/build/*" -print -quit)" | |
| ZIP_PATH="$(find src-tauri/target -type f -name "*.zip" -print -quit)" | |
| SIG_PATH="$(find src-tauri/target -type f -name "*.zip.sig" -print -quit)" | |
| if [[ -n "${MSI_PATH}" ]]; then | |
| cp "${MSI_PATH}" "artifacts/SkillMaster_${VERSION}_x64_en-US.msi" | |
| fi | |
| if [[ -n "${EXE_PATH}" ]]; then | |
| cp "${EXE_PATH}" "artifacts/SkillMaster_${VERSION}_x64-setup.exe" | |
| fi | |
| if [[ -z "${ZIP_PATH}" ]]; then | |
| echo "Windows updater archive (.zip) was not generated" >&2 | |
| exit 1 | |
| fi | |
| if [[ -z "${SIG_PATH}" ]]; then | |
| echo "Windows updater signature (.zip.sig) was not generated" >&2 | |
| exit 1 | |
| fi | |
| cp "${ZIP_PATH}" "artifacts/SkillMaster_${VERSION}_x64.zip" | |
| cp "${SIG_PATH}" "artifacts/SkillMaster_${VERSION}_x64.zip.sig" | |
| if [[ -z "${MSI_PATH}" && -z "${EXE_PATH}" ]]; then | |
| echo "No Windows installers (.msi or .exe) were found" >&2 | |
| exit 1 | |
| fi | |
| # Calculate SHA-256 checksums | |
| sha256sum artifacts/* > artifacts/SHA256SUMS.txt | |
| - name: Upload workflow artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: skillmaster-windows-${{ inputs.release_tag || github.ref_name }} | |
| path: artifacts/* | |
| - name: Publish artifacts to GitHub Release | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| RELEASE_TAG: ${{ inputs.release_tag || github.ref_name }} | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| if ! gh release view "${RELEASE_TAG}" >/dev/null 2>&1; then | |
| gh release create "${RELEASE_TAG}" --title "SkillMaster ${RELEASE_TAG#v}" --notes "SkillMaster ${RELEASE_TAG#v} release." | |
| fi | |
| gh release upload "${RELEASE_TAG}" artifacts/* --clobber | |
| - name: Publish updater manifest when all platform artifacts exist | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| RELEASE_TAG: ${{ inputs.release_tag || github.ref_name }} | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| rm -rf release-signatures | |
| mkdir -p release-signatures | |
| gh release download "${RELEASE_TAG}" --pattern "*.sig" --dir release-signatures --clobber | |
| gh release view "${RELEASE_TAG}" --json assets,body,publishedAt > release-assets.json | |
| if node .github/scripts/build-latest-json.mjs release-assets.json release-signatures latest.json; then | |
| gh release upload "${RELEASE_TAG}" latest.json --clobber | |
| else | |
| echo "Skipping latest.json upload until all updater artifacts are present." | |
| fi |