aboutsummaryrefslogtreecommitdiffstats
path: root/.cirrus.yml
blob: 8e9de39dfd305bbe9195f1f1fe9d5b870793e3e4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
---

# Main environment vars to set for all tasks
env:

    FEDORA_VER: "35"
    FEDORA_PRIOR_VER: "34"
    FEDORA_NAME: "fedora-${FEDORA_VER}"
    FEDORA_PRIOR_NAME: "fedora-${FEDORA_PRIOR_VER}"

    UBUNTU_NAME: "ubuntu-22.04"
    UBUNTU_PRIOR_NAME: "ubuntu-20.04"

    CENTOS_9_NAME: "centos-stream-9"
    CENTOS_8_NAME: "centos-stream-8"

    CENTOS_PROJECT: "centos-cloud"
    FEDORA_PROJECT: "fedora-cloud"
    SOS_PROJECT: "sos-devel-jobs"
    UBUNTU_PROJECT: "ubuntu-os-cloud"

    # These are generated images pushed to GCP from Red Hat
    # FEDORA_PRIOR to be switched to "stock" images from the Fedora Project
    # once the F36 image is pushed. 
    FEDORA_PRIOR_IMAGE_NAME: "f${FEDORA_PRIOR_VER}-server-sos-testing"
    FOREMAN_CENTOS_IMAGE_NAME: "foreman-25-centos-8-sos-testing"
    FOREMAN_DEBIAN_IMAGE_NAME: "foreman-25-debian-10-sos-testing"

    # Images exist on GCP already
    CENTOS_9_IMAGE_NAME: "centos-stream-9-v20220621"
    CENTOS_8_IMAGE_NAME: "centos-stream-8-v20220621"
    FEDORA_IMAGE_NAME: "fedora-cloud-base-gcp-${FEDORA_VER}-1-2-x86-64"
    UBUNTU_IMAGE_NAME: "ubuntu-2204-jammy-v20220622"
    UBUNTU_PRIOR_IMAGE_NAME: "ubuntu-2004-focal-v20220701"

# Default task timeout
timeout_in: 30m

# enable auto cancelling concurrent builds on main when multiple PRs are
# merged at once
auto_cancellation: true

gcp_credentials: ENCRYPTED[!77d4c8251094346c41db63cb05eba2ff98eaff04e58c5d0e2a8e2c6f159f7d601b3fe9a2a4fce1666297e371f2fc8752!]

# Run a simple lint on the community cluster
flake8_task:
    alias: "flake8_test"
    name: "Flake8 linting test"
    container:
        image: alpine/flake8:latest
    flake_script: flake8 sos

# Run a check on newer upstream python versions to check for possible
# breaks/changes in common modules. This is not meant to check any of the actual
# collections or archive integrity.
py_break_task:
    alias: "py_break"
    name: "Breakage test python-$PY_VERSION"
    container:
        image: "python:${PY_VERSION}"
    matrix:
        - env:
            PY_VERSION: "latest"
        - env:
            PY_VERSION: "3.9"
    # This image has 2 py environments. Install to the one sos uses.
    setup_script: pip3 install -t /usr/lib/python3/dist-packages -r requirements.txt
    main_script: ./bin/sos report --batch

# Make sure a user can manually build an rpm from the checkout
rpm_build_task:
    alias: "rpm_build"
    name: "RPM Build From Checkout"
    container:
        image: "fedora"
    setup_script: dnf -y install rpm-build rpmdevtools gettext python3-devel
    main_script: |
        rpmdev-setuptree
        python3 setup.py sdist
        cp dist/sos*.tar.gz ~/rpmbuild/SOURCES
        rpmbuild -bs sos.spec
        rpmbuild -bb sos.spec

# Make sure a user can manually build a snap from the checkout
snap_build_task:
    alias: "snap_build"
    name: "snap Build From Checkout"
    gce_instance:
        image_project: "${UBUNTU_PROJECT}"
        image_name: "${UBUNTU_PRIOR_IMAGE_NAME}"
        type: e2-medium
    setup_script: |
        apt update
        apt -y install snapd
        systemctl start snapd
        sed -i 's/adopt-info.*/version: test/g' snap/snapcraft.yaml
        snap install snapcraft --classic
    main_script: |
        snapcraft --destructive-mode
    snap_artifacts:
        path: "*.snap"

