name: "CI"
on:
  push:
    branches:
      - master
  pull_request:

env:
  TEST_IMAGE_NAME: hadolint-action:${{github.sha}}

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-20.04
    container: pipelinecomponents/hadolint:0.10.1
    steps:
      - uses: actions/checkout@v2
      - name: Run hadolint
        run: hadolint Dockerfile

  build-test:
    name: Build and Test
    runs-on: ubuntu-20.04
    needs: ["lint"]
    steps:
      - uses: actions/checkout@v2
      - name: Build Docker image
        run: docker build -t $TEST_IMAGE_NAME .

      - name: Run Structure tests
        uses: brpaz/structure-tests-action@v1.1.2
        with:
          image: ${{ env.TEST_IMAGE_NAME }}

  integration-tests:
    name: Integration Tests
    runs-on: ubuntu-20.04
    needs: build-test
    steps:
      - uses: actions/checkout@v2

      - name: Run integration test 1
        uses: ./
        with:
          dockerfile: testdata/Dockerfile

      - name: Run integration test 2 - ignore a rule
        # This step is supposed to print out an info level rule violation
        # but completely ignore the two rules listed below
        uses: ./
        with:
          dockerfile: testdata/warning.Dockerfile
          ignore: DL3014 DL3008 DL3015

      - name: Run integration test 3 - set failure threshold
        # This step will print out an info level rule violation, but not fail
        # because of the high failure threshold.
        uses: ./
        with:
          dockerfile: testdata/info.Dockerfile
          failure-threshold: warning

      - name: Run integration test 4 - output format
        # This step will never fail, but will print out rule violations as json.
        uses: ./
        with:
          dockerfile: testdata/warning.Dockerfile
          failure-threshold: error
          format: json

      - name: Run integration test 4 - output format
        # This step will never fail, but will print out rule violations.
        uses: ./
        with:
          dockerfile: testdata/warning.Dockerfile
          config: testdata/hadolint.yaml

  release:
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    name: Release
    runs-on: ubuntu-20.04
    needs: integration-tests
    steps:
      - uses: actions/checkout@v2
      - uses: cycjimmy/semantic-release-action@v2
        with:
          extra_plugins: |
            @semantic-release/git
        env:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}