#!/bin/sh . scripts/utils.sh # Exit early if we don't want to build the image if [ "${BUILD_ASSETS_IMAGE}" != "true" ] then exit 0 fi get_repository_id() { repository_name="${1}" repositories_url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/registry/repositories" curl --header "PRIVATE-TOKEN: ${PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE}" "${repositories_url}" | jq "map(select(.name == \"${repository_name}\")) | .[0].id" } # Generate the image name based on the project this is being run in ASSETS_IMAGE_NAME="gitlab-assets-ce" # `dev.gitlab-org` still has gitlab-ee. if [ "${CI_PROJECT_NAME}" = "gitlab" ] || [ "${CI_PROJECT_NAME}" = "gitlab-ee" ] then ASSETS_IMAGE_NAME="gitlab-assets-ee" fi ASSETS_IMAGE_PATH="${CI_REGISTRY}/${CI_PROJECT_PATH}/${ASSETS_IMAGE_NAME}" COMMIT_ASSETS_HASH_TAG="$(assets_image_tag)" COMMIT_ASSETS_HASH_DESTINATION="${ASSETS_IMAGE_PATH}:${COMMIT_ASSETS_HASH_TAG}" DESTINATIONS="--destination=${COMMIT_ASSETS_HASH_DESTINATION}" # Also tag the image with GitLab version, if running on a tag pipeline, so # other projects can simply use that instead of computing the slug. if [ -n "${CI_COMMIT_TAG}" ]; then COMMIT_REF_NAME_DESTINATION="${ASSETS_IMAGE_PATH}:${CI_COMMIT_REF_NAME}" DESTINATIONS="$DESTINATIONS --destination=$COMMIT_REF_NAME_DESTINATION" else if [ -n "${PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE}" ]; then echoinfo "Checking if the ${COMMIT_ASSETS_HASH_DESTINATION} image exists..." repository_id=$(get_repository_id "${ASSETS_IMAGE_NAME}") if [ -n "${repository_id}" ]; then api_image_url="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/registry/repositories/${repository_id}/tags/${COMMIT_ASSETS_HASH_TAG}" echoinfo "api_image_url: ${api_image_url}" if test_url "${api_image_url}" "--header \"PRIVATE-TOKEN: ${PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE}\""; then echosuccess "Image ${COMMIT_ASSETS_HASH_DESTINATION} already exists, no need to rebuild it." exit 0 else echoinfo "Image ${COMMIT_ASSETS_HASH_DESTINATION} doesn't exist, we'll need to build it." fi else echoerr "Repository ID couldn't be found for the '${ASSETS_IMAGE_NAME}' image!" fi else echoinfo "The 'PROJECT_TOKEN_FOR_CI_SCRIPTS_API_USAGE' variable is not present, so we cannot check if the image already exists." fi fi mkdir -p assets_container.build/public cp -r public/assets assets_container.build/public/ cp Dockerfile.assets assets_container.build/ echo "Building assets image for destinations: ${DESTINATIONS}" /kaniko/executor \ --context="assets_container.build" \ --dockerfile="assets_container.build/Dockerfile.assets" \ ${DESTINATIONS}