Electron CI


Electron CI#


name: Build Release Packages

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

concurrency:
  group: release-${{ github.ref }}
  cancel-in-progress: false

jobs:
  create-release:
    name: Create GitHub Release
    runs-on: ubuntu-latest
    steps:
      - name: Create release
        uses: softprops/action-gh-release@v3
        with:
          tag_name: ${{ github.ref_name }}
          name: ${{ github.ref_name }}
          draft: false
          prerelease: ${{ contains(github.ref_name, '-') }}
          generate_release_notes: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  build:
    needs: create-release
    name: Build ${{ matrix.platform.name }}
    runs-on: ${{ matrix.platform.runner }}
    strategy:
      fail-fast: false
      matrix:
        platform:
          - name: Windows
            runner: windows-latest
            build_script: build:win:x64
            artifact_glob: dist/*.exe
          - name: macOS
            runner: macos-latest
            build_script: build:mac:arm
            artifact_glob: dist/*.dmg

    steps:
      - name: Checkout source
        uses: actions/checkout@v6

      - uses: actions/setup-node@v6
        name: Setup Node.js
        with:
          node-version: 24

      - uses: pnpm/action-setup@v6
        name: Install pnpm
        with:
          version: 10
          run_install: false

      - name: Get pnpm store directory
        shell: bash
        run: |
          echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV

      - uses: actions/cache@v5
        name: Setup pnpm cache
        with:
          path: ${{ env.STORE_PATH }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-

      - name: Install dependencies
        run: pnpm run init

      - name: Build production package
        run: pnpm run ${{ matrix.platform.build_script }}

      - name: Upload release assets
        uses: softprops/action-gh-release@v3
        with:
          tag_name: ${{ github.ref_name }}
          files: ${{ matrix.platform.artifact_glob }}
          fail_on_unmatched_files: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}