docs: drop Q-SYS from README intro #110
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |