Skip to content

Cleanup

Cleanup #290

Workflow file for this run

name: build
on:
push:
branches:
- master
pull_request:
branches:
- master
paths-ignore:
- "**/README.md"
- "**/LICENSE"
- "**/SECURITY.md"
- "**/.gitignore"
- "**/resources/**"
- "**/.github/ISSUE_TEMPLATE/**"
- "**/website/**"
jobs:
# Splitting out into separate jobs for linting on all targets/features
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- 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
sqlite:
name: sqlite
runs-on: ubuntu-latest
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: Build Project
run: |
cd njord
cargo build --release --features "sqlite"
- name: Running Integration Tests for SQLite
run: |
cd njord
cargo test --features "sqlite" --test sqlite_tests
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: Build Project
run: |
cd njord
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: |
cd njord
cargo test --features "mysql" --test mysql_tests
oracle:
name: oracle
runs-on: ubuntu-latest
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: Build Project
run: |
cd njord
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 }}/njord/db/test/oracle
# 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: Running Integration Tests for Oracle
env:
ORACLE_DATABASE: FREEPDB1
APP_USER: test
APP_USER_PASSWORD: test
ORACLE_HOST: 127.0.0.1
run: |
cd njord
cargo test --features "oracle" --test oracle_tests
mssql:
name: mssql
runs-on: ubuntu-20.04
services:
mssql:
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- 1433:1433
env:
ACCEPT_EULA: Y
MSSQL_SA_PASSWORD: Njord_passw0rd
MSSQL_PID: Developer
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: Build Project
run: |
cd njord
cargo build --release --features "mssql"
- name: Wait for SQL Server to be ready
run: |
echo "Waiting for SQL Server to be fully operational..."
until /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Njord_passw0rd -Q "SELECT @@VERSION" > /dev/null 2>&1
do
echo "SQL Server is still initializing. Waiting..."
sleep 5
done
echo "SQL Server is now operational."
- name: Set up MSSQL schema
run: |
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Njord_passw0rd -C -i "${{ github.workspace }}/njord/db/test/mssql/setup.sql"
- name: Running Integration Tests for MSSQL
env:
MSSQL_DATABASE: NjordDatabase
MSSQL_USER: sa
MSSQL_PASSWORD: Njord_passw0rd
MSSQL_HOST: mssql
run: |
cd njord
cargo test --features "mssql" --test mssql_tests