feat: ensure Dockerfiles being up-to-date #237
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Lint | |
on: | |
pull_request: | |
branches: | |
- master | |
paths: | |
- '**/Dockerfile' | |
- '.github/workflows/lint.yml' | |
workflow_dispatch: | |
inputs: | |
debug_enabled: | |
type: boolean | |
description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' | |
required: false | |
default: false | |
concurrency: | |
group: ${{ github.head_ref }}-${{ github.workflow }} | |
cancel-in-progress: true | |
jobs: | |
hadolint: | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: hadolint/hadolint-action@v3.1.0 | |
with: | |
recursive: true | |
ensure-dockerfiles-up-to-date: | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install GHC and Stack | |
uses: haskell-actions/setup@v2.8.2 | |
with: | |
enable-stack: true | |
- name: "Cache .stack-work and ~/.stack" | |
uses: actions/cache@v4.3.0 | |
with: | |
path: | | |
~/.stack | |
**/.stack-work | |
key: ${{ runner.os }}-stack-${{ hashFiles('**/stack.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-stack- | |
- name: Build dockerfiles generator | |
run: | | |
pushd generator | |
stack setup | |
stack build --no-terminal | |
- name: Ensure Dockerfiles are up-to-date | |
run: | | |
# Collect the list of Dockerfiles to be built | |
mapfile -t dockerfiles < <(find . -type f -name 'Dockerfile' | sort) | |
# Generate Dockerfiles using the generate.sh wrapper tool | |
for df in "${dockerfiles[@]}"; do | |
# Get appropriate YAML data file from the Dockerfile path | |
df_dir=$(dirname "${df}") | |
df_yaml="${df_dir}.yaml" | |
if [ ! -f "${df_yaml}" ]; then | |
echo "Error: Missing YAML data file ${df_yaml} for Dockerfile ${df}" | |
exit 1 | |
fi | |
echo "Generating ${df}" | |
./generate.sh "${df_yaml}" "${df}.generated" | |
# Compare generated Dockerfile with the existing one | |
if ! diff -u "${df}" "${df}.generated"; then | |
echo "Error: Dockerfile ${df} is out of date. Please regenerate it." | |
exit 1 | |
fi | |
done | |
# Enable tmate debugging of manually triggered workflows if the input option was provided | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3.22 | |
if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} |