From 756dd71e68b220e995aae5d999d68ed424b18f29 Mon Sep 17 00:00:00 2001 From: David Estes Date: Fri, 15 Nov 2024 14:54:00 -0700 Subject: [PATCH] chore: update workflow to build cross platform wasm packages - integration tests are only run on ubuntu VM currently - still need to get artifacts in the right place to publish --- .github/workflows/build-test.yml | 204 ++++++++++++++++++++++--- .github/workflows/integration-test.yml | 46 ------ 2 files changed, 180 insertions(+), 70 deletions(-) delete mode 100644 .github/workflows/integration-test.yml diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 57a9b55..79998c6 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -3,53 +3,209 @@ on: push: branches: ["main"] pull_request: + workflow_dispatch: env: CI: true + DEBUG: napi:* + APP_NAME: flight-sql-client + MACOSX_DEPLOYMENT_TARGET: '10.13' + CARGO_INCREMENTAL: '1' + FLIGHT_SQL_PATH: ./packages/flight-sql-client/ +permissions: + contents: write + id-token: write +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: build: - name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} - - runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: - node: [20, 22] - os: [ubuntu-latest, macOS-latest] - + settings: + - host: macos-13 + target: x86_64-apple-darwin + build: pnpm build:wasm --target x86_64-apple-darwin && pnpm build:js + - host: ubuntu-latest + target: x86_64-unknown-linux-gnu + # using vm instead of docker, but leaving in case we need this for other targets + # docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian + build: pnpm build:wasm --target x86_64-unknown-linux-gnu && pnpm build:js + test: cd tests/c1-integration && pnpm run test + - host: macos-latest + target: aarch64-apple-darwin + build: pnpm build:wasm --target aarch64-apple-darwin && pnpm build:js + name: stable - ${{ matrix.settings.target }} - node@20 + runs-on: ${{ matrix.settings.host }} steps: - name: Checkout repository uses: actions/checkout@v4 - - - name: Use Node ${{ matrix.node }} + - name: Setup node uses: actions/setup-node@v4 + if: ${{ !matrix.settings.docker }} with: - node-version: ${{ matrix.node }} - + node-version: 20 - name: Install pnpm id: pnpm-install uses: pnpm/action-setup@v3 with: version: 9.8.0 run_install: false - - name: Get pnpm store directory id: pnpm-cache shell: bash run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v4 - name: Setup pnpm cache + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + - name: Setup pnpm cache + uses: actions/cache@v4 with: path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + key: ${{ runner.os }}_${{ matrix.settings.target }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies and build - run: pnpm install --frozen-lockfile && pnpm build - + ${{ runner.os }}_${{ matrix.settings.target }}-pnpm-store- + - 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 }} + - name: Setup toolchain + run: ${{ matrix.settings.setup }} + if: ${{ matrix.settings.setup }} + shell: bash + - name: Install dependencies and buld + run: pnpm install --frozen-lockfile - name: Lint run: pnpm run lint:ci - - - name: Test - run: pnpm run test: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 + run: ${{ matrix.settings.build }} + if: ${{ !matrix.settings.docker }} + shell: bash + # we only run integration tests on linux vm where we have access to docker we can talk to + - name: Integration tests + run: ${{ matrix.settings.test }} + if: ${{ !matrix.settings.test }} + shell: bash + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: bindings-${{ matrix.settings.target }} + path: ${{ env.FLIGHT_SQL_PATH }}${{ env.APP_NAME }}.*.node + if-no-files-found: error + test-macOS-binding: + name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }} + needs: + - build + strategy: + fail-fast: false + matrix: + settings: + - host: macos-latest + target: aarch64-apple-darwin + architecture: arm64 + - host: macos-13 + target: x86_64-apple-darwin + architecture: x64 + node: + - '20' + - '22' + runs-on: ${{ matrix.settings.host }} + steps: + - uses: actions/checkout@v4 + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + architecture: ${{ matrix.settings.architecture }} + - name: Install pnpm + id: pnpm-install + uses: pnpm/action-setup@v3 + with: + version: 9.8.0 + run_install: false + - name: Get pnpm store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + - name: Setup pnpm cache + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}_${{ matrix.settings.target }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}_${{ matrix.settings.target }}-pnpm-store- + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-${{ matrix.settings.target }} + path: ${{ env.FLIGHT_SQL_PATH }} + - name: List packages + working-directory: ${{ env.FLIGHT_SQL_PATH }} + run: ls -R . + shell: bash + - name: Test bindings + working-directory: ${{ env.FLIGHT_SQL_PATH }} + run: pnpm test + test-linux-x64-gnu-binding: + name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }} + needs: + - build + strategy: + fail-fast: false + matrix: + node: + - '20' + - '22' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + - name: Install pnpm + id: pnpm-install + uses: pnpm/action-setup@v3 + with: + version: 9.8.0 + run_install: false + - name: Get pnpm store directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + - name: Setup pnpm cache + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}_x86_64-unknown-linux-gnu-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}_x86_64-unknown-linux-gnu-pnpm-store- + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-x86_64-unknown-linux-gnu + path: ${{ env.FLIGHT_SQL_PATH }} + - name: List packages + working-directory: ${{ env.FLIGHT_SQL_PATH }} + run: ls -R . + shell: bash + - name: Test bindings + working-directory: ${{ env.FLIGHT_SQL_PATH }} + run: pnpm test \ No newline at end of file diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml deleted file mode 100644 index 8639466..0000000 --- a/.github/workflows/integration-test.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Integration tests -on: - push: - branches: ["main"] - pull_request: -env: - CI: true -jobs: - test: - name: Run integration tests - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: 22 - - - name: Install pnpm - id: pnpm-install - uses: pnpm/action-setup@v3 - with: - version: 9.8.0 - run_install: false - - - name: Get pnpm store directory - id: pnpm-cache - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT - - - uses: actions/cache@v4 - name: Setup pnpm cache - with: - path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} - key: pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: pnpm-store - - - name: Install dependencies and build - run: pnpm install --frozen-lockfile && pnpm build - - - name: Test - run: cd tests/c1-integration && pnpm run test