feat: macOS NAPI #50
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Canvas Native | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
workflow_dispatch: | |
env: | |
NPM_TAG: "pr" | |
EMULATOR_NAME: "runtime-emu" | |
NDK_VERSION: r23c | |
ANDROID_API: 29 | |
ANDROID_ABI: x86_64 | |
NDK_ARCH: linux | |
CARGO_TERM_COLOR: always | |
NDK_HOST: linux | |
XCODE_VERSION: "^15.0" | |
NPM_PACKAGES: canvas,canvas-babylon,canvas-media,canvas-phaser,canvas-phaser-ce,canvas-pixi,canvas-polyfill,canvas-three,canvas-svg | |
jobs: | |
android: | |
name: Android Build | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal | |
echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
- name: Use Rust nightly | |
run: | | |
rustup default nightly | |
- name: Install Rust Component rust-src | |
run: | | |
rustup component add --toolchain nightly rust-src | |
- name: 'Install Rust target i686-linux-android' | |
shell: bash | |
run: | | |
rustup target add i686-linux-android | |
- name: 'Install Rust target x86_64-linux-android' | |
shell: bash | |
run: | | |
rustup target add x86_64-linux-android | |
- name: 'Install Rust target armv7-linux-androideabi' | |
shell: bash | |
run: | | |
rustup target add armv7-linux-androideabi | |
- name: 'Install Rust target aarch64-linux-android' | |
shell: bash | |
run: | | |
rustup target add aarch64-linux-android | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
registry-url: "https://registry.npmjs.org" | |
- uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version: "17" | |
cache: gradle | |
- name: Setup Android SDK | |
uses: android-actions/setup-android@v3 | |
- name: Setup NDK | |
run: | | |
echo "y" | sdkmanager "cmake;3.6.4111459" | |
wget https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-$NDK_ARCH.zip | |
chmod +x android-ndk-$NDK_VERSION-$NDK_ARCH.zip | |
unzip -q android-ndk-$NDK_VERSION-$NDK_ARCH.zip | |
rm -rf android-ndk-$NDK_VERSION-$NDK_ARCH.zip | |
export ANDROID_NDK_HOME=`pwd`/android-ndk-$NDK_VERSION | |
export ANDROID_NDK_ROOT=$ANDROID_NDK_HOME | |
export ANDROID_NDK=$ANDROID_NDK_HOME | |
export NDK_PATH=$ANDROID_NDK | |
export CC_armv7_linux_androideabi=armv7a-linux-androideabi21-clang | |
export CXX_armv7_linux_androideabi=armv7a-linux-androideabi21-clang++ | |
export AR_armv7_linux_androideabi=llvm-ar | |
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=armv7a-linux-androideabi21-clang | |
export CC_aarch64_linux_android=aarch64-linux-android21-clang | |
export CXX_aarch64_linux_android=aarch64-linux-android21-clang++ | |
export AR_aarch64_linux_android=llvm-ar | |
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=aarch64-linux-android21-clang | |
export CC_i686_linux_android=i686-linux-android21-clang | |
export CXX_i686_linux_android=i686-linux-android21-clang++ | |
export AR_i686_linux_android=llvm-ar | |
export CARGO_TARGET_I686_LINUX_ANDROID_LINKER=i686-linux-android21-clang | |
export CC_x86_64_linux_android=x86_64-linux-android21-clang | |
export CXX_x86_64_linux_android=x86_64-linux-android21-clang++ | |
export AR_x86_64_linux_android=llvm-ar | |
export CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android21-clang | |
echo ANDROID_NDK_HOME=${ANDROID_NDK_HOME} >> $GITHUB_ENV | |
echo ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT} >> $GITHUB_ENV | |
echo ANDROID_NDK=${ANDROID_NDK} >> $GITHUB_ENV | |
echo NDK_PATH=${NDK_PATH} >> $GITHUB_ENV | |
echo CC_armv7_linux_androideabi=${CC_armv7_linux_androideabi} >> $GITHUB_ENV | |
echo CXX_armv7_linux_androideabi=${CXX_armv7_linux_androideabi} >> $GITHUB_ENV | |
echo AR_armv7_linux_androideabi=${AR_armv7_linux_androideabi} >> $GITHUB_ENV | |
echo CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=${CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER} >> $GITHUB_ENV | |
echo CC_aarch64_linux_android=${CC_aarch64_linux_android} >> $GITHUB_ENV | |
echo CXX_aarch64_linux_android=${CXX_aarch64_linux_android} >> $GITHUB_ENV | |
echo AR_aarch64_linux_android=${AR_aarch64_linux_android} >> $GITHUB_ENV | |
echo CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=${CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER} >> $GITHUB_ENV | |
echo CC_i686_linux_android=${CC_i686_linux_android} >> $GITHUB_ENV | |
echo CXX_i686_linux_android=${CXX_i686_linux_android} >> $GITHUB_ENV | |
echo AR_i686_linux_android=${AR_i686_linux_android} >> $GITHUB_ENV | |
echo CARGO_TARGET_I686_LINUX_ANDROID_LINKER=${CARGO_TARGET_I686_LINUX_ANDROID_LINKER} >> $GITHUB_ENV | |
echo CC_x86_64_linux_android=${CC_x86_64_linux_android} >> $GITHUB_ENV | |
echo CXX_x86_64_linux_android=${CXX_x86_64_linux_android} >> $GITHUB_ENV | |
echo AR_x86_64_linux_android=${AR_x86_64_linux_android} >> $GITHUB_ENV | |
echo CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=${CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER} >> $GITHUB_ENV | |
echo ${ANDROID_NDK_HOME} >> $GITHUB_PATH | |
echo ${ANDROID_NDK}/toolchains/llvm/prebuilt/${NDK_ARCH}-x86_64/bin >> $GITHUB_PATH | |
echo ${CC_armv7_linux_androideabi} >> $GITHUB_PATH | |
echo ${CXX_armv7_linux_androideabi} >> $GITHUB_PATH | |
echo ${AR_armv7_linux_androideabi} >> $GITHUB_PATH | |
echo ${CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER} >> $GITHUB_PATH | |
echo ${CC_aarch64_linux_android} >> $GITHUB_PATH | |
echo ${CXX_aarch64_linux_android} >> $GITHUB_PATH | |
echo ${AR_aarch64_linux_android} >> $GITHUB_PATH | |
echo ${CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER} >> $GITHUB_PATH | |
echo ${CC_i686_linux_android} >> $GITHUB_PATH | |
echo ${CXX_i686_linux_android} >> $GITHUB_PATH | |
echo ${AR_i686_linux_android} >> $GITHUB_PATH | |
echo ${CARGO_TARGET_I686_LINUX_ANDROID_LINKER} >> $GITHUB_PATH | |
echo ${CC_x86_64_linux_android} >> $GITHUB_PATH | |
echo ${CXX_x86_64_linux_android} >> $GITHUB_PATH | |
echo ${AR_x86_64_linux_android} >> $GITHUB_PATH | |
echo ${CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER} >> $GITHUB_PATH | |
- name: Install Build Tools | |
run: | | |
sudo apt-get install pkg-config libssl-dev -y | |
- name: Build Canvas Native | |
run: | | |
make android | |
ios: | |
name: iOS Build | |
runs-on: macos-14 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal | |
echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
- name: Use Rust nightly | |
run: | | |
rustup default nightly | |
- name: Install Rust Component rust-src | |
run: | | |
rustup component add --toolchain nightly rust-src | |
- name: 'Install Rust target x86_64-apple-ios' | |
shell: bash | |
run: | | |
rustup target add x86_64-apple-ios | |
- name: 'Install Rust target aarch64-apple-ios' | |
shell: bash | |
run: | | |
rustup target add aarch64-apple-ios | |
- name: 'Install Rust target aarch64-apple-ios-sim' | |
shell: bash | |
run: | | |
rustup target add aarch64-apple-ios-sim | |
- name: Install cbindgen | |
run: | | |
cargo install --force cbindgen | |
- name: Install Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3" | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
registry-url: "https://registry.npmjs.org" | |
- uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: ${{env.XCODE_VERSION}} | |
- name: Install Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3" | |
- name: Install Dependencies | |
run: | | |
npm install | |
python3 -m pip install --upgrade pip six | |
brew install cmake | |
[ ! -f /usr/local/bin/cmake ] && ln -s /usr/local/bin/cmake $(which cmake) || true | |
- name: Build | |
run: | | |
make ios | |
npm run build.canvas.ios.framework.release | |
npm: | |
name: Npm Build | |
runs-on: ubuntu-22.04 | |
needs: [android, ios] | |
outputs: | |
npm_version: ${{ steps.npm_version_output.outputs.NPM_VERSION }} | |
npm_tag: ${{ steps.npm_version_output.outputs.NPM_TAG }} | |
steps: | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
registry-url: "https://registry.npmjs.org" | |
- name: Generate Version | |
run: | | |
echo NPM_VERSION=$(node -e "console.log(require('./packages/canvas/package.json').version);")-$NPM_TAG-$(date +"%m-%d-%Y")-$GITHUB_RUN_ID >> $GITHUB_ENV | |
- name: Bump canvas | |
working-directory: packages/canvas | |
run: npm version $NPM_VERSION | |
- name: Bump canvas-babylon | |
working-directory: packages/canvas-babylon | |
run: npm version $NPM_VERSION | |
- name: Bump canvas-media | |
working-directory: packages/canvas-media | |
run: npm version $NPM_VERSION | |
- name: Bump canvas-phaser | |
working-directory: packages/canvas-phaser | |
run: npm version $NPM_VERSION | |
- name: Bump canvas-phaser-ce | |
working-directory: packages/canvas-phaser-ce | |
run: npm version $NPM_VERSION | |
- name: Bump canvas-pixi | |
working-directory: packages/canvas-pixi | |
run: npm version $NPM_VERSION | |
- name: Bump canvas-polyfill | |
working-directory: packages/canvas-polyfill | |
run: npm version $NPM_VERSION | |
- name: Bump canvas-three | |
working-directory: packages/canvas-three | |
run: npm version $NPM_VERSION | |
- name: Bump canvas-svg | |
working-directory: packages/canvas-svg | |
run: npm version $NPM_VERSION | |
- name: Build all packages | |
run: npx nx run canvas:build.all | |
- name: Publish @nativescript/core | |
env: | |
NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
run: | | |
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ../../.npmrc | |
echo "Publishing @nativescript/canvas@$NPM_VERSION to NPM with tag $NPM_TAG..." | |
npm run publish-packages --name $NPM_PACKAGES --verify true --version $NPM_VERSION | |