|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +set -euo pipefail |
| 4 | + |
| 5 | +source .buildkite/scripts/common/util.sh |
| 6 | + |
| 7 | +BASE_ES_SERVERLESS_REPO=docker.elastic.co/elasticsearch-ci/elasticsearch-serverless |
| 8 | +TARGET_IMAGE=docker.elastic.co/kibana-ci/elasticsearch-serverless:latest-verified |
| 9 | + |
| 10 | +ES_SERVERLESS_BUCKET=kibana-ci-es-serverless-images |
| 11 | +MANIFEST_FILE_NAME=latest-verified.json |
| 12 | + |
| 13 | +SOURCE_IMAGE_OR_TAG=$1 |
| 14 | +if [[ $SOURCE_IMAGE_OR_TAG =~ :[a-zA-Z_-]+$ ]]; then |
| 15 | + # $SOURCE_IMAGE_OR_TAG was a full image |
| 16 | + SOURCE_IMAGE=$SOURCE_IMAGE_OR_TAG |
| 17 | +else |
| 18 | + # $SOURCE_IMAGE_OR_TAG was an image tag |
| 19 | + SOURCE_IMAGE="$BASE_ES_SERVERLESS_REPO:$SOURCE_IMAGE_OR_TAG" |
| 20 | +fi |
| 21 | + |
| 22 | +echo "--- Promoting ${SOURCE_IMAGE_OR_TAG} to ':latest-verified'" |
| 23 | + |
| 24 | +echo "Re-tagging $SOURCE_IMAGE -> $TARGET_IMAGE" |
| 25 | + |
| 26 | +echo "$KIBANA_DOCKER_PASSWORD" | docker login -u "$KIBANA_DOCKER_USERNAME" --password-stdin docker.elastic.co |
| 27 | +docker pull "$SOURCE_IMAGE" |
| 28 | +docker tag "$SOURCE_IMAGE" "$TARGET_IMAGE" |
| 29 | +docker push "$TARGET_IMAGE" |
| 30 | + |
| 31 | +ORIG_IMG_DATA=$(docker inspect "$SOURCE_IMAGE") |
| 32 | +ELASTIC_COMMIT_HASH=$(echo $ORIG_IMG_DATA | jq -r '.[].Config.Labels["org.opencontainers.image.revision"]') |
| 33 | + |
| 34 | +docker logout docker.elastic.co |
| 35 | + |
| 36 | +echo "Image push to $TARGET_IMAGE successful." |
| 37 | +echo "Promotion successful! Henceforth, thou shall be named Sir $TARGET_IMAGE" |
| 38 | + |
| 39 | +MANIFEST_UPLOAD_PATH="Skipped" |
| 40 | +if [[ "$UPLOAD_MANIFEST" =~ ^(1|true)$ && "$SOURCE_IMAGE_OR_TAG" =~ ^git-[0-9a-fA-F]{12}$ ]]; then |
| 41 | + echo "--- Uploading latest-verified manifest to GCS" |
| 42 | + cat << EOT >> $MANIFEST_FILE_NAME |
| 43 | +{ |
| 44 | + "build_url": "$BUILDKITE_BUILD_URL", |
| 45 | + "kibana_commit": "$BUILDKITE_COMMIT", |
| 46 | + "kibana_branch": "$BUILDKITE_BRANCH", |
| 47 | + "elasticsearch_serverless_tag": "$SOURCE_IMAGE_OR_TAG", |
| 48 | + "elasticsearch_serverless_image_url: "$SOURCE_IMAGE", |
| 49 | + "elasticsearch_serverless_commit": "TODO: this currently can't be decided", |
| 50 | + "elasticsearch_commit": "$ELASTIC_COMMIT_HASH", |
| 51 | + "created_at": "`date`", |
| 52 | + "timestamp": "`FORCE_COLOR=0 node -p 'Date.now()'`" |
| 53 | +} |
| 54 | +EOT |
| 55 | + |
| 56 | + gsutil -h "Cache-Control:no-cache, max-age=0, no-transform" \ |
| 57 | + cp $MANIFEST_FILE_NAME "gs://$ES_SERVERLESS_BUCKET/$MANIFEST_FILE_NAME" |
| 58 | + gsutil acl ch -u AllUsers:R "gs://$ES_SERVERLESS_BUCKET/$MANIFEST_FILE_NAME" |
| 59 | + MANIFEST_UPLOAD_PATH="<a href=\"https://storage.googleapis.com/$ES_SERVERLESS_BUCKET/$MANIFEST_FILE_NAME\">$MANIFEST_FILE_NAME</a>" |
| 60 | + |
| 61 | +elif [[ "$UPLOAD_MANIFEST" =~ ^(1|true)$ ]]; then |
| 62 | + echo "--- Skipping upload of latest-verified manifest to GCS, ES Serverless build tag is not pointing to a hash" |
| 63 | +elif [[ "$SOURCE_IMAGE_OR_TAG" =~ ^git-[0-9a-fA-F]{12}$ ]]; then |
| 64 | + echo "--- Skipping upload of latest-verified manifest to GCS, flag was not provided" |
| 65 | +fi |
| 66 | + |
| 67 | +echo "--- Annotating build with info" |
| 68 | +cat << EOT | buildkite-agent annotate --style "success" |
| 69 | + <h2>Promotion successful!</h2> |
| 70 | + <br/>New image: $TARGET_IMAGE |
| 71 | + <br/>Source image: $SOURCE_IMAGE |
| 72 | + <br/>Kibana commit: <a href="https://github.com/elastic/kibana/commit/$BUILDKITE_COMMIT">$BUILDKITE_COMMIT</a> |
| 73 | + <br/>Elasticsearch commit: <a href="https://github.com/elastic/elasticsearch/commit/$ELASTIC_COMMIT_HASH">$ELASTIC_COMMIT_HASH</a> |
| 74 | + <br/>Manifest file: $MANIFEST_UPLOAD_PATH |
| 75 | +EOT |
0 commit comments