Skip to content

AWS Advanced ODBC Wrapper Integration Tests - #359

AWS Advanced ODBC Wrapper Integration Tests -

AWS Advanced ODBC Wrapper Integration Tests - #359

name: Integration Tests
run-name: AWS Advanced ODBC Wrapper Integration Tests - ${{ github.event.head_commit.message }}
on:
workflow_dispatch:
push:
branches:
- main
pull_request:
branches:
- '**'
paths-ignore:
- '**/*.md'
- '**/*.jpg'
- '**/*.png'
- '**/README.*'
- '**/LICENSE.*'
- 'docs/**'
- 'ISSUE_TEMPLATE/**'
env:
BUILD_CONFIG: Release
WIX_VERSION: 5.0.2
# Test configuration
TEST_DATABASE: 'postgres'
ENGINE: 'aurora-postgresql'
ENGINE_VERSION: 'latest'
NUM_INSTANCES: '5'
# Limitless
TEST_LIMITLESS_DATABASE: 'postgres_limitless'
ENGINE_LIMITLESS_VERSION: 'latest'
TEST_DSN_ANSI: 'AWS-ODBC-ANSI'
TEST_DSN_UNICODE: 'AWS-ODBC-UNICODE'
DRIVER_NAME_ANSI: 'AWS Advanced ODBC Wrapper Ansi'
DRIVER_NAME_UNICODE: 'AWS Advanced ODBC Wrapper Unicode'
concurrency:
group: integration-test-${{ github.ref }}
cancel-in-progress: false
permissions:
id-token: write
contents: read
jobs:
build-win-psqlodbc:
name: Windows - Build psqlODBC
runs-on: windows-latest
steps:
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc
key: ${{ runner.os }}-psqlodbc-driver
- name: Download psqlODBC
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
run: |
mkdir psqlodbc
cd psqlodbc
$DOWNLOAD_URL=$(gh api repos/postgresql-interfaces/psqlodbc/releases --jq '.[0].assets.[] | select(.name=="psqlodbc_x64.msi") | .browser_download_url')
curl.exe -L ${DOWNLOAD_URL} --output psqlodbc_x64.msi
env:
GH_TOKEN: ${{ github.token }}
build-macos-psqlodbc:
name: MacOS - Build psqlODBC
if: github.event_name == 'workflow_dispatch'
runs-on: macos-15
steps:
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
- name: Checkout psqlODBC
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
uses: actions/checkout@v4
with:
repository: postgresql-interfaces/psqlodbc
path: psqlodbc
- name: Install Dependencies
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
run: |
brew update && brew upgrade && brew cleanup
brew install gcc autoconf automake unixodbc libtool postgresql
- name: Build psqlodbc
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
working-directory: psqlodbc
run: |
./bootstrap
./configure
make
build-linux-psqlodbc:
name: Linux Ubuntu - Build psqlODBC
runs-on: ubuntu-latest
steps:
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
- name: Checkout psqlODBC
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
uses: actions/checkout@v4
with:
repository: postgresql-interfaces/psqlodbc
path: psqlodbc
- name: Install Dependencies
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
run: |
sudo apt update
sudo apt-get install autoconf automake libtool postgresql libpq-dev
- name: Download & Build unixODBC
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
run: |
curl -L https://www.unixodbc.org/unixODBC-2.3.12.tar.gz -o unixODBC.tar
tar xf unixODBC.tar
cd unixODBC-2.3.12
./configure && make
sudo make install
- name: Build psqlodbc
if: ${{steps.cache-psqlodbc.outputs.cache-hit != 'true'}}
working-directory: psqlodbc
run: |
./bootstrap
./configure
make
windows-integration-tests:
name: Windows - Integration Tests
needs: [build-win-psqlodbc]
runs-on: windows-latest
steps:
- name: Setup Cluster ID
run: |
echo "AURORA_CLUSTER_ID=ODBC-Win-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
./scripts/compile_aws_sdk_win.ps1 ${{env.BUILD_CONFIG}}
- name: Setup Dotnet for WiX
uses: actions/setup-dotnet@v4
- name: Install WiX
shell: cmd
run: |
dotnet tool install --global wix --version ${{env.WIX_VERSION}}
wix extension add --global WixToolset.UI.wixext/${{env.WIX_VERSION}}
- name: Run build installer script
shell: pwsh
run: |
./installer/build_installer.ps1 ${{env.BUILD_CONFIG}}
- name: Retrieve psqlODBC Cache
uses: actions/cache@v4
with:
path: psqlodbc
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Install psqlODBC Driver
shell: pwsh
working-directory: psqlodbc
run: |
Start-Process msiexec "/i psqlodbc_x64.msi /quiet /norestart" -Wait;
- name: Install driver
shell: pwsh
working-directory: installer
run: Start-Process msiexec "/lp! .\test.log /i aws-advanced-odbc-wrapper.msi /quiet /norestart" -Wait;
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: odbc-wrapper-win-inte
- name: Create RDS Cluster
id: AuroraClusterSetup
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
Create-Aurora-RDS-Cluster `
-TestUsername ${{ secrets.TEST_USERNAME }} `
-TestPassword ${{ secrets.TEST_PASSWORD }} `
-TestDatabase ${{ env.TEST_DATABASE }} `
-ClusterId ${{ env.Aurora_CLUSTER_ID }} `
-NumInstances ${{ env.NUM_INSTANCES }} `
-Engine ${{ env.ENGINE }} `
-EngineVersion ${{ env.ENGINE_VERSION }} `
-Region ${{ secrets.AWS_DEFAULT_REGION }}
- name: Get Aurora Cluster endpoint
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
$endpoint = (Get-Cluster-Endpoint -ClusterId ${{ env.AURORA_CLUSTER_ID }})
echo "AURORA_CLUSTER_ENDPOINT=$endpoint" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Create Aurora Cluster Secrets
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
$secrets = (Create-Db-Secrets `
-Username ${{ secrets.TEST_USERNAME }} `
-Password ${{ secrets.TEST_PASSWORD }} `
-Engine "postgres" `
-ClusterEndpoint ${{ env.AURORA_CLUSTER_ENDPOINT }})
echo "::add-mask::$secrets"
echo "AURORA_CLUSTER_SECRETS_ARN=$secrets" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Add PostgreSQL binaries to PATH
shell: bash
run: |
echo "$PGBIN" >> $GITHUB_PATH
- name: Create IAM DB User for PostgreSQL
shell: bash
run: |
psql postgresql://${{ secrets.TEST_USERNAME }}:${{secrets.TEST_PASSWORD}}@${{env.AURORA_CLUSTER_ENDPOINT}}:5432/${{ env.TEST_DATABASE }} \
--command="CREATE USER ${{ secrets.TEST_IAM_USER }};" \
--command="GRANT rds_iam TO ${{ secrets.TEST_IAM_USER }};" \
--command="\du"
- name: Install Ansi DSNs
shell: pwsh
run: |
Add-OdbcDsn -Name ${{ env.TEST_DSN_ANSI }} `
-DriverName "${{ env.DRIVER_NAME_ANSI }}" `
-DsnType User `
-SetPropertyValue `
@("RDS_AUTH_TYPE=database", `
"Server=${{ env.AURORA_CLUSTER_ENDPOINT }}", `
"Port=5432", `
"SSLMode=prefer", `
"BASE_DRIVER=C:\Program Files\psqlODBC\1700\bin\podbc30a.dll")
- name: Install Unicode DSNs
shell: pwsh
run: |
Add-OdbcDsn -Name ${{ env.TEST_DSN_UNICODE }} `
-DriverName "${{ env.DRIVER_NAME_UNICODE }}" `
-DsnType User `
-SetPropertyValue `
@("RDS_AUTH_TYPE=database", `
"Server=${{ env.AURORA_CLUSTER_ENDPOINT }}", `
"Port=5432", `
"SSLMode=prefer", `
"BASE_DRIVER=C:\Program Files\psqlODBC\1700\bin\podbc35w.dll")
- name: Create logs folder
run: mkdir logs
- name: Build and Run Ansi Integration Tests
shell: pwsh
if: ${{steps.AuroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_ansi -DCMAKE_BUILD_TYPE="${{env.BUILD_CONFIG}}" `
-DBUILD_UNICODE=OFF -DBUILD_FAILOVER=ON -DBUILD_LIMITLESS=OFF
cmake --build build_ansi --config ${{env.BUILD_CONFIG}}
echo "Ansi Test Built"
.\build_ansi\${{env.BUILD_CONFIG}}\integration-test.exe
env:
TEST_DSN: ${{ env.TEST_DSN_ANSI }}
TEST_DATABASE: ${{ env.TEST_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.AURORA_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
- name: Build and Run Unicode Integration Tests
shell: pwsh
if: ${{steps.AuroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_unicode -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} `
-DBUILD_UNICODE=ON -DBUILD_FAILOVER=ON -DBUILD_LIMITLESS=OFF
cmake --build build_unicode --config ${{env.BUILD_CONFIG}}
echo "Unicode Test Built"
.\build_unicode\${{env.BUILD_CONFIG}}\integration-test.exe
env:
TEST_DSN: ${{ env.TEST_DSN_UNICODE }}
TEST_DATABASE: ${{ env.TEST_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.AURORA_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
- name: Delete Aurora RDS Cluster
if: always()
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
Delete-Aurora-Db-Cluster -ClusterId ${{ env.AURORA_CLUSTER_ID }} -Region ${{ secrets.AWS_DEFAULT_REGION }} -NumInstances 5
- name: Delete Aurora Db Secrets
if: always()
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
Delete-Secrets ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
# Make sure IP is always deleted
- name: Get Github Action IP
if: always()
id: ip
uses: haythem/[email protected]
- name: Remove Github Action IP
if: always()
run: |
aws ec2 revoke-security-group-ingress `
--group-name default `
--protocol tcp `
--port 5432 `
--cidr ${{ steps.ip.outputs.ipv4 }}/32 `
*> $null;
# - name: Copy Driver Logs
# shell: pwsh
# run: |
# Copy-Item -Path '${{ runner.temp }}/aws-odbc-wrapper/*.log.*' -Destination '${{ github.workspace }}\logs'
- name: Archive log results
if: always()
uses: actions/upload-artifact@v4
with:
name: 'windows-integration-test-logs'
path: C:\Users\runneradmin\AppData\Local\Temp\aws-odbc-wrapper\
retention-days: 3
- name: Archive psql logs
if: always()
uses: actions/upload-artifact@v4
with:
name: 'windows-limitless-psql-logs'
path: logs
retention-days: 3
macos-integration-tests:
name: MacOS - Integration Tests
if: github.event_name == 'workflow_dispatch'
needs: [build-macos-psqlodbc]
runs-on: macos-15
steps:
- name: Setup Cluster ID
run: |
echo "AURORA_CLUSTER_ID=ODBC-MacOS-Integ-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" >> $GITHUB_ENV
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Install Build Dependencies
run: |
brew update && brew upgrade && brew cleanup
brew install cmake unixodbc postgresql curl openssl zlib icu4c
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
./scripts/compile_aws_sdk_unix.sh ${{env.BUILD_CONFIG}}
- name: Build aws-advanced-odbc-wrapper
run: |
cmake -S . -B build -DBUILD_UNICODE=ON -DBUILD_ANSI=ON -DBUILD_UNIT_TEST=OFF -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}}
cmake --build build
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: odbc-wrapper-macos-inte
- name: Create RDS Cluster
id: AuroraClusterSetup
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
create_aurora_rds_cluster \
${{ secrets.TEST_USERNAME }} \
${{ secrets.TEST_PASSWORD }} \
${{ env.TEST_DATABASE }} \
${{ env.AURORA_CLUSTER_ID }} \
${{ env.NUM_INSTANCES }} \
${{ env.ENGINE }} \
${{ env.ENGINE_VERSION }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Get Aurora Cluster endpoint
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
endpoint=$(get_cluster_endpoint ${{ env.AURORA_CLUSTER_ID }})
echo "AURORA_CLUSTER_ENDPOINT=$endpoint" >> $GITHUB_ENV
- name: Create Aurora Cluster Secrets
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
secretsArn=$(create_db_secrets \
${{ secrets.TEST_USERNAME }} \
${{ secrets.TEST_PASSWORD }} \
${{ env.ENGINE }} \
${{ env.AURORA_CLUSTER_ENDPOINT }})
echo "::add-mask::$secretsArn"
echo "AURORA_CLUSTER_SECRETS_ARN=$secretsArn" >> $GITHUB_ENV
- name: Install PostgreSQL on macOS
if: runner.os == 'macOS'
run: |
brew install postgresql@16
# --overwrite: Overwrite pre-installed GitHub Actions PostgreSQL binaries
brew link --overwrite postgresql@16
- name: Get Github Action IP
if: always()
id: ip
run: |
echo "ipv4=$(curl -s http://checkip.amazonaws.com)" >> $GITHUB_OUTPUT
- name: Add IP to Allowlist
run: |
. "scripts/aws_rds_helper_unix.sh"
add_ip_to_db_sg \
${{ steps.ip.outputs.ipv4 }} \
${{ env.AURORA_CLUSTER_ID }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Create IAM DB User for PostgreSQL
shell: bash
run: |
psql postgresql://${{ secrets.TEST_USERNAME }}:${{secrets.TEST_PASSWORD}}@${{env.AURORA_CLUSTER_ENDPOINT}}:5432/${{ env.TEST_DATABASE }} \
--command="CREATE USER ${{ secrets.TEST_IAM_USER }};" \
--command="GRANT rds_iam TO ${{ secrets.TEST_IAM_USER }};" \
--command="\du"
- name: Create logs folder
run: mkdir logs
- name: Build and Run Ansi Integration Tests
shell: bash
if: ${{ !cancelled() && steps.auroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_ansi \
-DBUILD_UNICODE=OFF -DBUILD_FAILOVER=ON -DBUILD_LIMITLESS=OFF \
-DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} \
-DTEST_SERVER="${{ env.AURORA_CLUSTER_ENDPOINT }}" \
-DTEST_PORT="5432" \
-DTEST_DATABASE="${{ env.TEST_DATABASE }}" \
-DTEST_DSN="${{ env.TEST_DSN_ANSI }}" \
-DTEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-a.dylib" \
-DBASE_PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbca.so"
cmake --build build_ansi
echo "Ansi Test Built"
./build_ansi/integration-test
cat ${{ github.workspace }}/test/resources/odbc.ini
cat ${{ github.workspace }}/test/resources/odbcinst.ini
env:
TEST_DSN: ${{ env.TEST_DSN_ANSI }}
TEST_DATABASE: ${{ env.TEST_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.AURORA_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
# ASAN_OPTIONS: 'detect_container_overflow=0'
- name: Build and Run Unicode Integration Tests
shell: bash
if: ${{steps.AuroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_unicode \
-DBUILD_UNICODE=ON -DBUILD_FAILOVER=ON -DBUILD_LIMITLESS=OFF \
-DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} \
-DTEST_SERVER="${{ env.AURORA_CLUSTER_ENDPOINT }}" \
-DTEST_PORT="5432" \
-DTEST_DATABASE="${{ env.TEST_DATABASE }}" \
-DTEST_DSN="${{ env.TEST_DSN_UNICODE }}" \
-DTEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-w.dylib" \
-DBASE_PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbcw.so"
cmake --build build_unicode
echo "Unicode Test Built"
cat ${{ github.workspace }}/test/resources/odbc.ini
cat ${{ github.workspace }}/test/resources/odbcinst.ini
./build_unicode/integration-test
env:
TEST_DSN: ${{ env.TEST_DSN_UNICODE }}
TEST_DATABASE: ${{ env.TEST_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.AURORA_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
- name: Get log location
id: log_location
run: echo "TEMP=$(echo $TMPDIR)" >> $GITHUB_OUTPUT
- name: Delete Aurora RDS Cluster
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
delete_aurora_db_cluster ${{ env.AURORA_CLUSTER_ID }} ${{ secrets.AWS_DEFAULT_REGION }} ${{ env.NUM_INSTANCES }}
- name: Delete Aurora Db Secrets
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
delete_secrets ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
- name: Debug - Get Github Action IP
if: always()
uses: haythem/[email protected]
# Make sure IP is always deleted
- name: Remove Github Action IP
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
remove_ip_from_db_sg \
${{ steps.ip.outputs.ipv4 }} \
${{ env.AURORA_CLUSTER_ID }} \
${{ secrets.AWS_DEFAULT_REGION }}
# - name: Copy Driver Logs
# shell: bash
# run: |
# cp '${{ runner.temp }}/aws-odbc-wrapper/*.log.*' '${{ github.workspace }}\logs'
- name: Archive log results
if: always()
uses: actions/upload-artifact@v4
with:
name: 'mac-integration-test-logs'
path: ${{steps.log_location.outputs.TEMP}}/aws-odbc-wrapper/
retention-days: 3
- name: Archive psql logs
if: always()
uses: actions/upload-artifact@v4
with:
name: 'mac-psql-logs'
path: logs
retention-days: 3
linux-integration-tests:
name: Linux Ubuntu - Integration Tests
needs: [build-linux-psqlodbc]
runs-on: ubuntu-latest
steps:
- name: Setup Cluster ID
run: |
echo "AURORA_CLUSTER_ID=ODBC-Linux-Integ-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" >> $GITHUB_ENV
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Install Build Dependencies
run: |
sudo apt update
sudo apt-get install cmake libcurl4-openssl-dev libssl-dev odbcinst unixodbc-dev uuid-dev zlib1g-dev gdb
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
./scripts/compile_aws_sdk_unix.sh ${{env.BUILD_CONFIG}}
- name: Build aws-advanced-odbc-wrapper
run: |
cmake -S . -B build -DBUILD_UNICODE=ON -DBUILD_ANSI=ON -DBUILD_UNIT_TEST=OFF -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}}
cmake --build build
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: odbc-wrapper-linux-inte
- name: Create RDS Cluster
id: AuroraClusterSetup
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
create_aurora_rds_cluster \
${{ secrets.TEST_USERNAME }} \
${{ secrets.TEST_PASSWORD }} \
${{ env.TEST_DATABASE }} \
${{ env.AURORA_CLUSTER_ID }} \
${{ env.NUM_INSTANCES }} \
${{ env.ENGINE }} \
${{ env.ENGINE_VERSION }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Get Aurora Cluster endpoint
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
endpoint=$(get_cluster_endpoint ${{ env.AURORA_CLUSTER_ID }})
echo "AURORA_CLUSTER_ENDPOINT=$endpoint" >> $GITHUB_ENV
- name: Create Aurora Cluster Secrets
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
secretsArn=$(create_db_secrets \
${{ secrets.TEST_USERNAME }} \
${{ secrets.TEST_PASSWORD }} \
${{ env.ENGINE }} \
${{ env.AURORA_CLUSTER_ENDPOINT }})
echo "::add-mask::$secretsArn"
echo "AURORA_CLUSTER_SECRETS_ARN=$secretsArn" >> $GITHUB_ENV
- name: Add PostgreSQL binaries to PATH
shell: bash
run: |
echo "$(pg_config --bindir)" >> $GITHUB_PATH
- name: Get Github Action IP
if: always()
id: ip
run: |
echo "ipv4=$(curl -s http://checkip.amazonaws.com)" >> $GITHUB_OUTPUT
- name: Add IP to Allowlist
run: |
. "scripts/aws_rds_helper_unix.sh"
add_ip_to_db_sg \
${{ steps.ip.outputs.ipv4 }} \
${{ env.AURORA_CLUSTER_ID }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Create IAM DB User for PostgreSQL
shell: bash
run: |
psql postgresql://${{ secrets.TEST_USERNAME }}:${{secrets.TEST_PASSWORD}}@${{env.AURORA_CLUSTER_ENDPOINT}}:5432/${{ env.TEST_DATABASE }} \
--command="CREATE USER ${{ secrets.TEST_IAM_USER }};" \
--command="GRANT rds_iam TO ${{ secrets.TEST_IAM_USER }};" \
--command="\du"
- name: Create logs folder
run: mkdir logs
- name: Build and Run Ansi Integration Tests
shell: bash
if: ${{ !cancelled() && steps.auroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_ansi \
-DBUILD_UNICODE=OFF -DBUILD_FAILOVER=ON -DBUILD_LIMITLESS=OFF \
-DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} \
-DTEST_SERVER="${{ env.AURORA_CLUSTER_ENDPOINT }}" \
-DTEST_PORT="5432" \
-DTEST_DATABASE="${{ env.TEST_DATABASE }}" \
-DTEST_DSN="${{ env.TEST_DSN_ANSI }}" \
-DTEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-a.so" \
-DBASE_PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbca.so"
cmake --build build_ansi
echo "Ansi Test Built"
cat ${{ github.workspace }}/test/resources/odbc.ini
cat ${{ github.workspace }}/test/resources/odbcinst.ini
gdb -ex run ./build_ansi/integration-test
env:
TEST_DSN: ${{ env.TEST_DSN_ANSI }}
TEST_DATABASE: ${{ env.TEST_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.AURORA_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
# ASAN_OPTIONS: 'detect_container_overflow=0,symbolize=1,print_module_map=2'
- name: Build and Run Unicode Integration Tests
shell: bash
if: ${{steps.AuroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_unicode \
-DBUILD_UNICODE=ON -DBUILD_FAILOVER=ON -DBUILD_LIMITLESS=OFF \
-DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} \
-DTEST_SERVER="${{ env.AURORA_CLUSTER_ENDPOINT }}" \
-DTEST_PORT="5432" \
-DTEST_DATABASE="${{ env.TEST_DATABASE }}" \
-DTEST_DSN="${{ env.TEST_DSN_UNICODE }}" \
-DTEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-w.so" \
-DBASE_PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbcw.so"
cmake --build build_unicode
echo "Unicode Test Built"
cat ${{ github.workspace }}/test/resources/odbc.ini
cat ${{ github.workspace }}/test/resources/odbcinst.ini
./build_unicode/integration-test
env:
TEST_DSN: ${{ env.TEST_DSN_UNICODE }}
TEST_DATABASE: ${{ env.TEST_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.AURORA_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
- name: Delete Aurora RDS Cluster
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
delete_aurora_db_cluster ${{ env.AURORA_CLUSTER_ID }} ${{ secrets.AWS_DEFAULT_REGION }} ${{ env.NUM_INSTANCES }}
- name: Delete Aurora Db Secrets
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
delete_secrets ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
# Make sure IP is always deleted
- name: Remove Github Action IP
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
remove_ip_from_db_sg \
${{ steps.ip.outputs.ipv4 }} \
${{ env.AURORA_CLUSTER_ID }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Archive log results
if: always()
uses: actions/upload-artifact@v4
with:
name: 'linux-integration-test-logs'
path: /tmp/aws-odbc-wrapper/
retention-days: 3
- name: Archive psql logs
if: always()
uses: actions/upload-artifact@v4
with:
name: 'linux-psql-logs'
path: logs/
retention-days: 3
windows-limitless-integration-tests:
name: Windows - Limitless Integration Tests
needs: [build-win-psqlodbc]
runs-on: windows-latest
steps:
- name: Setup Cluster ID and Shard ID Env Variables
run: |
echo "LIMITLESS_CLUSTER_ID=AWS-ODBC-Win-Limitless-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" | Out-File -FilePath $env:GITHUB_ENV -Append
echo "LIMITLESS_SHARD_ID=AWS-ODBC-Win-Shard-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
./scripts/compile_aws_sdk_win.ps1 ${{env.BUILD_CONFIG}}
- name: Setup Dotnet for WiX
uses: actions/setup-dotnet@v4
- name: Install WiX
shell: cmd
run: |
dotnet tool install --global wix --version ${{env.WIX_VERSION}}
wix extension add --global WixToolset.UI.wixext/${{env.WIX_VERSION}}
- name: Run build installer script
shell: pwsh
run: |
./installer/build_installer.ps1 ${{env.BUILD_CONFIG}}
- name: Retrieve psqlODBC Cache
uses: actions/cache@v4
with:
path: psqlodbc
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Install psqlODBC Driver
shell: pwsh
working-directory: psqlodbc
run: |
Start-Process msiexec "/i psqlodbc_x64.msi /quiet /norestart" -Wait;
- name: Install driver
shell: pwsh
working-directory: installer
run: Start-Process msiexec "/lp! .\test.log /i aws-advanced-odbc-wrapper.msi /quiet /norestart" -Wait;
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: odbc-wrapper-win-inte
- name: Create Limitless RDS Cluster
id: AuroraClusterSetup
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
Create-Limitless-RDS-Cluster `
-TestUsername ${{ secrets.TEST_USERNAME }} `
-TestPassword ${{ secrets.TEST_PASSWORD }} `
-TestDatabase ${{ env.TEST_LIMITLESS_DATABASE }} `
-ClusterId ${{ env.LIMITLESS_CLUSTER_ID }} `
-ShardId ${{ env.LIMITLESS_SHARD_ID }} `
-Engine ${{ env.ENGINE }} `
-EngineVersion ${{ env.ENGINE_LIMITLESS_VERSION }} `
-AwsRdsMonitoringRoleArn ${{ secrets.AWS_RDS_MONITORING_ROLE_ARN }} `
-Region ${{ secrets.AWS_DEFAULT_REGION }}
- name: Get Limitless Cluster endpoint
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
$endpoint = (Get-Cluster-Endpoint -ClusterId ${{ env.LIMITLESS_CLUSTER_ID }})
echo "LIMITLESS_CLUSTER_ENDPOINT=$endpoint" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Create Aurora Cluster Secrets
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
$secrets = (Create-Db-Secrets `
-Username ${{ secrets.TEST_USERNAME }} `
-Password ${{ secrets.TEST_PASSWORD }} `
-Engine "postgres" `
-ClusterEndpoint ${{ env.LIMITLESS_CLUSTER_ENDPOINT }})
echo "::add-mask::$secrets"
echo "AURORA_CLUSTER_SECRETS_ARN=$secrets" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Add PostgreSQL binaries to PATH
shell: bash
run: |
echo "$PGBIN" >> $GITHUB_PATH
- name: Create IAM DB User for PostgreSQL
shell: bash
run: |
psql postgresql://${{ secrets.TEST_USERNAME }}:${{secrets.TEST_PASSWORD}}@${{env.LIMITLESS_CLUSTER_ENDPOINT}}:5432/${{ env.TEST_LIMITLESS_DATABASE }} \
--command="CREATE USER ${{ secrets.TEST_IAM_USER }};" \
--command="GRANT rds_iam TO ${{ secrets.TEST_IAM_USER }};" \
--command="\du"
- name: Install Ansi DSNs
shell: pwsh
run: |
Add-OdbcDsn -Name ${{ env.TEST_DSN_ANSI }} `
-DriverName "${{ env.DRIVER_NAME_ANSI }}" `
-DsnType User `
-SetPropertyValue `
@("RDS_AUTH_TYPE=database", `
"Server=${{ env.LIMITLESS_CLUSTER_ENDPOINT }}", `
"Port=5432", `
"SSLMode=prefer", `
"BASE_DRIVER=C:\Program Files\psqlODBC\1700\bin\podbc30a.dll")
- name: Install Unicode DSNs
shell: pwsh
run: |
Add-OdbcDsn -Name ${{ env.TEST_DSN_UNICODE }} `
-DriverName "${{ env.DRIVER_NAME_UNICODE }}" `
-DsnType User `
-SetPropertyValue `
@("RDS_AUTH_TYPE=database", `
"Server=${{ env.LIMITLESS_CLUSTER_ENDPOINT }}", `
"Port=5432", `
"SSLMode=prefer", `
"BASE_DRIVER=C:\Program Files\psqlODBC\1700\bin\podbc35w.dll")
- name: Create logs folder
run: mkdir logs
- name: Build and Run Ansi Integration Tests
shell: pwsh
if: ${{steps.AuroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_ansi -DCMAKE_BUILD_TYPE="${{env.BUILD_CONFIG}}" `
-DBUILD_UNICODE=OFF -DBUILD_FAILOVER=OFF -DBUILD_LIMITLESS=ON
cmake --build build_ansi --config ${{env.BUILD_CONFIG}}
echo "Ansi Test Built"
gdb -ex run .\build_ansi\${{env.BUILD_CONFIG}}\integration-test.exe
env:
TEST_DSN: ${{ env.TEST_DSN_ANSI }}
TEST_DATABASE: ${{ env.TEST_LIMITLESS_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.LIMITLESS_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
- name: Build and Run Unicode Integration Tests
shell: pwsh
if: ${{steps.AuroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_unicode -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} `
-DBUILD_UNICODE=ON -DBUILD_FAILOVER=OFF -DBUILD_LIMITLESS=ON
cmake --build build_unicode --config ${{env.BUILD_CONFIG}}
echo "Unicode Test Built"
.\build_unicode\${{env.BUILD_CONFIG}}\integration-test.exe
env:
TEST_DSN: ${{ env.TEST_DSN_UNICODE }}
TEST_DATABASE: ${{ env.TEST_LIMITLESS_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.LIMITLESS_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
- name: Delete Aurora RDS Cluster
if: always()
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
Delete-Limitless-Db-Cluster -ClusterId ${{ env.LIMITLESS_CLUSTER_ID }} -ShardId ${{ env.LIMITLESS_SHARD_ID }} -Region ${{ secrets.AWS_DEFAULT_REGION }}
- name: Delete Aurora Db Secrets
if: always()
shell: pwsh
working-directory: ./scripts
run: |
. ".\aws_rds_helper_win.ps1"
Delete-Secrets ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
# Make sure IP is always deleted
- name: Get Github Action IP
if: always()
id: ip
uses: haythem/[email protected]
- name: Remove Github Action IP
if: always()
run: |
aws ec2 revoke-security-group-ingress `
--group-name default `
--protocol tcp `
--port 5432 `
--cidr ${{ steps.ip.outputs.ipv4 }}/32 `
*> $null;
# - name: Copy Driver Logs
# shell: pwsh
# run: |
# Copy-Item -Path '${{ runner.temp }}/aws-odbc-wrapper/*.log.*' -Destination '${{ github.workspace }}\logs'
- name: Archive log results
if: always()
uses: actions/upload-artifact@v4
with:
name: 'windows-limitless-integration-test-logs'
path: C:\Users\runneradmin\AppData\Local\Temp\aws-odbc-wrapper\
retention-days: 3
- name: Archive psql logs
if: always()
uses: actions/upload-artifact@v4
with:
name: 'windows-limitless-psql-logs'
path: logs
retention-days: 3
macos-limitless-integration-tests:
name: MacOS - Limitless Integration Tests
if: github.event_name == 'workflow_dispatch'
needs: [build-macos-psqlodbc]
runs-on: macos-15
steps:
- name: Setup Cluster ID
run: |
echo "LIMITLESS_CLUSTER_ID=AWS-ODBC-Macos-Limitless-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" >> $GITHUB_ENV
echo "LIMITLESS_SHARD_ID=AWS-ODBC-Macos-Shard-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" >> $GITHUB_ENV
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Install Build Dependencies
run: |
brew update && brew upgrade && brew cleanup
brew install cmake unixodbc postgresql curl openssl zlib icu4c
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
./scripts/compile_aws_sdk_unix.sh ${{env.BUILD_CONFIG}}
- name: Build aws-advanced-odbc-wrapper
run: |
cmake -S . -B build -DBUILD_UNICODE=ON -DBUILD_ANSI=ON -DBUILD_UNIT_TEST=OFF -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}}
cmake --build build
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: odbc-wrapper-macos-inte
- name: Create Limitless RDS Cluster
id: AuroraClusterSetup
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
create_limitless_rds_cluster \
${{ secrets.TEST_USERNAME }} \
${{ secrets.TEST_PASSWORD }} \
${{ env.TEST_LIMITLESS_DATABASE }} \
${{ env.LIMITLESS_CLUSTER_ID }} \
${{ env.LIMITLESS_SHARD_ID }} \
${{ env.ENGINE }} \
${{ env.ENGINE_VERSION }} \
${{ secrets.AWS_RDS_MONITORING_ROLE_ARN }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Get Limitless Cluster endpoint
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
endpoint=$(get_cluster_endpoint ${{ env.LIMITLESS_CLUSTER_ID }})
echo "LIMITLESS_CLUSTER_ENDPOINT=$endpoint" >> $GITHUB_ENV
- name: Create Aurora Cluster Secrets
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
secretsArn=$(create_db_secrets \
${{ secrets.TEST_USERNAME }} \
${{ secrets.TEST_PASSWORD }} \
${{ env.ENGINE }} \
${{ env.LIMITLESS_CLUSTER_ENDPOINT }})
echo "::add-mask::$secretsArn"
echo "AURORA_CLUSTER_SECRETS_ARN=$secretsArn" >> $GITHUB_ENV
- name: Install PostgreSQL on macOS
if: runner.os == 'macOS'
run: |
brew install postgresql@16
# --overwrite: Overwrite pre-installed GitHub Actions PostgreSQL binaries
brew link --overwrite postgresql@16
- name: Get Github Action IP
if: always()
id: ip
run: |
echo "ipv4=$(curl -s http://checkip.amazonaws.com)" >> $GITHUB_OUTPUT
- name: Add IP to Allowlist
run: |
. "scripts/aws_rds_helper_unix.sh"
add_ip_to_db_sg \
${{ steps.ip.outputs.ipv4 }} \
${{ env.LIMITLESS_CLUSTER_ID }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Create IAM DB User for PostgreSQL
shell: bash
run: |
psql postgresql://${{ secrets.TEST_USERNAME }}:${{secrets.TEST_PASSWORD}}@${{env.LIMITLESS_CLUSTER_ENDPOINT}}:5432/${{ env.TEST_LIMITLESS_DATABASE }} \
--command="CREATE USER ${{ secrets.TEST_IAM_USER }};" \
--command="GRANT rds_iam TO ${{ secrets.TEST_IAM_USER }};" \
--command="\du"
- name: Create logs folder
run: mkdir logs
- name: Build and Run Ansi Integration Tests
shell: bash
if: ${{ !cancelled() && steps.auroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_ansi \
-DBUILD_UNICODE=OFF -DBUILD_FAILOVER=OFF -DBUILD_LIMITLESS=ON -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} \
-DTEST_SERVER="${{ env.LIMITLESS_CLUSTER_ENDPOINT }}" \
-DTEST_PORT="5432" \
-DTEST_DATABASE="${{ env.TEST_LIMITLESS_DATABASE }}" \
-DTEST_DSN="${{ env.TEST_DSN_ANSI }}" \
-DTEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-a.dylib" \
-DBASE_PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbca.so"
cmake --build build_ansi
echo "Ansi Test Built"
./build_ansi/integration-test
env:
TEST_DSN: ${{ env.TEST_DSN_ANSI }}
TEST_DATABASE: ${{ env.TEST_LIMITLESS_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.LIMITLESS_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
# ASAN_OPTIONS: 'detect_container_overflow=0'
- name: Build and Run Unicode Integration Tests
shell: bash
if: ${{steps.AuroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_unicode \
-DBUILD_UNICODE=ON -DBUILD_FAILOVER=OFF -DBUILD_LIMITLESS=ON -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} \
-DTEST_SERVER="${{ env.AURORA_CLUSTER_ENDPOINT }}" \
-DTEST_PORT="5432" \
-DTEST_DATABASE="${{ env.TEST_LIMITLESS_DATABASE }}" \
-DTEST_DSN="${{ env.TEST_DSN_UNICODE }}" \
-DTEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-w.dylib" \
-DBASE_PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbcw.so"
cmake --build build_unicode
echo "Unicode Test Built"
./build_unicode/integration-test
env:
TEST_DSN: ${{ env.TEST_DSN_UNICODE }}
TEST_DATABASE: ${{ env.TEST_LIMITLESS_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.LIMITLESS_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
- name: Get log location
id: log_location
run: echo "TEMP=$(echo $TMPDIR)" >> $GITHUB_OUTPUT
- name: Delete Aurora RDS Cluster
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
delete_limitless_db_cluster ${{ env.LIMITLESS_CLUSTER_ID }} ${{ env.LIMITLESS_SHARD_ID }} ${{ secrets.AWS_DEFAULT_REGION }}
- name: Delete Aurora Db Secrets
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
delete_secrets ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
- name: Debug - Get Github Action IP
if: always()
uses: haythem/[email protected]
# Make sure IP is always deleted
- name: Remove Github Action IP
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
remove_ip_from_db_sg \
${{ steps.ip.outputs.ipv4 }} \
${{ env.LIMITLESS_CLUSTER_ID }} \
${{ secrets.AWS_DEFAULT_REGION }}
# - name: Copy Driver Logs
# shell: bash
# run: |
# cp '${{ runner.temp }}/aws-odbc-wrapper/*.log.*' '${{ github.workspace }}\logs'
- name: Archive log results
if: always()
uses: actions/upload-artifact@v4
with:
name: 'mac-limitless-integration-test-logs'
path: ${{steps.log_location.outputs.TEMP}}/aws-odbc-wrapper/
retention-days: 3
- name: Archive psql logs
if: always()
uses: actions/upload-artifact@v4
with:
name: 'mac-limitless-psql-logs'
path: logs/
retention-days: 3
linux-limitless-integration-tests:
name: Linux Ubuntu - Limitless Integration Tests
needs: [build-linux-psqlodbc]
runs-on: ubuntu-latest
steps:
- name: Setup Cluster ID
run: |
echo "LIMITLESS_CLUSTER_ID=AWS-ODBC-Linux-Limitless-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" >> $GITHUB_ENV
echo "LIMITLESS_SHARD_ID=AWS-ODBC-Linux-Shard-${{github.run_id}}${{github.run_number}}${{github.run_attempt}}" >> $GITHUB_ENV
- name: Checkout aws-advanced-odbc-wrapper
uses: actions/checkout@v4
- name: Install Build Dependencies
run: |
sudo apt update
sudo apt-get install cmake libcurl4-openssl-dev libssl-dev odbcinst unixodbc-dev uuid-dev zlib1g-dev gdb
- name: Retrieve AWS SDK for C++ Cache
id: cache-aws-sdk
uses: actions/cache@v4
with:
path: aws_sdk/install
key: ${{ runner.os }}-aws-sdk-cpp-${{env.BUILD_CONFIG}}-shared
- name: Build AWS SDK for C++
if: ${{steps.cache-aws-sdk.outputs.cache-hit != 'true'}}
run: |
./scripts/compile_aws_sdk_unix.sh ${{env.BUILD_CONFIG}}
- name: Build aws-advanced-odbc-wrapper
run: |
cmake -S . -B build -DBUILD_UNICODE=ON -DBUILD_ANSI=ON -DBUILD_UNIT_TEST=OFF -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}}
cmake --build build
- name: Retrieve psqlODBC Cache
id: cache-psqlodbc
uses: actions/cache@v4
with:
path: psqlodbc/.libs/
key: ${{ runner.os }}-psqlodbc-driver
fail-on-cache-miss: true
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: odbc-wrapper-linux-inte
- name: Create Limitless RDS Cluster
id: AuroraClusterSetup
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
create_limitless_rds_cluster \
${{ secrets.TEST_USERNAME }} \
${{ secrets.TEST_PASSWORD }} \
${{ env.TEST_LIMITLESS_DATABASE }} \
${{ env.LIMITLESS_CLUSTER_ID }} \
${{ env.LIMITLESS_SHARD_ID }} \
${{ env.ENGINE }} \
${{ env.ENGINE_VERSION }} \
${{ secrets.AWS_RDS_MONITORING_ROLE_ARN }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Get Limitless Cluster endpoint
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
endpoint=$(get_cluster_endpoint ${{ env.LIMITLESS_CLUSTER_ID }})
echo "LIMITLESS_CLUSTER_ENDPOINT=$endpoint" >> $GITHUB_ENV
- name: Create Aurora Cluster Secrets
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
secretsArn=$(create_db_secrets \
${{ secrets.TEST_USERNAME }} \
${{ secrets.TEST_PASSWORD }} \
${{ env.ENGINE }} \
${{ env.LIMITLESS_CLUSTER_ENDPOINT }})
echo "::add-mask::$secretsArn"
echo "AURORA_CLUSTER_SECRETS_ARN=$secretsArn" >> $GITHUB_ENV
- name: Add PostgreSQL binaries to PATH
shell: bash
run: |
echo "$(pg_config --bindir)" >> $GITHUB_PATH
- name: Get Github Action IP
if: always()
id: ip
run: |
echo "ipv4=$(curl -s http://checkip.amazonaws.com)" >> $GITHUB_OUTPUT
- name: Add IP to Allowlist
run: |
. "scripts/aws_rds_helper_unix.sh"
add_ip_to_db_sg \
${{ steps.ip.outputs.ipv4 }} \
${{ env.LIMITLESS_CLUSTER_ID }} \
${{ secrets.AWS_DEFAULT_REGION }}
- name: Create IAM DB User for PostgreSQL
shell: bash
run: |
psql postgresql://${{ secrets.TEST_USERNAME }}:${{secrets.TEST_PASSWORD}}@${{env.LIMITLESS_CLUSTER_ENDPOINT}}:5432/${{ env.TEST_LIMITLESS_DATABASE }} \
--command="CREATE USER ${{ secrets.TEST_IAM_USER }};" \
--command="GRANT rds_iam TO ${{ secrets.TEST_IAM_USER }};" \
--command="\du"
- name: Create logs folder
run: mkdir logs
- name: Build and Run Ansi Integration Tests
shell: bash
if: ${{ !cancelled() && steps.auroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_ansi \
-DBUILD_UNICODE=OFF -DBUILD_FAILOVER=OFF -DBUILD_LIMITLESS=ON -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} \
-DTEST_SERVER="${{ env.LIMITLESS_CLUSTER_ENDPOINT }}" \
-DTEST_PORT="5432" \
-DTEST_DATABASE="${{ env.TEST_LIMITLESS_DATABASE }}" \
-DTEST_DSN="${{ env.TEST_DSN_ANSI }}" \
-DTEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-a.so" \
-DBASE_PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbca.so"
cmake --build build_ansi
echo "Ansi Test Built"
gdb -ex run ./build_ansi/integration-test
env:
TEST_DSN: ${{ env.TEST_DSN_ANSI }}
TEST_DATABASE: ${{ env.TEST_LIMITLESS_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.LIMITLESS_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
# ASAN_OPTIONS: 'detect_container_overflow=0'
- name: Build and Run Unicode Integration Tests
shell: bash
if: ${{steps.AuroraClusterSetup.outcome == 'success'}}
run: |
cmake -S test/integration -B build_unicode \
-DBUILD_UNICODE=ON -DBUILD_FAILOVER=OFF -DBUILD_LIMITLESS=ON -DCMAKE_BUILD_TYPE=${{env.BUILD_CONFIG}} \
-DTEST_SERVER="${{ env.AURORA_CLUSTER_ENDPOINT }}" \
-DTEST_PORT="5432" \
-DTEST_DATABASE="${{ env.TEST_LIMITLESS_DATABASE }}" \
-DTEST_DSN="${{ env.TEST_DSN_UNICODE }}" \
-DTEST_DRIVER_PATH="${{ github.workspace }}/build/driver/aws-advanced-odbc-wrapper-w.so" \
-DBASE_PG_DRIVER_PATH="${{ github.workspace }}/psqlodbc/.libs/psqlodbcw.so"
cmake --build build_unicode --config ${{env.BUILD_CONFIG}}
echo "Unicode Test Built"
./build_unicode/integration-test
env:
TEST_DSN: ${{ env.TEST_DSN_UNICODE }}
TEST_DATABASE: ${{ env.TEST_LIMITLESS_DATABASE }}
TEST_USERNAME: ${{ secrets.TEST_USERNAME }}
TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
TEST_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
TEST_IAM_USER: ${{ secrets.TEST_IAM_USER }}
TEST_SECRET_ARN: ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
TEST_SERVER: ${{ env.LIMITLESS_CLUSTER_ENDPOINT }}
TEST_PORT: '5432'
ODBCINI: "${{ github.workspace }}/test/resources/odbc.ini"
ODBCINST: "${{ github.workspace }}/test/resources/odbcinst.ini"
- name: Delete Aurora RDS Cluster
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
delete_limitless_db_cluster ${{ env.LIMITLESS_CLUSTER_ID }} ${{ env.LIMITLESS_SHARD_ID }} ${{ secrets.AWS_DEFAULT_REGION }}
- name: Delete Aurora Db Secrets
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
delete_secrets ${{ env.AURORA_CLUSTER_SECRETS_ARN }}
# Make sure IP is always deleted
- name: Remove Github Action IP
if: always()
shell: bash
run: |
. "./scripts/aws_rds_helper_unix.sh"
remove_ip_from_db_sg \
${{ steps.ip.outputs.ipv4 }} \
${{ env.LIMITLESS_CLUSTER_ID }} \
${{ secrets.AWS_DEFAULT_REGION }}
# - name: Copy Driver Logs
# shell: bash
# run: |
# cp '${{ runner.temp }}/aws-odbc-wrapper/*.log.*' '${{ github.workspace }}\logs'
- name: Archive log results
if: always()
uses: actions/upload-artifact@v4
with:
name: 'linux-limitless-integration-test-logs'
path: /tmp/aws-odbc-wrapper/
retention-days: 3
- name: Archive psql logs
if: always()
uses: actions/upload-artifact@v4
with:
name: 'linux-limitless-psql-logs'
path: logs
retention-days: 3