Skip to content
Closed
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
142 changes: 142 additions & 0 deletions .github/workflows/container_testing_run.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
name: container-testing-run

on:
push:
branches:
- develop
paths-ignore:
- 'doc/**'
- '**/*.md'
- '**/*.txt'
- '.github/ISSUE_TEMPLATE/**'
- '.github/*.md'
pull_request:
branches:
- develop
paths-ignore:
- 'doc/**'
- '**/*.md'
- '**/*.txt'
- '.github/ISSUE_TEMPLATE/**'
- '.github/*.md'

concurrency:
group: container-testing-${{ github.ref }}
cancel-in-progress: true

jobs:
container-test:
runs-on: ubuntu-latest
timeout-minutes: 45

defaults:
run:
shell: bash

steps:
# ---------------------------
# CHECKOUT
# ---------------------------
- name: Checkout repository
uses: actions/checkout@v4

# ---------------------------
# SCRUB RUNNER
# ---------------------------
- name: Scrub Docker state
run: |
set -euo pipefail
sudo systemctl stop docker || true
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

# Ubuntu runner already has Docker installed.
- name: Verify Docker
run: |
set -euo pipefail
docker version
Comment on lines +46 to +57
Copy link

Copilot AI Mar 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The workflow stops the Docker daemon and deletes /var/lib/docker//var/lib/containerd, but it never starts Docker again. As a result, docker version (and later docker compose ...) will fail with "Cannot connect to the Docker daemon" on most runners. Start the Docker service again (and optionally wait until it’s active) before running any Docker commands, or remove the stop/wipe step if it’s not required.

Copilot uses AI. Check for mistakes.

# ---------------------------
# BUILD + START CONTAINERS
# ---------------------------
- name: Build containers
run: |
set -euo pipefail
docker compose -f docker-compose-dev.yml build

- name: Start containers
run: |
set -euo pipefail
docker compose -f docker-compose-dev.yml up -d

# ---------------------------
# WAIT FOR DATAVERSE (STRICT API CHECK)
# ---------------------------
- name: Wait for Dataverse API readiness
run: |
set -euo pipefail

URL="http://localhost:8080/api/info/version"
MAX_ATTEMPTS=6
SLEEP_TIME=10

echo "Checking Dataverse API readiness at $URL"

for attempt in $(seq 1 $MAX_ATTEMPTS); do
echo "Attempt $attempt..."

RESPONSE=$(curl -s --max-time 10 "$URL" || true)

if echo "$RESPONSE" | grep -q '"status":"OK"'; then
echo "Dataverse API is ready."
echo "Response: $RESPONSE"
exit 0
fi

echo "Not ready yet. Sleeping ${SLEEP_TIME}s..."
sleep $SLEEP_TIME

# Exponential backoff (10 → 20 → 40 → 60 → 60 → 60)
if [ $SLEEP_TIME -lt 60 ]; then
SLEEP_TIME=$((SLEEP_TIME * 2))
if [ $SLEEP_TIME -gt 60 ]; then
SLEEP_TIME=60
fi
fi
done

echo "Dataverse failed to report status OK within timeout."
docker compose -f docker-compose-dev.yml logs
exit 1

# ---------------------------
# SETUP PYTHON + SELENIUM
# ---------------------------
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install test dependencies
run: |
set -euo pipefail
python -m pip install --upgrade pip
pip install -r tests/requirements.txt

Comment on lines +124 to +125
Copy link

Copilot AI Mar 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pip install -r tests/requirements.txt will fail because tests/requirements.txt does not exist in the repository. Either add this requirements file (and keep it in sync with the Python/Selenium tests), or update the workflow to install dependencies from the location the project actually uses (e.g., a pinned requirements file or pyproject.toml).

Suggested change
pip install -r tests/requirements.txt
if [ -f tests/requirements.txt ]; then
echo "Installing test dependencies from tests/requirements.txt"
pip install -r tests/requirements.txt
elif [ -f requirements.txt ]; then
echo "tests/requirements.txt not found; installing from root requirements.txt"
pip install -r requirements.txt
elif [ -f pyproject.toml ]; then
echo "No requirements file found; installing project from pyproject.toml"
pip install .
else
echo "Error: No dependency definition found (tests/requirements.txt, requirements.txt, or pyproject.toml)." >&2
exit 1
fi

Copilot uses AI. Check for mistakes.
# Chrome is preinstalled on ubuntu-latest
- name: Verify Chrome
run: |
google-chrome --version

Copy link

Copilot AI Mar 3, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The job is named container-test and sets up Python/Selenium, but it never actually runs any tests after bringing the compose stack up (it only verifies Chrome and then tears everything down). Add an explicit test execution step (e.g., run the existing Python unittest suite, or whichever container/API checks this workflow is meant to validate) so the workflow provides real signal.

Suggested change
- name: Run Selenium tests
run: |
set -euo pipefail
python -m unittest discover -s tests -p "test_*.py"

Copilot uses AI. Check for mistakes.
# ---------------------------
# SHUTDOWN
# ---------------------------
- name: Shutdown containers
if: always()
run: |
docker compose -f docker-compose-dev.yml down -v

- name: Final Docker cleanup
if: always()
run: |
docker system prune -af || true
Loading