diff --git a/test/bin/common_versions.sh b/test/bin/common_versions.sh index d22a0417ef..c99978f85c 100644 --- a/test/bin/common_versions.sh +++ b/test/bin/common_versions.sh @@ -81,8 +81,8 @@ export FAKE_NEXT_MINOR_VERSION=$(( "${MINOR_VERSION}" + 1 )) # # For a release branch, the current release repository should come from the # official 'rhocp' stream. -CURRENT_RELEASE_REPO="" -CURRENT_RELEASE_VERSION="" +CURRENT_RELEASE_REPO="https://mirror.openshift.com/pub/openshift-v4/${UNAME_M}/microshift/ocp-dev-preview/latest-4.22/el9/os" +CURRENT_RELEASE_VERSION="$(get_vrel_from_beta "${CURRENT_RELEASE_REPO}")" export CURRENT_RELEASE_REPO export CURRENT_RELEASE_VERSION @@ -139,7 +139,7 @@ export CNCF_SONOBUOY_VERSION=v0.57.3 export CNCF_SYSTEMD_LOGS_VERSION=v0.4 # The current version of the microshift-gitops package. -export GITOPS_VERSION=1.16 +export GITOPS_VERSION=1.19 # The brew release versions needed for release regression testing BREW_Y0_RELEASE_VERSION="$(get_vrel_from_rpm "${BREW_RPM_SOURCE}/4.${MINOR_VERSION}-zstream/${UNAME_M}/")" diff --git a/test/bin/pyutils/generate_common_versions.py b/test/bin/pyutils/generate_common_versions.py index a0accc1cea..3f96e05803 100755 --- a/test/bin/pyutils/generate_common_versions.py +++ b/test/bin/pyutils/generate_common_versions.py @@ -10,6 +10,7 @@ import argparse import logging import pathlib +import time sys.path.append(str(pathlib.Path(__file__).resolve().parent / '../../../scripts/pyutils')) import gitutils # noqa: E402 @@ -24,9 +25,6 @@ # The version of systemd-logs image included in the sonobuoy release. CNCF_SYSTEMD_LOGS_VERSION = "v0.4" -# The current version of the microshift-gitops package. -GITOPS_VERSION = "1.16" - # Set the release type to ec, rc or zstream LATEST_RELEASE_TYPE = "ec" @@ -211,6 +209,37 @@ def get_release_version_string(repo, var_name): return None +def get_gitops_version(minor_version): + """ + Get the version of the microshift-gitops package. + Versions compatible with MicroShift: https://access.redhat.com/product-life-cycles?product=Red%20Hat%20OpenShift%20GitOps + """ + url = "https://access.redhat.com/product-life-cycles/api/v1/products" + params = {"name": "Red Hat OpenShift GitOps"} + for attempt in range(1, 4): + try: + resp = requests.get(url, params=params, timeout=10) + resp.raise_for_status() + except Exception as e: + logging.warning(f"Attempt {attempt} failed with error: {e}. Retrying...") + time.sleep(2) + continue + break + + if attempt == 3: + logging.error(f"Failed to fetch data from {url} after 3 attempts") + return "" + data = resp.json() + for current_microshift_minor_version in range(minor_version, minor_version - 4, -1): + for gitops_version_from_api_docs in data.get("data", [{}])[0].get("versions", []): + gitops_version_ocp_compatibility = gitops_version_from_api_docs.get("openshift_compatibility") + gitops_version_number = gitops_version_from_api_docs.get("name") + if f"4.{current_microshift_minor_version}" in gitops_version_ocp_compatibility: + logging.info(f"Latest GitOps version: {gitops_version_number} which is compatible with OCP {gitops_version_ocp_compatibility}") + return gitops_version_number + return "" + + def generate_common_versions(minor_version): previous_minor_version = minor_version - 1 yminus2_minor_version = minor_version - 2 @@ -258,6 +287,10 @@ def generate_common_versions(minor_version): # The 'rhocp_minor_y2' should always be the y-2 minor version number. rhocp_minor_y2 = yminus2_minor_version + # The current version of the microshift-gitops package. + logging.info("Getting GITOPS_VERSION") + gitops_version = get_gitops_version(minor_version) + template_path = pathlib.Path(__file__).resolve().parent / '../../assets/common_versions.sh.template' with open(template_path, 'r') as f: @@ -278,7 +311,7 @@ def generate_common_versions(minor_version): rhocp_minor_y2=rhocp_minor_y2, CNCF_SONOBUOY_VERSION=CNCF_SONOBUOY_VERSION, CNCF_SYSTEMD_LOGS_VERSION=CNCF_SYSTEMD_LOGS_VERSION, - GITOPS_VERSION=GITOPS_VERSION, + GITOPS_VERSION=gitops_version, LATEST_RELEASE_TYPE=LATEST_RELEASE_TYPE, ARCH=ARCH ) diff --git a/test/suites/gitops/gitops.robot b/test/suites/gitops/gitops.robot index edd453e57f..6c2ef14fce 100644 --- a/test/suites/gitops/gitops.robot +++ b/test/suites/gitops/gitops.robot @@ -3,8 +3,15 @@ Documentation MicroShift GitOps tests Resource ../../resources/microshift-process.resource -Suite Setup Setup Suite With Namespace -Suite Teardown Teardown Suite With Namespace +Suite Setup Setup Suite +Suite Teardown Teardown Suite + + +*** Variables *** +${APPLICATION_MANIFEST_PATH} ${CURDIR}/spring-petclinic-app.yaml +${APPLICATION_NAMESPACE} spring-petclinic +${APPLICATION_NAME} spring-petclinic +${GITOPS_NAMESPACE} openshift-gitops *** Test Cases *** @@ -14,10 +21,28 @@ Verify GitOps Pods Start Correctly Wait Until Keyword Succeeds 2min 10s ... All Pods Should Be Running openshift-gitops -Verify Workload Deployed Correctly - [Documentation] Deploys workload and waits for ready status +Verify Application Deployed Correctly + [Documentation] Deploys an application and waits for it to be Healthy + ... using the example from official docs: https://docs.redhat.com/en/documentation/red_hat_build_of_microshift/4.20/html/running_applications/microshift-gitops#microshift-gitops-adding-apps_microshift-gitops + [Setup] Setup Application Deployment + + Wait Until Resource Exists applications ${APPLICATION_NAME} ${GITOPS_NAMESPACE} timeout=120s + Oc Wait + ... -n ${GITOPS_NAMESPACE} application ${APPLICATION_NAME} + ... --for=jsonpath='{.status.sync.status}'=Synced --timeout=300s + Oc Wait + ... -n ${APPLICATION_NAMESPACE} pod --selector=app=${APPLICATION_NAME} + ... --for=condition=Ready --timeout=300s + + [Teardown] Teardown Application Deployment + + +*** Keywords *** +Setup Application Deployment + [Documentation] Setup the application deployment + Oc Apply -f ${APPLICATION_MANIFEST_PATH} - VAR ${manifest_path}= ${CURDIR}/test-deployment.yaml - Oc Apply -f ${manifest_path} -n ${NAMESPACE} - Wait Until Keyword Succeeds 5min 10s - ... Named Deployment Should Be Available test-app +Teardown Application Deployment + [Documentation] Teardown the application deployment + Oc Delete -f ${APPLICATION_MANIFEST_PATH} + Oc Delete ns ${APPLICATION_NAMESPACE} diff --git a/test/suites/gitops/spring-petclinic-app.yaml b/test/suites/gitops/spring-petclinic-app.yaml new file mode 100644 index 0000000000..f00e491fc0 --- /dev/null +++ b/test/suites/gitops/spring-petclinic-app.yaml @@ -0,0 +1,35 @@ +kind: AppProject +apiVersion: argoproj.io/v1alpha1 +metadata: + name: default + namespace: openshift-gitops +spec: + clusterResourceWhitelist: + - group: '*' + kind: '*' + destinations: + - namespace: '*' + server: '*' + sourceRepos: + - '*' +--- +kind: Application +apiVersion: argoproj.io/v1alpha1 +metadata: + name: spring-petclinic + namespace: openshift-gitops +spec: + destination: + namespace: spring-petclinic + server: https://kubernetes.default.svc + project: default + source: + directory: + recurse: true + path: app + repoURL: https://github.com/siamaksade/openshift-gitops-getting-started + syncPolicy: + automated: {} + syncOptions: + - CreateNamespace=true + - ServerSideApply=true diff --git a/test/suites/gitops/test-deployment.yaml b/test/suites/gitops/test-deployment.yaml deleted file mode 100644 index 17c72fc397..0000000000 --- a/test/suites/gitops/test-deployment.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: test-app -spec: - replicas: 1 - selector: - matchLabels: - app: test-app - template: - metadata: - labels: - app: test-app - spec: - containers: - - name: test-app - image: registry.redhat.io/ubi8/httpd-24:latest - ports: - - containerPort: 8080