#!/usr/bin/env bash # Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set -e set -o pipefail SCRIPT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)" MAKE_ROOT=$(realpath $SCRIPT_ROOT/..) rm -rf $SCRIPT_ROOT/actual $MAKE_ROOT/check-update $MAKE_ROOT/*-pushed EXIT_CODE=0 GO_VERSION_OVERRIDES="GOLANG_1.18_FULL_VERSION=1.18.9-mock GOLANG_1.19_FULL_VERSION=1.19.4-mock GOLANG_1.20_FULL_VERSION=1.20-mock" PYTHON_VERSION_OVERRIDES="PYTHON_3.7_FULL_VERSION=3.7.14-mock PYTHON_3.9_FULL_VERSION=3.9.14-mock" function common::run_target() { local -r target="$1" local -r output_file="$2" local -r extra_make_vars="${3:-} $GO_VERSION_OVERRIDES $PYTHON_VERSION_OVERRIDES" mkdir -p $(dirname $SCRIPT_ROOT/actual/$output_file) printf '\n# This file was generated by running `make run-make-tests` and `make update-make-tests-expected`. DO NOT EDIT\n\n' > $SCRIPT_ROOT/actual/$output_file IMAGE_REPO=localhost:5000 IMAGE_TAG=test-tag make --no-print-directory -C $MAKE_ROOT -n $target AL_TAG=2 PLATFORMS=linux/amd64 $extra_make_vars >> $SCRIPT_ROOT/actual/$output_file 2>&1 sed -i "s|$MAKE_ROOT|/override/root|g" $SCRIPT_ROOT/actual/$output_file if ! diff -wr $SCRIPT_ROOT/actual/$output_file $SCRIPT_ROOT/expected/$output_file 2>&1 > /dev/null; then echo "Unexpected diff in $SCRIPT_ROOT/actual/$output_file!" echo "IMAGE_REPO=localhost:5000 IMAGE_TAG=test-tag make --no-print-directory -C $MAKE_ROOT -n $target AL_TAG=2 PLATFORMS=linux/amd64 $extra_make_vars" if [ -f $SCRIPT_ROOT/expected/$output_file ]; then diff -wr $SCRIPT_ROOT/actual/$output_file $SCRIPT_ROOT/expected/$output_file || true else cat $SCRIPT_ROOT/actual/$output_file fi printf "\n" EXIT_CODE=1 fi rm -rf $MAKE_ROOT/*-pushed } # when building the main image target, in presubmits check update is executed for testing, otherwise it is skipped common::run_target "standard-images" "standard/images/no-deps-presubmit" "BUILD_DEPS=false MOCK_CHECK_UPDATE=unused LOG_CAT_PUSHED_FILE=true JOB_TYPE=presubmit" common::run_target "standard-images" "standard/images/no-deps-no-job-type" "BUILD_DEPS=false MOCK_CHECK_UPDATE=unused LOG_CAT_PUSHED_FILE=true JOB_TYPE=someotherjob" common::run_target "standard-update" "standard/updates/has-updates" "BUILD_DEPS=false MOCK_CHECK_UPDATE=updates LOG_CAT_PUSHED_FILE=true JOB_TYPE=someotherjob" common::run_target "standard-update" "standard/updates/no-updates" "BUILD_DEPS=false MOCK_CHECK_UPDATE=none LOG_CAT_PUSHED_FILE=true JOB_TYPE=someotherjob" common::run_target "standard-update" "standard/updates/error-check-updates" "BUILD_DEPS=false MOCK_CHECK_UPDATE=error LOG_CAT_PUSHED_FILE=true JOB_TYPE=someotherjob" echo false > $MAKE_ROOT/eks-distro-base-pushed common::run_target "standard-create-pr" "standard/create-pr/pushed-file-false" "BUILD_DEPS=false REPO_OWNER=foo MOCK_UPDATE_BASE_IMAGE=unused JOB_TYPE=someotherjob LOG_CAT_PUSHED_FILE=true" echo true > $MAKE_ROOT/eks-distro-base-pushed common::run_target "standard-create-pr" "standard/create-pr/pushed-file-true" "BUILD_DEPS=false REPO_OWNER=foo MOCK_UPDATE_BASE_IMAGE=unused JOB_TYPE=someotherjob LOG_CAT_PUSHED_FILE=true" common::run_target "windows-images" "windows/images/no-deps-presubmit" "BUILD_DEPS=false MOCK_CHECK_UPDATE=unused LOG_CAT_PUSHED_FILE=true JOB_TYPE=presubmit PLATFORMS=windows/amd64" common::run_target "windows-images" "windows/images/no-deps-no-job-type" "BUILD_DEPS=false MOCK_CHECK_UPDATE=unused LOG_CAT_PUSHED_FILE=true JOB_TYPE=someotherjob PLATFORMS=windows/amd64" WINDOWS_VERSIONS=$(make --no-print-directory -C $MAKE_ROOT var-value-BASE_WINDOWS_VARIANT_VERSIONS) WINDOWS_VERSIONS=(${WINDOWS_VERSIONS// / }) for version in "${WINDOWS_VERSIONS[@]}"; do common::run_target "windows-update-$version" "windows-$version/updates/has-updates" "BUILD_DEPS=false MOCK_CHECK_UPDATE=updates LOG_CAT_PUSHED_FILE=true JOB_TYPE=someotherjob" common::run_target "windows-update-$version" "windows-$version/updates/no-updates" "BUILD_DEPS=false MOCK_CHECK_UPDATE=none LOG_CAT_PUSHED_FILE=true JOB_TYPE=someotherjob" common::run_target "windows-update-$version" "windows-$version/updates/error-check-updates" "BUILD_DEPS=false MOCK_CHECK_UPDATE=error LOG_CAT_PUSHED_FILE=true JOB_TYPE=someotherjob" echo false > $MAKE_ROOT/eks-distro-windows-base-$version-pushed common::run_target "windows-create-pr-$version" "windows-$version/create-pr/pushed-file-false" "BUILD_DEPS=false REPO_OWNER=foo MOCK_UPDATE_BASE_IMAGE=unused JOB_TYPE=someotherjob LOG_CAT_PUSHED_FILE=true" echo true > $MAKE_ROOT/eks-distro-windows-base-$version-pushed common::run_target "windows-create-pr-$version" "windows-$version/create-pr/pushed-file-true" "BUILD_DEPS=false REPO_OWNER=foo MOCK_UPDATE_BASE_IMAGE=unused JOB_TYPE=someotherjob LOG_CAT_PUSHED_FILE=true" done VARIANTS=$(make --no-print-directory -C $MAKE_ROOT var-value-MINIMAL_VARIANTS) VARIANTS=(${VARIANTS// / }) for variant in "${VARIANTS[@]}"; do common::run_target "minimal-images-$variant" "$variant/images/no-deps" "BUILD_DEPS=false MOCK_CHECK_UPDATE=unused MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag JOB_TYPE=presubmit LOG_CAT_PUSHED_FILE=true" common::run_target "minimal-images-$variant" "$variant/images/deps" "BUILD_DEPS=true MOCK_CHECK_UPDATE=unused MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag JOB_TYPE=presubmit LOG_CAT_PUSHED_FILE=true" common::run_target "minimal-update-$variant" "$variant/updates/updates" "MOCK_CHECK_UPDATE=updates LOG_CAT_PUSHED_FILE=true JOB_TYPE=periodic" common::run_target "minimal-update-$variant" "$variant/updates/error" "MOCK_CHECK_UPDATE=error LOG_CAT_PUSHED_FILE=true JOB_TYPE=periodic" common::run_target "minimal-update-$variant" "$variant/updates/none" "MOCK_CHECK_UPDATE=none LOG_CAT_PUSHED_FILE=true JOB_TYPE=periodic" echo false > $MAKE_ROOT/eks-distro-minimal-$variant-pushed common::run_target "minimal-create-pr-$variant" "$variant/create-pr/none" "REPO_OWNER=foo MOCK_UPDATE_BASE_IMAGE=unused JOB_TYPE=someotherjob LOG_CAT_PUSHED_FILE=true" echo true > $MAKE_ROOT/eks-distro-minimal-$variant-pushed common::run_target "minimal-create-pr-$variant" "$variant/create-pr/pushed" "REPO_OWNER=foo MOCK_UPDATE_BASE_IMAGE=unused JOB_TYPE=someotherjob LOG_CAT_PUSHED_FILE=true" done # these targets should always use the tag from the tag file common::run_target "packages-export-all-minimal-images" "export/all" "BUILD_DEPS=false MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag JOB_TYPE=someotherjob" common::run_target "test-all-minimal-images" "test/all" "BUILD_DEPS=false MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag JOB_TYPE=someotherjob" # Validate base image tag logic, when the job type is not pre/postsubmit and the pushed file resolves to false, the tag from the tag file is used for the base image for variant in "base" "base-compiler-yum" "base-golang-compiler-1.18-gcc"; do common::run_target "minimal-images-$variant" "$variant/base-image-tag/use-tag-from-file" "BUILD_DEPS=false JOB_TYPE=periodic MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag MOCK_CHECK_UPDATE=updates LOG_CAT_PUSHED_FILE=true" common::run_target "minimal-images-$variant" "$variant/base-image-tag/presubmit-use-new-tag" "BUILD_DEPS=true JOB_TYPE=presubmit MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag MOCK_CHECK_UPDATE=updates LOG_CAT_PUSHED_FILE=true" common::run_target "minimal-images-$variant" "$variant/base-image-tag/postsubmit-use-new-tag" "BUILD_DEPS=true JOB_TYPE=postsubmit MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag MOCK_CHECK_UPDATE=updates LOG_CAT_PUSHED_FILE=true" done # check dynamic compiler targets common::run_target "golang-compiler-images" "base-golang-compiler/images/all-compiler-images" "BUILD_DEPS=true MOCK_CHECK_UPDATE=unused MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag JOB_TYPE=presubmit LOG_CAT_PUSHED_FILE=true" common::run_target "golang-1.18-compiler-images" "base-golang-compiler-1.18/images/compiler-images" "BUILD_DEPS=true MOCK_CHECK_UPDATE=unused MOCK_BASE_TAG_FROM_TAG_FILE=some-previous-tag JOB_TYPE=presubmit LOG_CAT_PUSHED_FILE=true" common::run_target "create-ecr-repos" "create-ecr-repos/all" # ensure additional deps dont creep in on the all create pr target which is run in presubmit for variant in "${VARIANTS[@]}"; do echo true > $MAKE_ROOT/eks-distro-minimal-$variant-pushed done echo true > $MAKE_ROOT/eks-distro-base-pushed for version in "${WINDOWS_VERSIONS[@]}"; do echo true > $MAKE_ROOT/eks-distro-windows-base-$version-pushed done common::run_target "create-pr" "standard/create-pr/all-create-prs" "BUILD_DEPS=true REPO_OWNER=foo MOCK_UPDATE_BASE_IMAGE=unused JOB_TYPE=presubmit LOG_CAT_PUSHED_FILE=true" if [[ "$EXIT_CODE" -eq 0 ]]; then echo "No makefile test failures!" else exit $EXIT_CODE fi