cli: universal support for CI template
This commit is contained in:
parent
4832e932ce
commit
cf68288232
4 changed files with 85 additions and 14 deletions
|
@ -57,11 +57,6 @@ jobs:
|
||||||
- host: macos-latest
|
- host: macos-latest
|
||||||
target: 'aarch64-apple-darwin'
|
target: 'aarch64-apple-darwin'
|
||||||
build: |
|
build: |
|
||||||
sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/*;
|
|
||||||
export CC=$(xcrun -f clang);
|
|
||||||
export CXX=$(xcrun -f clang++);
|
|
||||||
SYSROOT=$(xcrun --sdk macosx --show-sdk-path);
|
|
||||||
export CFLAGS="-isysroot $SYSROOT -isystem $SYSROOT";
|
|
||||||
yarn build --target aarch64-apple-darwin
|
yarn build --target aarch64-apple-darwin
|
||||||
strip -x *.node
|
strip -x *.node
|
||||||
- host: ubuntu-latest
|
- host: ubuntu-latest
|
||||||
|
@ -512,6 +507,52 @@ jobs:
|
||||||
yarn test
|
yarn test
|
||||||
ls -la
|
ls -la
|
||||||
|
|
||||||
|
universal-macOS:
|
||||||
|
name: Build universal macOS binary
|
||||||
|
needs:
|
||||||
|
- build
|
||||||
|
runs-on: macos-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
check-latest: true
|
||||||
|
cache: yarn
|
||||||
|
|
||||||
|
- name: Cache NPM dependencies
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: .yarn/cache
|
||||||
|
key: npm-cache-test-x86_64-apple-darwin-16-\${{ hashFiles('yarn.lock') }}
|
||||||
|
|
||||||
|
- name: 'Install dependencies'
|
||||||
|
run: yarn install
|
||||||
|
|
||||||
|
- name: Download macOS x64 artifact
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: bindings-x86_64-apple-darwin
|
||||||
|
path: artifacts
|
||||||
|
- name: Download macOS arm64 artifact
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: bindings-aarch64-apple-darwin
|
||||||
|
path: artifacts
|
||||||
|
|
||||||
|
- name: Combine binaries
|
||||||
|
run: yarn universal
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: bindings-universal-apple-darwin
|
||||||
|
path: \${{ env.APP_NAME }}.*.node
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
name: Publish
|
name: Publish
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import { load, dump } from 'js-yaml'
|
import { load, dump } from 'js-yaml'
|
||||||
|
|
||||||
|
import { NodeArchToCpu, UniArchsByPlatform, parseTriple } from '../parse-triple'
|
||||||
|
|
||||||
import { YAML } from './ci-template'
|
import { YAML } from './ci-template'
|
||||||
|
|
||||||
const BUILD_FREEBSD = 'build-freebsd'
|
const BUILD_FREEBSD = 'build-freebsd'
|
||||||
|
@ -9,25 +11,39 @@ const TEST_LINUX_X64_MUSL = 'test-linux-x64-musl-binding'
|
||||||
const TEST_LINUX_AARCH64_GNU = 'test-linux-aarch64-gnu-binding'
|
const TEST_LINUX_AARCH64_GNU = 'test-linux-aarch64-gnu-binding'
|
||||||
const TEST_LINUX_AARCH64_MUSL = 'test-linux-aarch64-musl-binding'
|
const TEST_LINUX_AARCH64_MUSL = 'test-linux-aarch64-musl-binding'
|
||||||
const TEST_LINUX_ARM_GNUEABIHF = 'test-linux-arm-gnueabihf-binding'
|
const TEST_LINUX_ARM_GNUEABIHF = 'test-linux-arm-gnueabihf-binding'
|
||||||
|
const UNIVERSAL_MACOS = 'universal-macOS'
|
||||||
|
|
||||||
export const createGithubActionsCIYml = (
|
export const createGithubActionsCIYml = (
|
||||||
binaryName: string,
|
binaryName: string,
|
||||||
targets: string[],
|
targets: string[],
|
||||||
) => {
|
) => {
|
||||||
|
const allTargets = new Set(
|
||||||
|
targets.flatMap((t) => {
|
||||||
|
const platform = parseTriple(t)
|
||||||
|
if (platform.arch === 'universal') {
|
||||||
|
const srcTriples = UniArchsByPlatform[platform.platform]?.map((arch) =>
|
||||||
|
t.replace('universal', NodeArchToCpu[arch]),
|
||||||
|
)
|
||||||
|
return [t, ...(srcTriples ?? [])]
|
||||||
|
}
|
||||||
|
return [t]
|
||||||
|
}),
|
||||||
|
)
|
||||||
const fullTemplate = load(YAML(binaryName)) as any
|
const fullTemplate = load(YAML(binaryName)) as any
|
||||||
const requiredSteps = []
|
const requiredSteps = []
|
||||||
const enableWindowsX86 = targets.includes('x86_64-pc-windows-msvc')
|
const enableWindowsX86 = allTargets.has('x86_64-pc-windows-msvc')
|
||||||
const enableMacOSX86 = targets.includes('x86_64-apple-darwin')
|
const enableMacOSX86 = allTargets.has('x86_64-apple-darwin')
|
||||||
const enableLinuxX86Gnu = targets.includes('x86_64-unknown-linux-gnu')
|
const enableLinuxX86Gnu = allTargets.has('x86_64-unknown-linux-gnu')
|
||||||
const enableLinuxX86Musl = targets.includes('x86_64-unknown-linux-musl')
|
const enableLinuxX86Musl = allTargets.has('x86_64-unknown-linux-musl')
|
||||||
const enableLinuxArm8Gnu = targets.includes('aarch64-unknown-linux-gnu')
|
const enableLinuxArm8Gnu = allTargets.has('aarch64-unknown-linux-gnu')
|
||||||
const enableLinuxArm8Musl = targets.includes('aarch64-unknown-linux-musl')
|
const enableLinuxArm8Musl = allTargets.has('aarch64-unknown-linux-musl')
|
||||||
const enableLinuxArm7 = targets.includes('armv7-unknown-linux-gnueabihf')
|
const enableLinuxArm7 = allTargets.has('armv7-unknown-linux-gnueabihf')
|
||||||
const enableFreeBSD = targets.includes('x86_64-unknown-freebsd')
|
const enableFreeBSD = allTargets.has('x86_64-unknown-freebsd')
|
||||||
|
const enableMacOSUni = allTargets.has('universal-apple-darwin')
|
||||||
fullTemplate.env.APP_NAME = binaryName
|
fullTemplate.env.APP_NAME = binaryName
|
||||||
fullTemplate.jobs.build.strategy.matrix.settings =
|
fullTemplate.jobs.build.strategy.matrix.settings =
|
||||||
fullTemplate.jobs.build.strategy.matrix.settings.filter(
|
fullTemplate.jobs.build.strategy.matrix.settings.filter(
|
||||||
({ target }: { target: string }) => targets.includes(target),
|
({ target }: { target: string }) => allTargets.has(target),
|
||||||
)
|
)
|
||||||
if (!fullTemplate.jobs.build.strategy.matrix.settings.length) {
|
if (!fullTemplate.jobs.build.strategy.matrix.settings.length) {
|
||||||
delete fullTemplate.jobs.build.strategy.matrix
|
delete fullTemplate.jobs.build.strategy.matrix
|
||||||
|
@ -81,6 +97,12 @@ export const createGithubActionsCIYml = (
|
||||||
requiredSteps.push(TEST_LINUX_ARM_GNUEABIHF)
|
requiredSteps.push(TEST_LINUX_ARM_GNUEABIHF)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!enableMacOSUni) {
|
||||||
|
delete fullTemplate.jobs[UNIVERSAL_MACOS]
|
||||||
|
} else {
|
||||||
|
requiredSteps.push(UNIVERSAL_MACOS)
|
||||||
|
}
|
||||||
|
|
||||||
fullTemplate.jobs.publish.needs = requiredSteps
|
fullTemplate.jobs.publish.needs = requiredSteps
|
||||||
|
|
||||||
return dump(fullTemplate, {
|
return dump(fullTemplate, {
|
||||||
|
|
|
@ -31,6 +31,7 @@ export const createPackageJson = (
|
||||||
'build:debug': 'napi build --platform',
|
'build:debug': 'napi build --platform',
|
||||||
prepublishOnly: 'napi prepublish -t npm',
|
prepublishOnly: 'napi prepublish -t npm',
|
||||||
test: 'ava',
|
test: 'ava',
|
||||||
|
universal: 'napi universal',
|
||||||
version: 'napi version',
|
version: 'napi version',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,13 @@ const CpuToNodeArch: { [index: string]: NodeJSArch } = {
|
||||||
armv7: 'arm',
|
armv7: 'arm',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const NodeArchToCpu: { [index: string]: string } = {
|
||||||
|
x64: 'x86_64',
|
||||||
|
arm64: 'aarch64',
|
||||||
|
ia32: 'i686',
|
||||||
|
arm: 'armv7',
|
||||||
|
}
|
||||||
|
|
||||||
const SysToNodePlatform: { [index: string]: NodeJS.Platform } = {
|
const SysToNodePlatform: { [index: string]: NodeJS.Platform } = {
|
||||||
linux: 'linux',
|
linux: 'linux',
|
||||||
freebsd: 'freebsd',
|
freebsd: 'freebsd',
|
||||||
|
|
Loading…
Reference in a new issue