Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 35 additions & 19 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:
- '.test/**'
- 'client/**'
- 'server/**'
- 'dist/**'
- 'Makefile.PL'

permissions:
Expand Down Expand Up @@ -75,15 +76,39 @@ jobs:
done
exit 1

- name: Set up TLS certificates
run: sudo .test/tls-setup.sh
- name: Generate test credentials
run: |
DB_PW=$(openssl rand -base64 24)
ROOT_PW=$(openssl rand -base64 24)
echo "NICTOOL_DB_USER_PASSWORD=$DB_PW" >> "$GITHUB_ENV"
echo "DB_ROOT_PASSWORD=root" >> "$GITHUB_ENV"
echo "NICTOOL_DB_USER=nictool" >> "$GITHUB_ENV"
echo "NICTOOL_DB_NAME=nictool" >> "$GITHUB_ENV"
echo "DB_ENGINE=mysql" >> "$GITHUB_ENV"
echo "DB_HOSTNAME=localhost" >> "$GITHUB_ENV"
echo "ROOT_USER_EMAIL=ci@nictool.test" >> "$GITHUB_ENV"
echo "ROOT_USER_PASSWORD=$ROOT_PW" >> "$GITHUB_ENV"
echo "NICTOOL_CLIENT_DIR=$GITHUB_WORKSPACE/client" >> "$GITHUB_ENV"
echo "DB_SSL=1" >> "$GITHUB_ENV"

- name: Allow Apache to traverse workspace path
run: |
# Ubuntu 21.04+ defaults home dirs to 750; www-data needs o+x to traverse
dir="$GITHUB_WORKSPACE"
while [ "$dir" != "/" ]; do
sudo chmod o+x "$dir"
dir="$(dirname "$dir")"
done

- name: Set up NicTool configs, Apache, and TLS
run: sudo -E dist/setup/install-nictool.sh --nt-dir="$GITHUB_WORKSPACE"

- name: Install Perl modules for Apache/mod_perl
run: |
# Install modules not available as apt packages
sudo cpanm --notest \
CryptX Crypt::Mac::HMAC Crypt::KeyDerivation \
Test::HTML::Lint Time::TAI64 DBD::MariaDB

- name: Install NicTool client and server
run: |
cd "$GITHUB_WORKSPACE/client"
Expand All @@ -94,25 +119,16 @@ jobs:
perl Makefile.PL
sudo cpanm -n .

- name: Configure Apache for NicTool
run: |
client_conf="$RUNNER_TEMP/nictoolclient.conf"
server_conf="$RUNNER_TEMP/nictoolserver.conf"

sed "s|/home/NicTool|$GITHUB_WORKSPACE|g" .test/nictoolclient.conf > "$client_conf"
sed "s|/home/NicTool|$GITHUB_WORKSPACE|g" .test/nictoolserver.conf > "$server_conf"

sed \
-e "s|/home/NicTool/.test/nictoolclient.conf|$client_conf|g" \
-e "s|/home/NicTool/.test/nictoolserver.conf|$server_conf|g" \
-e "s|/home/NicTool|$GITHUB_WORKSPACE|g" \
.test/apache-ci.conf | sudo tee /etc/apache2/sites-enabled/nictool.conf > /dev/null

- name: Restart Apache
run: sudo service apache2 restart || sudo cat /var/log/apache2/error.log

- name: Create NicTool test database
run: perl .test/create_tables.pl
run: |
cd "$GITHUB_WORKSPACE/server/sql"
echo "" | perl create_tables.pl --environment

- name: Create test user and test.cfg
run: perl dist/setup/setup-test-env.pl

- name: Run client tests
run: make -C "$GITHUB_WORKSPACE/client" test
Expand All @@ -128,4 +144,4 @@ jobs:
apache2 -version
sudo cat /var/log/apache2/error.log || true
cat /etc/apache2/apache2.conf || true
ls /usr/lib/apache2/modules/ || true
ls /usr/lib/apache2/modules/ || true
134 changes: 134 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
name: Docker

on:
pull_request:
types: [opened, synchronize, reopened]
paths:
- '.github/workflows/docker.yml'
- 'client/**'
- 'server/**'
- 'dist/**'

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build Docker image
uses: docker/build-push-action@v6
with:
context: .
file: dist/docker/Dockerfile
tags: docker-web:latest
cache-from: type=gha
cache-to: type=gha,mode=max

docker-tests:
needs: build
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Load Docker image from cache
uses: docker/build-push-action@v6
with:
context: .
file: dist/docker/Dockerfile
tags: docker-web:latest
load: true
cache-from: type=gha

- name: Generate credentials
run: |
dist/docker/generate-env.sh
echo "NICTOOL_TEST_PASSWORD=$(sed -n 's/^ROOT_USER_PASSWORD=//p' dist/docker/.env)" >> "$GITHUB_ENV"

- name: Start containers
working-directory: dist/docker
run: docker compose up -d --wait
timeout-minutes: 5

- name: Run server tests
run: docker compose -f dist/docker/docker-compose.yml exec -T web make -C /usr/local/nictool/server test

- name: Run client tests
run: docker compose -f dist/docker/docker-compose.yml exec -T web make -C /usr/local/nictool/client test

