-
Notifications
You must be signed in to change notification settings - Fork 4
feat(workflows): add docker container testing workflow #89
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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 | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| # --------------------------- | ||||||||||||||||||||||
| # 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 | ||||||||||||||||||||||
|
||||||||||||||||||||||
| pip install -r tests/requirements.txt | |
| pip install -r requirements.txt |
Copilot
AI
Mar 3, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
After setting up Python and verifying Chrome, there is no step that actually runs any container/integration/UI tests (the workflow proceeds to shutdown). Add an explicit test execution step here (or remove the Python/Chrome setup if the workflow is only intended as a container smoke-start check).
| # --------------------------- | |
| # --------------------------- | |
| # RUN CONTAINER/UI TESTS | |
| # --------------------------- | |
| - name: Run container/UI tests | |
| run: | | |
| set -euo pipefail | |
| pytest -v | |
| # --------------------------- |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Scrub Docker statestops the Docker daemon and wipes Docker/containerd state, but the workflow never starts Docker again. On GitHub-hosted runners this will usually cause the laterdocker version/docker composesteps to fail; add asystemctl start docker(and wait for readiness) or avoid stopping Docker in the first place.