diff --git a/.github/workflows/check-remote-image-existence.yml b/.github/workflows/check-remote-image-existence.yml new file mode 100644 index 00000000000..1f185bf90d1 --- /dev/null +++ b/.github/workflows/check-remote-image-existence.yml @@ -0,0 +1,20 @@ +name: Check Remote Image Existence + +on: + pull_request: + paths: + - 'examples/**.yaml' + - 'hack/test-templates/**.yaml' + - 'hack/check-remote-image-existence.sh' + +jobs: + check-remote-image-existence: + name: Check Remote Image Existence + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Run check-remote-image-existence.sh + run: ./hack/check-remote-image-existence.sh diff --git a/hack/check-remote-image-existence.sh b/hack/check-remote-image-existence.sh new file mode 100755 index 00000000000..161eede87e1 --- /dev/null +++ b/hack/check-remote-image-existence.sh @@ -0,0 +1,23 @@ +#!/bin/bash +set -eu -o pipefail + +# Get the directory of the script +script_dir=$(dirname "$0") + +result=0 +for template in $(realpath "${script_dir}"/../examples/*.yaml "${script_dir}"/./test-templates/*.yaml | sort -u); do + for location in $(yq eval '.images[].location' "${template}"); do + if [[ ${location} == http* ]]; then + response=$(curl -L -s -I -o /dev/null -w "%{http_code}" "${location}") + if [[ ${response} != "200" ]]; then + line=$(grep -n "${location}" "${template}" | cut -d ':' -f 1) + echo "::error file=${template},line=${line}::response: ${response} for ${location}" + result=1 + else + echo "response: ${response} for ${location}" + fi + fi + done +done + +exit "${result}"