- Add desktop-windows job (NSIS installer + portable exe) - Add desktop-macos job (dmg + zip, unsigned, x64 + arm64) - Update create-release to collect artifacts from all platforms - Update release notes with all artifact types Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
268 lines
8.7 KiB
YAML
268 lines
8.7 KiB
YAML
name: Showcase Release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: 'Release version (e.g., 0.1.0)'
|
|
required: true
|
|
type: string
|
|
build_desktop:
|
|
description: 'Build desktop (Electron) artifacts'
|
|
required: false
|
|
type: boolean
|
|
default: true
|
|
build_mobile:
|
|
description: 'Build mobile (Android APK) artifact'
|
|
required: false
|
|
type: boolean
|
|
default: true
|
|
|
|
concurrency:
|
|
group: showcase-release
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
# ─── Desktop Linux Build ───────────────────────────────────────
|
|
desktop-linux:
|
|
if: inputs.build_desktop
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
cache: npm
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Build design system packages
|
|
run: npx turbo run build --filter='@dangerousthings/tokens' --filter='@dangerousthings/web'
|
|
|
|
- name: Build desktop showcase
|
|
working-directory: packages/showcase/desktop
|
|
run: npm run build
|
|
|
|
- name: Package desktop (Linux)
|
|
working-directory: packages/showcase/desktop
|
|
run: npx electron-builder --linux
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Upload desktop artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: desktop-linux
|
|
path: |
|
|
packages/showcase/desktop/release/*.AppImage
|
|
packages/showcase/desktop/release/*.deb
|
|
retention-days: 30
|
|
|
|
# ─── Desktop Windows Build ──────────────────────────────────────
|
|
desktop-windows:
|
|
if: inputs.build_desktop
|
|
runs-on: windows-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
cache: npm
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Build design system packages
|
|
run: npx turbo run build --filter='@dangerousthings/tokens' --filter='@dangerousthings/web'
|
|
|
|
- name: Build desktop showcase
|
|
working-directory: packages/showcase/desktop
|
|
run: npm run build
|
|
|
|
- name: Package desktop (Windows)
|
|
working-directory: packages/showcase/desktop
|
|
run: npx electron-builder --win
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Upload desktop artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: desktop-windows
|
|
path: |
|
|
packages/showcase/desktop/release/*.exe
|
|
retention-days: 30
|
|
|
|
# ─── Desktop macOS Build ────────────────────────────────────────
|
|
desktop-macos:
|
|
if: inputs.build_desktop
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
cache: npm
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Build design system packages
|
|
run: npx turbo run build --filter='@dangerousthings/tokens' --filter='@dangerousthings/web'
|
|
|
|
- name: Build desktop showcase
|
|
working-directory: packages/showcase/desktop
|
|
run: npm run build
|
|
|
|
- name: Package desktop (macOS)
|
|
working-directory: packages/showcase/desktop
|
|
run: npx electron-builder --mac --x64 --arm64
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
# No CSC_LINK / CSC_KEY_PASSWORD = unsigned build
|
|
# Users will need to right-click > Open to bypass Gatekeeper
|
|
|
|
- name: Upload desktop artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: desktop-macos
|
|
path: |
|
|
packages/showcase/desktop/release/*.dmg
|
|
packages/showcase/desktop/release/*.zip
|
|
retention-days: 30
|
|
|
|
# ─── Mobile Android Build ──────────────────────────────────────
|
|
mobile-android:
|
|
if: inputs.build_mobile
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 22
|
|
cache: npm
|
|
|
|
- uses: actions/setup-java@v4
|
|
with:
|
|
distribution: temurin
|
|
java-version: '17'
|
|
|
|
- name: Setup Android SDK
|
|
uses: android-actions/setup-android@v3
|
|
|
|
- name: Install dependencies
|
|
run: npm ci
|
|
|
|
- name: Build design system packages
|
|
run: npx turbo run build --filter='@dangerousthings/tokens'
|
|
|
|
- name: Expo prebuild
|
|
working-directory: packages/showcase/mobile
|
|
run: npx expo prebuild --clean --platform android
|
|
|
|
- name: Cache Gradle
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.gradle/caches
|
|
~/.gradle/wrapper
|
|
key: gradle-${{ hashFiles('packages/showcase/mobile/android/**/*.gradle*', 'packages/showcase/mobile/android/gradle/wrapper/gradle-wrapper.properties') }}
|
|
restore-keys: gradle-
|
|
|
|
- name: Build release APK
|
|
working-directory: packages/showcase/mobile/android
|
|
run: ./gradlew assembleRelease
|
|
|
|
- name: Upload APK artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: mobile-android
|
|
path: packages/showcase/mobile/android/app/build/outputs/apk/release/app-release.apk
|
|
retention-days: 30
|
|
|
|
# ─── Create GitHub Release ─────────────────────────────────────
|
|
create-release:
|
|
needs: [desktop-linux, desktop-windows, desktop-macos, mobile-android]
|
|
if: always() && (needs.desktop-linux.result == 'success' || needs.desktop-windows.result == 'success' || needs.desktop-macos.result == 'success' || needs.mobile-android.result == 'success')
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: release-artifacts
|
|
|
|
- name: Rename artifacts with version
|
|
env:
|
|
RELEASE_VERSION: ${{ inputs.version }}
|
|
run: |
|
|
mkdir -p final-artifacts
|
|
|
|
# Desktop Linux artifacts
|
|
if [ -d release-artifacts/desktop-linux ]; then
|
|
for f in release-artifacts/desktop-linux/*; do
|
|
filename=$(basename "$f")
|
|
newname=$(echo "$filename" | sed "s/0\.0\.0/${RELEASE_VERSION}/g")
|
|
cp "$f" "final-artifacts/$newname"
|
|
done
|
|
fi
|
|
|
|
# Desktop Windows artifacts
|
|
if [ -d release-artifacts/desktop-windows ]; then
|
|
for f in release-artifacts/desktop-windows/*; do
|
|
filename=$(basename "$f")
|
|
newname=$(echo "$filename" | sed "s/0\.0\.0/${RELEASE_VERSION}/g")
|
|
cp "$f" "final-artifacts/$newname"
|
|
done
|
|
fi
|
|
|
|
# Desktop macOS artifacts
|
|
if [ -d release-artifacts/desktop-macos ]; then
|
|
for f in release-artifacts/desktop-macos/*; do
|
|
filename=$(basename "$f")
|
|
newname=$(echo "$filename" | sed "s/0\.0\.0/${RELEASE_VERSION}/g")
|
|
cp "$f" "final-artifacts/$newname"
|
|
done
|
|
fi
|
|
|
|
# Mobile APK
|
|
if [ -f release-artifacts/mobile-android/app-release.apk ]; then
|
|
cp release-artifacts/mobile-android/app-release.apk \
|
|
"final-artifacts/dt-showcase-mobile-${RELEASE_VERSION}.apk"
|
|
fi
|
|
|
|
echo "Release artifacts:"
|
|
ls -lh final-artifacts/
|
|
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: showcase-v${{ inputs.version }}
|
|
name: Showcase v${{ inputs.version }}
|
|
body: |
|
|
## DT Design System Showcase v${{ inputs.version }}
|
|
|
|
### Desktop (Electron)
|
|
- **AppImage** (Linux, portable) — download and `chmod +x` to run
|
|
- **deb** (Debian/Ubuntu) — install with `sudo dpkg -i <file>.deb`
|
|
- **exe** (Windows) — NSIS installer + portable exe
|
|
- **dmg** (macOS) — unsigned, right-click > Open to bypass Gatekeeper
|
|
- **zip** (macOS) — portable archive
|
|
|
|
### Mobile (Android)
|
|
- **APK** — sideload on any Android device (Settings > Install unknown apps)
|
|
|
|
---
|
|
Built from commit ${{ github.sha }}
|
|
files: final-artifacts/*
|
|
draft: false
|
|
prerelease: false
|