Skip to content

feat: gstack auto-install in onboarding + letter-based gS app icon (v… #31

feat: gstack auto-install in onboarding + letter-based gS app icon (v…

feat: gstack auto-install in onboarding + letter-based gS app icon (v… #31

Workflow file for this run

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