test only WIP #10969
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "ci" | |
| on: | |
| push: | |
| branches: [master] | |
| pull_request: | |
| branches: [master] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| prepare: | |
| if: github.event_name == 'push' || !contains(github.event.pull_request.labels.*.name, 'Accepted') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| outputs: | |
| matrix: ${{ steps.matrix.outputs.matrix }} | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v6 | |
| - name: Get matrix | |
| id: matrix | |
| run: ./contrib/ci/get-matrix.py --action | |
| intgcheck: | |
| if: github.event_name == 'push' || !contains(github.event.pull_request.labels.*.name, 'Accepted') | |
| needs: [prepare] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| tag: ${{ fromJson(needs.prepare.outputs.matrix).intgcheck }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| path: sssd | |
| - name: Setup containers | |
| uses: SSSD/sssd-ci-containers/actions/setup@master | |
| with: | |
| path: sssd-ci-containers | |
| tag: ${{ matrix.tag }} | |
| limit: dns client | |
| override: | | |
| services: | |
| client: | |
| image: ${REGISTRY}/ci-client-devel:${TAG} | |
| volumes: | |
| - ../sssd:/sssd:rw | |
| - name: Run integration tests | |
| uses: SSSD/sssd-ci-containers/actions/exec@master | |
| with: | |
| working-directory: /sssd | |
| script: ./contrib/ci/run --moderate | |
| - name: Print logs | |
| uses: next-actions/print-logs@master | |
| if: always() | |
| with: | |
| working-directory: ./sssd/ci-build-debug | |
| files: | | |
| test-suite.log | |
| ci-make-intgcheck.log | |
| ci-make-distcheck.log | |
| - name: Upload main artifacts | |
| if: always() | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| if-no-files-found: ignore | |
| name: ${{ matrix.tag }}-intgcheck | |
| path: | | |
| ./sssd/var/log/sssd/*.log | |
| ./sssd/ci-build-debug/ci-*.log | |
| ./sssd/ci-build-debug/config.log | |
| ./sssd/ci-build-debug/test-suite.log | |
| ./sssd/ci-build-debug/ci-mock-result/*.log | |
| ./sssd/ci-build-debug/src/tests/cwrap/test-suite.log | |
| ./sssd/ci-install-deps.log | |
| ./sssd/ci-autoreconf.log | |
| - name: Upload valgrind artifacts | |
| if: always() | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| if-no-files-found: ignore | |
| name: ${{ matrix.tag }}-intgcheck-valgrind | |
| path: | | |
| ./sssd/ci-build-debug/*.valgrind.log | |
| system: | |
| if: github.event_name == 'push' || !contains(github.event.pull_request.labels.*.name, 'Accepted') | |
| needs: [prepare] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| tag: ${{ fromJson(needs.prepare.outputs.matrix).multihost }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| - name: Checkout sssd repository | |
| uses: actions/checkout@v6 | |
| with: | |
| path: sssd | |
| - name: Setup containers | |
| uses: SSSD/sssd-ci-containers/actions/setup@master | |
| with: | |
| path: sssd-ci-containers | |
| tag: ${{ matrix.tag }} | |
| override: | | |
| services: | |
| client: | |
| image: ${REGISTRY}/ci-client-devel:${TAG} | |
| shm_size: 4G | |
| tmpfs: | |
| - /dev/shm | |
| volumes: | |
| - ../sssd:/sssd:rw | |
| ipa: | |
| image: ${REGISTRY}/ci-ipa-devel:${TAG} | |
| shm_size: 4G | |
| tmpfs: | |
| - /dev/shm | |
| volumes: | |
| - ../sssd:/sssd:rw | |
| - name: Build SSSD on the client and IPA | |
| uses: SSSD/sssd-ci-containers/actions/exec@master | |
| with: | |
| log-file: build.log | |
| working-directory: /sssd | |
| where: | | |
| client | |
| ipa | |
| script: | | |
| #!/bin/bash | |
| set -ex | |
| ./contrib/ci/run --deps-only | |
| autoreconf -if | |
| mkdir -p /dev/shm/sssd | |
| pushd /dev/shm/sssd | |
| /sssd/configure --enable-silent-rules | |
| make rpms | |
| - name: Install SSSD on the client and IPA | |
| uses: SSSD/sssd-ci-containers/actions/exec@master | |
| with: | |
| log-file: install.log | |
| user: root | |
| where: | | |
| client | |
| ipa | |
| script: | | |
| #!/bin/bash | |
| set -ex | |
| dnf install -y /dev/shm/sssd/rpmbuild/RPMS/*/*.rpm | |
| rm -fr /dev/shm/sssd | |
| # We need to reenable sssd-kcm since it was disabled by removing sssd not not enabled again | |
| systemctl enable --now sssd-kcm.socket | |
| - name: Restart SSSD on IPA server | |
| uses: SSSD/sssd-ci-containers/actions/exec@master | |
| with: | |
| user: root | |
| where: ipa | |
| script: | | |
| #!/bin/bash | |
| set -ex | |
| systemctl restart sssd || systemctl status sssd | |
| - name: Patch the SSH configuration | |
| uses: SSSD/sssd-ci-containers/actions/exec@master | |
| with: | |
| user: root | |
| script: | | |
| #!/bin/bash | |
| test -x /usr/bin/sss_ssh_knownhosts && \ | |
| sed -e 's/GlobalKnownHostsFile/#GlobalKnownHostsFile/' \ | |
| -e 's/ProxyCommand \/usr\/bin\/sss_ssh_knownhostsproxy -p %p %h/KnownHostsCommand \/usr\/bin\/sss_ssh_knownhosts %H/' \ | |
| -i /etc/ssh/ssh_config.d/04-ipa.conf | |
| - name: Install system tests dependencies | |
| shell: bash | |
| working-directory: ./sssd/src/tests/system | |
| run: | | |
| set -ex | |
| sudo apt-get update | |
| # Install dependencies for python-ldap | |
| sudo apt-get install -y libsasl2-dev python3-dev libldap2-dev libssl-dev libssh-dev | |
| # Virtualenv | |
| pip3 install virtualenv | |
| python3 -m venv .venv | |
| source .venv/bin/activate | |
| # Install system tests requirements | |
| pip3 install -r ./requirements.txt | |
| # Install yq to parse yaml files | |
| sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 | |
| sudo chmod a+x /usr/local/bin/yq | |
| - name: Remove ad from mhc.yaml | |
| shell: bash | |
| working-directory: ./sssd/src/tests/system | |
| run: | | |
| yq -i 'del(.domains[0].hosts.[] | select(.role == "ad"))' mhc.yaml | |
| - name: Get changed tests | |
| shell: bash {0} | |
| env: | |
| PR_ID: ${{ github.event.pull_request.number }} | |
| GH_TOKEN: ${{ github.token }} | |
| working-directory: sssd | |
| id: select-tests | |
| run: | | |
| set -e | |
| # Check if non-test files were changed or not run inside PR | |
| FILES=`gh pr diff "$PR_ID" --name-only 2>&1 || exit 0` | |
| if echo "$FILES" | grep 'no pull requests found'; then | |
| echo "Script not running against PR event. Will run all tests." | |
| echo "SELECT_TESTS=" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| elif echo "$FILES" | grep -v 'src/tests/system/tests'; then | |
| echo "Non-test files were changed. Will run all tests." | |
| echo "SELECT_TESTS=" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| DIFF=`gh pr diff "$PR_ID"` | |
| # Find if any non-test function was modified, in that case we need to | |
| # run all tests as we do not know where the function is used | |
| if echo "$DIFF" | grep -P '^(@@.+|\+|-)\s*def (?!test_)'; then | |
| echo "Non-test function was modified. Will run all tests." | |
| echo "SELECT_TESTS=" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| # Find all tests that were added | |
| ADDED=`echo "$DIFF" | grep -P "^\+\s*def test_" | sed -E 's/.+def (test_[^(]+).+/\1/'` | |
| # Find all tests that are used as tokens in diff | |
| MODIFIED=`echo "$DIFF" | grep -E "^@@.+def test_" | sed -E 's/.+def (test_[^(]+).+/\1/'` | |
| # Combine and sort | |
| TESTS=`echo -e "$ADDED\n$MODIFIED" | sort | uniq` | |
| echo "Following tests were added or modified (or token is present in diff):" | |
| echo "$TESTS" | |
| ARGS="" | |
| if [ ! -z "$TESTS" ]; then | |
| FILTER=`echo "$TESTS" | xargs | sed 's/ / or /g'` | |
| ARGS="-k \"$FILTER\"" | |
| fi | |
| echo "SELECT_TESTS=$ARGS" >> "$GITHUB_OUTPUT" | |
| echo "Set SELECT_TESTS as GitHub Output:" | |
| grep SELECT_TESTS "$GITHUB_OUTPUT" | |
| - name: Check polarion metadata | |
| shell: bash | |
| working-directory: ./sssd/src/tests/system | |
| run: | | |
| # Run pytest in collect only mode to quickly catch issues in Polarion metadata. | |
| set -ex -o pipefail | |
| mkdir -p $GITHUB_WORKSPACE/artifacts | |
| source .venv/bin/activate | |
| pytest \ | |
| --color=yes \ | |
| --mh-config=./mhc.yaml \ | |
| --mh-artifacts-dir=$GITHUB_WORKSPACE/artifacts \ | |
| --polarion-config=../polarion.yaml \ | |
| --output-polarion-testcase=$GITHUB_WORKSPACE/artifacts/testcase.xml \ | |
| ${{ steps.select-tests.outputs.SELECT_TESTS }} \ | |
| --collect-only . |& tee $GITHUB_WORKSPACE/pytest-collect.log | |
| - name: Run tests | |
| shell: bash | |
| working-directory: ./sssd/src/tests/system | |
| run: | | |
| set -ex -o pipefail | |
| mkdir -p $GITHUB_WORKSPACE/artifacts | |
| source .venv/bin/activate | |
| pytest \ | |
| --durations=0 \ | |
| --color=yes \ | |
| --show-capture=no \ | |
| --mh-config=./mhc.yaml \ | |
| --mh-artifacts-dir=$GITHUB_WORKSPACE/artifacts \ | |
| --polarion-config=../polarion.yaml \ | |
| --output-polarion-testcase=$GITHUB_WORKSPACE/artifacts/testcase.xml \ | |
| --output-polarion-testrun=$GITHUB_WORKSPACE/artifacts/testrun.xml \ | |
| ${{ steps.select-tests.outputs.SELECT_TESTS }} \ | |
| -vvv . |& tee $GITHUB_WORKSPACE/pytest.log | |
| - name: Upload artifacts | |
| if: always() | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| if-no-files-found: ignore | |
| name: ${{ matrix.tag }}-system | |
| path: | | |
| sssd/ci-install-deps.log | |
| artifacts | |
| build.log | |
| install.log | |
| pytest.log | |
| pytest-collect.log |