# Run the stage one (no mocking) tests across all distros on GCP
report_stageone_task:
    alias: "stageone_report"
    name: "Report Stage One - $BUILD_NAME"
    gce_instance: &standardvm
        image_project: "${PROJECT}"
        image_name: "${VM_IMAGE_NAME}"
        type: e2-medium
    matrix:
        - env:
            PROJECT: ${CENTOS_PROJECT}
            BUILD_NAME: ${CENTOS_9_NAME}
            VM_IMAGE_NAME: ${CENTOS_9_IMAGE_NAME}
        - env:
            PROJECT: ${CENTOS_PROJECT}
            BUILD_NAME: ${CENTOS_8_NAME}
            VM_IMAGE_NAME: ${CENTOS_8_IMAGE_NAME}
        - env:
            PROJECT: ${FEDORA_PROJECT}
            BUILD_NAME: ${FEDORA_NAME}
            VM_IMAGE_NAME: ${FEDORA_IMAGE_NAME}
        - env:
            PROJECT: ${SOS_PROJECT}
            BUILD_NAME: ${FEDORA_PRIOR_NAME}
            VM_IMAGE_NAME: ${FEDORA_PRIOR_IMAGE_NAME}
        - env:
            PROJECT: ${UBUNTU_PROJECT}
            BUILD_NAME: ${UBUNTU_NAME}
            VM_IMAGE_NAME: ${UBUNTU_IMAGE_NAME}
        - env:
            PROJECT: ${UBUNTU_PROJECT}
            BUILD_NAME: ${UBUNTU_PRIOR_NAME}
            VM_IMAGE_NAME: ${UBUNTU_PRIOR_IMAGE_NAME}
    remove_sos_script: &remove_sos |
        if [ $(command -v apt) ]; then
            apt -y purge sosreport
            apt update --allow-releaseinfo-change
            apt -y install python3-pip
        fi
        if [ $(command -v dnf) ]; then
            dnf -y remove sos
            dnf -y install python3-pip ethtool
        fi
    setup_script: &setup 'pip3 install avocado-framework==94.0 python-magic pyyaml'
    # run the unittests separately as they require a different PYTHONPATH in
    # order for the imports to work properly under avocado
    unittest_script: PYTHONPATH=. avocado run tests/unittests/
    main_script: PYTHONPATH=tests/ avocado run --test-runner=runner -t stageone tests/{cleaner,collect,report,vendor}_tests
    on_failure:
        fail_script: &faillogs |
            ls -d /var/tmp/avocado* /root/avocado* 2> /dev/null | xargs tar cf sos-fail-logs.tar
        log_artifacts:
            path: "sos-fail-logs.tar"

# IFF the stage one tests all pass, then run stage two for latest distros
report_stagetwo_task:
    alias: "stagetwo_report"
    name: "Report Stage Two - $BUILD_NAME"
    depends_on: stageone_report
    gce_instance: *standardvm
    matrix:
        - env:
            PROJECT: ${CENTOS_PROJECT}
            BUILD_NAME: ${CENTOS_9_NAME}
            VM_IMAGE_NAME: ${CENTOS_9_IMAGE_NAME}
        - env:
            PROJECT: ${CENTOS_PROJECT}
            BUILD_NAME: ${CENTOS_8_NAME}
            VM_IMAGE_NAME: ${CENTOS_8_IMAGE_NAME}
        - env:
            PROJECT: ${FEDORA_PROJECT}
            BUILD_NAME: ${FEDORA_NAME}
            VM_IMAGE_NAME: ${FEDORA_IMAGE_NAME}
        - env:
            PROJECT: ${UBUNTU_PROJECT}
            BUILD_NAME: ${UBUNTU_NAME}
            VM_IMAGE_NAME: ${UBUNTU_IMAGE_NAME}
    remove_sos_script: *remove_sos
    install_pexpect_script: |
        if [ $(command -v apt) ]; then
            apt -y install python3-pexpect
        fi
        if [ $(command -v dnf) ]; then
            dnf -y install python3-pexpect
        fi
    setup_script: *setup
    main_script: PYTHONPATH=tests/ avocado run --test-runner=runner -t stagetwo tests/{cleaner,collect,report,vendor}_tests
    on_failure:
        fail_script: *faillogs
        log_artifacts:
            path: "sos-fail-logs.tar"

report_foreman_task:
    skip: "!changesInclude('.cirrus.yml', '**/{__init__,apache,foreman,foreman_tests,candlepin,pulp,pulpcore}.py')"
    alias: "foreman_integration"
    name: "Integration Test - Foreman ${FOREMAN_VER}"
    depends_on: stageone_report
    gce_instance: &bigvm
        <<: *standardvm
        type: e2-standard-2
    matrix:
        - env:
            PROJECT: ${SOS_PROJECT}
            VM_IMAGE_NAME: ${FOREMAN_CENTOS_IMAGE_NAME}
            FOREMAN_VER: "2.5 - CentOS Stream 8"
        - env:
            PROJECT: ${SOS_PROJECT}
            VM_IMAGE_NAME: ${FOREMAN_DEBIAN_IMAGE_NAME}
            FOREMAN_VER: "2.5 - Debian 10"
    remove_sos_script: *remove_sos
    setup_script: *setup
    main_script: PYTHONPATH=tests/ avocado run --test-runner=runner -t foreman tests/product_tests/foreman/
    on_failure:
        fail_script: *faillogs
        log_artifacts:
            path: "sos-fail-logs.tar"