- name: Failure diagnostics
if: failure()
run: |
docker compose -f dist/docker/docker-compose.yml logs web || true
docker compose -f dist/docker/docker-compose.yml logs db || true

e2e-tests:
needs: build
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Load Docker image from cache
uses: docker/build-push-action@v6
with:
context: .
file: dist/docker/Dockerfile
tags: docker-web:latest
load: true
cache-from: type=gha

- name: Generate credentials
run: |
dist/docker/generate-env.sh
echo "NICTOOL_TEST_PASSWORD=$(sed -n 's/^ROOT_USER_PASSWORD=//p' dist/docker/.env)" >> "$GITHUB_ENV"

- name: Start containers
working-directory: dist/docker
run: docker compose up -d --wait
timeout-minutes: 5

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: client/t/e2e/package-lock.json

- name: Cache Playwright browsers
uses: actions/cache@v4
id: playwright-cache
with:
path: ~/.cache/ms-playwright
key: playwright-${{ hashFiles('client/t/e2e/package-lock.json') }}

- name: Install E2E dependencies
working-directory: client/t/e2e
run: |
npm ci
npx playwright install --with-deps chromium

- name: Run E2E tests
working-directory: client/t/e2e
env:
NICTOOL_URL: http://localhost:8080
NICTOOL_TEST_PASSWORD: ${{ env.NICTOOL_TEST_PASSWORD }}
DEBUG: pw:api
run: npx playwright test --reporter=list

- name: Failure diagnostics
if: failure()
run: |
docker compose -f dist/docker/docker-compose.yml logs web || true
docker compose -f dist/docker/docker-compose.yml logs db || true
docker compose -f dist/docker/docker-compose.yml exec -T web cat /var/log/apache2/error.log 2>/dev/null || true
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ client/bin/do_build_test.sh
server/bin/do_build_test.sh
client/lib/nictoolclient.conf
server/lib/nictoolserver.conf
dist/docker/.env
server/t/test.cfg
server/api/t/test.cfg
58 changes: 0 additions & 58 deletions .test/apache-ci.conf

This file was deleted.

40 changes: 33 additions & 7 deletions .test/apache-matt.conf
Original file line number Diff line number Diff line change
@@ -1,7 +1,30 @@
PerlRequire /Users/matt/git/nictool/client/lib/nictoolclient.conf
# Matt's local dev config — macOS with NicTool at /Users/matt/git/nictool
#
# Usage:
# export NICTOOL_DB_USER=nictool NICTOOL_DB_USER_PASSWORD=<your_pw>
# export NICTOOL_CLIENT_DIR=/Users/matt/git/nictool/client
# sudo cp .test/apache-matt.conf /etc/apache2/sites-enabled/nictool.conf
# sudo apachectl restart
#
# Or generate from the shared template instead:
# NT_DIR=/Users/matt/git/nictool dist/setup/install-nictool.sh

PerlPassEnv DB_ENGINE
PerlPassEnv DB_HOSTNAME
PerlPassEnv DB_PORT
PerlPassEnv DB_SSL
PerlPassEnv NICTOOL_DB_NAME
PerlPassEnv NICTOOL_DB_USER
PerlPassEnv NICTOOL_DB_USER_PASSWORD
PerlPassEnv NICTOOL_CLIENT_DIR
PerlPassEnv NICTOOL_SERVER_HOST
PerlPassEnv NICTOOL_SERVER_PORT
PerlPassEnv NICTOOL_SERVER_PROTOCOL
PerlPassEnv NICTOOL_DATA_PROTOCOL

PerlRequire "/Users/matt/git/nictool/client/lib/nictoolclient.conf"

<VirtualHost _default_:80>
# force a https connection
ServerName localhost.simerson.net
Redirect / https://localhost.simerson.net/
</VirtualHost>
Expand All @@ -10,7 +33,7 @@ Listen 443
<VirtualHost _default_:443>
ServerName localhost.simerson.net
Alias /images/ "/Users/matt/git/nictool/client/htdocs/images/"
DocumentRoot /Users/matt/git/nictool/client/htdocs
DocumentRoot "/Users/matt/git/nictool/client/htdocs"
DirectoryIndex index.cgi
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
Expand All @@ -25,10 +48,9 @@ Listen 443

<Directory "/Users/matt/git/nictool/client/htdocs">
AllowOverride None
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
</VirtualHost>

<IfDefine !MODPERL2>
PerlFreshRestart On
Expand All @@ -37,7 +59,7 @@ PerlTaintCheck Off

Listen 8082

PerlRequire /Users/matt/git/nictool/server/lib/nictoolserver.conf
PerlRequire "/Users/matt/git/nictool/server/lib/nictoolserver.conf"

<VirtualHost *:8082>
KeepAlive Off
Expand All @@ -50,4 +72,8 @@ PerlRequire /Users/matt/git/nictool/server/lib/nictoolserver.conf
PerlResponseHandler Apache::SOAP
PerlSetVar dispatch_to "/Users/matt/git/nictool/server, NicToolServer::SOAP"
</Location>
<Directory "/Users/matt/git/nictool/server">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
Loading
Loading