feat: ensure Dockerfiles being up-to-date #249
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/[email protected] | |
| 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/[email protected] | |
| with: | |
| enable-stack: true | |
| - name: Cache ~/.stack | |
| uses: actions/[email protected] | |
| 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/[email protected] | |
| 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 "::warning file=${df} title=data-file:: Missing YAML data file ${df_yaml} for Dockerfile ${df}" | |
| else | |
| echo "::notice file=${df}::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 |