Full document, spreadsheet, slideshow, and diagram tooling
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request 'fix: Electron code signing and notarization with correct org secrets' (#188) from fix/electron-signing into main

scott edd812f9 e9d400ed

+25 -10
+8
CHANGELOG.md
··· 5 5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 6 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 7 8 + ## [0.15.2] — 2026-03-30 9 + 10 + ### Fixed 11 + - Fix Electron code signing: use correct org secret names for keychain unlock 12 + - Fix notarization: switch from Apple ID auth to App Store Connect API key auth 13 + 8 14 ## [Unreleased] 9 15 10 16 ## [0.14.1] — 2026-03-28 ··· 18 24 - Fix sheets chat input: keyboard handler no longer captures typing in AI chat sidebar (#233) 19 25 20 26 ### Changed 27 + - Electron thin client: auto-connect Tailnet backend (#261) 28 + - Wire up Apple notarization for Electron builds (#260) 21 29 - Monitor CI for PR #178, merge when green, verify deployment (#255) 22 30 - Electron desktop app wrapper (#254) 23 31 - Tailscale identity auth - zero-password login via TS headers (#253)
+16 -9
electron/notarize.cjs
··· 1 1 const { notarize } = require('@electron/notarize'); 2 + const fs = require('fs'); 3 + const path = require('path'); 2 4 3 5 exports.default = async function notarizing(context) { 4 6 const { electronPlatformName, appOutDir } = context; 5 7 if (electronPlatformName !== 'darwin') return; 6 8 7 - const appleId = process.env.APPLE_ID; 8 - const appleIdPassword = process.env.APPLE_APP_SPECIFIC_PASSWORD; 9 - const teamId = process.env.APPLE_TEAM_ID; 9 + const apiKeyId = process.env.APP_STORE_CONNECT_API_KEY_ID; 10 + const apiIssuerId = process.env.APP_STORE_CONNECT_API_ISSUER_ID; 11 + const apiKeyPath = process.env.APP_STORE_CONNECT_API_KEY_PATH; 12 + 13 + if (!apiKeyId || !apiIssuerId || !apiKeyPath) { 14 + console.log('Skipping notarization — missing APP_STORE_CONNECT_API_KEY_ID, APP_STORE_CONNECT_API_ISSUER_ID, or APP_STORE_CONNECT_API_KEY_PATH'); 15 + return; 16 + } 10 17 11 - if (!appleId || !appleIdPassword || !teamId) { 12 - console.log('Skipping notarization — missing APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, or APPLE_TEAM_ID'); 18 + if (!fs.existsSync(apiKeyPath)) { 19 + console.log(`Skipping notarization — API key file not found at ${apiKeyPath}`); 13 20 return; 14 21 } 15 22 16 23 const appName = context.packager.appInfo.productFilename; 17 - console.log(`Notarizing ${appName}...`); 24 + console.log(`Notarizing ${appName} via App Store Connect API key...`); 18 25 19 26 await notarize({ 20 27 appBundleId: 'tools.lobster-hake.ts.net', 21 28 appPath: `${appOutDir}/${appName}.app`, 22 - appleId, 23 - appleIdPassword, 24 - teamId, 29 + appleApiKey: apiKeyPath, 30 + appleApiKeyId: apiKeyId, 31 + appleApiIssuer: apiIssuerId, 25 32 }); 26 33 27 34 console.log('Notarization complete');
+1 -1
package.json
··· 1 1 { 2 2 "name": "tools", 3 - "version": "0.15.1", 3 + "version": "0.15.2", 4 4 "private": true, 5 5 "type": "module", 6 6 "main": "electron/main.js",