v1.0.12 #25
Workflow file for this run
This file contains hidden or 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: Build Node.js Shared Library | |
| on: | |
| release: | |
| types: [created] | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| paths: | |
| - '.github/workflows/build_node_shared.yml' | |
| jobs: | |
| build: | |
| timeout-minutes: 720 # 12 hours (QEMU ARM64 builds are slow) | |
| strategy: | |
| matrix: | |
| include: | |
| # Linux x64 builds | |
| - os: ubuntu-latest | |
| platform: linux | |
| arch: x64 | |
| compiler: gcc | |
| container: ghcr.io/ten-framework/ten_building_ubuntu2204 | |
| lib_name: libnode.so.127 | |
| nproc_cmd: nproc | |
| - os: ubuntu-latest | |
| platform: linux | |
| arch: x64 | |
| compiler: clang | |
| container: ghcr.io/ten-framework/ten_building_ubuntu2204 | |
| lib_name: libnode.so.127 | |
| nproc_cmd: nproc | |
| # Linux ARM64 builds (using QEMU) | |
| - os: ubuntu-latest | |
| platform: linux | |
| arch: arm64 | |
| compiler: gcc | |
| container: "" | |
| lib_name: libnode.so.127 | |
| nproc_cmd: nproc | |
| - os: ubuntu-latest | |
| platform: linux | |
| arch: arm64 | |
| compiler: clang | |
| container: "" | |
| lib_name: libnode.so.127 | |
| nproc_cmd: nproc | |
| # macOS x64 builds | |
| # Note: macOS should use Clang (Apple's official toolchain), GCC has compatibility issues | |
| - os: macos-13 | |
| platform: mac | |
| arch: x64 | |
| compiler: clang | |
| container: "" | |
| lib_name: libnode.127.dylib | |
| nproc_cmd: sysctl -n hw.ncpu | |
| # macOS ARM64 builds | |
| # Note: Apple Silicon only supports Clang | |
| - os: macos-14 | |
| platform: mac | |
| arch: arm64 | |
| compiler: clang | |
| container: "" | |
| lib_name: libnode.127.dylib | |
| nproc_cmd: sysctl -n hw.ncpu | |
| runs-on: ${{ matrix.os }} | |
| container: ${{ matrix.container != '' && matrix.container || null }} | |
| steps: | |
| - name: Checkout Node.js | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: nodejs/node | |
| ref: v22.12.0 | |
| - name: Create out directory (Linux ARM64) | |
| if: matrix.platform == 'linux' && matrix.arch == 'arm64' | |
| run: | | |
| # Due to the use of QEMU, running as root inside the Docker container | |
| # is required. However, outside the container, the user is not root. | |
| # This causes issues when trying to handle the contents of the out/ | |
| # folder from outside the container. To resolve this, the out/ folder | |
| # is first created by a regular non-root user to prevent it from being | |
| # created during the build stage, thus avoiding permission issues with | |
| # the out/ folder being created by the root user. | |
| mkdir -p out/Release | |
| - name: Set up QEMU (Linux ARM64) | |
| if: matrix.platform == 'linux' && matrix.arch == 'arm64' | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: arm64 | |
| - name: Setup Python (macOS) | |
| if: matrix.platform == 'mac' | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Configure and Build (Linux ARM64 with QEMU) | |
| if: matrix.platform == 'linux' && matrix.arch == 'arm64' | |
| timeout-minutes: 720 # 12 hours for QEMU emulation | |
| run: | | |
| docker run --rm --platform linux/arm64 \ | |
| -v $(pwd):${{ github.workspace }} -w ${{ github.workspace }} \ | |
| ghcr.io/ten-framework/ten_building_ubuntu2204 \ | |
| bash -c " | |
| if [ '${{ matrix.compiler }}' = 'gcc' ]; then | |
| export CC=gcc | |
| export CXX=g++ | |
| else | |
| export CC=clang | |
| export CXX=clang++ | |
| fi && \ | |
| ./configure --shared --without-npm --without-corepack && \ | |
| make -j2 | |
| " | |
| - name: Configure and Build (Linux x64 and macOS) | |
| if: matrix.platform != 'linux' || matrix.arch != 'arm64' | |
| run: | | |
| if [ "${{ matrix.compiler }}" = "gcc" ]; then | |
| export CC=gcc | |
| export CXX=g++ | |
| else | |
| export CC=clang | |
| export CXX=clang++ | |
| fi | |
| ./configure --shared | |
| make -j$(${{ matrix.nproc_cmd }}) | |
| - name: Fix permissions for build outputs (Linux ARM64) | |
| if: matrix.platform == 'linux' && matrix.arch == 'arm64' | |
| run: | | |
| sudo chown -R "$(id -u)":"$(id -g)" out/Release | |
| - name: Package assets | |
| if: startsWith(github.ref, 'refs/tags/') | |
| run: | | |
| cd out/Release | |
| # Package shared libraries into zip archive | |
| zip node-shared-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.compiler }}.zip ${{ matrix.lib_name }} | |
| - name: Publish to release assets | |
| uses: softprops/action-gh-release@v2 | |
| if: startsWith(github.ref, 'refs/tags/') | |
| with: | |
| files: | | |
| out/Release/node-shared-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.compiler }}.zip |