mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-01-23 02:36:05 +00:00
105 lines
3.4 KiB
JavaScript
105 lines
3.4 KiB
JavaScript
// CURRENTLY NOT USED
|
|
|
|
const { existsSync } = require('fs');
|
|
const { join } = require('path');
|
|
const { notarize } = require('@electron/notarize');
|
|
const execCommand = require('./execCommand');
|
|
|
|
function isDesktopAppTag(tagName) {
|
|
if (!tagName) return false;
|
|
return tagName[0] === 'v';
|
|
}
|
|
|
|
async function myNotarize(params) {
|
|
console.log('Notarizing...', params);
|
|
console.log('Notarizing...');
|
|
console.log('---------------------------------');
|
|
|
|
if (process.platform !== 'darwin') return;
|
|
console.info('Checking if notarization should be done...');
|
|
//
|
|
// if (
|
|
// !process.env.IS_CONTINUOUS_INTEGRATION ||
|
|
// !isDesktopAppTag(process.env.GIT_TAG_NAME)
|
|
// ) {
|
|
// console.info(
|
|
// `Either not running in CI or not processing a desktop app tag - skipping notarization. process.env.IS_CONTINUOUS_INTEGRATION = ${process.env.IS_CONTINUOUS_INTEGRATION}; process.env.GIT_TAG_NAME = ${process.env.GIT_TAG_NAME}`,
|
|
// );
|
|
// return;
|
|
// }
|
|
|
|
if (!process.env.APPLEID || !process.env.APPLEIDPASS) {
|
|
console.warn(
|
|
'Environment variables APPLEID and APPLEIDPASS not found - notarization will NOT be done.',
|
|
);
|
|
return;
|
|
}
|
|
|
|
// Same appId in electron-builder.
|
|
const appId = 'superProductivity';
|
|
|
|
const appPath = join(
|
|
params.appOutDir,
|
|
`${params.packager.appInfo.productFilename}.app`,
|
|
);
|
|
if (!existsSync(appPath)) {
|
|
throw new Error(`Cannot find application at: ${appPath}`);
|
|
}
|
|
|
|
console.log(`Notarizing ${appId} found at ${appPath}`);
|
|
|
|
// Every x seconds we print something to stdout, otherwise CI may timeout
|
|
// the task after 10 minutes, and Apple notarization can take more time.
|
|
const waitingIntervalId = setInterval(() => {
|
|
console.log('.');
|
|
}, 60000);
|
|
|
|
try {
|
|
await notarize({
|
|
appBundleId: appId,
|
|
appPath: appPath,
|
|
|
|
// Apple Developer email address
|
|
appleId: process.env.APPLEID,
|
|
|
|
// App-specific password: https://support.apple.com/en-us/HT204397
|
|
appleIdPassword: process.env.APPLEIDPASS,
|
|
|
|
// When Apple ID is attached to multiple providers (eg if the
|
|
// account has been used to build multiple apps for different
|
|
// companies), in that case the provider "Team Short Name" (also
|
|
// known as "ProviderShortname") must be provided.
|
|
//
|
|
// Use this to get it:
|
|
//
|
|
// xcrun altool --list-providers -u APPLE_ID -p APPLE_ID_PASSWORD
|
|
// ascProvider: process.env.APPLE_ASC_PROVIDER,
|
|
|
|
// In our case, the team ID is the same as the legacy ASC_PROVIDER
|
|
teamId: '363FAFK383',
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
|
tool: 'notarytool',
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
process.exit(1);
|
|
}
|
|
|
|
clearInterval(waitingIntervalId);
|
|
|
|
// It appears that electron-notarize doesn't staple the app, but without
|
|
// this we were still getting the malware warning when launching the app.
|
|
// Stapling the app means attaching the notarization ticket to it, so that
|
|
// if the user is offline, macOS can still check if the app was notarized.
|
|
// So it seems to be more or less optional, but at least in our case it
|
|
// wasn't.
|
|
// console.log('Staple notarization ticket to the app...');
|
|
// const staplerCmd = `xcrun stapler staple "${appPath}"`;
|
|
// console.log(`> ${staplerCmd}`);
|
|
// console.log(await execCommand(staplerCmd));
|
|
|
|
console.log(`Done notarizing ${appId}`);
|
|
}
|
|
|
|
module.exports = myNotarize;
|