CASSNODEJS-12: Deno and Bun support #1
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: Bun and Deno Integration Tests | |
| on: | |
| push: | |
| branches: [trunk] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| actions: read | |
| checks: write | |
| jobs: | |
| integration-tests: | |
| name: Integration (${{ matrix.RUNTIME }}, Cassandra ${{ matrix.SERVER_VERSION }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| RUNTIME: ["bun", "deno"] | |
| SERVER_VERSION: ["3.11", "4.0", "4.1", "5.0"] # Cassandra minor versions | |
| fail-fast: false | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| # ---- Python for ccm ---- | |
| - name: Set up Python 3.9.16 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.9.16" | |
| - name: Install ccm | |
| run: | | |
| python -m pip install --upgrade pip | |
| git clone --depth 1 --single-branch -b cassandra-test https://github.com/apache/cassandra-ccm.git | |
| cd cassandra-ccm | |
| pip install -r requirements.txt | |
| ./setup.py install | |
| # ---- Install required Zulu JDKs (8/11/17) and capture their homes ---- | |
| - name: Install Zulu 11 | |
| id: z11 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: zulu | |
| java-version: "11" | |
| - name: Install Zulu 17 | |
| id: z17 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: zulu | |
| java-version: "17" | |
| - name: Install Zulu 8 | |
| id: z8 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: zulu | |
| java-version: "8" | |
| - name: Export JAVA*_HOME variables | |
| run: | | |
| echo "JAVA8_HOME=${{ steps.z8.outputs.path }}" >> "$GITHUB_ENV" | |
| echo "JAVA11_HOME=${{ steps.z11.outputs.path }}" >> "$GITHUB_ENV" | |
| echo "JAVA17_HOME=${{ steps.z17.outputs.path }}" >> "$GITHUB_ENV" | |
| echo "JAVA_HOME=${{ steps.z8.outputs.path }}" >> "$GITHUB_ENV" | |
| echo "CCM_UPDATE_PID_DEFAULT_TIMEOUT=120" >> "$GITHUB_ENV" | |
| - name: Generate SSL certificates | |
| run: | | |
| mkdir -p /home/runner/workspace/tools/ccm/ssl/ | |
| cd /home/runner/workspace/tools/ccm/ssl/ | |
| keytool -genkey \ | |
| -keyalg RSA \ | |
| -alias cassandra \ | |
| -keystore keystore.jks \ | |
| -storepass cassandra \ | |
| -keypass cassandra \ | |
| -validity 364635 \ | |
| -dname "CN=Jane He, OU=TE, O=ASF, L=Santa Clara, ST=CA, C=TE" | |
| keytool -export \ | |
| -alias cassandra \ | |
| -file cassandra.crt \ | |
| -keystore keystore.jks \ | |
| -storepass cassandra | |
| openssl x509 \ | |
| -inform der \ | |
| -in cassandra.crt \ | |
| -out cassandra.pem | |
| keytool -genkeypair \ | |
| -keyalg RSA \ | |
| -alias client \ | |
| -keystore truststore.jks \ | |
| -storepass cassandra \ | |
| -keypass cassandra \ | |
| -validity 364635 \ | |
| -dname "CN=Philip Thompson, OU=TE, O=DataStax, L=Santa Clara, ST=CA, C=TE" | |
| keytool -importkeystore \ | |
| -srckeystore truststore.jks \ | |
| -destkeystore client.p12 \ | |
| -srcstorepass cassandra \ | |
| -deststorepass cassandra \ | |
| -deststoretype PKCS12 | |
| openssl pkcs12 \ | |
| -in client.p12 \ | |
| -passin pass:cassandra \ | |
| -nokeys \ | |
| -out client_cert.pem -legacy | |
| openssl pkcs12 \ | |
| -in client.p12 \ | |
| -passin pass:cassandra \ | |
| -nodes \ | |
| -nocerts \ | |
| -out client_key.pem -legacy | |
| - name: Install Simulacron | |
| run: | | |
| wget https://github.com/datastax/simulacron/releases/download/0.12.0/simulacron-standalone-0.12.0.jar -O /home/runner/simulacron.jar | |
| # ---- Set up the runtime under test ---- | |
| - name: Set up Bun | |
| if: matrix.RUNTIME == 'bun' | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: latest | |
| - name: Set up Deno | |
| if: matrix.RUNTIME == 'deno' | |
| uses: denoland/setup-deno@v2 | |
| with: | |
| deno-version: latest | |
| - name: Resolve Cassandra latest patch version | |
| env: | |
| SERVER_VERSION: ${{ matrix.SERVER_VERSION }} | |
| run: | | |
| PATCH_SERVER_VERSION=$( | |
| curl -s https://downloads.apache.org/cassandra/ \ | |
| | grep -oP '(?<=href=")[0-9]+\.[0-9]+\.[0-9]+(?=)' \ | |
| | sort -rV \ | |
| | uniq -w 3 \ | |
| | grep "^${SERVER_VERSION}\." | |
| ) | |
| echo "Resolved Cassandra ${SERVER_VERSION}.x -> ${PATCH_SERVER_VERSION}" | |
| echo "CCM_VERSION=$PATCH_SERVER_VERSION" >> "$GITHUB_ENV" | |
| - name: Print environment | |
| run: printenv | sort | |
| - name: Pre-download Cassandra distribution | |
| run: | | |
| ccm create predownload -v $CCM_VERSION | |
| ccm remove | |
| - name: Run integration tests (${{ matrix.RUNTIME }}) | |
| run: | | |
| if [ "${{ matrix.RUNTIME }}" = "bun" ]; then | |
| # Bun has full CommonJS support, so mocha runs unchanged. | |
| bun install | |
| bunx mocha test/integration/short --recursive --exit -R spec -t 5000 | |
| else | |
| # --allow-scripts builds the kerberos native addon; --unstable-detect-cjs | |
| # makes Deno load the CommonJS driver and tests correctly. | |
| deno install --allow-scripts=npm:kerberos | |
| deno run -A --unstable-detect-cjs npm:mocha test/integration/short --recursive --exit -R spec -t 5000 | |
| fi |