123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- ---
- # 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 }}
- eslint: ${{ steps.eslint.outputs.run }}
- flake8: ${{ steps.flake8.outputs.run }}
- hadolint: ${{ steps.hadolint.outputs.run }}
- shellcheck: ${{ steps.shellcheck.outputs.run }}
- yamllint: ${{ steps.yamllint.outputs.run }}
- steps:
- - name: Clone repository
- uses: actions/checkout@v3
- 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 eslint
- id: eslint
- run: |
- if [ "${{ contains(github.event.pull_request.labels.*.name, 'run-ci/eslint') }}" = "true" ]; then
- echo "run=true" >> "${GITHUB_OUTPUT}"
- elif git diff --name-only origin/${{ github.base_ref }} HEAD | grep -v "web/gui/v1" | grep -v "web/gui/v2" | grep -v "integrations/" | grep -Eq '.*\.js' ; then
- echo "run=true" >> "${GITHUB_OUTPUT}"
- echo 'JS files have changed, need to run ESLint.'
- 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 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@v3
- 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@v3
- 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
- eslint:
- name: eslint
- needs: prep-review
- if: needs.prep-review.outputs.eslint == 'true'
- runs-on: ubuntu-latest
- steps:
- - name: Git clone repository
- uses: actions/checkout@v3
- with:
- submodules: recursive
- fetch-depth: 0
- - name: Install eslint
- run: npm install eslint -D
- - name: Run eslint
- uses: reviewdog/action-eslint@v1
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- reporter: github-pr-check
- eslint_flags: '.'
- 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@v3
- with:
- submodules: recursive
- fetch-depth: 0
- - name: Setup Python
- uses: actions/setup-python@v4
- with:
- python-version: "3.10"
- - name: Run flake8
- uses: reviewdog/action-flake8@v3
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- reporter: github-pr-check
- 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@v3
- 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@v3
- 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
- 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@v3
- with:
- submodules: recursive
- fetch-depth: 0
- - name: Run yamllint
- uses: reviewdog/action-yamllint@v1
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- reporter: github-pr-check
|