From 8fa29a95222ec163f0db43c7332cae7fbf76b356 Mon Sep 17 00:00:00 2001
From: Thomas Woerner <twoerner@redhat.com>
Date: Tue, 11 Jan 2022 13:58:25 +0100
Subject: [PATCH] Enable ansible-test in github workflow

This test is using the galaxy_importer from ansible project. The
configuration file galaxy-importer.cfg is copied from linux-system-roles

    https://github.com/linux-system-roles/auto-maintenance/blob/master/\
    lsr_role2collection/galaxy-importer.cfg

The tests script has extra code to parse the output of the importer to
highlight errors and to exit with a proper error code.

The test can be used locally also with "sh tests/sanity/sanity.sh"

New files:
- .github/workflows/ansible-test.yml
- tests/sanity/galaxy-importer.cfg
- tests/sanity/sanity.sh
---
 .github/workflows/ansible-test.yml | 17 ++++++++++++++
 tests/sanity/galaxy-importer.cfg   |  5 +++++
 tests/sanity/ignore-2.12.txt       |  1 +
 tests/sanity/sanity.sh             | 36 ++++++++++++++++++++++++++++++
 4 files changed, 59 insertions(+)
 create mode 100644 .github/workflows/ansible-test.yml
 create mode 100644 tests/sanity/galaxy-importer.cfg
 create mode 100644 tests/sanity/sanity.sh

diff --git a/.github/workflows/ansible-test.yml b/.github/workflows/ansible-test.yml
new file mode 100644
index 00000000..e1fdf1de
--- /dev/null
+++ b/.github/workflows/ansible-test.yml
@@ -0,0 +1,17 @@
+---
+name: ansible-test sanity
+on:
+  - push
+  - pull_request
+jobs:
+  ansible_test:
+    name: Verify ansible-test sanity
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          fetch-depth: 0
+      - name: Install virtualenv using pip
+        run: pip install virtualenv
+      - name: Run ansible-test
+        run: bash tests/sanity/sanity.sh
diff --git a/tests/sanity/galaxy-importer.cfg b/tests/sanity/galaxy-importer.cfg
new file mode 100644
index 00000000..fae700c2
--- /dev/null
+++ b/tests/sanity/galaxy-importer.cfg
@@ -0,0 +1,5 @@
+[galaxy-importer]
+RUN_ANSIBLE_TEST = True
+RUN_ANSIBLE_LINT = True
+ANSIBLE_TEST_LOCAL_IMAGE = True
+LOCAL_IMAGE_DOCKER = True
diff --git a/tests/sanity/ignore-2.12.txt b/tests/sanity/ignore-2.12.txt
index f1c75405..ff9c9de0 100644
--- a/tests/sanity/ignore-2.12.txt
+++ b/tests/sanity/ignore-2.12.txt
@@ -35,6 +35,7 @@ roles/ipaserver/library/ipaserver_test.py pylint:ansible-format-automatic-specif
 roles/ipareplica/module_utils/ansible_ipa_replica.py pylint:ansible-format-automatic-specification
 tests/external-signed-ca-with-automatic-copy/external-ca.sh shebang!skip
 tests/pytests/conftest.py pylint:ansible-format-automatic-specification
+tests/sanity/sanity.sh shebang!skip
 tests/user/users.sh shebang!skip
 tests/user/users_absent.sh shebang!skip
 tests/utils.py pylint:ansible-format-automatic-specification
diff --git a/tests/sanity/sanity.sh b/tests/sanity/sanity.sh
new file mode 100644
index 00000000..32784414
--- /dev/null
+++ b/tests/sanity/sanity.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+VENV=/tmp/ansible-test-venv
+ANSIBLE_COLLECTION=freeipa-ansible_freeipa
+
+virtualenv "$VENV"
+# shellcheck disable=SC1091
+source "$VENV"/bin/activate
+
+python -m pip install --upgrade pip
+pip install galaxy_importer
+
+rm -f "$ANSIBLE_COLLECTION"-*.tar.gz
+rm -f importer_result.json
+
+utils/build-galaxy-release.sh
+
+export GALAXY_IMPORTER_CONFIG=tests/sanity/galaxy-importer.cfg
+
+collection=$(ls -1 "$ANSIBLE_COLLECTION"-*.tar.gz)
+echo "Running: python -m galaxy_importer.main $collection"
+
+error=0
+while read -r line;
+do
+    if [[ $line == ERROR* ]]; then
+        ((error++))
+        echo -e "\033[31;1m${line}\033[0m"
+    else
+        echo "$line"
+    fi
+done < <(python -m galaxy_importer.main "$collection")
+
+rm -rf "$VENV"
+
+exit "$error"
-- 
GitLab