name: Build Electron App on: push: tags: - '*' # Triggers on version tags like v1.0.0 - '!*-*' # Ignore pre-release tags like v1.0.0-beta - '!*-alpha*' # Ignore alpha tags like v1.0.0-alpha workflow_dispatch: # Allows manual triggering jobs: build: strategy: matrix: # os: [macos-latest, windows-latest] os: [windows-latest] runs-on: ${{ matrix.os }} defaults: run: shell: bash steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Setup Go uses: actions/setup-go@v5 with: go-version: '>=1.25.1' - name: Build frontend env: CI: "" NODE_OPTIONS: "--max-old-space-size=4096" run: | cd web bun install DISABLE_ESLINT_PLUGIN='true' VITE_REACT_APP_VERSION=$(git describe --tags) bun run build cd .. # - name: Build Go binary (macos/Linux) # if: runner.os != 'Windows' # run: | # go mod download # go build -ldflags "-s -w -X 'new-api/common.Version=$(git describe --tags)' -extldflags '-static'" -o new-api - name: Build Go binary (Windows) if: runner.os == 'Windows' run: | go mod download go build -ldflags "-s -w -X 'new-api/common.Version=$(git describe --tags)'" -o new-api.exe - name: Update Electron version run: | cd electron VERSION=$(git describe --tags) VERSION=${VERSION#v} # Remove 'v' prefix if present # Convert to valid semver: take first 3 components and convert rest to prerelease format # e.g., 0.9.3-patch.1 -> 0.9.3-patch.1 if [[ $VERSION =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(.*)$ ]]; then MAJOR=${BASH_REMATCH[1]} MINOR=${BASH_REMATCH[2]} PATCH=${BASH_REMATCH[3]} REST=${BASH_REMATCH[4]} VERSION="$MAJOR.$MINOR.$PATCH" # If there's extra content, append it without adding -dev if [[ -n "$REST" ]]; then VERSION="$VERSION$REST" fi fi npm version $VERSION --no-git-tag-version --allow-same-version - name: Install Electron dependencies run: | cd electron npm install # - name: Build Electron app (macOS) # if: runner.os == 'macOS' # run: | # cd electron # npm run build:mac # env: # CSC_IDENTITY_AUTO_DISCOVERY: false # Skip code signing - name: Build Electron app (Windows) if: runner.os == 'Windows' run: | cd electron npm run build:win # - name: Upload artifacts (macOS) # if: runner.os == 'macOS' # uses: actions/upload-artifact@v4 # with: # name: macos-build # path: | # electron/dist/*.dmg # electron/dist/*.zip - name: Upload artifacts (Windows) if: runner.os == 'Windows' uses: actions/upload-artifact@v4 with: name: windows-build path: | electron/dist/*.exe release: needs: build runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags/') permissions: contents: write steps: - name: Download all artifacts uses: actions/download-artifact@v4 - name: Upload to Release uses: softprops/action-gh-release@v2 with: files: | windows-build/* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}