--- # Runs various linter checks against PR with suggested changes to improve quality name: Review on: pull_request: types: [opened, reopened, labeled, synchronize] env: DISABLE_TELEMETRY: 1 concurrency: group: review-${{ github.ref }} cancel-in-progress: true jobs: prep-review: name: Prepare Review Jobs runs-on: ubuntu-latest outputs: actionlint: ${{ steps.actionlint.outputs.run }} clangformat: ${{ steps.clangformat.outputs.run }} flake8: ${{ steps.flake8.outputs.run }} golangci-lint: ${{ steps.golangci-lint.outputs.run }} hadolint: ${{ steps.hadolint.outputs.run }} shellcheck: ${{ steps.shellcheck.outputs.run }} yamllint: ${{ steps.yamllint.outputs.run }} steps: - name: Clone repository uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Check files for actionlint id: actionlint run: | if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/actionlint') }}" = "true" ]; then echo "run=true" >> "${GITHUB_OUTPUT}" elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '\.github/workflows/.*' ; then echo "run=true" >> "${GITHUB_OUTPUT}" echo 'GitHub Actions workflows have changed, need to run actionlint.' else echo "run=false" >> "${GITHUB_OUTPUT}" fi # - name: Check files for clang-format # id: clangformat # run: | # if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/clang-format') }}" = "true" ]; then # echo "run=true" >> "${GITHUB_OUTPUT}" # elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '\.cpp$|\.cxx$|\.c$|\.hpp$|\.hxx$|\.h$' ; then # echo "run=true" >> "${GITHUB_OUTPUT}" # echo 'C/C++ code has changed, need to run clang-format.' # else # echo "run=false" >> "${GITHUB_OUTPUT}" # fi - name: Check files for flake8 id: flake8 run: | if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/flake8') }}" = "true" ]; then echo "run=true" >> "${GITHUB_OUTPUT}" elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '.*\.py' ; then echo "run=true" >> "${GITHUB_OUTPUT}" echo 'Python files have changed, need to run flake8.' else echo "run=false" >> "${GITHUB_OUTPUT}" fi - name: Check files for golangci-lint id: golangci-lint run: | if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/golangci-lint') }}" = "true" ]; then echo "run=true" >> "${GITHUB_OUTPUT}" elif git diff --name-only origin/${{ github.base_ref }} HEAD -- | grep -Eq '.*\.go' ; then echo "run=true" >> $GITHUB_OUTPUT echo 'Go code has changed, need to run golangci-lint.' else echo "run=false" >> $GITHUB_OUTPUT fi - name: Check files for hadolint id: hadolint run: | if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/hadolint') }}" = "true" ]; then echo "run=true" >> "${GITHUB_OUTPUT}" elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '.*Dockerfile.*' ; then echo "run=true" >> "${GITHUB_OUTPUT}" echo 'Dockerfiles have changed, need to run Hadolint.' else echo "run=false" >> "${GITHUB_OUTPUT}" fi - name: Check files for shellcheck id: shellcheck run: | if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/shellcheck') }}" = "true" ]; then echo "run=true" >> "${GITHUB_OUTPUT}" elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '.*\.sh.*' ; then echo "run=true" >> "${GITHUB_OUTPUT}" echo 'Shell scripts have changed, need to run shellcheck.' else echo "run=false" >> "${GITHUB_OUTPUT}" fi - name: Check files for yamllint id: yamllint run: | if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/yamllint') }}" = "true" ]; then echo "run=true" >> "${GITHUB_OUTPUT}" elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -Eq '.*\.ya?ml|python\.d/.*\.conf' ; then echo "run=true" >> "${GITHUB_OUTPUT}" echo 'YAML files have changed, need to run yamllint.' else echo "run=false" >> "${GITHUB_OUTPUT}" fi actionlint: name: actionlint needs: prep-review if: needs.prep-review.outputs.actionlint == 'true' runs-on: ubuntu-latest steps: - name: Git clone repository uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Run actionlint uses: reviewdog/action-actionlint@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: github-pr-check clang-format: name: clang-format needs: prep-review if: needs.prep-review.outputs.clangformat == 'true' runs-on: ubuntu-latest steps: - name: Git clone repository uses: actions/checkout@v4 with: submodules: false fetch-depth: 0 - name: Check for label id: label run: | if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/clang-format') }}" = "true" ]; then echo 'check-all=true' >> "${GITHUB_OUTPUT}" else echo 'check-all=false' >> "${GITHUB_OUTPUT}" fi - name: Run clang-format run: | if [ "${{ steps.label.outputs.check-all }}" == 'true' ]; then find . -regex '.*\.\(c\|cpp\|cxx\|h\|hpp\|hxx\)$' -exec clang-format -i --style=file '{}' \; else git diff --name-only origin/${{ github.base_ref }} HEAD | grep -E '\.cpp$|\.cxx$|\.c$|\.hpp$|\.hxx$|\.h$' | \ xargs -n 1 -r clang-format -i --style=file fi git status --porcelain=v1 > /tmp/porcelain if [ -s /tmp/porcelain ]; then cat /tmp/porcelain exit 1 fi flake8: name: flake8 needs: prep-review if: needs.prep-review.outputs.flake8 == 'true' runs-on: ubuntu-latest steps: - name: Git clone repository uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.10" - name: Run flake8 uses: reviewdog/action-flake8@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: github-pr-check golangci-lint: name: golangci-lint needs: prep-review if: needs.prep-review.outputs.golangci-lint == 'true' strategy: matrix: tree: - src/go/collectors/go.d.plugin runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Run golangci-lint uses: reviewdog/action-golangci-lint@v2 with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: github-pr-check golangci_lint_flags: '--timeout=10m' workdir: ${{ matrix.tree }} hadolint: name: hadolint needs: prep-review if: needs.prep-review.outputs.hadolint == 'true' runs-on: ubuntu-latest steps: - name: Git clone repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Run hadolint uses: reviewdog/action-hadolint@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: github-pr-check shellcheck: name: shellcheck needs: prep-review if: needs.prep-review.outputs.shellcheck == 'true' runs-on: ubuntu-latest steps: - name: Git clone repository uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Run shellcheck uses: reviewdog/action-shellcheck@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: github-pr-check path: "." pattern: "*.sh*" exclude: | ./.git/* packaging/makeself/makeself.sh packaging/makeself/makeself-header.sh ./fluent-bit/* yamllint: name: yamllint needs: prep-review if: needs.prep-review.outputs.yamllint == 'true' runs-on: ubuntu-latest steps: - name: Git clone repository uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Run yamllint uses: reviewdog/action-yamllint@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} reporter: github-pr-check