Add notarization to build script.

This commit is contained in:
John Preston 2019-04-19 15:40:42 +04:00
parent 72690ee106
commit 25471f3952
2 changed files with 140 additions and 23 deletions

View File

@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
bool BetaChannel = false; bool BetaChannel = false;
quint64 AlphaVersion = 0; quint64 AlphaVersion = 0;
bool OnlyAlphaKey = false;
const char *PublicKey = "\ const char *PublicKey = "\
-----BEGIN RSA PUBLIC KEY-----\n\ -----BEGIN RSA PUBLIC KEY-----\n\
@ -126,6 +127,21 @@ int32 *hashSha1(const void *data, uint32 len, void *dest) {
QString AlphaSignature; QString AlphaSignature;
int writeAlphaKey() {
if (!AlphaVersion) {
return 0;
}
QString keyName(QString("talpha_%1_key").arg(AlphaVersion));
QFile key(keyName);
if (!key.open(QIODevice::WriteOnly)) {
cout << "Can't open '" << keyName.toUtf8().constData() << "' for write..\n";
return -1;
}
key.write(AlphaSignature.toUtf8());
key.close();
return 0;
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QString workDir; QString workDir;
@ -146,6 +162,8 @@ int main(int argc, char *argv[])
version = QString(argv[i + 1]).toInt(); version = QString(argv[i + 1]).toInt();
} else if (string("-beta") == argv[i]) { } else if (string("-beta") == argv[i]) {
BetaChannel = true; BetaChannel = true;
} else if (string("-alphakey") == argv[i]) {
OnlyAlphaKey = true;
} else if (string("-alpha") == argv[i] && i + 1 < argc) { } else if (string("-alpha") == argv[i] && i + 1 < argc) {
AlphaVersion = QString(argv[i + 1]).toULongLong(); AlphaVersion = QString(argv[i + 1]).toULongLong();
if (AlphaVersion > version * 1000ULL && AlphaVersion < (version + 1) * 1000ULL) { if (AlphaVersion > version * 1000ULL && AlphaVersion < (version + 1) * 1000ULL) {
@ -160,6 +178,9 @@ int main(int argc, char *argv[])
} }
} }
} }
if (OnlyAlphaKey) {
return writeAlphaKey();
}
if (files.isEmpty() || remove.isEmpty() || version <= 1016 || version > 999999999) { if (files.isEmpty() || remove.isEmpty() || version <= 1016 || version > 999999999) {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
@ -464,20 +485,9 @@ int main(int argc, char *argv[])
out.write(compressed); out.write(compressed);
out.close(); out.close();
if (AlphaVersion) {
QString keyName(QString("talpha_%1_key").arg(AlphaVersion));
QFile key(keyName);
if (!key.open(QIODevice::WriteOnly)) {
cout << "Can't open '" << keyName.toUtf8().constData() << "' for write..\n";
return -1;
}
key.write(AlphaSignature.toUtf8());
key.close();
}
cout << "Update file '" << outName.toUtf8().constData() << "' written successfully!\n"; cout << "Update file '" << outName.toUtf8().constData() << "' written successfully!\n";
return 0; return writeAlphaKey();
} }
QString countAlphaVersionSignature(quint64 version) { // duplicated in autoupdater.cpp QString countAlphaVersionSignature(quint64 version) { // duplicated in autoupdater.cpp

View File

@ -62,6 +62,9 @@ elif [ "$BuildTarget" == "linux32" ]; then
BinaryName="Telegram" BinaryName="Telegram"
elif [ "$BuildTarget" == "mac" ]; then elif [ "$BuildTarget" == "mac" ]; then
echo "Building version $AppVersionStrFull for OS X 10.8+.." echo "Building version $AppVersionStrFull for OS X 10.8+.."
if [ "$AC_USERNAME" == "" ]; then
Error "AC_USERNAME not found!"
fi
UpdateFile="tmacupd$AppVersion" UpdateFile="tmacupd$AppVersion"
SetupFile="tsetup.$AppVersionStrFull.dmg" SetupFile="tsetup.$AppVersionStrFull.dmg"
ReleasePath="$HomePath/../out/Release" ReleasePath="$HomePath/../out/Release"
@ -86,10 +89,6 @@ fi
#if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ] || [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarget" == "macstore" ]; then #if [ "$BuildTarget" == "linux" ] || [ "$BuildTarget" == "linux32" ] || [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarget" == "macstore" ]; then
if [ "$AlphaVersion" != "0" ]; then if [ "$AlphaVersion" != "0" ]; then
if [ -f "$ReleasePath/$AlphaKeyFile" ]; then
Error "Alpha version key file for version $AppVersion already exists!"
fi
if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStrFull" ]; then if [ -d "$ReleasePath/deploy/$AppVersionStrMajor/$AppVersionStrFull" ]; then
Error "Deploy folder for version $AppVersionStrFull already exists!" Error "Deploy folder for version $AppVersionStrFull already exists!"
fi fi
@ -334,8 +333,8 @@ if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarg
echo "Done!" echo "Done!"
if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ]; then
cd "$ReleasePath"
if [ "$AlphaVersion" == "0" ]; then if [ "$AlphaVersion" == "0" ]; then
cd "$ReleasePath"
cp -f tsetup_template.dmg tsetup.temp.dmg cp -f tsetup_template.dmg tsetup.temp.dmg
TempDiskPath=`hdiutil attach -nobrowse -noautoopenrw -readwrite tsetup.temp.dmg | awk -F "\t" 'END {print $3}'` TempDiskPath=`hdiutil attach -nobrowse -noautoopenrw -readwrite tsetup.temp.dmg | awk -F "\t" 'END {print $3}'`
cp -R "./$BinaryName.app" "$TempDiskPath/" cp -R "./$BinaryName.app" "$TempDiskPath/"
@ -344,11 +343,10 @@ if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarg
hdiutil convert tsetup.temp.dmg -format UDZO -imagekey zlib-level=9 -ov -o "$SetupFile" hdiutil convert tsetup.temp.dmg -format UDZO -imagekey zlib-level=9 -ov -o "$SetupFile"
rm tsetup.temp.dmg rm tsetup.temp.dmg
fi fi
cd "$ReleasePath"
"./Packer" -path "$BinaryName.app" -target "$BuildTarget" -version $VersionForPacker $AlphaBetaParam
echo "Packer done!"
if [ "$AlphaVersion" != "0" ]; then if [ "$AlphaVersion" != "0" ]; then
"./Packer" -path "$BinaryName.app" -target "$BuildTarget" -version $VersionForPacker $AlphaBetaParam -alphakey
if [ ! -f "$ReleasePath/$AlphaKeyFile" ]; then if [ ! -f "$ReleasePath/$AlphaKeyFile" ]; then
Error "Alpha version key file not found!" Error "Alpha version key file not found!"
fi fi
@ -359,9 +357,90 @@ if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarg
UpdateFile="${UpdateFile}_${AlphaSignature}" UpdateFile="${UpdateFile}_${AlphaSignature}"
SetupFile="talpha${AlphaVersion}_${AlphaSignature}.zip" SetupFile="talpha${AlphaVersion}_${AlphaSignature}.zip"
rm -rf "$ReleasePath/AlphaTemp"
mkdir "$ReleasePath/AlphaTemp"
mkdir "$ReleasePath/AlphaTemp/$BinaryName"
cp -r "$ReleasePath/$BinaryName.app" "$ReleasePath/AlphaTemp/$BinaryName/"
cd "$ReleasePath/AlphaTemp"
zip -r "$SetupFile" "$BinaryName"
mv "$SetupFile" "$ReleasePath/"
cd "$ReleasePath"
fi
if [ "$BuildTarget" == "mac" ]; then
echo "Beginning notarization process."
xcrun altool --notarize-app --primary-bundle-id "com.tdesktop.Telegram" --username "$AC_USERNAME" --password "@keychain:AC_PASSWORD" --file "$SetupFile" 2> request_uuid.txt
while IFS='' read -r line || [[ -n "$line" ]]; do
Prefix=$(echo $line | cut -d' ' -f 1)
Value=$(echo $line | cut -d' ' -f 3)
if [ "$Prefix" == "RequestUUID" ]; then
RequestUUID=$Value
fi
done < "request_uuid.txt"
if [ "$RequestUUID" == "" ]; then
Error "Could not extract Request UUID. See request_uuid.txt for more information."
fi
echo "Request UUID: $RequestUUID"
rm request_uuid.txt
RequestStatus=
LogFile=
while [[ "$RequestStatus" == "" ]]; do
sleep 5
xcrun altool --notarization-info "$RequestUUID" --username "$AC_USERNAME" --password "@keychain:AC_PASSWORD" 2> request_result.txt
while IFS='' read -r line || [[ -n "$line" ]]; do
Prefix=$(echo $line | cut -d' ' -f 1)
Value=$(echo $line | cut -d' ' -f 2)
if [ "$Prefix" == "LogFileURL:" ]; then
LogFile=$Value
fi
if [ "$Prefix" == "Status:" ]; then
if [ "$Value" == "in" ]; then
echo "In progress..."
else
RequestStatus=$Value
echo "Status: $RequestStatus"
fi
fi
done < "request_result.txt"
done
if [ "$RequestStatus" != "success" ]; then
echo "Notarization problems, response:"
cat request_result.txt
if [ "$LogFile" != "" ]; then
echo "Requesting log..."
curl $LogFile
fi
Error "Notarization FAILED."
fi
rm request_result.txt
if [ "$LogFile" != "" ]; then
echo "Requesting log..."
curl $LogFile > request_log.txt
fi
xcrun stapler staple "$ReleasePath/$BinaryName.app"
if [ "$AlphaVersion" != "0" ]; then
rm -rf "$ReleasePath/AlphaTemp"
mkdir "$ReleasePath/AlphaTemp"
mkdir "$ReleasePath/AlphaTemp/$BinaryName"
cp -r "$ReleasePath/$BinaryName.app" "$ReleasePath/AlphaTemp/$BinaryName/"
cd "$ReleasePath/AlphaTemp"
zip -r "$SetupFile" "$BinaryName"
mv "$SetupFile" "$ReleasePath/"
cd "$ReleasePath"
echo "Alpha archive re-created."
else
xcrun stapler staple "$ReleasePath/$SetupFile"
fi
fi fi
fi fi
"./Packer" -path "$BinaryName.app" -target "$BuildTarget" -version $VersionForPacker $AlphaBetaParam
echo "Packer done!"
if [ ! -d "$ReleasePath/deploy" ]; then if [ ! -d "$ReleasePath/deploy" ]; then
mkdir "$ReleasePath/deploy" mkdir "$ReleasePath/deploy"
fi fi
@ -376,9 +455,6 @@ if [ "$BuildTarget" == "mac" ] || [ "$BuildTarget" == "mac32" ] || [ "$BuildTarg
mkdir "$DeployPath/$BinaryName" mkdir "$DeployPath/$BinaryName"
cp -r "$ReleasePath/$BinaryName.app" "$DeployPath/$BinaryName/" cp -r "$ReleasePath/$BinaryName.app" "$DeployPath/$BinaryName/"
if [ "$AlphaVersion" != "0" ]; then if [ "$AlphaVersion" != "0" ]; then
cd "$DeployPath"
zip -r "$SetupFile" "$BinaryName"
mv "$SetupFile" "$ReleasePath/"
mv "$ReleasePath/$AlphaKeyFile" "$DeployPath/" mv "$ReleasePath/$AlphaKeyFile" "$DeployPath/"
fi fi
mv "$ReleasePath/$BinaryName.app.dSYM" "$DeployPath/" mv "$ReleasePath/$BinaryName.app.dSYM" "$DeployPath/"
@ -423,3 +499,34 @@ sleep 1;
echo -en "\007"; echo -en "\007";
sleep 1; sleep 1;
echo -en "\007"; echo -en "\007";
if [ "$BuildTarget" == "mac" ]; then
if [ -f "$ReleasePath/request_log.txt" ]; then
DisplayingLog=
while IFS='' read -r line || [[ -n "$line" ]]; do
if [ "$DisplayingLog" == "1" ]; then
echo $line
else
Prefix=$(echo $line | cut -d' ' -f 1)
Value=$(echo $line | cut -d' ' -f 2)
if [ "$Prefix" == '"issues":' ]; then
if [ "$Value" != "null" ]; then
echo "NB! Notarization log issues:"
echo $line
DisplayingLog=1
else
DisplayingLog=0
fi
fi
fi
done < "$ReleasePath/request_log.txt"
if [ "$DisplayingLog" != "0" ] && [ "$DisplayingLog" != "1" ]; then
echo "NB! Notarization issues not found:"
cat "$ReleasePath/request_log.txt"
else
rm "$ReleasePath/request_log.txt"
fi
else
echo "NB! Notarization log not found :("
fi
fi