diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index a8903d43..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,69 +0,0 @@ -# Use the latest 2.1 version of CircleCI pipeline process engine. -# See: https://circleci.com/docs/2.0/configuration-reference -version: 2.1 -orbs: - jq: circleci/jq@2.2.0 - -description: | - Run end-to-end integration tests between deno-slack-sdk, Slack Platform CLI and other Slack app development tooling. - -jobs: - e2e-test: - docker: - - image: cimg/base:current - parameters: - e2e_target_branch: - type: string - description: "What branch of the integration test repo should be used to test the CLI?" - default: main - sdk_branch: - type: string - description: "What deno-slack-sdk branch should be used during testing?" - default: main - steps: - - checkout - - run: - name: Kick off platform-devpx-test pipeline - command: | - IMPORT_URL="https://raw.githubusercontent.com/slackapi/deno-slack-sdk/refs/heads/<< parameters.sdk_branch >>/src/"; - # https://app.circleci.com/settings/organization/github/slackapi/contexts - TEST_JOB_WORKFLOW_ID=$(curl --location --request POST 'https://circleci.com/api/v2/project/gh/slackapi/platform-devxp-test/pipeline' \ - --header 'Content-Type: application/json' \ - -u "${FIL_CIRCLECI_PERSONAL_TOKEN}:" \ - --data "{\"branch\":\"<< parameters.e2e_target_branch >>\",\"parameters\":{\"deno_sdk_import_url\":\"${IMPORT_URL}\"}}" | jq '.id') - echo "e2e test workflow started with id: $TEST_JOB_WORKFLOW_ID" - echo "export TEST_JOB_WORKFLOW_ID=${TEST_JOB_WORKFLOW_ID}" >> $BASH_ENV - - run: - name: Wait for platform-devxp-test E2E run to complete - command: | - E2E_RESULT="{}" - E2E_STATUS="running" - # possible status values: success, running, not_run, failed, error, failing, on_hold, canceled, unauthorized - while [[ $E2E_STATUS != "failed" && $E2E_STATUS != "canceled" && $E2E_STATUS != "success" && $E2E_STATUS != "not_run" && $E2E_STATUS != "error" && $E2E_STATUS != "unauthorized" ]] - do - sleep 30s - echo "Polling test job ${TEST_JOB_WORKFLOW_ID}..." - E2E_RESULT=$(curl --location -sS --request GET "https://circleci.com/api/v2/pipeline/$TEST_JOB_WORKFLOW_ID/workflow" --header "Circle-Token: $FIL_CIRCLECI_PERSONAL_TOKEN") - E2E_STATUS=$(echo $E2E_RESULT | jq --raw-output '.items[0].status') - echo "Status is now: $E2E_STATUS" - done - if [ $E2E_STATUS = "failed" ] || [ $E2E_STATUS = "error" ]; then - E2E_PIPE_NUM=$(echo $E2E_RESULT | jq '.items[0].pipeline_number') - E2E_WORKFLOW_ID=$(echo $E2E_RESULT | jq -r '.items[0].id') - CIRCLE_FAIL_LINK="https://app.circleci.com/pipelines/github/slackapi/platform-devxp-test/${E2E_PIPE_NUM}/workflows/${E2E_WORKFLOW_ID}" - echo "Tests failed! Visit $CIRCLE_FAIL_LINK for more info." - exit 1 - elif [ "$E2E_STATUS" = "canceled" ] || [ "$E2E_STATUS" = "unauthorized" ] || [ $E2E_STATUS = "not_run" ]; then - echo "Tests have been ${E2E_STATUS} and did not finish!" - exit 1 - else - echo "Tests passed woot 🎉" - fi - -workflows: - e2e-test: - jobs: - - e2e-test: - e2e_target_branch: "main" - sdk_branch: << pipeline.git.branch >> - context: slack-cli-e2e diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 00000000..f1a5854e --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,71 @@ +# This workflow invokes and waits for the result of Slack's private E2E CI system +name: Internal E2E CI + +on: + push: + branches: [main] + pull_request: + +jobs: + e2e: + runs-on: ubuntu-latest + steps: + - name: Checkout the sdk + uses: actions/checkout@v4 + - name: Set environment variables + run: | + # Short name for current branch. For PRs, use source branch (GITHUB_HEAD_REF) + GIT_BRANCH=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + echo "Identified deno-slack-sdk branch name: ${GIT_BRANCH}; will invoke CI system to test this branch."; + echo "GIT_BRANCH=$GIT_BRANCH" >> $GITHUB_ENV + - name: Kick off platform-devpx-test pipeline + env: + CCI_PAT: ${{ secrets.CCHEN_CIRCLECI_PERSONAL_TOKEN }} + run: | + IMPORT_URL="https://raw.githubusercontent.com/slackapi/deno-slack-sdk/refs/heads/${GIT_BRANCH}/src/"; + echo "Import URL: ${IMPORT_URL}"; + # https://app.circleci.com/settings/organization/github/slackapi/contexts + TEST_PAYLOAD=$(curl --location --request POST 'https://circleci.com/api/v2/project/gh/slackapi/platform-devxp-test/pipeline' \ + --header 'Content-Type: application/json' \ + -u "${CCI_PAT}:" \ + --data "{\"branch\":\"main\",\"parameters\":{\"deno_sdk_import_url\":\"${IMPORT_URL}\"}}") + echo $TEST_PAYLOAD; + TEST_JOB_WORKFLOW_ID=$(echo $TEST_PAYLOAD | jq --raw-output '.id'); + if [ $TEST_JOB_WORKFLOW_ID = "null" ]; then + echo "Problem extracting job ID from invocation API call! Aborting!"; + exit 1; + fi + echo "e2e test workflow started with id: $TEST_JOB_WORKFLOW_ID" + echo "TEST_JOB_WORKFLOW_ID=${TEST_JOB_WORKFLOW_ID}" >> $GITHUB_ENV + - name: Wait for platform-devxp-test E2E run to complete + env: + CCI_PAT: ${{ secrets.CCHEN_CIRCLECI_PERSONAL_TOKEN }} + run: | + E2E_RESULT="{}" + E2E_STATUS="running" + # possible status values: success, running, not_run, failed, error, failing, on_hold, canceled, unauthorized + while [[ $E2E_STATUS != "failed" && $E2E_STATUS != "canceled" && $E2E_STATUS != "success" && $E2E_STATUS != "not_run" && $E2E_STATUS != "error" && $E2E_STATUS != "unauthorized" ]] + do + sleep 30s + echo "Polling test job ${TEST_JOB_WORKFLOW_ID}..." + E2E_RESULT=$(curl --location -sS --request GET "https://circleci.com/api/v2/pipeline/${TEST_JOB_WORKFLOW_ID}/workflow" --header "Circle-Token: ${CCI_PAT}") + echo $E2E_RESULT; + E2E_STATUS=$(echo $E2E_RESULT | jq --raw-output '.items[0].status') + if [ $E2E_STATUS = "null" ]; then + echo "Problem extracting status from workflow API! Aborting!"; + exit 1 + fi + echo "Status is now: $E2E_STATUS" + done + if [ $E2E_STATUS = "failed" ] || [ $E2E_STATUS = "error" ]; then + E2E_PIPE_NUM=$(echo $E2E_RESULT | jq '.items[0].pipeline_number') + E2E_WORKFLOW_ID=$(echo $E2E_RESULT | jq -r '.items[0].id') + CIRCLE_FAIL_LINK="https://app.circleci.com/pipelines/github/slackapi/platform-devxp-test/${E2E_PIPE_NUM}/workflows/${E2E_WORKFLOW_ID}" + echo "Tests failed! Visit $CIRCLE_FAIL_LINK for more info." + exit 1 + elif [ "$E2E_STATUS" = "canceled" ] || [ "$E2E_STATUS" = "unauthorized" ] || [ $E2E_STATUS = "not_run" ]; then + echo "Tests have been ${E2E_STATUS} and did not finish!" + exit 1 + else + echo "Tests passed woot 🎉" + fi