name: Run Tests
on:
  push:
    branches:
      - main
    tags:
      - v2.*
  pull_request:
    branches:
      - main
permissions:
  contents: read
jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        go: [1.17.x, 1.18.x, 1.19.x]
    name: ${{ matrix.os }} @ Go ${{ matrix.go }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/setup-go@v3
        with:
          go-version: ${{ matrix.go }}
      - name: Set PATH
        run: echo "${GITHUB_WORKSPACE}/.local/bin" >>"${GITHUB_PATH}"
      - uses: actions/checkout@v3
      - if: matrix.go == '1.19.x' && matrix.os == 'ubuntu-latest'
        run: make ensure-goimports
      - if: matrix.go == '1.19.x' && matrix.os == 'ubuntu-latest'
        run: make lint
      - run: make vet
      - run: make test
        env:
          GFLAGS: -tags urfave_cli_no_docs
      - run: make test
      - run: make -C cmd/urfave-cli-genflags
      - run: make check-binary-size
        env:
          GFLAGS: -tags urfave_cli_no_docs
      - run: make check-binary-size
      - run: make yamlfmt
      - if: matrix.go == '1.19.x' && matrix.os == 'ubuntu-latest'
        run: make generate
      - run: make diffcheck
      - if: matrix.go == '1.19.x' && matrix.os == 'ubuntu-latest'
        run: make v2diff
      - if: success() && matrix.go == '1.19.x' && matrix.os == 'ubuntu-latest'
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          fail_ci_if_error: true
  test-docs:
    name: test-docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-go@v3
        with:
          go-version: 1.19.x
      - uses: actions/setup-node@v3
        with:
          node-version: '16'
      - name: Set PATH
        run: echo "${GITHUB_WORKSPACE}/.local/bin" >>"${GITHUB_PATH}"
      - uses: actions/checkout@v3
      - run: make ensure-gfmrun
      - run: make gfmrun
        env:
          FLAGS: --walk docs/v2/
      - run: make diffcheck
  publish:
    permissions:
      contents: write
    if: startswith(github.ref, 'refs/tags/')
    name: publish
    needs: [test-docs]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - run: make ensure-mkdocs
        env:
          FLAGS: --upgrade-pip
      - run: make set-mkdocs-remote
        env:
          MKDOCS_REMOTE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: make deploy-mkdocs
