|
1 | | -#!/usr/bin/env bash |
2 | | -# Trigger serverless-e2e-tests pipeline and poll until completion. |
3 | | - |
4 | | -set -euo pipefail |
5 | | - |
6 | | -if [ -z "${EXTENSION_LAYER_ARN:-}" ]; then |
7 | | - echo "ERROR: EXTENSION_LAYER_ARN is not set or empty" |
8 | | - exit 1 |
9 | | -fi |
10 | | - |
11 | | -E2E_PROJECT_ENCODED="DataDog%2Fserverless-e2e-tests" |
12 | | -E2E_REF="${E2E_REF:-main}" |
13 | | - |
14 | | -curl -OL "binaries.ddbuild.io/dd-source/authanywhere/LATEST/authanywhere-linux-amd64" && mv authanywhere-linux-amd64 /bin/authanywhere && chmod +x /bin/authanywhere |
| 1 | +#!/bin/bash |
| 2 | +curl -OL "binaries.ddbuild.io/dd-source/authanywhere/LATEST/authanywhere-linux-amd64" \ |
| 3 | + && mv "authanywhere-linux-amd64" /bin/authanywhere \ |
| 4 | + && chmod +x /bin/authanywhere |
15 | 5 |
|
16 | 6 | BTI_CI_API_TOKEN=$(authanywhere --audience rapid-devex-ci) |
17 | 7 |
|
18 | 8 | BTI_RESPONSE=$(curl --silent --request GET \ |
19 | 9 | --header "$BTI_CI_API_TOKEN" \ |
20 | 10 | --header "Content-Type: application/vnd.api+json" \ |
21 | | - "https://bti-ci-api.us1.ddbuild.io/internal/ci/gitlab/token?owner=DataDog&repository=serverless-e2e-tests") |
| 11 | + "https://bti-ci-api.us1.ddbuild.io/internal/ci/gitlab/token?owner=DataDog&repository=datadog-lambda-extension") |
22 | 12 |
|
23 | 13 | GITLAB_TOKEN=$(echo "$BTI_RESPONSE" | jq -r '.token // empty') |
| 14 | + |
24 | 15 | if [ -z "$GITLAB_TOKEN" ]; then |
25 | 16 | echo "ERROR: could not obtain GitLab token from BTI" |
26 | 17 | exit 1 |
27 | 18 | fi |
28 | 19 |
|
29 | | -echo "Triggering DataDog/serverless-e2e-tests pipeline (ref: ${E2E_REF})..." |
30 | | -echo " EXTENSION_LAYER_ARN=${EXTENSION_LAYER_ARN}" |
31 | | - |
32 | | -TRIGGER_RESPONSE=$(curl --silent --request POST \ |
33 | | - --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ |
34 | | - --header "Content-Type: application/json" \ |
35 | | - --data "$(jq -n \ |
36 | | - --arg ref "$E2E_REF" \ |
37 | | - --arg arn "$EXTENSION_LAYER_ARN" \ |
38 | | - '{ref: $ref, variables: [{key: "EXTENSION_VERSION", value: $arn}]}')" \ |
39 | | - "${CI_API_V4_URL}/projects/${E2E_PROJECT_ENCODED}/pipeline") |
| 20 | +URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/bridges" |
40 | 21 |
|
41 | | -PIPELINE_ID=$(echo "$TRIGGER_RESPONSE" | jq -r '.id // empty') |
42 | | -PIPELINE_URL=$(echo "$TRIGGER_RESPONSE" | jq -r '.web_url // empty') |
43 | | - |
44 | | -if [ -z "$PIPELINE_ID" ] || [ "$PIPELINE_ID" = "null" ]; then |
45 | | - echo "ERROR: failed to trigger downstream pipeline" |
46 | | - echo "Response: $TRIGGER_RESPONSE" |
47 | | - exit 1 |
48 | | -fi |
49 | | - |
50 | | -echo "Triggered downstream pipeline: ${PIPELINE_URL} (ID: ${PIPELINE_ID})" |
| 22 | +echo "Fetching E2E job status from: $URL" |
51 | 23 |
|
52 | 24 | while true; do |
53 | | - STATUS=$(curl --silent \ |
54 | | - --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" \ |
55 | | - "${CI_API_V4_URL}/projects/${E2E_PROJECT_ENCODED}/pipelines/${PIPELINE_ID}" \ |
56 | | - | jq -r '.status // empty') |
57 | | - |
58 | | - echo -n "E2E pipeline ${PIPELINE_ID} status: ${STATUS}, " |
59 | | - |
60 | | - case "$STATUS" in |
61 | | - success) |
62 | | - echo "E2E tests passed" |
63 | | - exit 0 |
64 | | - ;; |
65 | | - failed) |
66 | | - echo "E2E tests failed" |
67 | | - exit 1 |
68 | | - ;; |
69 | | - canceled|canceling) |
70 | | - echo "E2E tests canceled" |
71 | | - exit 1 |
72 | | - ;; |
73 | | - skipped) |
74 | | - echo "E2E tests skipped" |
75 | | - exit 0 |
76 | | - ;; |
77 | | - running|pending|created|waiting_for_resource|preparing) |
78 | | - echo "still running, checking again in 2 minutes..." |
79 | | - ;; |
80 | | - *) |
81 | | - echo "unknown status, checking again in 2 minutes..." |
82 | | - ;; |
83 | | - esac |
84 | | - |
| 25 | + HTTP_STATUS=$(curl -s -o /tmp/e2e_response.json -w "%{http_code}" --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}" "$URL") |
| 26 | + if [ "$HTTP_STATUS" != "200" ]; then |
| 27 | + echo "WARNING: GitLab API returned HTTP $HTTP_STATUS, retrying in 2 minutes..." |
| 28 | + sleep 120 |
| 29 | + continue |
| 30 | + fi |
| 31 | + RESPONSE=$(cat /tmp/e2e_response.json) |
| 32 | + E2E_JOB_STATUS=$(echo "$RESPONSE" | jq -r --arg name "$E2E_JOB_NAME" '.[] | select(.name==$name) | .downstream_pipeline.status') |
| 33 | + echo -n "E2E job status: $E2E_JOB_STATUS, " |
| 34 | + if [ "$E2E_JOB_STATUS" == "success" ]; then |
| 35 | + echo "E2E tests completed successfully" |
| 36 | + exit 0 |
| 37 | + elif [ "$E2E_JOB_STATUS" == "failed" ]; then |
| 38 | + echo "E2E tests failed" |
| 39 | + exit 1 |
| 40 | + elif [ "$E2E_JOB_STATUS" == "running" ]; then |
| 41 | + echo "E2E tests are still running, retrying in 2 minutes..." |
| 42 | + elif [ "$E2E_JOB_STATUS" == "canceled" ]; then |
| 43 | + echo "E2E tests were canceled" |
| 44 | + exit 1 |
| 45 | + elif [ "$E2E_JOB_STATUS" == "skipped" ]; then |
| 46 | + echo "E2E tests were skipped" |
| 47 | + exit 0 |
| 48 | + else |
| 49 | + echo "Unknown E2E test status: $E2E_JOB_STATUS, retrying in 2 minutes..." |
| 50 | + fi |
85 | 51 | sleep 120 |
86 | 52 | done |
0 commit comments