vibetunnel/.github/workflows/release.yml

163 lines
No EOL
4.5 KiB
YAML

name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., 1.2.3)'
required: true
type: string
permissions:
contents: write
issues: write
pull-requests: write
jobs:
build-mac:
name: Build macOS App
runs-on: macos-15
env:
GITHUB_REPO_NAME: ${{ github.repository }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Select Xcode 16.3
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.4'
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: 9
run_install: false
- name: Get pnpm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- name: Setup pnpm cache
uses: useblacksmith/cache@v5
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('web/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install web dependencies
working-directory: web
run: pnpm install --frozen-lockfile
- name: Resolve Dependencies
working-directory: mac
run: |
xcodebuild -resolvePackageDependencies -workspace VibeTunnel.xcworkspace
- name: Build Release (arm64)
working-directory: mac
run: |
./scripts/build.sh --configuration Release --arch arm64
mv build/Build/Products/Release/VibeTunnel.app build/Build/Products/Release/VibeTunnel-arm64.app
- name: Build Release (x86_64)
working-directory: mac
run: |
# Clean build directory for x86_64 build
rm -rf build/Build/Products/Release/VibeTunnel.app
./scripts/build.sh --configuration Release --arch x86_64
mv build/Build/Products/Release/VibeTunnel.app build/Build/Products/Release/VibeTunnel-x86_64.app
- name: Create DMGs and ZIPs
working-directory: mac
run: |
VERSION="${{ github.event.inputs.version || github.ref_name }}"
VERSION="${VERSION#v}" # Remove 'v' prefix if present
# Create arm64 DMG and ZIP
./scripts/create-dmg.sh "build/Build/Products/Release/VibeTunnel-arm64.app"
./scripts/create-zip.sh "build/Build/Products/Release/VibeTunnel-arm64.app"
# Create Intel DMG and ZIP
./scripts/create-dmg.sh "build/Build/Products/Release/VibeTunnel-x86_64.app"
./scripts/create-zip.sh "build/Build/Products/Release/VibeTunnel-x86_64.app"
# List created files
echo "Created files:"
ls -la build/*.dmg build/*.zip
- name: Upload Release Artifacts
uses: actions/upload-artifact@v4
with:
name: mac-release
path: |
mac/build/*.dmg
mac/build/*.zip
retention-days: 7
- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: |
mac/build/*.dmg
mac/build/*.zip
draft: true
prerelease: ${{ contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') }}
generate_release_notes: true
build-ios:
name: Build iOS App
runs-on: macos-15
env:
GITHUB_REPO_NAME: ${{ github.repository }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Select Xcode 16.3
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '16.4'
- name: Resolve Dependencies
working-directory: ios
run: |
xcodebuild -resolvePackageDependencies -project VibeTunnel.xcodeproj
- name: Build iOS Release
working-directory: ios
run: |
xcodebuild build \
-project VibeTunnel.xcodeproj \
-scheme VibeTunnel \
-destination "generic/platform=iOS" \
-configuration Release \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO \
ONLY_ACTIVE_ARCH=NO \
-derivedDataPath build/DerivedData
- name: Upload iOS Artifacts
uses: actions/upload-artifact@v4
with:
name: ios-release
path: ios/build/DerivedData/Build/Products/Release-iphoneos/
retention-days: 7