71 lines
2.6 KiB
Bash
Executable File
71 lines
2.6 KiB
Bash
Executable File
#!/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}
|