Skip to content

Commit

Permalink
Run the integration tests only when needed
Browse files Browse the repository at this point in the history
Use path patterns in the GutHub Action to set when they should be started
  • Loading branch information
lslezak committed Aug 4, 2023
1 parent 9c7a6ad commit 5d31bea
Show file tree
Hide file tree
Showing 2 changed files with 164 additions and 83 deletions.
164 changes: 164 additions & 0 deletions .github/workflows/ci-integration-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
name: "CI - Integration Tests"

on:
push:
paths:
# NOTE: GitHub Actions do not allow using YAML references, the same path
# list is used below for the pull request event. Keep both lists in sync!!

# this file itself
- .github/workflows/ci-integration-tests.yml

# the web frontend
- web/**.json
- web/**.html
- web/**.scss
- web/**.jsx?
# ignore unit tests, we do not run them here
- "!web/**.test.jsx?"
- web/Makefile

# the service backend
- setup-service.sh
- service/lib/**.rb
- service/bin/agamactl
- service/Gemfile*
- service/*.gemspec
# D-Bus and systemd configs
- service/share/*.conf
- service/share/*.service
# Rust services
- rust/Cargo.lock
- rust/agama-dbus-server/**
- rust/agama-locale-data/**
- rust/agama-lib/**
# ignore the JSON profile and the examples
- "!rust/agama-lib/share/**"
- rust/share/*.service

# the playwright tests and configs
- playwright/**.ts
- playwright/config/agama.yaml

pull_request:
paths:
# NOTE: GitHub Actions do not allow using YAML references, the same path
# list is used above for the push event. Keep both lists in sync!!

# this file itself
- .github/workflows/ci-integration-tests.yml

# the web frontend
- web/**.json
- web/**.html
- web/**.scss
- web/**.jsx?
# ignore unit tests, we do not run them here
- "!web/**.test.jsx?"
- web/Makefile

# the service backend
- setup-service.sh
- service/lib/**.rb
- service/bin/agamactl
- service/Gemfile*
- service/*.gemspec
# D-Bus and systemd configs
- service/share/*.conf
- service/share/*.service
# Rust services
- rust/Cargo.lock
- rust/agama-dbus-server/**
- rust/agama-locale-data/**
- rust/agama-lib/**
# ignore the JSON profile and the examples
- "!rust/agama-lib/share/**"
- rust/share/*.service

# the playwright tests and configs
- playwright/**.ts
- playwright/config/agama.yaml

jobs:
integration-tests:
timeout-minutes: 60
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
# TW is needed because of the Cockpit packages
distro: [ "tumbleweed" ]

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@v3

- 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/yast/head/containers/containers_tumbleweed/opensuse/agama-testing:latest

- name: Environment
run: podman exec agama bash -c "env | sort"

- name: Build the frontend
run: podman exec agama bash -c "cd /checkout/web && npm install && make"

- name: Install the frontend
run: podman exec agama bash -c "ln -snfv /checkout/web/dist /usr/share/cockpit/agama"

# ./setup-service.sh will try setting up cockpit.socket
# which has a login page, so this local-session needs to be first
- name: Start Cockpit service
run: podman exec --detach agama /usr/libexec/cockpit-ws --local-session=/usr/bin/cockpit-bridge

- name: Setup service
run: podman exec agama bash -c "cd /checkout; ./setup-service.sh"

- name: Set a testing Agama configuration
# copy a simplified ALP config file, it skips the product selection at the beginning
run: podman exec agama bash -c "cp /checkout/playwright/config/agama.yaml /checkout/service/etc/agama.yaml"

- name: Show NetworkManager log
run: podman exec agama journalctl -u NetworkManager

- name: Show the D-Bus services log
run: podman exec agama bash -c "journalctl | grep agama"

- name: Check DBus socket
run: podman exec agama ls -l /var/run/dbus/system_bus_socket

- name: Run the Agama smoke test
run: podman exec agama curl http://localhost:9090/cockpit/@localhost/agama/index.html

- 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: podman exec agama bash -c "journalctl | grep agama"

- name: Show the complete journal
# maybe not necessary if the above filtered journalctl calls are enough
run: podman exec agama journalctl -b || echo "journal failed with $?"

- name: Upload the test results
uses: actions/upload-artifact@v3
# run even when the previous step fails
if: always()
with:
name: test-results
retention-days: 30
path: |
playwright/test-results/**/*
/tmp/log/YaST2/y2log
83 changes: 0 additions & 83 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -217,89 +217,6 @@ jobs:
flag-name: rust-backend
parallel: true

integration-tests:
timeout-minutes: 60
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
# TW is needed because of the Cockpit packages
distro: [ "tumbleweed" ]

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@v3

- 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/yast/head/containers/containers_tumbleweed/opensuse/agama-testing:latest

- name: Environment
run: podman exec agama bash -c "env | sort"

- name: Build the frontend
run: podman exec agama bash -c "cd /checkout/web && npm install && make"

- name: Install the frontend
run: podman exec agama bash -c "ln -snfv /checkout/web/dist /usr/share/cockpit/agama"

# ./setup-service.sh will try setting up cockpit.socket
# which has a login page, so this local-session needs to be first
- name: Start Cockpit service
run: podman exec --detach agama /usr/libexec/cockpit-ws --local-session=/usr/bin/cockpit-bridge

- name: Setup service
run: podman exec agama bash -c "cd /checkout; ./setup-service.sh"

- name: Set a testing Agama configuration
# copy a simplified ALP config file, it skips the product selection at the beginning
run: podman exec agama bash -c "cp /checkout/playwright/config/agama.yaml /checkout/service/etc/agama.yaml"

- name: Show NetworkManager log
run: podman exec agama journalctl -u NetworkManager

- name: Show the D-Bus services log
run: podman exec agama bash -c "journalctl | grep agama"

- name: Check DBus socket
run: podman exec agama ls -l /var/run/dbus/system_bus_socket

- name: Run the Agama smoke test
run: podman exec agama curl http://localhost:9090/cockpit/@localhost/agama/index.html

- 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: podman exec agama bash -c "journalctl | grep agama"

- name: Show the complete journal
# maybe not necessary if the above filtered journalctl calls are enough
run: podman exec agama journalctl -b || echo "journal failed with $?"

- name: Upload the test results
uses: actions/upload-artifact@v3
# run even when the previous step fails
if: always()
with:
name: test-results
retention-days: 30
path: |
playwright/test-results/**/*
/tmp/log/YaST2/y2log
finish:
runs-on: ubuntu-latest

Expand Down

0 comments on commit 5d31bea

Please sign in to comment.