feat: ensure Dockerfiles being up-to-date #245
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' | |
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 | |
uses: actions/cache@v4.3.0 | |
with: | |
path: ~/.stack | |
key: ${{ runner.os }}-stack-home-${{ hashFiles('**/stack.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-stack-home- | |
- name: "Cache generator binaries at generator/.stack-work" | |
uses: actions/cache@v4.3.0 | |
with: | |
path: | | |
generator/.stack-work | |
key: ${{ runner.os }}-stack-${{ hashFiles('**/stack.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-stack- | |
- name: Download generator-binary release | |
run: | | |
gh release download generator-binary --repo haskell/docker-haskell --pattern 'generator' --dir artifacts | |
chmod +x artifacts/generator | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- 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}" | |
else | |
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 | |
fi | |
done |