[CI] Add auto update workflow for Dockerfile graph (#11879)
Signed-off-by: wineandchord <guoqizhou19@gmail.com>
This commit is contained in:
parent
ce8d6b75fc
commit
8661c0241d
@ -122,6 +122,12 @@ repos:
|
|||||||
language: system
|
language: system
|
||||||
always_run: true
|
always_run: true
|
||||||
pass_filenames: false
|
pass_filenames: false
|
||||||
|
- id: update-dockerfile-graph
|
||||||
|
name: Update Dockerfile dependency graph
|
||||||
|
entry: tools/update-dockerfile-graph.sh
|
||||||
|
language: script
|
||||||
|
files: ^docker/Dockerfile$
|
||||||
|
pass_filenames: false
|
||||||
# Keep `suggestion` last
|
# Keep `suggestion` last
|
||||||
- id: suggestion
|
- id: suggestion
|
||||||
name: Suggestion
|
name: Suggestion
|
||||||
|
78
tools/update-dockerfile-graph.sh
Executable file
78
tools/update-dockerfile-graph.sh
Executable file
@ -0,0 +1,78 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Update Dockerfile dependency graph when docker/Dockerfile changes.
|
||||||
|
# This script is designed to be used as a pre-commit hook.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Check if docker/Dockerfile is staged for commit
|
||||||
|
if git diff --cached --name-only | grep -q "^docker/Dockerfile$"; then
|
||||||
|
echo "docker/Dockerfile has changed, attempting to update dependency graph..."
|
||||||
|
|
||||||
|
# Check if Docker is installed and running
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
echo "Warning: Docker command not found. Skipping Dockerfile graph update."
|
||||||
|
echo "Please install Docker to automatically update the graph: https://docs.docker.com/get-docker/"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if ! docker info &> /dev/null; then
|
||||||
|
echo "Warning: Docker daemon is not running. Skipping Dockerfile graph update."
|
||||||
|
echo "Please start Docker to automatically update the graph."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define the target file path
|
||||||
|
TARGET_GRAPH_FILE="docs/source/assets/contributing/dockerfile-stages-dependency.png"
|
||||||
|
|
||||||
|
# Ensure target directory exists
|
||||||
|
mkdir -p "$(dirname "$TARGET_GRAPH_FILE")"
|
||||||
|
|
||||||
|
# Store old image hash in a variable if the file exists
|
||||||
|
OLD_HASH=""
|
||||||
|
if [ -f "$TARGET_GRAPH_FILE" ]; then
|
||||||
|
OLD_HASH=$(sha256sum "$TARGET_GRAPH_FILE")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Generate Dockerfile graph
|
||||||
|
echo "Running dockerfilegraph tool..."
|
||||||
|
docker run \
|
||||||
|
--rm \
|
||||||
|
--user "$(id -u):$(id -g)" \
|
||||||
|
--workdir /workspace \
|
||||||
|
--volume "$(pwd)":/workspace \
|
||||||
|
ghcr.io/patrickhoefler/dockerfilegraph:alpine \
|
||||||
|
--output png \
|
||||||
|
--dpi 200 \
|
||||||
|
--max-label-length 50 \
|
||||||
|
--filename docker/Dockerfile \
|
||||||
|
--legend
|
||||||
|
|
||||||
|
echo "Finding generated PNG file..."
|
||||||
|
# Check for Dockerfile.png in the root directory (most likely location)
|
||||||
|
if [ -f "./Dockerfile.png" ]; then
|
||||||
|
echo "Found generated file at: ./Dockerfile.png"
|
||||||
|
mv "./Dockerfile.png" "$TARGET_GRAPH_FILE"
|
||||||
|
else
|
||||||
|
# Try to find it elsewhere
|
||||||
|
DOCKERFILE_PNG=$(find . -name "Dockerfile.png" -type f | head -1)
|
||||||
|
|
||||||
|
if [ -n "$DOCKERFILE_PNG" ]; then
|
||||||
|
echo "Found generated file at: $DOCKERFILE_PNG"
|
||||||
|
mv "$DOCKERFILE_PNG" "$TARGET_GRAPH_FILE"
|
||||||
|
else
|
||||||
|
echo "Error: Could not find the generated PNG file"
|
||||||
|
find . -name "*.png" -type f -mmin -5
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if the graph has changed
|
||||||
|
NEW_HASH=$(sha256sum "$TARGET_GRAPH_FILE")
|
||||||
|
if [ "$NEW_HASH" != "$OLD_HASH" ]; then
|
||||||
|
echo "Graph has changed. Please stage the updated file: $TARGET_GRAPH_FILE"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "No changes in graph detected."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
Loading…
x
Reference in New Issue
Block a user