|
1 | 1 | #!/bin/sh -l
|
2 | 2 |
|
3 |
| -echo "Owner $1" |
| 3 | +KEEP_CLONE=false |
4 | 4 |
|
5 |
| -status="OK" |
6 |
| -echo "::set-output name=status::$status" |
| 5 | +if [[ "${INPUT_DOWNLOAD_ARTIFACTS}" == "true" ]]; then |
| 6 | + KEEP_CLONE=true |
| 7 | +fi |
| 8 | + |
| 9 | +JSON_DATA=$(jq -n -c \ |
| 10 | + --arg owner "$INPUT_OWNER" \ |
| 11 | + --arg repo "$INPUT_REPO" \ |
| 12 | + --arg ref "$INPUT_REF" \ |
| 13 | + --arg commands "$INPUT_COMMANDS" \ |
| 14 | + --arg db_name "$INPUT_DBNAME" \ |
| 15 | + --arg username "$GITHUB_ACTOR" \ |
| 16 | + --arg username_full "$INPUT_AUTHOR_NAME" \ |
| 17 | + --arg username_link "${GITHUB_SERVER_URL}/$GITHUB_ACTOR" \ |
| 18 | + --arg branch "${GITHUB_HEAD_REF:-${GITHUB_REF##*/}}" \ |
| 19 | + --arg branch_link "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/tree/${GITHUB_HEAD_REF:-${GITHUB_REF##*/}}" \ |
| 20 | + --arg commit "${INPUT_COMMIT_SHA}" \ |
| 21 | + --arg commit_link "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/commit/${INPUT_COMMIT_SHA}" \ |
| 22 | + --arg request_link "${INPUT_PULL_REQUEST}" \ |
| 23 | + --arg diff_link "${INPUT_COMPARE}" \ |
| 24 | + --arg migration_envs "$INPUT_MIGRATION_ENVS" \ |
| 25 | + --arg observation_interval "$INPUT_OBSERVATION_INTERVAL" \ |
| 26 | + --arg max_lock_duration "$INPUT_MAX_LOCK_DURATION" \ |
| 27 | + --arg max_duration "$INPUT_MAX_DURATION" \ |
| 28 | + --argjson keep_clone "$KEEP_CLONE" \ |
| 29 | + '{source: {owner: $owner, repo: $repo, ref: $ref, branch: $branch, branch_link: $branch_link, commit: $commit, commit_link: $commit_link, request_link: $request_link, diff_link: $diff_link}, username: $username, username_full: $username_full, username_link: $username_link, db_name: $db_name, commands: $commands | rtrimstr("\n") | split("\n"), migration_envs: $migration_envs | rtrimstr("\n") | split("\n"), observation_config: { observation_interval: $observation_interval|tonumber, max_lock_duration: $max_lock_duration|tonumber, max_duration: $max_duration|tonumber}, keep_clone: $keep_clone}') |
| 30 | + |
| 31 | +echo $JSON_DATA |
| 32 | + |
| 33 | +response_code=$(curl --show-error --silent --location --request POST "${CI_ENDPOINT}/migration/run" --write-out "%{http_code}" \ |
| 34 | +--header "Verification-Token: ${SECRET_TOKEN}" \ |
| 35 | +--header 'Content-Type: application/json' \ |
| 36 | +--output response.json \ |
| 37 | +--data "${JSON_DATA}") |
| 38 | + |
| 39 | +jq . response.json |
| 40 | + |
| 41 | +if [[ $response_code -ne 200 ]]; then |
| 42 | + echo "Invalid status code given: ${response_code}" |
| 43 | + exit 1 |
| 44 | +fi |
| 45 | + |
| 46 | +status=$(jq -r '.session.result.status' response.json) |
| 47 | + |
| 48 | +if [[ $status != "passed" ]]; then |
| 49 | + echo "Invalid status given: ${status}" |
| 50 | + exit 1 |
| 51 | +fi |
| 52 | + |
| 53 | +echo "::set-output name=response::$(cat response.json)" |
| 54 | + |
| 55 | +clone_id=$(jq -r '.clone_id' response.json) |
| 56 | +session_id=$(jq -r '.session.session_id' response.json) |
| 57 | + |
| 58 | +if [[ ! $KEEP_CLONE ]]; then |
| 59 | + exit 0 |
| 60 | +fi |
| 61 | + |
| 62 | +# Download artifacts |
| 63 | +mkdir artifacts |
| 64 | + |
| 65 | +download_artifacts() { |
| 66 | + artifact_code=$(curl --show-error --silent "${CI_ENDPOINT}/artifact/download?artifact_type=$1&session_id=$2&clone_id=$3" --write-out "%{http_code}" \ |
| 67 | + --header "Verification-Token: ${SECRET_TOKEN}" \ |
| 68 | + --header 'Content-Type: application/json' \ |
| 69 | + --output artifacts/$1) |
| 70 | + |
| 71 | + if [[ $artifact_code -ne 200 ]]; then |
| 72 | + echo "Downloading $1, invalid status code given: ${artifact_code}" |
| 73 | + return |
| 74 | + fi |
| 75 | + |
| 76 | + echo "Artifact \"$1\" has been downloaded to the artifacts directory" |
| 77 | +} |
| 78 | + |
| 79 | +cat response.json | jq -c -r '.session.artifacts[]' | while read artifact; do |
| 80 | + download_artifacts $artifact $session_id $clone_id |
| 81 | +done |
| 82 | + |
| 83 | +# Stop the running clone |
| 84 | +response_code=$(curl --show-error --silent "${CI_ENDPOINT}/artifact/stop?clone_id=${clone_id}" --write-out "%{http_code}" \ |
| 85 | + --header "Verification-Token: ${SECRET_TOKEN}" \ |
| 86 | + --header 'Content-Type: application/json') |
| 87 | + |
| 88 | +if [[ $response_code -ne 200 ]]; then |
| 89 | + echo "Invalid status code given on destroy clone: ${artifact_code}" |
| 90 | +fi |
0 commit comments