ci: Fix builds #40
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: 🚀 CI | |
| env: | |
| DEBUG: napi:* | |
| APP_NAME: cel-typescript | |
| MACOSX_DEPLOYMENT_TARGET: '10.13' | |
| on: | |
| push: | |
| branches: | |
| - main | |
| tags: | |
| - 'v*.*.*' | |
| pull_request: | |
| jobs: | |
| build: | |
| name: 🔨 Build - ${{ matrix.settings.target }} - node@18 | |
| if: "!contains(github.event.head_commit.message, 'skip ci')" | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| settings: | |
| - host: macos-latest | |
| target: aarch64-apple-darwin | |
| build: | | |
| npm install | |
| npx @napi-rs/cli build --target aarch64-apple-darwin | |
| strip -x *.node | |
| runs-on: ${{ matrix.settings.host }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Debug - List submodules | |
| run: | | |
| git submodule status | |
| ls -la | |
| ls -la cel-rust/ | |
| ls -la cel-rust/interpreter/ | |
| shell: bash | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| if: ${{ !matrix.settings.docker }} | |
| with: | |
| node-version: 18 | |
| check-latest: true | |
| cache: npm | |
| - name: Install | |
| uses: dtolnay/rust-toolchain@stable | |
| if: ${{ !matrix.settings.docker }} | |
| with: | |
| targets: ${{ matrix.settings.target }} | |
| - name: 💾 Cache cargo | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| .cargo-cache | |
| target/ | |
| key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} | |
| - uses: goto-bus-stop/setup-zig@v2 | |
| if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} | |
| with: | |
| version: 0.11.0 | |
| - name: 🔧 Setup toolchain | |
| if: ${{ matrix.settings.docker }} | |
| uses: actions-rs/toolchain@v1 | |
| with: | |
| toolchain: stable | |
| target: ${{ matrix.settings.target }} | |
| override: true | |
| - name: Cache NPM dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: node_modules | |
| key: npm-cache-${{ matrix.settings.target }}-${{ hashFiles('package-lock.json') }} | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: 🐳 Build in docker | |
| uses: addnab/docker-run-action@v3 | |
| if: ${{ matrix.settings.docker }} | |
| with: | |
| image: ${{ matrix.settings.docker }} | |
| options: --user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build | |
| run: ${{ matrix.settings.build }} | |
| - name: Build | |
| if: ${{ !matrix.settings.docker }} | |
| run: ${{ matrix.settings.build }} | |
| shell: bash | |
| - name: 🔍 Debug - List files after build | |
| run: | | |
| echo "Current directory:" | |
| pwd | |
| echo "\nFiles in current directory:" | |
| ls -la | |
| echo "\nNode files:" | |
| find . -name "*.node" | |
| shell: bash | |
| - name: 📤 Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: bindings-${{ matrix.settings.target }} | |
| path: | | |
| *.node | |
| !target/**/*.node | |
| if-no-files-found: error | |
| retention-days: 1 | |
| test: | |
| name: 🧪 Test ${{ matrix.platform.name }} - node@${{ matrix.node }} | |
| needs: | |
| - build | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: | |
| - 18 | |
| platform: | |
| - name: macOS ARM64 | |
| runner: macos-latest | |
| target: aarch64-apple-darwin | |
| runs-on: ${{ matrix.platform.runner }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| check-latest: true | |
| cache: npm | |
| - name: 💾 Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| node_modules | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| .cargo-cache | |
| target/ | |
| key: > | |
| deps-${{ matrix.platform.target }}-${{ matrix.node }}- | |
| ${{ contains(matrix.platform.target, 'aarch64') && 'npm-install' || 'npm-ci' }}- | |
| ${{ hashFiles('package-lock.json', '**/Cargo.lock') }} | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: 🖥️ Setup QEMU | |
| if: matrix.platform.qemu | |
| uses: docker/setup-qemu-action@v3 | |
| with: | |
| platforms: ${{ matrix.platform.qemu }} | |
| - name: 📱 Install Android NDK | |
| if: matrix.platform.android | |
| run: | | |
| wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip | |
| unzip android-ndk-r25c-linux.zip | |
| echo "ANDROID_NDK_HOME=$PWD/android-ndk-r25c" >> $GITHUB_ENV | |
| - name: 📥 Download artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: bindings-${{ matrix.platform.target }} | |
| path: . | |
| - name: List files | |
| run: ls -R . | |
| shell: bash | |
| - name: Test bindings (native) | |
| if: "!matrix.platform.docker" | |
| run: npm test | |
| - name: Test bindings (Docker) | |
| if: matrix.platform.docker | |
| run: | | |
| docker run --rm ${{ matrix.platform.qemu && format('--platform linux/{0}', matrix.platform.qemu) || '' }} \ | |
| -v $(pwd):/build -w /build node:${{ matrix.node }}-slim bash -c ' | |
| # Install Rust | |
| apt-get update && apt-get install -y curl build-essential | |
| curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y | |
| export PATH="/root/.cargo/bin:$PATH" | |
| # Fix npm optional dependencies on ARM64 | |
| if [[ "${{ matrix.platform.target }}" == *"aarch64"* ]]; then | |
| # Ensure clean state | |
| rm -rf node_modules | |
| # Install dependencies with --no-optional to skip problematic deps | |
| npm install --no-optional | |
| # Now install only the required optional deps | |
| npm install @rollup/rollup-linux-arm64-gnu | |
| fi | |
| # Run tests | |
| npm test | |
| ' | |
| dry-run-publish: | |
| name: Dry Run Publish | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'pull_request' | |
| needs: | |
| - build | |
| - test | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 18 | |
| check-latest: true | |
| cache: npm | |
| - name: Cache NPM dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: node_modules | |
| key: npm-cache-ubuntu-latest-${{ hashFiles('package-lock.json') }} | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Download artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: bindings-aarch64-apple-darwin | |
| - name: Move artifacts | |
| run: | | |
| mkdir -p dist | |
| find . -type f -name 'cel-typescript.*.node' -exec mv {} . \; | |
| - name: List files | |
| run: | | |
| echo "Root directory:" | |
| ls -la | |
| echo "\nNode files:" | |
| find . -maxdepth 1 -name '*.node' | |
| shell: bash | |
| - name: Link local package | |
| run: npm link | |
| - name: Build TypeScript | |
| run: npm run build:ts | |
| - name: Verify package contents | |
| run: | | |
| echo "Package contents:" | |
| npm pack --dry-run | |
| publish: | |
| name: ${{ github.event_name == 'pull_request' && '🔍 Publish (Dry Run)' || '📦 Publish' }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| id-token: write | |
| if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'pull_request' | |
| needs: | |
| - build | |
| - test | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| - name: Debug - List submodules | |
| run: | | |
| git submodule status | |
| ls -la | |
| ls -la cel-rust/ | |
| ls -la cel-rust/interpreter/ | |
| shell: bash | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 18 | |
| check-latest: true | |
| cache: npm | |
| - name: Cache NPM dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: node_modules | |
| key: npm-cache-ubuntu-latest-${{ hashFiles('package-lock.json') }} | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Download artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: bindings-aarch64-apple-darwin | |
| - name: Move artifacts | |
| run: | | |
| mkdir -p dist | |
| find . -type f -name 'cel-typescript.*.node' -exec mv {} . \; | |
| - name: List files | |
| run: | | |
| echo "Root directory:" | |
| ls -la | |
| echo "\nNode files:" | |
| find . -maxdepth 1 -name '*.node' | |
| shell: bash | |
| - name: Link local package | |
| run: npm link | |
| - name: Build TypeScript | |
| run: npm run build:ts | |
| - name: Verify package contents | |
| run: | | |
| echo "Package contents:" | |
| npm pack --dry-run | |
| - name: ⚙️ Configure npm | |
| if: github.event_name != 'pull_request' | |
| run: | | |
| echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc | |
| - name: 🚀 Publish | |
| if: github.event_name != 'pull_request' && env.NPM_TOKEN != '' | |
| env: | |
| NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
| run: npm publish --access public --provenance | |
| - name: 🔍 Dry Run Publish | |
| if: github.event_name == 'pull_request' | |
| run: npm publish --dry-run |