diff --git a/.ci/openshift-ci/common.sh b/.ci/openshift-ci/common.sh index 4c6fe9a5f8..17b6b1d8e5 100644 --- a/.ci/openshift-ci/common.sh +++ b/.ci/openshift-ci/common.sh @@ -166,8 +166,7 @@ initUserNamespace() { setupPersonalAccessToken() { GIT_PROVIDER_TYPE=$1 GIT_PROVIDER_URL=$2 - GIT_PROVIDER_USER_ID=$3 - GIT_PROVIDER_PAT=$4 + GIT_PROVIDER_PAT=$3 echo "[INFO] Setup Personal Access Token Secret" oc project ${USER_CHE_NAMESPACE} @@ -179,9 +178,12 @@ setupPersonalAccessToken() { sed -i "s#che-user-id#${CHE_USER_ID}#g" pat-secret.yaml sed -i "s#git-provider-name#${GIT_PROVIDER_TYPE}#g" pat-secret.yaml sed -i "s#git-provider-url#${GIT_PROVIDER_URL}#g" pat-secret.yaml - sed -i "s#git-provider-user-id#${GIT_PROVIDER_USER_ID}#g" pat-secret.yaml sed -i "s#encoded-access-token#${ENCODED_PAT}#g" pat-secret.yaml + if [ "${GIT_PROVIDER_TYPE}" == "azure-devops" ]; then + sed -i "s#''#${GIT_PROVIDER_USERNAME}#g" pat-secret.yaml + fi + cat pat-secret.yaml oc apply -f pat-secret.yaml -n ${USER_CHE_NAMESPACE} @@ -216,23 +218,32 @@ testProjectIsCloned() { if oc exec -it -n ${OCP_USER_NAMESPACE} ${WORKSPACE_POD_NAME} -- test -f /projects/${PROJECT_NAME}/${YAML_FILE_NAME}; then echo "[INFO] Project file /projects/${PROJECT_NAME}/${YAML_FILE_NAME} exists." else - echo "[ERROR] Project file /projects/${PROJECT_NAME}/${YAML_FILE_NAME} does not exist." + echo "[INFO] Project file /projects/${PROJECT_NAME}/${YAML_FILE_NAME} is absent." return 1 fi } -testGitCredentials() { +testGitCredentialsData() { OCP_USER_NAMESPACE=$1 GIT_PROVIDER_PAT=$2 + GIT_PROVIDER_URL=$3 echo "[INFO] Check the 'git credentials' is in a workspace" - gitCredentials="${GIT_PROVIDER_USERNAME}:${GIT_PROVIDER_PAT}" + hostName="${GIT_PROVIDER_URL#https://}" + + if [ "${GIT_PROVIDER_TYPE}" == "azure-devops" ]; then + userName="username" + else + userName=${GIT_PROVIDER_USERNAME} + fi + + gitCredentials="https://${userName}:${GIT_PROVIDER_PAT}@${hostName}" WORKSPACE_POD_NAME=$(oc get pods -n ${OCP_USER_NAMESPACE} | grep workspace | awk '{print $1}') if oc exec -it -n ${OCP_USER_NAMESPACE} ${WORKSPACE_POD_NAME} -- cat /.git-credentials/credentials | grep -q ${gitCredentials}; then echo "[INFO] Git credentials file '/.git-credentials/credentials' exists and has the expected content." else echo "[ERROR] Git credentials file '/.git-credentials/credentials' does not exist or has incorrect content." - return 1 + exit 1 fi } @@ -273,7 +284,8 @@ testClonePublicRepoNoPatOAuth() { runTestWorkspaceWithGitRepoUrl ${WS_NAME} ${PROJECT_NAME} ${GIT_REPO_URL} ${OCP_USER_NAMESPACE} echo "[INFO] Check the public repository is cloned with NO PAT/OAuth setup" - testProjectIsCloned ${PROJECT_NAME} ${OCP_USER_NAMESPACE} || exit 1 + testProjectIsCloned ${PROJECT_NAME} ${OCP_USER_NAMESPACE} || \ + { echo "[ERROR] Project file /projects/${PROJECT_NAME}/${YAML_FILE_NAME} should be present." && exit 1; } deleteTestWorkspace ${WS_NAME} ${OCP_USER_NAMESPACE} } @@ -285,7 +297,9 @@ testClonePrivateRepoNoPatOAuth() { runTestWorkspaceWithGitRepoUrl ${WS_NAME} ${PROJECT_NAME} ${GIT_REPO_URL} ${OCP_USER_NAMESPACE} echo "[INFO] Check the private repository is NOT cloned with NO PAT/OAuth setup" - testProjectIsCloned ${PROJECT_NAME} ${OCP_USER_NAMESPACE} && exit 1 + testProjectIsCloned ${PROJECT_NAME} ${OCP_USER_NAMESPACE} && \ + { echo "[ERROR] Project file /projects/${PROJECT_NAME}/${YAML_FILE_NAME} should NOT be present" && exit 1; } + echo "[INFO] Project file /projects/${PROJECT_NAME}/${YAML_FILE_NAME} is NOT present. This is EXPECTED" deleteTestWorkspace ${WS_NAME} ${OCP_USER_NAMESPACE} } @@ -294,12 +308,10 @@ testCloneGitRepoWithSetupPat() { PROJECT_NAME=$2 GIT_REPO_URL=$3 OCP_USER_NAMESPACE=$4 - GIT_PROVIDER_PATH=$5 runTestWorkspaceWithGitRepoUrl ${WS_NAME} ${PROJECT_NAME} ${GIT_REPO_URL} ${OCP_USER_NAMESPACE} - testProjectIsCloned ${PROJECT_NAME} ${OCP_USER_NAMESPACE} || exit 1 - testGitCredentials ${OCP_USER_NAMESPACE} ${GIT_PROVIDER_PAT} - deleteTestWorkspace ${WS_NAME} ${OCP_USER_NAMESPACE} + testProjectIsCloned ${PROJECT_NAME} ${OCP_USER_NAMESPACE} || \ + { echo "[ERROR] Project file /projects/${PROJECT_NAME}/${YAML_FILE_NAME} should be present." && exit 1; } } setupTestEnvironment() { diff --git a/.ci/openshift-ci/pat-secret.yaml b/.ci/openshift-ci/pat-secret.yaml index f45ed810d5..4ec0df9da7 100644 --- a/.ci/openshift-ci/pat-secret.yaml +++ b/.ci/openshift-ci/pat-secret.yaml @@ -9,8 +9,7 @@ metadata: che.eclipse.org/che-userid: che-user-id che.eclipse.org/scm-personal-access-token-name: git-provider-name che.eclipse.org/scm-url: git-provider-url - che.eclipse.org/scm-userid: 'git-provider-user-id' - che.eclipse.org/scm-username: chepullreq1 + che.eclipse.org/scm-organization: '' data: token: encoded-access-token type: Opaque diff --git a/.ci/openshift-ci/test-azure-no-pat-oauth-flow.sh b/.ci/openshift-ci/test-azure-no-pat-oauth-flow.sh new file mode 100644 index 0000000000..96ff2b2f43 --- /dev/null +++ b/.ci/openshift-ci/test-azure-no-pat-oauth-flow.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# +# Copyright (c) 2023 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +# + +# exit immediately when a command fails +set -ex +# only exit with zero if all commands of the pipeline exit successfully +set -o pipefail + +export PUBLIC_REPO_URL=${PUBLIC_REPO_URL:-"https://chepullreq1@dev.azure.com/chepullreq1/che-pr-public/_git/public-repo"} +export PRIVATE_REPO_URL=${PRIVATE_REPO_URL:-"https://dev.azure.com/chepullreq1/che-pr-private/_git/private-repo"} + +# import common test functions +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +source "${SCRIPT_DIR}"/common.sh + +trap "catchFinish" EXIT SIGINT + +setupTestEnvironment ${OCP_NON_ADMIN_USER_NAME} +# due to the issue https://github.com/eclipse/che/issues/22469 +# testFactoryResolverNoPatOAuth ${PUBLIC_REPO_URL} ${PRIVATE_REPO_URL} +testClonePublicRepoNoPatOAuth ${PUBLIC_REPO_WORKSPACE_NAME} ${PUBLIC_PROJECT_NAME} ${PUBLIC_REPO_URL} ${USER_CHE_NAMESPACE} +testClonePrivateRepoNoPatOAuth ${PRIVATE_REPO_WORKSPACE_NAME} ${PRIVATE_PROJECT_NAME} ${PRIVATE_REPO_URL} ${USER_CHE_NAMESPACE} diff --git a/.ci/openshift-ci/test-azure-with-pat-setup-flow.sh b/.ci/openshift-ci/test-azure-with-pat-setup-flow.sh new file mode 100644 index 0000000000..2638864dda --- /dev/null +++ b/.ci/openshift-ci/test-azure-with-pat-setup-flow.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# +# Copyright (c) 2023 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +# + +# exit immediately when a command fails +set -ex +# only exit with zero if all commands of the pipeline exit successfully +set -o pipefail + +export PUBLIC_REPO_URL=${PUBLIC_REPO_URL:-"https://chepullreq1@dev.azure.com/chepullreq1/che-pr-public/_git/public-repo"} +export PRIVATE_REPO_URL=${PRIVATE_REPO_URL:-"https://dev.azure.com/chepullreq1/che-pr-private/_git/private-repo"} +export GIT_PROVIDER_TYPE=${GIT_PROVIDER_TYPE:-"azure-devops"} +export GIT_PROVIDER_URL=${GIT_PROVIDER_URL:-"https://dev.azure.com"} + +# import common test functions +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +source "${SCRIPT_DIR}"/common.sh + +trap "catchFinish" EXIT SIGINT + +setupTestEnvironment ${OCP_NON_ADMIN_USER_NAME} +setupPersonalAccessToken ${GIT_PROVIDER_TYPE} ${GIT_PROVIDER_URL} ${AZURE_PAT} +requestProvisionNamespace +testFactoryResolverWithPatOAuth ${PUBLIC_REPO_URL} ${PRIVATE_REPO_URL} +echo "[INFO] Check clone public repository with PAT setup" +testCloneGitRepoWithSetupPat ${PUBLIC_REPO_WORKSPACE_NAME} ${PUBLIC_PROJECT_NAME} ${PUBLIC_REPO_URL} ${USER_CHE_NAMESPACE} +testGitCredentialsData ${USER_CHE_NAMESPACE} ${AZURE_PAT} ${GIT_PROVIDER_URL} +deleteTestWorkspace ${PUBLIC_REPO_WORKSPACE_NAME} ${USER_CHE_NAMESPACE} +echo "[INFO] Check clone private repository with PAT setup" +testCloneGitRepoWithSetupPat ${PRIVATE_REPO_WORKSPACE_NAME} ${PRIVATE_PROJECT_NAME} ${PRIVATE_REPO_URL} ${USER_CHE_NAMESPACE} +testGitCredentialsData ${USER_CHE_NAMESPACE} ${AZURE_PAT} ${GIT_PROVIDER_URL} +deleteTestWorkspace ${PRIVATE_REPO_WORKSPACE_NAME} ${USER_CHE_NAMESPACE} diff --git a/.ci/openshift-ci/test-github-with-pat-setup-flow.sh b/.ci/openshift-ci/test-github-with-pat-setup-flow.sh index 53ab05a2a8..f522f970fd 100644 --- a/.ci/openshift-ci/test-github-with-pat-setup-flow.sh +++ b/.ci/openshift-ci/test-github-with-pat-setup-flow.sh @@ -28,10 +28,14 @@ source "${SCRIPT_DIR}"/common.sh trap "catchFinish" EXIT SIGINT setupTestEnvironment ${OCP_NON_ADMIN_USER_NAME} -setupPersonalAccessToken ${GIT_PROVIDER_TYPE} ${GIT_PROVIDER_URL} ${GITHUB_USER_ID} ${GITHUB_PAT} +setupPersonalAccessToken ${GIT_PROVIDER_TYPE} ${GIT_PROVIDER_URL} ${GITHUB_PAT} requestProvisionNamespace testFactoryResolverWithPatOAuth ${PUBLIC_REPO_URL} ${PRIVATE_REPO_URL} echo "[INFO] Check clone public repository with PAT setup" -testCloneGitRepoWithSetupPat ${PUBLIC_REPO_WORKSPACE_NAME} ${PUBLIC_PROJECT_NAME} ${PUBLIC_REPO_URL} ${USER_CHE_NAMESPACE} ${GITHUB_PAT} +testCloneGitRepoWithSetupPat ${PUBLIC_REPO_WORKSPACE_NAME} ${PUBLIC_PROJECT_NAME} ${PUBLIC_REPO_URL} ${USER_CHE_NAMESPACE} +testGitCredentialsData ${USER_CHE_NAMESPACE} ${GITHUB_PAT} ${GIT_PROVIDER_URL} +deleteTestWorkspace ${PUBLIC_REPO_WORKSPACE_NAME} ${USER_CHE_NAMESPACE} echo "[INFO] Check clone private repository with PAT setup" -testCloneGitRepoWithSetupPat ${PRIVATE_REPO_WORKSPACE_NAME} ${PRIVATE_PROJECT_NAME} ${PRIVATE_REPO_URL} ${USER_CHE_NAMESPACE} ${GITHUB_PAT} +testCloneGitRepoWithSetupPat ${PRIVATE_REPO_WORKSPACE_NAME} ${PRIVATE_PROJECT_NAME} ${PRIVATE_REPO_URL} ${USER_CHE_NAMESPACE} +testGitCredentialsData ${USER_CHE_NAMESPACE} ${GITHUB_PAT} ${GIT_PROVIDER_URL} +deleteTestWorkspace ${PRIVATE_REPO_WORKSPACE_NAME} ${USER_CHE_NAMESPACE} diff --git a/.ci/openshift-ci/test-gitlab-with-pat-setup-flow.sh b/.ci/openshift-ci/test-gitlab-with-pat-setup-flow.sh index c0ddfb6b09..9f7ddb3834 100644 --- a/.ci/openshift-ci/test-gitlab-with-pat-setup-flow.sh +++ b/.ci/openshift-ci/test-gitlab-with-pat-setup-flow.sh @@ -28,10 +28,14 @@ source "${SCRIPT_DIR}"/common.sh trap "catchFinish" EXIT SIGINT setupTestEnvironment ${OCP_NON_ADMIN_USER_NAME} -setupPersonalAccessToken ${GIT_PROVIDER_TYPE} ${GIT_PROVIDER_URL} ${GITLAB_USER_ID} ${GITLAB_PAT} +setupPersonalAccessToken ${GIT_PROVIDER_TYPE} ${GIT_PROVIDER_URL} ${GITLAB_PAT} requestProvisionNamespace testFactoryResolverWithPatOAuth ${PUBLIC_REPO_URL} ${PRIVATE_REPO_URL} echo "[INFO] Check clone public repository with PAT setup" -testCloneGitRepoWithSetupPat ${PUBLIC_REPO_WORKSPACE_NAME} ${PUBLIC_PROJECT_NAME} ${PUBLIC_REPO_URL} ${USER_CHE_NAMESPACE} ${GITLAB_PAT} +testCloneGitRepoWithSetupPat ${PUBLIC_REPO_WORKSPACE_NAME} ${PUBLIC_PROJECT_NAME} ${PUBLIC_REPO_URL} ${USER_CHE_NAMESPACE} +testGitCredentialsData ${USER_CHE_NAMESPACE} ${GITLAB_PAT} ${GIT_PROVIDER_URL} +deleteTestWorkspace ${PUBLIC_REPO_WORKSPACE_NAME} ${USER_CHE_NAMESPACE} echo "[INFO] Check clone private repository with PAT setup" -testCloneGitRepoWithSetupPat ${PRIVATE_REPO_WORKSPACE_NAME} ${PRIVATE_PROJECT_NAME} ${PRIVATE_REPO_URL} ${USER_CHE_NAMESPACE} ${GITLAB_PAT} +testCloneGitRepoWithSetupPat ${PRIVATE_REPO_WORKSPACE_NAME} ${PRIVATE_PROJECT_NAME} ${PRIVATE_REPO_URL} ${USER_CHE_NAMESPACE} +testGitCredentialsData ${USER_CHE_NAMESPACE} ${GITLAB_PAT} ${GIT_PROVIDER_URL} +deleteTestWorkspace ${PRIVATE_REPO_WORKSPACE_NAME} ${USER_CHE_NAMESPACE}