Repository navigation
chore(deps-dev): bump typescript from 5.9.3 to 7.0.2 #179
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 | |
| # PR / manual dispatch -> package on all 3 OSes WITHOUT publishing (QA dry-run). | |
| # Pushing a v* tag -> build + publish artifacts to the matching GitHub Release. | |
| on: | |
| pull_request: | |
| paths: | |
| - '.nvmrc' | |
| - 'package.json' | |
| - 'package-lock.json' | |
| - 'src/**' | |
| - 'scripts/**' | |
| - 'build/**' | |
| - 'qa/**' | |
| - '.github/workflows/ci.yml' | |
| - '.github/workflows/release.yml' | |
| workflow_dispatch: | |
| push: | |
| tags: ['v*'] | |
| permissions: | |
| contents: write | |
| jobs: | |
| quality: | |
| uses: ./.github/workflows/ci.yml | |
| permissions: | |
| contents: read | |
| package: | |
| needs: quality | |
| name: package (${{ matrix.os }}) | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: '1' | |
| CSC_IDENTITY_AUTO_DISCOVERY: 'false' # no code-signing cert in CI (unsigned builds) | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 | |
| with: | |
| node-version-file: '.nvmrc' | |
| cache: npm | |
| - run: npm ci | |
| - run: npm run build | |
| - name: Verify tag matches the packaged version | |
| if: startsWith(github.ref, 'refs/tags/') | |
| shell: bash | |
| run: test "${GITHUB_REF_NAME}" = "v$(node -p 'require("./package.json").version')" | |
| - name: Build artifacts without publishing | |
| run: npx --no-install electron-builder --publish never | |
| - name: Exercise the packaged Windows app before publication | |
| if: runner.os == 'Windows' | |
| run: node qa/resilience.mjs | |
| env: | |
| DEVDECK_EXECUTABLE: release/win-unpacked/DevDeck.exe | |
| - name: Verify packaged settings and task conflict recovery | |
| if: runner.os == 'Windows' | |
| run: node qa/maintenance.mjs | |
| env: | |
| DEVDECK_EXECUTABLE: release/win-unpacked/DevDeck.exe | |
| - name: Verify packaged host and viewer session consistency | |
| if: runner.os == 'Windows' | |
| run: node qa/session-sync.mjs | |
| env: | |
| DEVDECK_EXECUTABLE: release/win-unpacked/DevDeck.exe | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| if: always() && runner.os == 'Windows' | |
| with: | |
| name: qa-packaged-windows | |
| path: | | |
| qa/shots/resilience/ | |
| qa/shots/maintenance/ | |
| qa/shots/session-sync/ | |
| - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 | |
| with: | |
| name: release-${{ matrix.os }} | |
| if-no-files-found: error | |
| path: | | |
| release/*.exe | |
| release/*.blockmap | |
| release/*.dmg | |
| release/*.zip | |
| release/*.AppImage | |
| release/*.deb | |
| release/latest*.yml | |
| - name: List built artifacts | |
| shell: bash | |
| run: ls -la release || true | |
| publish: | |
| # A tag alone can no longer ship an untested or partially built release. All OS builds and | |
| # the installed-layout Windows journeys must succeed before the draft becomes public. | |
| needs: package | |
| if: startsWith(github.ref, 'refs/tags/') | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 | |
| with: | |
| pattern: release-* | |
| merge-multiple: true | |
| path: release-assets | |
| - name: Publish the complete validated release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| shell: bash | |
| run: | | |
| tag="$GITHUB_REF_NAME" | |
| if gh release view "$tag" --json isDraft >/dev/null 2>&1; then | |
| test "$(gh release view "$tag" --json isDraft --jq .isDraft)" = true | |
| else | |
| notes="docs/releases/${tag#v}.md" | |
| if test -f "$notes"; then | |
| gh release create "$tag" --verify-tag --draft --title "${tag#v}" --notes-file "$notes" | |
| else | |
| gh release create "$tag" --verify-tag --draft --title "${tag#v}" --generate-notes | |
| fi | |
| fi | |
| gh release upload "$tag" release-assets/* --clobber | |
| gh release edit "$tag" --draft=false --latest |