---
name: 'lint'

# yamllint disable-line rule:truthy
on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

concurrency:
  group: lint-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  hadolint:
    name: hadolint
    runs-on: ubuntu-24.04
    steps:
      - name: Clone
        uses: actions/checkout@v5
      - name: Run hadolint
        uses: hadolint/hadolint-action@54c9adbab1582c2ef04b2016b760714a4bfde3cf
        # v3.0.0 => 4b5806eb9c6bee4954fc0e0cc3ad6175fc9782c1

  markdown-lint:
    name: markdown-lint
    runs-on: ubuntu-24.04
    steps:
      - name: Clone
        uses: actions/checkout@v5
      - name: Setup node
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
          cache-dependency-path: '.github/workflows/lint.yml'
      - name: Install markdownlint-cli
        run: npm install -g markdownlint-cli@0.35.0
      - name: Run markdown-lint
        run: markdownlint -c .github/linters/.markdown-lint.yml *.md **/*.md

  packer:
    name: packer
    runs-on: ubuntu-24.04
    steps:
      - name: Checkout code
        uses: actions/checkout@v5
      - name: Setup packer
        uses: hashicorp/setup-packer@main
        with:
          version: latest
      - name: Run packer init
        run: "make image/init/digitalocean"
        env:
          PACKER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Run `packer validate`
        env:
          DIGITALOCEAN_TOKEN: ${{ secrets.DIGITALOCEAN_TOKEN }}
        run: "make image/validate/digitalocean"

  shellcheck:
    name: shellcheck
    runs-on: ubuntu-24.04
    steps:
      - name: Clone
        uses: actions/checkout@v5
      - name: Run shellcheck
        uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38
        # 1.1.0 => 94e0aab03ca135d11a35e5bfc14e6746dc56e7e9

  shfmt:
    name: shfmt
    runs-on: ubuntu-24.04
    steps:
      - name: Clone
        uses: actions/checkout@v5
      - name: Run shfmt
        uses: luizm/action-sh-checker@17bd25a6ee188d2b91f677060038f4ba37ba14b2
        # v0.5.0 => edd0e45ecff35b05f162052b50df50976c1b74fc
        env:
          SHFMT_OPTS: -l -bn -ci -i 2 -d
        with:
          sh_checker_shellcheck_disable: true

  yamllint:
    name: yamllint
    runs-on: ubuntu-24.04
    steps:
      - name: Clone
        uses: actions/checkout@v5
      - name: Run yamllint
        uses: ibiqlik/action-yamllint@2576378a8e339169678f9939646ee3ee325e845c
        # v3.1.1 => 2576378a8e339169678f9939646ee3ee325e845c
        with:
          config_file: '.github/linters/.yamllint.yml'
