Skip to content

Instantly share code, notes, and snippets.

@sbe-arg
Last active February 8, 2023 01:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sbe-arg/4b66c37c42491fe87ecc959dca460af7 to your computer and use it in GitHub Desktop.
Save sbe-arg/4b66c37c42491fe87ecc959dca460af7 to your computer and use it in GitHub Desktop.
Dirty compose scanner that checks if there are new images that require updating, runs weekly
on:
workflow_dispatch: # manual option
jobs:
compose-versions:
name: compose-pincher
runs-on: ubuntu-22.04
timeout-minutes: 3
permissions:
contents: read
issues: write
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
# save your images in compose as: "image: docker.io/nginx:1.23.3" for easy filtering between registries
- name: image-checks
id: pincher
run: |
versions_dockerio=$(yq '.services[].image' docker-compose.yml docker-compose.monitoring.yml | grep docker.io | uniq)
images_make=""
exit_make=0
for version in $versions_dockerio
do
[[ $version =~ docker.io\/(.*)\:(.*) ]]
image=${BASH_REMATCH[1]}
v_rematched=${BASH_REMATCH[2]}
echo "Version in compose file for $image is $v_rematched"
[[ "$image" != *'/'* ]] && image="library/$image"
versions_in_registry=""
for page in 1 2
do
versions_in_registry+="$(curl -s https://hub.docker.com/v2/repositories/$image/tags?page=$page | jq -r '.results[].name' | grep "$v_rematched"$)"
done
if [ -z "$versions_in_registry" ]
then
exit_make=$(($exit_make+1))
images_make+=" $image"
echo "WARN: There is at least 1 new version available at \"curl -s https://hub.docker.com/v2/repositories/$image/tags | jq -r '.results[].name'\""
fi
done
versions_mcr=$(yq '.services[].image' docker-compose.yml docker-compose.monitoring.yml | grep mcr.microsoft.com | uniq)
for version in $versions_mcr
do
[[ $version =~ mcr.microsoft.com\/(.*)\:(.*) ]]
image=${BASH_REMATCH[1]}
v_rematched=${BASH_REMATCH[2]}
echo "Version in compose file for $image is $v_rematched"
versions_in_registry_sort=($(curl -s https://mcr.microsoft.com/v2/$image/tags/list | jq -r '.tags[]' | grep -v "latest" | sort -V -t. -k1,1 -k2,2 -k3,3))
versions_in_registry=$(echo "${versions_in_registry_sort[@]: -3}" | grep "$v_rematched"$)
if [ -z "$versions_in_registry" ]
then
exit_make=$(($exit_make+1))
images_make+=" $image"
echo "WARN: There is at least 1 new version available at \"curl -s https://mcr.microsoft.com/v2/$image/tags/list | jq -r '.tags[]'\""
fi
done
echo "count=$exit_make" >> "${GITHUB_OUTPUT}"
echo "images=$images_make" >> "${GITHUB_OUTPUT}"
echo "last_run=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" >> "${GITHUB_OUTPUT}"
echo "Images need upgrading [$exit_make]: $images_make"
(( $exit_make > 0 )) && echo $exit_make
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment