Skip to content

Build & Release

Build & Release #2

Workflow file for this run

name: Build & Release
on:
push:
tags:
- 'v*'
jobs:
build-windows:
runs-on: windows-latest
environment: ${{ vars.ENABLE_CODE_SIGNING == 'true' && 'production' || '' }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Create .env file
run: |
echo "GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}" > .env
echo "GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}" >> .env
- name: Build Windows (unsigned)
if: vars.ENABLE_CODE_SIGNING != 'true'
run: pnpm run build:win
- name: Build Windows (signed)
if: vars.ENABLE_CODE_SIGNING == 'true'
run: pnpm run build:win
env:
CSC_LINK: ${{ secrets.WINDOWS_CERTIFICATE }}
CSC_KEY_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
- name: Upload Windows artifacts
uses: actions/upload-artifact@v4
with:
name: windows-builds
path: |
release/*.exe
retention-days: 5
build-mac:
runs-on: macos-latest
environment: ${{ vars.ENABLE_CODE_SIGNING == 'true' && 'production' || '' }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Create .env file
run: |
echo "GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}" > .env
echo "GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}" >> .env
- name: Build macOS (unsigned)
if: vars.ENABLE_CODE_SIGNING != 'true'
run: pnpm run build:mac
- name: Build macOS (signed)
if: vars.ENABLE_CODE_SIGNING == 'true'
run: pnpm run build:mac
env:
CSC_LINK: ${{ secrets.APPLE_CERTIFICATE }}
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
- name: Upload macOS artifacts
uses: actions/upload-artifact@v4
with:
name: mac-builds
path: |
release/*.dmg
release/*.zip
retention-days: 5
build-linux:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Create .env file
run: |
echo "GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}" > .env
echo "GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}" >> .env
- name: Build Linux
run: pnpm run build:linux
- name: Upload Linux artifacts
uses: actions/upload-artifact@v4
with:
name: linux-builds
path: |
release/*.AppImage
release/*.deb
release/*.tar.gz
retention-days: 5
create-release:
needs: [build-windows, build-mac, build-linux]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Display structure of downloaded files
run: ls -R artifacts
- name: Create Release
uses: softprops/action-gh-release@v1
with:
draft: false
prerelease: false
generate_release_notes: true
files: |
artifacts/windows-builds/*
artifacts/mac-builds/*
artifacts/linux-builds/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}