Updatecli Automation#
Updatecli automates version and URL updates in the cours-devops-docker course slides, opening GitHub pull requests whenever upstream Docker images or release artifacts change — without manual intervention . Configuration lives in updatecli/updatecli.d/, one YAML manifest per tracked dependency.
All active pipelines share the same source → target → action pattern: fetch the latest version or tag from an upstream source, apply a matchpattern/replacepattern regex substitution in the target file, then open a labeled PR via github/pullrequest .
Active Pipelines#
Four manifests have live targets :
| Manifest | Source | Target file | What it updates |
|---|---|---|---|
war-updates.yaml | GitHub releases — gounthar/tp07-sample (latest) | fichiers-nommage-inspect.adoc | WAR download URL in the TP07 énoncé slide |
tomcat-updates.yaml | Docker Hub tomcat — JDK 25+, Temurin, Noble filter | fichiers-nommage-inspect.adoc | Tomcat image tag in comment + docker run command |
nginx-alpine-updates.yaml | Docker Hub nginx — versioned alpine tag filter | fichiers-nommage-inspect.adoc, reseaux.adoc | nginx image tag in docker run command and compose examples |
asciidoctor-updates.yaml | Docker Hub asciidoctor/docker-asciidoctor — semver ≥1.0 | Makefile | ASCIIDOCTOR_IMAGE variable |
node.yaml | Node.js distribution index — latest LTS major | Dockerfile, content/code-samples/compose/cours/Dockerfile, content/code-samples/fichiers/copie-fichiers/Dockerfile | Node alpine image tag |
The primary target for most active pipelines is content/chapitres/fichiers-nommage-inspect.adoc .
Example: PR #422 automatically updated the WAR download URL in fichiers-nommage-inspect.adoc from v2026.06.22-082841 to v2026.08.03-175010 by matching the GitHub release URL pattern — touching a single file, zero manual steps .
Coverage Gap: Correction Slide wget Command#
The WAR pipeline's matchpattern in war-updates.yaml only matches the versioned GitHub release URL format :
matchpattern: 'https://github\.com/gounthar/tp07-sample/releases/download/v[^/]+/sample-[^)]+\.war'
This covers the énoncé (assignment) slide at line 970 of fichiers-nommage-inspect.adoc .
The correction (solution) slide at line 1012 uses a static GitLab mirror URL with no version identifier :
wget https://gitlab.univ-artois.fr/bruno.verachten/devops-docker-tp07/-/raw/master/sample.war
Because this URL contains no version string, the regex never matches it. When Updatecli bumps the WAR version, the correction slide's wget command is silently left behind, pointing at whatever artifact the GitLab mirror holds — which may differ from the versioned artifact shown in the énoncé .
Dependabot Coordination#
The Dependabot / Updatecli gap (Node.js): Dependabot tracked Docker base-image updates for Node without LTS awareness, advancing the Dockerfile from node:18-alpine through Current releases up to node:26-alpine . The original node.yaml had LTS-enforcement logic, but its targets pointed at jenkins.io files that don't exist in this repository — the logic existed but did nothing.
node.yaml was rewritten to target the actual Dockerfiles in this repository (Dockerfile, content/code-samples/compose/cours/Dockerfile, and content/code-samples/fichiers/copie-fichiers/Dockerfile). It sources the major version of the latest Node.js LTS release, includes an upgrade-only shell condition to prevent downgrades when a new LTS is not yet available (node:26-alpine is retained as of October 2026 since Node 26 becomes LTS on 2026-10-28), and enables the pull-request action . A semver-major ignore rule in .github/dependabot.yml ensures major Node.js bumps are handled exclusively by Updatecli's LTS-aware logic .
The broader pattern: Dependabot handles minor/patch Docker image updates across many directories , while Updatecli is intended to enforce version-selection constraints (LTS-only, specific JDK variants, etc.) that Dependabot cannot express.