diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2e9f98c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,137 @@ +name: Build and Release + +on: + # 手动触发 + workflow_dispatch: + inputs: + version: + description: '版本号 (如 0.1.0)' + required: true + type: string + # 推送 tag 时自动触发 + push: + tags: + - 'v*' + +jobs: + build-mac: + runs-on: macos-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - name: Setup pnpm cache + uses: actions/cache@v4 + 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 install + + - name: Build Electron app for macOS + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: pnpm build:mac + + - name: Upload macOS artifacts + uses: actions/upload-artifact@v4 + with: + name: ChatLab-mac + path: | + dist/*.dmg + dist/*.zip + if-no-files-found: warn + + build-win: + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - name: Setup pnpm cache + uses: actions/cache@v4 + 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 install + + - name: Build Electron app for Windows + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: pnpm build:win + + - name: Upload Windows artifacts + uses: actions/upload-artifact@v4 + with: + name: ChatLab-win + path: | + dist/*.exe + if-no-files-found: warn + + release: + needs: [build-mac, build-win] + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' + + steps: + - name: Download macOS artifacts + uses: actions/download-artifact@v4 + with: + name: ChatLab-mac + path: dist + + - name: Download Windows artifacts + uses: actions/download-artifact@v4 + with: + name: ChatLab-win + path: dist + + - name: List files + run: ls -la dist/ + + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.event_name == 'workflow_dispatch' && format('v{0}', inputs.version) || github.ref_name }} + name: ChatLab ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.ref_name }} + draft: true + files: dist/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/electron-builder.yml b/electron-builder.yml index 867418c..d9332ec 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -41,10 +41,14 @@ mac: extendInfo: - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. + target: + - dmg + - zip + artifactName: ChatLab-${version}-${arch}.${ext} # macOS 平台的 DMG 配置 dmg: - artifactName: ChatLab-${version}.${ext} + artifactName: ChatLab-${version}-${arch}.${ext} # Linux 平台配置 linux: