Skip to content

CASSNODEJS-12: Deno and Bun support #1

CASSNODEJS-12: Deno and Bun support

CASSNODEJS-12: Deno and Bun support #1

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