feat: new app icon + clean window-only screenshots #42
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build & Release | |
| on: | |
| push: | |
| branches: [main] | |
| tags: ['v*.*.*'] | |
| pull_request: | |
| branches: [main] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| # ── Type-check on every push/PR ────────────────────────────────────────── | |
| typecheck: | |
| name: Type Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| - name: Install dependencies | |
| uses: nick-fields/retry@v3 | |
| with: | |
| timeout_minutes: 10 | |
| max_attempts: 3 | |
| command: npm ci | |
| - run: npm run typecheck | |
| # ── Build native packages only on version tags ──────────────────────────── | |
| build: | |
| name: Build — ${{ matrix.os }} | |
| needs: typecheck | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: macos-latest | |
| platform: mac | |
| - os: windows-latest | |
| platform: win | |
| - os: ubuntu-latest | |
| platform: linux | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| # Retry npm install to handle transient download failures (esp. on Windows) | |
| - name: Install dependencies | |
| uses: nick-fields/retry@v3 | |
| with: | |
| timeout_minutes: 10 | |
| max_attempts: 3 | |
| command: npm ci | |
| # ── macOS ───────────────────────────────────────────────────────────── | |
| # Builds an unsigned .dmg by default (CSC_IDENTITY_AUTO_DISCOVERY=false). | |
| # To enable code-signing: add MAC_CERT_P12 / MAC_CERT_PASSWORD repo | |
| # secrets and remove the CSC_IDENTITY_AUTO_DISCOVERY override below. | |
| - name: Build macOS | |
| if: matrix.platform == 'mac' | |
| env: | |
| CSC_IDENTITY_AUTO_DISCOVERY: "false" | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: npm run package:mac | |
| # ── Windows ─────────────────────────────────────────────────────────── | |
| - name: Build Windows | |
| if: matrix.platform == 'win' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: npm run package:win | |
| # ── Linux ───────────────────────────────────────────────────────────── | |
| - name: Build Linux | |
| if: matrix.platform == 'linux' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: npm run package:linux | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-${{ matrix.platform }} | |
| path: | | |
| dist/*.dmg | |
| dist/*.zip | |
| dist/*.exe | |
| dist/*.AppImage | |
| dist/*.deb | |
| if-no-files-found: warn | |
| # ── Create GitHub Release and attach binaries ──────────────────────────── | |
| release: | |
| name: Publish Release | |
| needs: build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: dist-all | |
| merge-multiple: true | |
| - name: List release assets | |
| run: ls -lh dist-all/ | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| name: gstack Studio ${{ github.ref_name }} | |
| body: | | |
| ## gstack Studio ${{ github.ref_name }} | |
| ### Downloads | |
| | Platform | File | | |
| |----------|------| | |
| | macOS (Apple Silicon + Intel) | `gstack-Studio-*-mac.dmg` | | |
| | Windows 64-bit | `gstack-Studio-*-win.exe` | | |
| | Linux (AppImage) | `gstack-Studio-*.AppImage` | | |
| | Linux (Debian) | `gstack-Studio-*.deb` | | |
| > **macOS note:** This build is unsigned. On first launch, right-click the app and choose **Open** to bypass Gatekeeper, or run `xattr -dr com.apple.quarantine /Applications/gstack\ Studio.app`. | |
| ### Requirements | |
| - [gstack](https://github.com/garrytan/gstack) installed at `~/.claude/skills/gstack` | |
| - [Bun](https://bun.sh) for running the browse daemon | |
| See the [README](https://github.com/${{ github.repository }}#readme) for full setup instructions. | |
| files: dist-all/* | |
| draft: false | |
| prerelease: ${{ contains(github.ref_name, '-') }} | |
| generate_release_notes: true |