Skip to content

Implements Oracle

Implements Oracle #192

Workflow file for this run

name: build-mysql
on:
push:
branches:
- master
pull_request:
branches:
- master
paths-ignore:
- "**/README.md"
- "**/LICENSE"
- "**/SECURITY.md"
- "**/.gitignore"
- "**/resources/**"
- "**/.github/ISSUE_TEMPLATE/**"
- "**/website/**"
jobs:
mysql:
name: mysql
runs-on: ubuntu-latest
services:
mysql:
image: mysql:latest
options: >-
--health-cmd="mysqladmin ping --silent"
--health-interval=10s
--health-timeout=5s
--health-retries=3
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: njord_rootpwd
MYSQL_DATABASE: njord_db
MYSQL_USER: njord_user
MYSQL_PASSWORD: njord_password
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
- name: Cache Cargo Dependencies
uses: actions/cache@v2
with:
path: |
~/.cargo
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Run Clippy
run: cargo clippy --all-targets --all-features
- name: Build Project
run: cargo build --release --features "mysql"
- name: Wait for MySQL to be ready
run: |
until mysqladmin ping -h 127.0.0.1 --silent; do
echo "Waiting for MySQL to be ready..."
sleep 5
done
- name: Set up MySQL schema
env:
MYSQL_PWD: njord_rootpwd
run: |
echo "Injecting schema and data into MySQL..."
mysql -h 127.0.0.1 -u njord_user -pnjord_password njord_db < njord/db/test/mysql.sql
- name: Running Integration Tests for MySQL
env:
MYSQL_DATABASE: njord_db
MYSQL_USER: njord_user
MYSQL_PASSWORD: njord_password
MYSQL_HOST: 127.0.0.1
run: cargo test --test mysql_tests
oracle:
name: oracle
runs-on: ubuntu-latest
# services:
# oracle:
# image: gvenzl/oracle-free:latest
# options: >-
# --health-cmd="healthcheck.sh"
# --health-interval=10s
# --health-timeout=5s
# --health-retries=10
# ports:
# - 1521:1521
# - 5500:5500
# env:
# ORACLE_PASSWORD: njord_password
# APP_USER: test
# APP_USER_PASSWORD: test
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
- name: Cache Cargo Dependencies
uses: actions/cache@v2
with:
path: |
~/.cargo
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Run Clippy
run: cargo clippy --all-targets --all-features
- name: Build Project
run: cargo build --release --features "oracle"
- run: mkdir ${{ github.workspace }}/database-files
- uses: gvenzl/setup-oracle-free@v1
with:
app-user: njord_user
app-user-password: njord_password
volume: ${{ github.workspace }}/database-files
# startup-scripts: ${{ github.workspace }}/my-scripts
# Install Oracle Instant Client
- name: Install Oracle Instant Client
run: |
sudo apt-get update
sudo apt-get install -y libaio1
wget https://download.oracle.com/otn_software/linux/instantclient/2350000/instantclient-basic-linux.x64-23.5.0.24.07.zip
unzip instantclient-basic-linux.x64-23.5.0.24.07.zip
sudo mkdir -p /opt/oracle # Create the directory structure if it doesn't exist
sudo mv instantclient_23_5 /opt/oracle/instantclient
sudo sh -c "echo /opt/oracle/instantclient > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
- name: Set Oracle Library Path
run: |
echo "/opt/oracle/instantclient" | sudo tee -a /etc/ld.so.conf.d/oracle-instantclient.conf
sudo ldconfig
env:
LD_LIBRARY_PATH: "/opt/oracle/instantclient"
- name: Check Oracle Client
run: |
ls /opt/oracle/instantclient
ldd /opt/oracle/instantclient/libclntsh.so
# - name: Install Oracle Instant Client
# run: |
# wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip
# wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-sqlplus-linuxx64.zip
# unzip -o instantclient-basiclite-linuxx64.zip
# unzip -o instantclient-sqlplus-linuxx64.zip
# mkdir -p /opt/oracle/instantclient
# mv instantclient_*/* /opt/oracle/instantclient/
# rm -rf instantclient_*
# rm -f /opt/oracle/instantclient/*jdbc* /opt/oracle/instantclient/*occi* /opt/oracle/instantclient/*mysql* /opt/oracle/instantclient/*jar /opt/oracle/instantclient/uidrvci /opt/oracle/instantclient/genezi /opt/oracle/instantclient/adrci
# echo "/opt/oracle/instantclient" > /etc/ld.so.conf.d/oracle-instantclient.conf
# ldconfig
# - name: Link sqlplus binary to PATH
# run: |
# ln -s /opt/oracle/instantclient/sqlplus /usr/bin/sqlplus
# - name: Ensure Oracle Instant Client binaries are executable
# run: chmod +x /opt/oracle/instantclient/*
# - name: Check Oracle container port
# run: netstat -an | grep 1521
# - name: Wait for Oracle to be ready
# run: |
# echo "Waiting for Oracle to be ready..."
# until echo "exit" | sqlplus test/test@//127.0.0.1:1521/FREEPDB1; do
# echo "Waiting for Oracle to be ready..."
# sleep 10
# done
# - name: Set up Oracle schema
# run: |
# echo "Injecting schema and data into Oracle..."
# sqlplus test/test@//127.0.0.1:1521/FREEPDB1 @njord/db/test/oracle/2_setup.sql
- name: Running Integration Tests for Oracle
env:
ORACLE_DATABASE: FREEPDB1
APP_USER: test
APP_USER_PASSWORD: test
ORACLE_HOST: 127.0.0.1
run: cargo test --test oracle_tests