Skip to content

docs: drop Q-SYS from README intro #110

docs: drop Q-SYS from README intro

docs: drop Q-SYS from README intro #110

Workflow file for this run

name: Build
on:
push:
branches:
- main
- master
tags:
- 'v*'
pull_request:
branches:
- main
- master
workflow_dispatch:
jobs:
build-macos:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Clean up problematic Icon files
run: |
# Some repos can accidentally contain a macOS Finder icon file named "Icon" with a carriage return ("Icon\r"),
# which breaks checkout/builds on some runners. Remove ONLY those problematic paths.
python3 - <<'PY'
import os
import subprocess
out = subprocess.check_output(["git", "ls-files", "-z"])
paths = out.decode("utf-8", "surrogateescape").split("\0")
bad = []
for p in paths:
if not p:
continue
base = os.path.basename(p)
# Typical problematic cases: "Icon" or "Icon\r" (Finder)
if "\r" in p or base == "Icon" or base == "Icon\r":
# Never remove our app icon assets
if p.startswith("build/icon."):
continue
bad.append(p)
if bad:
for p in bad:
subprocess.run(["git", "rm", "--cached", p], check=False)
PY
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'yarn'
- name: Install dependencies
run: yarn install --immutable
- name: Download cloudflared (bundled for Quick Tunnel)
run: yarn download:cloudflared
- name: Set version
id: version
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
- name: Build macOS app (arm64 + x64, unsigned)
run: yarn build:mac
env:
ELECTRON_BUILDER_CACHE: ${{ runner.temp }}/electron-builder-cache
- name: Sign and zip macOS arm64
run: |
APP_PATH="dist/mac-arm64/Google Slides Opener.app"
if [ ! -d "$APP_PATH" ]; then
echo "ERROR: App not found at $APP_PATH"
ls -la dist/
exit 1
fi
echo "Removing quarantine (app root only; -r hits symlinks in Electron)..."
xattr -c "$APP_PATH" 2>/dev/null || true
echo "Signing nested frameworks and helpers (hardened runtime)..."
find "$APP_PATH" -name "*.framework" -exec codesign --force --sign - --options=runtime {} \;
find "$APP_PATH" -name "*Helper*.app" -exec codesign --force --sign - --options=runtime {} \;
echo "Ad-hoc signing main app (hardened runtime + entitlements)..."
codesign --force --deep --sign - --entitlements entitlements.mac.plist --options=runtime "$APP_PATH"
codesign --verify --verbose "$APP_PATH"
cd dist/mac-arm64
ditto -c -k --keepParent "Google Slides Opener.app" "../Google Slides Opener-${{ steps.version.outputs.version }}-arm64-mac.zip"
cd ../..
- name: Sign and zip macOS x64
run: |
# electron-builder may output x64 as "mac" or "mac-x64"
for dir in dist/mac-x64 dist/mac; do
if [ -d "$dir/Google Slides Opener.app" ]; then
APP_PATH="$dir/Google Slides Opener.app"
echo "Found x64 app at $dir"
echo "Removing quarantine (app root only; -r hits symlinks in Electron)..."
xattr -c "$APP_PATH" 2>/dev/null || true
echo "Signing nested frameworks and helpers (hardened runtime)..."
find "$APP_PATH" -name "*.framework" -exec codesign --force --sign - --options=runtime {} \;
find "$APP_PATH" -name "*Helper*.app" -exec codesign --force --sign - --options=runtime {} \;
echo "Ad-hoc signing main app (hardened runtime + entitlements)..."
codesign --force --deep --sign - --entitlements entitlements.mac.plist --options=runtime "$APP_PATH"
codesign --verify --verbose "$APP_PATH"
cd "$dir"
ditto -c -k --keepParent "Google Slides Opener.app" "../Google Slides Opener-${{ steps.version.outputs.version }}-x64-mac.zip"
cd ../..
break
fi
done
if [ ! -f "dist/Google Slides Opener-"*"-x64-mac.zip" ]; then
echo "ERROR: x64 zip was not created"
ls -la dist/
exit 1
fi
- name: Checkout Companion Module
uses: actions/checkout@v4
with:
repository: bitfocus/companion-module-google-slidescontroller
path: companion-module-google-slidescontroller
- name: Install Companion Module dependencies
run: corepack enable && yarn install --immutable
working-directory: ./companion-module-google-slidescontroller
- name: Package Companion Module
run: yarn run package
working-directory: ./companion-module-google-slidescontroller
- name: Move companion module package to root
run: mv companion-module-google-slidescontroller/*.tgz companion-module-gslide-opener.tgz || true
- name: Upload macOS arm64 artifact
uses: actions/upload-artifact@v4
with:
name: gslide-opener-macos-arm64-zip
path: dist/Google Slides Opener-*-arm64-mac.zip
retention-days: 30
- name: Upload macOS x64 artifact
uses: actions/upload-artifact@v4
with:
name: gslide-opener-macos-x64-zip
path: dist/Google Slides Opener-*-x64-mac.zip
retention-days: 30
- name: Upload Companion Module artifact
uses: actions/upload-artifact@v4
with:
name: companion-module-gslide-opener
path: companion-module-gslide-opener.tgz
retention-days: 30
if-no-files-found: warn
release:
needs: [build-macos]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
steps:
- name: Download macOS arm64 artifact
uses: actions/download-artifact@v4
with:
name: gslide-opener-macos-arm64-zip
path: artifacts/macos-arm64
- name: Download macOS x64 artifact
uses: actions/download-artifact@v4
with:
name: gslide-opener-macos-x64-zip
path: artifacts/macos-x64
- name: Download Companion Module artifact
uses: actions/download-artifact@v4
with:
name: companion-module-gslide-opener
path: artifacts/companion
- name: Create Release
uses: softprops/action-gh-release@v2.6.1
with:
# v1 did not replace same-named assets; retagging/rebuilding hits GitHub 422 already_exists.
overwrite_files: true
files: |
artifacts/macos-arm64/*.zip
artifacts/macos-x64/*.zip
artifacts/companion/*.tgz
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}