Merge pull request #13688 from vector-im/jryans/rm-electron-scripts
Remove Electron packaging scriptspull/13704/head
commit
96a550b88a
|
@ -1,170 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
echo "Usage: $0 -v <version> -d <config directory> [-n]"
|
|
||||||
echo
|
|
||||||
echo "version: commit-ish to check out and build"
|
|
||||||
echo "config directory: a path to a directory containing"
|
|
||||||
echo "config.json, a json config file to ship with the build"
|
|
||||||
echo "and env.sh, a file to source environment variables"
|
|
||||||
echo "from."
|
|
||||||
echo "-n: build with no config file."
|
|
||||||
echo
|
|
||||||
echo "The update_base_url value from config.json is used to set up auto-update."
|
|
||||||
echo
|
|
||||||
echo "Environment variables:"
|
|
||||||
echo " OSSLSIGNCODE_SIGNARGS: Arguments to pass to osslsigncode when signing"
|
|
||||||
echo " NOTARIZE_APPLE_ID: Apple ID to use for notarisation. The password for"
|
|
||||||
echo " this account must be set in NOTARIZE_CREDS in the keychain."
|
|
||||||
}
|
|
||||||
|
|
||||||
confdir=
|
|
||||||
version=
|
|
||||||
skipcfg=0
|
|
||||||
while getopts "d:v:n" opt; do
|
|
||||||
case $opt in
|
|
||||||
d)
|
|
||||||
confdir=$OPTARG
|
|
||||||
;;
|
|
||||||
v)
|
|
||||||
version=$OPTARG
|
|
||||||
;;
|
|
||||||
n)
|
|
||||||
skipcfg=1
|
|
||||||
;;
|
|
||||||
\?)
|
|
||||||
echo "Invalid option: -$OPTARG" >&2
|
|
||||||
usage
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$version" ]; then
|
|
||||||
echo "No version supplied"
|
|
||||||
usage
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
conffile="$confdir/config.json"
|
|
||||||
|
|
||||||
if [ -z "$conffile" ] && [ "$skipcfg" = 0 ]; then
|
|
||||||
echo "No config file given. Use -c to supply a config file or"
|
|
||||||
echo "-n to build with no config file (and no auto update)."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$conffile" ]; then
|
|
||||||
update_base_url=`jq -r .update_base_url $conffile`
|
|
||||||
|
|
||||||
if [ -z "$update_base_url" ]; then
|
|
||||||
echo "No update URL supplied. Use update_base_url: null if you really"
|
|
||||||
echo "want a build with no auto-update."
|
|
||||||
usage
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
# Make sure the base URL ends in a slash if it doesn't already
|
|
||||||
update_base_url=`echo $update_base_url | sed -e 's#\([^\/]\)$#\1\/#'`
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f package.json ]; then
|
|
||||||
echo "No package.json found. This script must be run from"
|
|
||||||
echo "the riot-web directory."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -f "$confdir/env.sh" ] && . "$confdir/env.sh"
|
|
||||||
|
|
||||||
if [ -z "$NOTARIZE_APPLE_ID" ]; then
|
|
||||||
echo "NOTARIZE_APPLE_ID is not set"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
osslsigncode -h 2> /dev/null
|
|
||||||
if [ $? -ne 255 ]; then # osslsigncode exits with 255 after printing usage...
|
|
||||||
echo "osslsigncode not found"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Test that altool can get its credentials for notarising the mac app
|
|
||||||
xcrun altool -u "$NOTARIZE_APPLE_ID" -p '@keychain:NOTARIZE_CREDS' --list-apps || exit
|
|
||||||
|
|
||||||
# Get the token password: we'll need it later, but get it now so we fail early if it's not there
|
|
||||||
token_password=`security find-generic-password -s riot_signing_token -w`
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "riot_signing_token not found in keychain"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
echo "Building $version using Update base URL $update_base_url"
|
|
||||||
|
|
||||||
projdir=`pwd`
|
|
||||||
builddir=`mktemp -d 2>/dev/null || mktemp -d -t 'buildtmp'`
|
|
||||||
pushd "$builddir"
|
|
||||||
|
|
||||||
git clone "$projdir" .
|
|
||||||
git checkout "$version"
|
|
||||||
|
|
||||||
# Figure out what version we're building
|
|
||||||
vername=`jq -r .version package.json`
|
|
||||||
|
|
||||||
if [ -n "$conffile" ]; then
|
|
||||||
popd
|
|
||||||
cp "$conffile" "$builddir/"
|
|
||||||
pushd "$builddir"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# We use Git branch / commit dependencies for some packages, and Yarn seems
|
|
||||||
# to have a hard time getting that right. See also
|
|
||||||
# https://github.com/yarnpkg/yarn/issues/4734. As a workaround, we clean the
|
|
||||||
# global cache here to ensure we get the right thing.
|
|
||||||
yarn cache clean
|
|
||||||
yarn install
|
|
||||||
yarn build:electron
|
|
||||||
|
|
||||||
popd
|
|
||||||
|
|
||||||
distdir="$builddir/electron_app/dist"
|
|
||||||
pubdir="$projdir/electron_app/pub"
|
|
||||||
rm -r "$pubdir" || true
|
|
||||||
mkdir -p "$pubdir"
|
|
||||||
rm -r "$projdir/electron_app/dist" || true
|
|
||||||
mkdir -p "$projdir/electron_app/dist"
|
|
||||||
|
|
||||||
# Install packages: what the user downloads the first time,
|
|
||||||
# (DMGs for mac, exe installer for windows)
|
|
||||||
mkdir -p "$pubdir/install/macos"
|
|
||||||
cp $distdir/*.dmg "$pubdir/install/macos/"
|
|
||||||
|
|
||||||
mkdir -p "$pubdir/install/win32/ia32/"
|
|
||||||
cp $distdir/squirrel-windows-ia32/*.exe "$pubdir/install/win32/ia32/"
|
|
||||||
|
|
||||||
mkdir -p "$pubdir/install/win32/x64/"
|
|
||||||
cp $distdir/squirrel-windows/*.exe "$pubdir/install/win32/x64/"
|
|
||||||
|
|
||||||
# Packages for auto-update
|
|
||||||
mkdir -p "$pubdir/update/macos"
|
|
||||||
cp $distdir/*-mac.zip "$pubdir/update/macos/"
|
|
||||||
echo "$vername" > "$pubdir/update/macos/latest"
|
|
||||||
|
|
||||||
mkdir -p "$pubdir/update/win32/ia32/"
|
|
||||||
cp $distdir/squirrel-windows-ia32/*.nupkg "$pubdir/update/win32/ia32/"
|
|
||||||
cp $distdir/squirrel-windows-ia32/RELEASES "$pubdir/update/win32/ia32/"
|
|
||||||
|
|
||||||
mkdir -p "$pubdir/update/win32/x64/"
|
|
||||||
cp $distdir/squirrel-windows/*.nupkg "$pubdir/update/win32/x64/"
|
|
||||||
cp $distdir/squirrel-windows/RELEASES "$pubdir/update/win32/x64/"
|
|
||||||
|
|
||||||
# Move the deb to the main project dir's dist folder
|
|
||||||
# (just the 64 bit one - the 32 bit one still gets built because
|
|
||||||
# it's one arch argument for all platforms and we still want 32 bit
|
|
||||||
# windows, but 32 bit linux is unsupported as of electron 4 and no
|
|
||||||
# longer appears to work).
|
|
||||||
cp $distdir/*_amd64.deb "$projdir/electron_app/dist/"
|
|
||||||
|
|
||||||
rm -rf "$builddir"
|
|
||||||
|
|
||||||
echo "$pubdir can now be hosted on your web server."
|
|
||||||
echo "deb archives are in electron_app/dist/ - these should be added into your debian repository"
|
|
|
@ -1,30 +0,0 @@
|
||||||
const { notarize } = require('electron-notarize');
|
|
||||||
|
|
||||||
exports.default = async function(context) {
|
|
||||||
const { electronPlatformName, appOutDir } = context;
|
|
||||||
|
|
||||||
if (electronPlatformName === 'darwin') {
|
|
||||||
const appName = context.packager.appInfo.productFilename;
|
|
||||||
// We get the password from keychain. The keychain stores
|
|
||||||
// user IDs too, but apparently altool can't get the user ID
|
|
||||||
// from the keychain, so we need to get it from the environment.
|
|
||||||
const userId = process.env.NOTARIZE_APPLE_ID;
|
|
||||||
if (userId === undefined) {
|
|
||||||
console.warn(
|
|
||||||
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
|
|
||||||
"! Skipping macOS notarisation. !\n" +
|
|
||||||
"! User ID not found, set NOTARIZE_APPLE_ID. !\n" +
|
|
||||||
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log("Notarising macOS app. This may be some time.");
|
|
||||||
return await notarize({
|
|
||||||
appBundleId: 'im.riot.app',
|
|
||||||
appPath: `${appOutDir}/${appName}.app`,
|
|
||||||
appleId: userId,
|
|
||||||
appleIdPassword: '@keychain:NOTARIZE_CREDS',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,77 +0,0 @@
|
||||||
const { exec, execFile } = require('child_process');
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
const shellescape = require('shell-escape');
|
|
||||||
|
|
||||||
exports.default = async function(options) {
|
|
||||||
const inPath = options.path;
|
|
||||||
const appOutDir = path.dirname(inPath);
|
|
||||||
|
|
||||||
// get the token passphrase from the keychain
|
|
||||||
let tokenPassphrase;
|
|
||||||
try {
|
|
||||||
tokenPassphrase = await new Promise((resolve, reject) => {
|
|
||||||
execFile(
|
|
||||||
'security',
|
|
||||||
['find-generic-password', '-s', 'riot_signing_token', '-w'],
|
|
||||||
{},
|
|
||||||
(err, stdout) => {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
} else {
|
|
||||||
resolve(stdout.trim());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
console.warn(
|
|
||||||
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" +
|
|
||||||
"! Skipping Windows signing. !\n" +
|
|
||||||
"! Signing token not found in keychain. !\n" +
|
|
||||||
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let cmdLine = 'osslsigncode sign ';
|
|
||||||
if (process.env.OSSLSIGNCODE_SIGNARGS) {
|
|
||||||
cmdLine += process.env.OSSLSIGNCODE_SIGNARGS + ' ';
|
|
||||||
}
|
|
||||||
const tmpFile = path.join(
|
|
||||||
appOutDir,
|
|
||||||
'tmp_' + Math.random().toString(36).substring(2, 15) + '.exe',
|
|
||||||
);
|
|
||||||
const args = [
|
|
||||||
'-h', options.hash,
|
|
||||||
'-pass', tokenPassphrase,
|
|
||||||
'-in', inPath,
|
|
||||||
'-out', tmpFile,
|
|
||||||
];
|
|
||||||
if (options.isNest) args.push('-nest');
|
|
||||||
cmdLine += shellescape(args);
|
|
||||||
|
|
||||||
let signStdout;
|
|
||||||
const signproc = exec(cmdLine, {}, (error, stdout) => {
|
|
||||||
signStdout = stdout;
|
|
||||||
});
|
|
||||||
signproc.on('exit', (code) => {
|
|
||||||
if (code !== 0) {
|
|
||||||
console.log("Running", cmdLine);
|
|
||||||
console.log(signStdout);
|
|
||||||
console.error("osslsigncode failed with code " + code);
|
|
||||||
reject("osslsigncode failed with code " + code);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
fs.rename(tmpFile, inPath, (err) => {
|
|
||||||
if (err) {
|
|
||||||
console.error("Error renaming file", err);
|
|
||||||
reject(err);
|
|
||||||
} else {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
Loading…
Reference in New Issue