name: "Update Linux docker images"

sources:
  alpine_latest_version:
    kind: dockerimage
    spec:
      image: alpine
      tagfilter: "^[0-9]+\\.[0-9]+$"
      versionfilter:
        kind: semver
  ubuntu_latest_lts_version:
    kind: shell
    spec:
      shell: bash
      command: |
        set -eo pipefail
        curl -fsS https://endoflife.date/api/ubuntu.json |
          jq -r --arg today "$today" '
            .[]
            | select(.lts)
            | "\(.cycle)"
          ' |
          sort --version-sort |
          tail -1
  ubuntu_oldest_non_eol_version:
    kind: shell
    spec:
      shell: bash
      command: |
        set -eo pipefail
        today=$(date --iso-8601)
        curl -fsS https://endoflife.date/api/ubuntu.json |
          jq -r --arg today "$today" '
            .[]
            | select(.eol >= $today)
            | "\(.cycle)"
          ' |
          sort --version-sort |
          head -1

targets:
  update_alpine_dockerfile:
    name: "Update Alpine Linux version"
    sourceid: alpine_latest_version
    kind: file
    spec:
      file: docker/alpine.Dockerfile
      matchpattern: "FROM alpine:.*"
      replacepattern: 'FROM alpine:{{ source "alpine_latest_version" }}'
  ubuntu_latest_version_dockerfile:
    name: "Update oldest non-EOL Ubuntu Linux version"
    sourceid: ubuntu_latest_lts_version
    kind: file
    spec:
      file: docker/ubuntu-latest-lts.Dockerfile
      matchpattern: "FROM ubuntu:.*"
      replacepattern: 'FROM ubuntu:{{ source "ubuntu_latest_lts_version" }}'
  ubuntu_oldest_supported_dockerfile:
    name: "Update oldest non-EOL Ubuntu Linux version"
    sourceid: ubuntu_oldest_non_eol_version
    kind: file
    spec:
      file: docker/ubuntu-oldest-supported.Dockerfile
      matchpattern: "FROM ubuntu:.*"
      replacepattern: 'FROM ubuntu:{{ source "ubuntu_oldest_non_eol_version" }}'
