|
|
name: Build Electron App |
|
|
|
|
|
on: |
|
|
push: |
|
|
tags: |
|
|
- '*' |
|
|
- '!*-*' |
|
|
- '!*-alpha*' |
|
|
workflow_dispatch: |
|
|
|
|
|
jobs: |
|
|
build: |
|
|
strategy: |
|
|
matrix: |
|
|
|
|
|
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 (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 [[ -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 (Windows) |
|
|
if: runner.os == 'Windows' |
|
|
run: | |
|
|
cd electron |
|
|
npm run build:win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 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 }} |