Skip to content

Commit a5e47ef

Browse files
authored
ci: Add test plan that runs CI tests and customize it for each role (#133)
* Calculate number of managed nodes with this formula: (( number_of_test_playbooks / 10 + 1 )) * Add README explaining how to run the plan locally and remotely Signed-off-by: Sergei Petrosian <spetrosi@redhat.com>
1 parent a857559 commit a5e47ef

File tree

4 files changed

+127
-3
lines changed

4 files changed

+127
-3
lines changed

.codespellrc

+2
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ check-hidden = true
55
ignore-multiline-regex = codespell:ignore-begin.*codespell:ignore-end
66
ignore-words = .codespell_ignores
77
# skip-file is not available https://github.com/codespell-project/codespell/pull/2759
8+
# .pandoc_template.html5 contains a typo in Licence that we shouldn't edit
9+
# .README.html is generated from README.md automatically - no need to check spelling
810
skip = .pandoc_template.html5,.README.html

.github/workflows/tft.yml

+1-3
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ jobs:
157157
uses: sclorg/testing-farm-as-github-action@v3
158158
if: contains(needs.prepare_vars.outputs.supported_platforms, matrix.platform)
159159
with:
160-
git_url: https://github.com/linux-system-roles/tft-tests
161160
git_ref: main
162161
pipeline_settings: '{ "type": "tmt-multihost" }'
163162
environment_settings: '{ "provisioning": { "tags": { "BusinessUnit": "system_roles" } } }'
@@ -180,8 +179,7 @@ jobs:
180179
tf_scope: private
181180
api_key: ${{ secrets.TF_API_KEY_RH }}
182181
update_pull_request_status: false
183-
tmt_hardware: '{ "memory": ">= ${{ needs.prepare_vars.outputs.memory }} MB" }'
184-
tmt_plan_filter: "tag:general,bootloader"
182+
tmt_plan_filter: "tag:playbooks_parallel,bootloader"
185183

186184
- name: Set final commit status
187185
uses: myrotvorets/set-commit-status-action@master

plans/README-plans.md

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Introduction CI Testing Plans
2+
3+
Linux System Roles CI runs [tmt](https://tmt.readthedocs.io/en/stable/index.html) test plans in [Testing farm](https://docs.testing-farm.io/Testing%20Farm/0.1/index.html) with the [tft.yml](https://github.com/linux-system-roles/bootloader/blob/main/.github/workflows/tft.yml) GitHub workflow.
4+
5+
The `plans/test_playbooks_parallel.fmf` plan is a test plan that runs test playbooks in parallel on multiple managed nodes.
6+
`plans/test_playbooks_parallel.fmf` is generated centrally from `https://github.com/linux-system-roles/.github/`.
7+
The automation calculates the number of managed nodes to provision with this formula:
8+
9+
```plain
10+
number-of-test-playbooks / 10 + 1
11+
```
12+
13+
The `plans/test_playbooks_parallel.fmf` plan does the following steps:
14+
15+
1. Provisions systems to be used as a control node and as managed nodes.
16+
2. Does the required preparation on systems.
17+
3. For the given role and the given PR, runs the general test from [test.sh](https://github.com/linux-system-roles/tft-tests/blob/main/tests/general/test.sh).
18+
19+
The [tft.yml](https://github.com/linux-system-roles/bootloader/blob/main/.github/workflows/tft.yml) workflow runs the above plan and uploads the results to our Fedora storage for public access.
20+
This workflow uses Testing Farm's Github Action [Schedule tests on Testing Farm](https://github.com/marketplace/actions/schedule-tests-on-testing-farm).
21+
22+
## Running Tests
23+
24+
You can run tests locally with the `tmt try` cli or remotely in Testing Farm.
25+
26+
### Running Tests Locally
27+
28+
1. Install `tmt` as described in [Installation](https://tmt.readthedocs.io/en/stable/stories/install.html).
29+
2. Change to the role repository directory.
30+
3. Modify `plans/test_playbooks_parallel.fmf` to suit your requirements:
31+
1. Due to [issue #3138](https://github.com/teemtee/tmt/issues/3138), comment out all managed nodes except for one.
32+
2. Optionally modify environment variables to, e.g. run only specified test playbooks by modifying `SYSTEM_ROLES_ONLY_TESTS`.
33+
4. Enter `tmt try -p plans/test_playbooks_parallel <platform>`.
34+
This command identifies the `plans/test_playbooks_parallel.fmf` plan and provisions local VMs, a control node and a managed node.
35+
5. `tmt try` is in development and does not identify tests from URL automatically, so after provisioning the machines, you must type `t`, `p`, `t` from the interactive prompt to identify tests, run preparation steps, and run the tests.
36+
37+
### Running in Testing Farm
38+
39+
1. Install `testing-farm` as described in [Installation](https://gitlab.com/testing-farm/cli/-/blob/main/README.adoc#user-content-installation).
40+
2. Change to the role repository directory.
41+
3. If you want to run tests with edits in your branch, you need to commit and push changes first to some branch.
42+
4. You can uncomment "Inject your ssh public key to test systems" discover step in the plan if you want to troubleshoot tests by SSHing into test systems in Testing Farm.
43+
5. Enter `testing-farm request`.
44+
Edit to your needs.
45+
46+
```bash
47+
$ TESTING_FARM_API_TOKEN=<your_api_token> \
48+
testing-farm request --pipeline-type="tmt-multihost" \
49+
--plan-filter="tag:playbooks_parallel" \
50+
--git-url "https://github.com/<my_user>/bootloader" \
51+
--git-ref "<my_branch>" \
52+
--compose CentOS-Stream-9 \
53+
-e "SYSTEM_ROLES_ONLY_TESTS=tests_default.yml" \
54+
--no-wait
55+
```

plans/test_playbooks_parallel.fmf

+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
summary: A general test for a system role
2+
tag: playbooks_parallel
3+
provision:
4+
# TF uses `how: artemis`, and `tmt try`` uses `how: virtual`.
5+
# Hence there is no need to define `how` explicitly.
6+
- name: control-node1
7+
role: control_node
8+
# `connection: system` is required for `how: virtual` to assign VMs a real
9+
# IP making SSH configuration easier.
10+
# This setting is ignored in `artemis`, so we can leave it as is.
11+
connection: system
12+
- name: managed-node1
13+
role: managed_node
14+
connection: system
15+
environment:
16+
ANSIBLE_VER: 2.17
17+
REPO_NAME: bootloader
18+
PYTHON_VERSION: 3.12
19+
SYSTEM_ROLES_ONLY_TESTS: "" # tests_default.yml
20+
TEST_LOCAL_CHANGES: true
21+
PR_NUM: ""
22+
LINUXSYSTEMROLES_USER: ""
23+
LINUXSYSTEMROLES_DOMAIN: ""
24+
LINUXSYSTEMROLES_SSH_KEY: ""
25+
ARTIFACTS_DIR: ""
26+
ARTIFACTS_URL: ""
27+
LSR_TFT_DEBUG: false
28+
prepare:
29+
- name: Use vault.centos.org repos (CS 7, 8 EOL workaround)
30+
script: |
31+
if grep -q 'CentOS Stream release 8' /etc/redhat-release; then
32+
sed -i '/^mirror/d;s/#\(baseurl=http:\/\/\)mirror/\1vault/' /etc/yum.repos.d/*.repo
33+
fi
34+
if grep -q 'CentOS Linux release 7.9' /etc/redhat-release; then
35+
sed -i '/^mirror/d;s/#\?\(baseurl=http:\/\/\)mirror/\1vault/' /etc/yum.repos.d/*.repo
36+
fi
37+
# Replace with feature: epel: enabled once https://github.com/teemtee/tmt/pull/3128 is merged
38+
- name: Enable epel to install beakerlib
39+
script: |
40+
# CS 10 and Fedora doesn't require epel
41+
if grep -q -e 'CentOS Stream release 10' -e 'Fedora release' /etc/redhat-release; then
42+
exit 0
43+
fi
44+
yum install epel-release yum-utils -y
45+
yum-config-manager --enable epel epel-debuginfo epel-source
46+
discover:
47+
- name: Prepare managed node
48+
how: fmf
49+
where: managed_node
50+
filter: tag:prep_managed_node
51+
url: https://github.com/linux-system-roles/tft-tests
52+
ref: main
53+
- name: Run test playbooks from control_node
54+
how: fmf
55+
where: control_node
56+
filter: tag:test_playbooks
57+
url: https://github.com/linux-system-roles/tft-tests
58+
ref: main
59+
# Uncomment this step for troubleshooting
60+
# This is required because currently testing-farm cli doesn't support running multi-node plans
61+
# You can set ID_RSA_PUB in the environment section above to your public key to distribute it to nodes
62+
# - name: Inject your ssh public key to test systems
63+
# how: fmf
64+
# where: control_node
65+
# filter: tag:reserve_system
66+
# url: https://github.com/linux-system-roles/tft-tests
67+
# ref: main
68+
execute:
69+
how: tmt

0 commit comments

Comments
 (0)