Skip to content

CI - Integration Tests #30

CI - Integration Tests

CI - Integration Tests #30

name: "CI - Integration Tests"
on:
schedule:
# at 9:45 UTC every day from Monday to Friday
- cron: "45 9 * * 1-5"
# allow running manually
workflow_dispatch:
jobs:
integration-tests:
timeout-minutes: 60
runs-on: ubuntu-latest
# do not run scheduled jobs in forks, in forks only allow manual run ("workflow_dispatch")
if: github.repository_owner == 'openSUSE' || github.event_name == 'workflow_dispatch'
steps:
# TODO: Reuse/share building the frontend and backend with the other steps
# TODO: Cache the Ruby gems and node packages
- name: Git Checkout
uses: actions/checkout@v4
with:
# fetch complete history with tags, agama.gemspec calls "git describe --tags"
# that would fail with just last commit checked out
fetch-depth: 0
fetch-tags: true
- name: Created shared YaST log directory
run: mkdir -p /tmp/log/YaST2
- name: Start container
run: podman run --privileged --detach --name agama --ipc=host -e CI -e GITHUB_ACTIONS -v /dev:/dev -v .:/checkout -v /tmp/log/YaST2:/var/log/YaST2 registry.opensuse.org/systemsmanagement/agama/staging/containers/opensuse/agama-testing:latest
- name: Environment
run: podman exec agama bash -c "env | sort"
- name: Set a testing Agama configuration
# delete all products except TW to skip the product selection at the beginning
run: podman exec agama bash -c "ls /checkout/products.d/*.yaml | grep -v tumbleweed.yaml | xargs rm"
- name: Build the frontend
run: podman exec agama bash -c "cd /checkout; ./setup-web.sh"
- name: Setup service
run: podman exec agama bash -c "cd /checkout; ./setup-services.sh"
- name: Wait for the server to start
# wait until the server is up and accepting the connections
run: podman exec agama bash -c 'for i in $(seq 30); do curl -s -o /dev/null http://localhost && exit 0; echo -n .; sleep 1; done'
- name: Show NetworkManager log
run: podman exec agama journalctl -u NetworkManager
- name: Show the D-Bus services log
run: |
podman exec agama systemctl status agama
podman exec agama journalctl -u agama
- name: Show the Web service log
run: podman exec agama journalctl -u agama-web-server
- name: Inspect D-Bus services
run: podman exec agama busctl --address unix:path=/run/agama/bus
- name: Run the Agama smoke test
run: podman exec agama curl http://localhost
- name: Check Playwright version
run: podman exec agama playwright --version
- name: Run the Playwright tests
# user authentication is not required when cockpit runs a local session
# run the tests in the Chromium browser
run: podman exec agama bash -c "cd /checkout/playwright && SKIP_LOGIN=true playwright test --trace on --project chromium"
- name: Again show the D-Bus services log
# run even when any previous step fails
if: always()
run: podman exec agama journalctl
- name: Upload the test results
uses: actions/upload-artifact@v3
# run even when any previous step fails
if: always()
with:
name: test-results
retention-days: 30
path: |
playwright/test-results/**/*
/tmp/log/YaST2/y2log
- name: IRC notification
# see https://github.com/marketplace/actions/irc-message-action
uses: Gottox/irc-message-action@v2
# never run in forks or when triggered manually
if: failure() && github.repository_owner == 'openSUSE' && github.event_name != 'workflow_dispatch'
with:
channel: "#yast"
nickname: github-action
message: "Agama integration test failed: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"