Release build integration
Summary: This is the immediate follow-up from the previous diff which aims to integrate the MacOS app into our release build script, meta only. Reviewed By: antonk52, aigoncharov Differential Revision: D50301369 fbshipit-source-id: 23a4842666c3a7aa9616c6237e16b71bae87ba36
This commit is contained in:
committed by
Facebook GitHub Bot
parent
9ab0e84b1b
commit
8a11043f37
@@ -36,6 +36,7 @@ import {homedir} from 'os';
|
|||||||
import {need as pkgFetch} from 'pkg-fetch';
|
import {need as pkgFetch} from 'pkg-fetch';
|
||||||
import {exec} from 'child_process';
|
import {exec} from 'child_process';
|
||||||
import fetch from '@adobe/node-fetch-retry';
|
import fetch from '@adobe/node-fetch-retry';
|
||||||
|
import plist from 'simple-plist';
|
||||||
|
|
||||||
// This needs to be tested individually. As of 2022Q2, node17 is not supported.
|
// This needs to be tested individually. As of 2022Q2, node17 is not supported.
|
||||||
const SUPPORTED_NODE_PLATFORM = 'node16';
|
const SUPPORTED_NODE_PLATFORM = 'node16';
|
||||||
@@ -458,11 +459,13 @@ async function buildServerRelease() {
|
|||||||
platforms.push(BuildPlatform.WINDOWS);
|
platforms.push(BuildPlatform.WINDOWS);
|
||||||
}
|
}
|
||||||
|
|
||||||
await Promise.all(
|
// Instead of parallel builds, these have to be done sequential.
|
||||||
platforms.map((platform) =>
|
// As we are building a native app, the resulting binary will be
|
||||||
bundleServerReleaseForPlatform(dir, versionNumber, platform),
|
// different per platform meaning that there's a risk of overriding
|
||||||
),
|
// intermediate artefacts if done in parallel.
|
||||||
);
|
for (const platform of platforms) {
|
||||||
|
await bundleServerReleaseForPlatform(dir, versionNumber, platform);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function nodeArchFromBuildPlatform(platform: BuildPlatform): string {
|
function nodeArchFromBuildPlatform(platform: BuildPlatform): string {
|
||||||
@@ -653,9 +656,11 @@ async function installNodeBinary(outputPath: string, platform: BuildPlatform) {
|
|||||||
platform === BuildPlatform.MAC_X64
|
platform === BuildPlatform.MAC_X64
|
||||||
) {
|
) {
|
||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
await setRuntimeAppIcon(outputPath);
|
await setRuntimeAppIcon(outputPath).catch(() => {
|
||||||
|
console.warn('⚠️ Unable to update runtime icon');
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
console.warn("⚠️ Skipping icon update as it's only supported on macOS.");
|
console.warn("⚠️ Skipping icon update as it's only supported on macOS");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -721,24 +726,62 @@ async function setUpWindowsBundle(outputDir: string) {
|
|||||||
|
|
||||||
async function setUpMacBundle(
|
async function setUpMacBundle(
|
||||||
outputDir: string,
|
outputDir: string,
|
||||||
|
platform: BuildPlatform,
|
||||||
versionNumber: string,
|
versionNumber: string,
|
||||||
): Promise<{nodePath: string; resourcesPath: string}> {
|
): Promise<{nodePath: string; resourcesPath: string}> {
|
||||||
console.log(`⚙️ Creating Mac bundle in ${outputDir}`);
|
console.log(`⚙️ Creating Mac bundle in ${outputDir}`);
|
||||||
await fs.copy(path.join(staticDir, 'flipper-server-app-template'), outputDir);
|
|
||||||
|
let appTemplate = path.join(staticDir, 'flipper-server-app-template');
|
||||||
|
if (isFB) {
|
||||||
|
appTemplate = path.join(
|
||||||
|
staticDir,
|
||||||
|
'facebook',
|
||||||
|
'flipper-server-app-template',
|
||||||
|
platform,
|
||||||
|
);
|
||||||
|
console.info('⚙️ Using internal template from: ' + appTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
await fs.copy(appTemplate, outputDir);
|
||||||
|
|
||||||
|
function replacePropertyValue(
|
||||||
|
obj: any,
|
||||||
|
targetValue: string,
|
||||||
|
replacementValue: string,
|
||||||
|
): any {
|
||||||
|
if (typeof obj === 'object' && !Array.isArray(obj) && obj !== null) {
|
||||||
|
for (const key in obj) {
|
||||||
|
if (obj.hasOwnProperty(key)) {
|
||||||
|
obj[key] = replacePropertyValue(
|
||||||
|
obj[key],
|
||||||
|
targetValue,
|
||||||
|
replacementValue,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (typeof obj === 'string' && obj === targetValue) {
|
||||||
|
obj = replacementValue;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
console.log(`⚙️ Writing plist`);
|
console.log(`⚙️ Writing plist`);
|
||||||
const pListPath = path.join(
|
const plistPath = path.join(
|
||||||
outputDir,
|
outputDir,
|
||||||
'Flipper.app',
|
'Flipper.app',
|
||||||
'Contents',
|
'Contents',
|
||||||
'Info.plist',
|
'Info.plist',
|
||||||
);
|
);
|
||||||
const pListContents = await fs.readFile(pListPath, 'utf-8');
|
|
||||||
const updatedPlistContents = pListContents.replace(
|
/* eslint-disable node/no-sync*/
|
||||||
|
const pListContents: Record<any, any> = plist.readFileSync(plistPath);
|
||||||
|
replacePropertyValue(
|
||||||
|
pListContents,
|
||||||
'{flipper-server-version}',
|
'{flipper-server-version}',
|
||||||
versionNumber,
|
versionNumber,
|
||||||
);
|
);
|
||||||
await fs.writeFile(pListPath, updatedPlistContents, 'utf-8');
|
plist.writeBinaryFileSync(plistPath, pListContents);
|
||||||
|
/* eslint-enable node/no-sync*/
|
||||||
|
|
||||||
const resourcesOutputDir = path.join(
|
const resourcesOutputDir = path.join(
|
||||||
outputDir,
|
outputDir,
|
||||||
@@ -747,6 +790,10 @@ async function setUpMacBundle(
|
|||||||
'Resources',
|
'Resources',
|
||||||
'server',
|
'server',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (!(await fs.exists(resourcesOutputDir))) {
|
||||||
|
await fs.mkdir(resourcesOutputDir);
|
||||||
|
}
|
||||||
const nodeOutputPath = path.join(
|
const nodeOutputPath = path.join(
|
||||||
outputDir,
|
outputDir,
|
||||||
'Flipper.app',
|
'Flipper.app',
|
||||||
@@ -780,7 +827,7 @@ async function bundleServerReleaseForPlatform(
|
|||||||
platform === BuildPlatform.MAC_X64 ||
|
platform === BuildPlatform.MAC_X64 ||
|
||||||
platform === BuildPlatform.MAC_AARCH64
|
platform === BuildPlatform.MAC_AARCH64
|
||||||
) {
|
) {
|
||||||
outputPaths = await setUpMacBundle(outputDir, versionNumber);
|
outputPaths = await setUpMacBundle(outputDir, platform, versionNumber);
|
||||||
} else if (platform === BuildPlatform.LINUX) {
|
} else if (platform === BuildPlatform.LINUX) {
|
||||||
await setUpLinuxBundle(outputDir);
|
await setUpLinuxBundle(outputDir);
|
||||||
} else if (platform === BuildPlatform.WINDOWS) {
|
} else if (platform === BuildPlatform.WINDOWS) {
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
"pkg-fetch": "3.4.1",
|
"pkg-fetch": "3.4.1",
|
||||||
"promisify-child-process": "^4.1.0",
|
"promisify-child-process": "^4.1.0",
|
||||||
"semver": "^7.5.4",
|
"semver": "^7.5.4",
|
||||||
|
"simple-plist": "^1.3.1",
|
||||||
"socket.io": "^4.5.0",
|
"socket.io": "^4.5.0",
|
||||||
"tar": "6.1.15",
|
"tar": "6.1.15",
|
||||||
"tmp": "^0.2.1",
|
"tmp": "^0.2.1",
|
||||||
|
|||||||
@@ -4781,6 +4781,11 @@
|
|||||||
"@typescript-eslint/types" "5.55.0"
|
"@typescript-eslint/types" "5.55.0"
|
||||||
eslint-visitor-keys "^3.3.0"
|
eslint-visitor-keys "^3.3.0"
|
||||||
|
|
||||||
|
"@xmldom/xmldom@^0.8.8":
|
||||||
|
version "0.8.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
|
||||||
|
integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
|
||||||
|
|
||||||
"@xobotyi/scrollbar-width@^1.9.5":
|
"@xobotyi/scrollbar-width@^1.9.5":
|
||||||
version "1.9.5"
|
version "1.9.5"
|
||||||
resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d"
|
resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d"
|
||||||
@@ -5713,6 +5718,11 @@ base@^0.11.1:
|
|||||||
mixin-deep "^1.2.0"
|
mixin-deep "^1.2.0"
|
||||||
pascalcase "^0.1.1"
|
pascalcase "^0.1.1"
|
||||||
|
|
||||||
|
big-integer@1.6.x:
|
||||||
|
version "1.6.51"
|
||||||
|
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
|
||||||
|
integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
|
||||||
|
|
||||||
bl@^1.0.0:
|
bl@^1.0.0:
|
||||||
version "1.2.3"
|
version "1.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7"
|
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7"
|
||||||
@@ -5787,6 +5797,20 @@ boxen@^5.0.0:
|
|||||||
widest-line "^3.1.0"
|
widest-line "^3.1.0"
|
||||||
wrap-ansi "^7.0.0"
|
wrap-ansi "^7.0.0"
|
||||||
|
|
||||||
|
bplist-creator@0.1.0:
|
||||||
|
version "0.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e"
|
||||||
|
integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==
|
||||||
|
dependencies:
|
||||||
|
stream-buffers "2.2.x"
|
||||||
|
|
||||||
|
bplist-parser@0.3.1:
|
||||||
|
version "0.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.1.tgz#e1c90b2ca2a9f9474cc72f6862bbf3fee8341fd1"
|
||||||
|
integrity sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==
|
||||||
|
dependencies:
|
||||||
|
big-integer "1.6.x"
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
@@ -12527,6 +12551,15 @@ plist@^3.0.1, plist@^3.0.4:
|
|||||||
base64-js "^1.5.1"
|
base64-js "^1.5.1"
|
||||||
xmlbuilder "^9.0.7"
|
xmlbuilder "^9.0.7"
|
||||||
|
|
||||||
|
plist@^3.0.5:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
|
||||||
|
integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==
|
||||||
|
dependencies:
|
||||||
|
"@xmldom/xmldom" "^0.8.8"
|
||||||
|
base64-js "^1.5.1"
|
||||||
|
xmlbuilder "^15.1.1"
|
||||||
|
|
||||||
posix-character-classes@^0.1.0:
|
posix-character-classes@^0.1.0:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
||||||
@@ -14289,6 +14322,15 @@ signal-exit@^3.0.3, signal-exit@^3.0.7:
|
|||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
|
||||||
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
|
||||||
|
|
||||||
|
simple-plist@^1.3.1:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017"
|
||||||
|
integrity sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==
|
||||||
|
dependencies:
|
||||||
|
bplist-creator "0.1.0"
|
||||||
|
bplist-parser "0.3.1"
|
||||||
|
plist "^3.0.5"
|
||||||
|
|
||||||
sisteransi@^1.0.4:
|
sisteransi@^1.0.4:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
|
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
|
||||||
@@ -14581,6 +14623,11 @@ stop-iteration-iterator@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
internal-slot "^1.0.4"
|
internal-slot "^1.0.4"
|
||||||
|
|
||||||
|
stream-buffers@2.2.x:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
|
||||||
|
integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==
|
||||||
|
|
||||||
string-convert@^0.2.0:
|
string-convert@^0.2.0:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
|
resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97"
|
||||||
@@ -15806,7 +15853,7 @@ xml-name-validator@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
|
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
|
||||||
integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
|
integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
|
||||||
|
|
||||||
xmlbuilder@>=11.0.1:
|
xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1:
|
||||||
version "15.1.1"
|
version "15.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
|
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
|
||||||
integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
|
integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
|
||||||
|
|||||||
Reference in New Issue
Block a user