diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml new file mode 100644 index 00000000..5373e2cb --- /dev/null +++ b/.github/workflows/create-release.yml @@ -0,0 +1,94 @@ +name: Create Release + +on: + workflow_dispatch: + inputs: + tag_name: + description: 'Tag name (e.g., v1.0.0)' + required: true + release_name: + description: 'Release title' + required: true + body: + description: 'Release notes' + required: false + +jobs: + build-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install + run: npm ci + - name: Build Linux + run: npm run build:linux + - name: Upload Linux artifacts + uses: actions/upload-artifact@v4 + with: + name: linux-artifacts + path: release/** + + build-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install + run: npm ci + - name: Build Windows + run: npm run build:win + - name: Upload Windows artifacts + uses: actions/upload-artifact@v4 + with: + name: windows-artifacts + path: release/** + + build-mac: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install + run: npm ci + - name: Build Mac + run: npm run build:mac + - name: Upload Mac artifacts + uses: actions/upload-artifact@v4 + with: + name: mac-artifacts + path: release/** + + create_release: + needs: [build-linux, build-windows, build-mac] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Download Linux artifacts + uses: actions/download-artifact@v4 + with: + name: linux-artifacts + path: release/ + - name: Download Windows artifacts + uses: actions/download-artifact@v4 + with: + name: windows-artifacts + path: release/ + - name: Download Mac artifacts + uses: actions/download-artifact@v4 + with: + name: mac-artifacts + path: release/ + - name: Create GitHub release and upload artifacts + uses: ncipollo/release-action@v1 + with: + tag: ${{ github.event.inputs.tag_name }} + name: ${{ github.event.inputs.release_name }} + body: ${{ github.event.inputs.body }} + files: 'release/**' diff --git a/package.json b/package.json index 12cc9239..0804a2c1 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "build:mac": "tsc && vite build && electron-builder --mac", "build:win": "tsc && vite build && electron-builder --win", "build:linux": "tsc && vite build && electron-builder --linux", + "release:dispatch": "sh ./scripts/trigger_release.sh", "test": "vitest --run", "test:watch": "vitest" }, diff --git a/scripts/trigger_release.sh b/scripts/trigger_release.sh new file mode 100644 index 00000000..38d16c77 --- /dev/null +++ b/scripts/trigger_release.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# Usage: ./scripts/trigger_release.sh "Release Title" "Release notes" +set -euo pipefail +if ! command -v gh >/dev/null 2>&1; then + echo "gh (GitHub CLI) is required to trigger the workflow. Install: https://cli.github.com/" + exit 1 +fi +TAG="$1" +RELEASE_NAME="$2" +BODY="${3:-}" +# Trigger the workflow_dispatch for the create-release workflow +gh workflow run .github/workflows/create-release.yml -f tag_name="$TAG" -f release_name="$RELEASE_NAME" -f body="$BODY" +echo "Triggered workflow to create release $TAG"