From 5a16ef9011d37dda452604d7823999d5c8b0be08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=81nis=20Bebr=C4=ABtis?= Date: Mon, 4 Mar 2024 22:55:13 +0200 Subject: [PATCH] Test builds via circleci api v2 --- .github/workflows/docker-images.yml | 56 ++++++++++++++++---------- .github/workflows/test-build.yaml | 61 +++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/test-build.yaml diff --git a/.github/workflows/docker-images.yml b/.github/workflows/docker-images.yml index 2eb6b614..bf68a418 100644 --- a/.github/workflows/docker-images.yml +++ b/.github/workflows/docker-images.yml @@ -87,36 +87,50 @@ jobs: strategy: matrix: project: [ - {repo: "drupal-project-k8s", jobs: "4"}, - {repo: "frontend-project-k8s", jobs: "4"}, - {repo: "simple-project-k8s", jobs: "3"} + {org: "wunderio", repo: "drupal-project-k8s", branch: "master"}, + {org: "wunderio", repo: "frontend-project-k8s", branch: "master"}, + {org: "wunderio", repo: "simple-project-k8s", branch: "master"} ] steps: - uses: actions/checkout@v3 - name: Validate released images with ${{ matrix.project.repo }} run: | REPO_NAME="${{ matrix.project.repo }}" - JOB_COUNT="${{ matrix.project.jobs }}" - CIRCLECI_DEV_API_TOKEN="${{ secrets.CIRCLECI_DEV_API_TOKEN }}" + ORG_NAME="${{ matrix.project.org }}" + BRANCH_NAME="${{ matrix.project.branch }}" + CIRCLECI_DEV_API_TOKEN_B64=$(echo -n "${{ secrets.CIRCLECI_DEV_API_TOKEN }}:" | base64) - if [ -z "${REPO_NAME}" ] || [ -z "${CIRCLECI_DEV_API_TOKEN}" ] || [ -z "${JOB_COUNT}" ]; then - echo "Missing CIRCLECI_DEV_API_TOKEN secret" - exit 1 + if [ -z "${{ secrets.CIRCLECI_DEV_API_TOKEN }}" ]; then + echo "Repository secrets is missing CIRCLECI_DEV_API_TOKEN variable." + exit 1 fi - echo "Running ${REPO_NAME} build on CircleCI" - echo "Project link: https://circleci.com/gh/wunderio/workflows/${REPO_NAME}" + echo "Running ${ORG_NAME}/${REPO_NAME}/${BRANCH_NAME} build on CircleCI" + echo "Project link: https://app.circleci.com/pipelines/github/${ORG_NAME}/${REPO_NAME}?branch=${BRANCH_NAME}" + + # Trigger a new pipeline + PIPELINE_ID=$(curl --request POST \ + --url "https://circleci.com/api/v2/project/gh/wunderio/${REPO_NAME}/pipeline" \ + --header "content-type: application/json" \ + --data "{\"branch\":\"${BRANCH_NAME}\"}" \ + --header "authorization: Basic ${CIRCLECI_DEV_API_TOKEN_B64}" --silent | jq -r '.id') + + echo "Pipeline ID: ${PIPELINE_ID}" - base_api_url="https://circleci.com/api/v1.1/project/github/wunderio/${REPO_NAME}" - # Trigger a new deployment. - curl -s -X POST $base_api_url/build?circle-token=${CIRCLECI_DEV_API_TOKEN} - sleep 10 - # Wait for deployment to be complete - while curl -s "$base_api_url?circle-token=${CIRCLECI_DEV_API_TOKEN}&limit=${JOB_COUNT}" | jq -e 'any(.[]; (.status == "running") or (.status == "queued"))' > /dev/null - do - echo "still running" sleep 10 + + # Wait for pipeline to be complete + while true; do + PIPELINE_STATUS=$(curl --request GET \ + --url "https://circleci.com/api/v2/pipeline/${PIPELINE_ID}/workflow" \ + --header "authorization: Basic ${CIRCLECI_DEV_API_TOKEN_B64}" --silent | jq -r '.items[0].status') + if [ "${PIPELINE_STATUS}" = "success" ]; then + echo "Pipeline completed successfully" + break + elif [ "${PIPELINE_STATUS}" != "created" ] && [ "${PIPELINE_STATUS}" != "running" ]; then + echo "Pipeline status: ${PIPELINE_STATUS}, failing the test" + exit 1 + fi + echo "current status: ${PIPELINE_STATUS}" + sleep 10 done - # Test that the build was successful - curl -s "$base_api_url?circle-token=${CIRCLECI_DEV_API_TOKEN}&limit=${JOB_COUNT}" | jq '.[] | { job_name: .workflows.job_name, status: .status }' - curl -s "$base_api_url?circle-token=${CIRCLECI_DEV_API_TOKEN}&limit=${JOB_COUNT}" | jq -e 'all(.[]; .status == "success")' > /dev/null diff --git a/.github/workflows/test-build.yaml b/.github/workflows/test-build.yaml new file mode 100644 index 00000000..4dcc8158 --- /dev/null +++ b/.github/workflows/test-build.yaml @@ -0,0 +1,61 @@ +name: Build and push docker images + +on: + push: + branches: + - feature/cci-api-2 + +jobs: + circleci-k8s-test-build: + name: Test released images + runs-on: ubuntu-latest + strategy: + matrix: + project: [ + {org: "wunderio", repo: "drupal-project-k8s", branch: "master"}, + {org: "wunderio", repo: "frontend-project-k8s", branch: "master"}, + {org: "wunderio", repo: "simple-project-k8s", branch: "master"} + ] + steps: + - uses: actions/checkout@v3 + - name: Validate released images with ${{ matrix.project.repo }} + run: | + REPO_NAME="${{ matrix.project.repo }}" + ORG_NAME="${{ matrix.project.org }}" + BRANCH_NAME="${{ matrix.project.branch }}" + CIRCLECI_DEV_API_TOKEN_B64=$(echo -n "${{ secrets.CIRCLECI_DEV_API_TOKEN }}:" | base64) + + if [ -z "${{ secrets.CIRCLECI_DEV_API_TOKEN }}" ]; then + echo "Repository secrets is missing CIRCLECI_DEV_API_TOKEN variable." + exit 1 + fi + + echo "Running ${ORG_NAME}/${REPO_NAME}/${BRANCH_NAME} build on CircleCI" + echo "Project link: https://app.circleci.com/pipelines/github/${ORG_NAME}/${REPO_NAME}?branch=${BRANCH_NAME}" + + # Trigger a new pipeline + PIPELINE_ID=$(curl --request POST \ + --url "https://circleci.com/api/v2/project/gh/wunderio/${REPO_NAME}/pipeline" \ + --header "content-type: application/json" \ + --data "{\"branch\":\"${BRANCH_NAME}\"}" \ + --header "authorization: Basic ${CIRCLECI_DEV_API_TOKEN_B64}" --silent | jq -r '.id') + + echo "Pipeline ID: ${PIPELINE_ID}" + + sleep 10 + + # Wait for pipeline to be complete + while true; do + PIPELINE_STATUS=$(curl --request GET \ + --url "https://circleci.com/api/v2/pipeline/${PIPELINE_ID}/workflow" \ + --header "authorization: Basic ${CIRCLECI_DEV_API_TOKEN_B64}" --silent | jq -r '.items[0].status') + if [ "${PIPELINE_STATUS}" = "success" ]; then + echo "Pipeline completed successfully" + break + elif [ "${PIPELINE_STATUS}" != "created" ] && [ "${PIPELINE_STATUS}" != "running" ]; then + echo "Pipeline status: ${PIPELINE_STATUS}, failing the test" + exit 1 + fi + echo "current status: ${PIPELINE_STATUS}" + sleep 10 + done