From 1c8d55dc2e245cfa5cd2555626db82c9b4dba13f Mon Sep 17 00:00:00 2001 From: Gregor MacLennan Date: Wed, 18 Dec 2024 10:21:37 +0000 Subject: [PATCH] fix: update builds to use bare-make --- .github/workflows/prebuilds.yml | 106 ++++++++------------------------ LICENSE | 2 +- README.md | 51 +++++++++++---- 3 files changed, 63 insertions(+), 96 deletions(-) diff --git a/.github/workflows/prebuilds.yml b/.github/workflows/prebuilds.yml index 39c477b..7163bec 100644 --- a/.github/workflows/prebuilds.yml +++ b/.github/workflows/prebuilds.yml @@ -1,93 +1,35 @@ name: Generate prebuilds on: - push: - branches: [main] - tags: - - "*" - -env: - NODE_VERSION: 18 - MODULE_NAME: "simdle-native" - MODULE_VERSION: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || 'latest' }} + workflow_dispatch: + inputs: + module_version: + description: "Module version" + required: true + default: "latest" + type: string + publish_release: + description: "Publish release" + required: false + default: true + type: boolean jobs: build: - runs-on: ubuntu-20.04 - timeout-minutes: 10 strategy: - fail-fast: false matrix: - target: ["android-arm", "android-arm64", "android-x64"] - - steps: - - name: Assert env.MODULE_VERSION is set - if: ${{ env.MODULE_VERSION == '' }} - run: echo "env.MODULE_VERSION must be set" && exit 1 - - - uses: actions/checkout@v4 - - - name: Setup NDK - uses: nttld/setup-ndk@v1 - id: setup-ndk - with: - ndk-version: r24 # https://github.com/android/ndk/wiki/Unsupported-Downloads#r24 - add-to-path: false - - - name: Use Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODE_VERSION }} - - - name: Download npm package and unpack - run: npm pack ${{ env.MODULE_NAME }}@${{ env.MODULE_VERSION }} | xargs tar -zxvf - - - name: Install deps for package - working-directory: ./package - run: npm install - - - name: Generate prebuild for ${{ matrix.target }} - working-directory: ./package - env: - ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - run: npx --yes prebuild-for-nodejs-mobile@18.17.7 ${{ matrix.target }} --verbose - - - name: Upload original prebuild artifacts # mostly for debugging purposes - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.target }} - path: ./package/prebuilds/${{ matrix.target }} - - # The below steps are needed for the release job - - - name: Derive release artifact name - id: artifact-name - run: echo "NAME=${{ env.MODULE_NAME }}-${{ env.MODULE_VERSION }}-${{ matrix.TARGET }}" >> "$GITHUB_OUTPUT" - - - name: Prepare release artifact - run: tar -czf ${{ steps.artifact-name.outputs.NAME }}.tar.gz --directory=./package/prebuilds/${{ matrix.TARGET }} . - - - name: Upload release artifact - uses: actions/upload-artifact@v3 - with: - name: ${{ steps.artifact-name.outputs.NAME }} - path: ./${{ steps.artifact-name.outputs.NAME }}.tar.gz + platform: [android] + arch: [arm64, x64, arm] + uses: digidem/nodejs-mobile-bare-prebuilds/.github/workflows/prebuild.yml@main + with: + module_name: "simdle-native" + module_version: ${{ inputs.module_version }} + platform: ${{ matrix.platform }} + arch: ${{ matrix.arch }} release: - if: ${{ startsWith(github.ref, 'refs/tags') }} + if: ${{ inputs.publish_release }} needs: build - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: actions/checkout@v4 - - - name: Download artifacts - uses: actions/download-artifact@v3 - - - name: Create GitHub Release - uses: ncipollo/release-action@v1 - with: - artifacts: "${{ env.MODULE_NAME }}-${{ env.MODULE_VERSION }}-*/*.tar.gz" - artifactErrorsFailBuild: true - allowUpdates: true - replacesArtifacts: true + uses: digidem/nodejs-mobile-bare-prebuilds/.github/workflows/release.yml@main + with: + module_version: ${{ needs.build.outputs.module_version }} diff --git a/LICENSE b/LICENSE index 38d47ab..65f569f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2023 Digital Democracy +Copyright (c) 2024 Awana Digital Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b59d181..4630bed 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,55 @@ # simdle-native-nodejs-mobile -[NodeJS Mobile](https://github.com/nodejs-mobile/nodejs-mobile) prebuilds for [`simdle-native`](https://github.com/holepunchto/simdle-native). +[NodeJS Mobile](https://github.com/nodejs-mobile/nodejs-mobile) prebuilds for [`simdle-native`](https://github.com/holepunchto/simdle-native) ## Working locally ### Requirements - Node 18 -- Android NDK 24.0.8215888 - - (optional) exported `ANDROID_NDK_PATH` environment variable +- Android NDK (CI uses version 27.2.12479018) + - (optional) exported `ANDROID_NDK_HOME` environment variable ### General steps -Should be clear enough to follow the workflow steps but in summary: - -1. Download the npm tarball package and unzip e.g. `npm pack simdle-native@latest | xargs tar -zxvf` - -2. Navigate to unzipped directory and run `npx prebuild-for-nodejs-mobile TARGET`, where `TARGET` is an accepted value from the [`prebuild-for-nodejs-mobile`](https://github.com/staltz/prebuild-for-nodejs-mobile) CLI - - if you don't have the `ANDROID_NDK_PATH` environment variable exported, you may run the command like so: `ANDROID_NDK_HOME=/path/to/ndk npx prebuild-for-nodejs-mobile TARGET` +Should be clear enough to follow the [reusable workflow steps](https://github.com/digidem/nodejs-mobile-bare-prebuilds/blob/main/.github/workflows/prebuild.yml) but in summary: + +1. Download the npm tarball package and unzip e.g. + ``` + npm pack simdle-native@latest | xargs tar -zxvf + ``` +2. Navigate to unzipped directory: + ``` + cd package + ``` +3. Install dependencies: + ``` + npm install + ``` +4. Install [patched `cmake-napi`](https://github.com/digidem/cmake-napi-nodejs-mobile): + ``` + npm install cmake-napi@github:digidem/cmake-napi-nodejs-mobile + ``` +5. Install [bare-make](https://github.com/holepunchto/bare-make) globally: + ``` + npm install -g bare-make@latest + ``` +6. Generate, build and install: + ``` + bare-make generate --platform android --arch arm64 + bare-make build + bare-make install + ``` ## Creating a release -1. Create a git tag that matches the version of the module you want to create prebuilds for e.g. `git tag 1.0.0` +1. Navigate to the [Generate Prebuilds workflow](https://github.com/digidem/simdle-native-nodejs-mobile/actions/workflows/prebuilds.yml) +2. Manually dispatch the worflow with the version you want to build, ensuring that "Publish Release" is checked. + +## Contributing -2. Push the tag to the remote e.g. `git push origin 1.0.0` +We welcome contributions to this repository. If you have an idea for a new feature or have found a bug, please open an issue or submit a pull request. -3. The workflow uses the tag version to create the prebuilds and then publish a release with those prebuilds. +## License -4. The relevant artifacts will show up in GitHub Releases. Each artifact is a tarball containing the `.node` files for the target-specific prebuild. +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details.