Skip to content

CI - Integration Tests #109

CI - Integration Tests

CI - Integration Tests #109

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.event.repository.fork) || 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 /tmp/log/puppeteer
- 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/puppeteer:/var/log/puppeteer -v /tmp/log/YaST2:/var/log/YaST2 registry.opensuse.org/systemsmanagement/agama/devel/containers/opensuse/agama-testing:latest
- name: Environment
run: podman exec agama bash -c "env | sort"
- name: Packages
run: podman exec agama bash -c "rpm -qa | sort"
- name: Set the root password
# this allows to login into Agama
run: podman exec agama bash -c "echo linux | passwd --stdin"
- 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: Run the Puppeteer tests
# update the test file and the runner script from git
run: podman exec agama bash -c
"cp /checkout/puppeteer/tests/test_root_password.js /usr/share/agama/integration-tests/tests &&
cp /checkout/puppeteer/agama-integration-tests /usr/bin/agama-integration-tests"
- name: Run the Puppeteer tests
# run the test
run: podman exec agama bash -c "cd /var/log/puppeteer &&
agama-integration-tests /usr/share/agama/integration-tests/tests/test_root_password.js"
- 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@v4
# run even when any previous step fails
if: always()
with:
name: test-results
retention-days: 30
path: |
/tmp/log
- 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.event.repository.fork && 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 }}"