Skip to content

Fix getCrossReference case-insensitive parent matching (#1411) #1324

Fix getCrossReference case-insensitive parent matching (#1411)

Fix getCrossReference case-insensitive parent matching (#1411) #1324

name: Test JDBC Logging
on:
push:
branches:
- main
workflow_dispatch:
inputs:
branch:
description: 'Branch to checkout'
required: false
default: 'main'
permissions:
id-token: write
contents: read
jobs:
test-logging:
strategy:
fail-fast: false
matrix:
github-runner: [linux-ubuntu-latest, windows-server-latest]
thrift-client: [0, 1]
runs-on:
group: databricks-protected-runner-group
labels: ${{ matrix.github-runner }}
steps:
- name: Enable long paths
if: runner.os == 'Windows'
run: git config --system core.longpaths true
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
ref: ${{ inputs.branch || github.ref }}
- name: Set up Java
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
distribution: 'adopt'
java-version: '21'
- name: Get JFrog OIDC token
run: |
set -euo pipefail
# Get GitHub OIDC ID token
ID_TOKEN=$(curl -sLS \
-H "User-Agent: actions/oidc-client" \
-H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
"${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=jfrog-github" | jq .value | tr -d '"')
echo "::add-mask::${ID_TOKEN}"
# Exchange for JFrog access token
ACCESS_TOKEN=$(curl -sLS -XPOST -H "Content-Type: application/json" \
"https://databricks.jfrog.io/access/api/v1/oidc/token" \
-d "{\"grant_type\": \"urn:ietf:params:oauth:grant-type:token-exchange\", \"subject_token_type\":\"urn:ietf:params:oauth:token-type:id_token\", \"subject_token\": \"${ID_TOKEN}\", \"provider_name\": \"github-actions\"}" | jq .access_token | tr -d '"')
echo "::add-mask::${ACCESS_TOKEN}"
if [ -z "$ACCESS_TOKEN" ] || [ "$ACCESS_TOKEN" = "null" ]; then
echo "FAIL: Could not extract JFrog access token"
exit 1
fi
echo "JFROG_ACCESS_TOKEN=${ACCESS_TOKEN}" >> "$GITHUB_ENV"
echo "JFrog OIDC token obtained successfully"
- name: Configure maven
run: |
set -euo pipefail
mkdir -p ~/.m2
cat > ~/.m2/settings.xml << EOF
<settings>
<mirrors>
<mirror>
<id>jfrog-central</id>
<mirrorOf>*</mirrorOf>
<url>https://databricks.jfrog.io/artifactory/db-maven/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>jfrog-central</id>
<username>gha-service-account</username>
<password>${JFROG_ACCESS_TOKEN}</password>
</server>
</servers>
</settings>
EOF
echo "Maven configured to use JFrog registry"
- name: Build JDBC driver
run: mvn clean package -DskipTests
- name: Find JAR file
shell: bash
run: |
# Find the main JAR file dynamically (uber JAR from assembly-uber module)
MAIN_JAR=$(find assembly-uber/target -maxdepth 1 -name "databricks-jdbc-*.jar" \
-not -name "*-thin.jar" \
-not -name "*-tests.jar" | head -1)
if [ -z "$MAIN_JAR" ]; then
echo "ERROR: Could not find main JAR file in assembly-uber/target directory"
ls -la assembly-uber/target/
exit 1
fi
echo "Using JAR file: $MAIN_JAR"
echo "MAIN_JAR=$MAIN_JAR" >> $GITHUB_ENV
- name: Set Environment Variables
if: runner.os != 'Windows'
shell: bash
env:
DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
DATABRICKS_HTTP_PATH: ${{ secrets.DATABRICKS_HTTP_PATH }}
USE_THRIFT_CLIENT: ${{ matrix.thrift-client }}
run: |
echo "DATABRICKS_TOKEN=${DATABRICKS_TOKEN}" >> $GITHUB_ENV
echo "DATABRICKS_HOST=${DATABRICKS_HOST}" >> $GITHUB_ENV
echo "DATABRICKS_HTTP_PATH=${DATABRICKS_HTTP_PATH}" >> $GITHUB_ENV
echo "USE_THRIFT_CLIENT=${USE_THRIFT_CLIENT}" >> $GITHUB_ENV
- name: Set Environment Variables (Windows)
if: runner.os == 'Windows'
shell: powershell
env:
DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
DATABRICKS_HTTP_PATH: ${{ secrets.DATABRICKS_HTTP_PATH }}
USE_THRIFT_CLIENT: ${{ matrix.thrift-client }}
run: |
"DATABRICKS_TOKEN=$env:DATABRICKS_TOKEN" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
"DATABRICKS_HOST=$env:DATABRICKS_HOST" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
"DATABRICKS_HTTP_PATH=$env:DATABRICKS_HTTP_PATH" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
"USE_THRIFT_CLIENT=$env:USE_THRIFT_CLIENT" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Clean & Compile LoggingTest
shell: bash
run: |
rm -rf jdbc-core/target/test-classes
mkdir -p jdbc-core/target/test-classes
echo "Using JAR file: $MAIN_JAR"
javac \
-cp "$MAIN_JAR" \
-d jdbc-core/target/test-classes \
jdbc-core/src/test/java/com/databricks/client/jdbc/LoggingTest.java
echo "==== Checking compiled classes ===="
find jdbc-core/target/test-classes -type f
- name: Run LoggingTest
shell: bash
run: |
echo "==== Running LoggingTest with usethriftclient=${{ matrix.thrift-client }} ===="
OS_TYPE=$(uname | tr '[:upper:]' '[:lower:]')
if [[ "$OS_TYPE" == "linux" ]]; then SEP=":"; else SEP=";"; fi
echo "Using classpath separator: '$SEP'"
echo "Using JAR file: $MAIN_JAR"
CP="jdbc-core/target/test-classes${SEP}$MAIN_JAR"
java \
--add-opens=java.base/java.nio=ALL-UNNAMED \
-cp "$CP" \
com.databricks.client.jdbc.LoggingTest
- name: Verify log file contents
shell: bash
run: |
LOG_DIR="${HOME}/logstest"
LOG_FILE="${LOG_DIR}/databricks_jdbc.log.0"
echo "Verifying log file contents in ${LOG_FILE}..."
if [ -f "$LOG_FILE" ]; then
echo "Log file found. Checking contents..."
REQUIRED_STRINGS=("sql = SELECT 1",
"Result retrieved successfully"
"Closing global async HTTP client"
"Global async HTTP client has been shut down")
for STRING in "${REQUIRED_STRINGS[@]}"; do
if ! grep -qF "$STRING" "$LOG_FILE"; then
echo "ERROR: Required log string not found: $STRING"
echo "Showing last 100 lines of log file:"
tail -n 100 "$LOG_FILE"
exit 1
fi
done
echo "All required log strings were found."
else
echo "Log file directory contents:"
ls -la "${LOG_DIR}" || echo "Directory does not exist"
echo "Log file ${LOG_FILE} does not exist. Failing the build."
exit 1
fi