summaryrefslogtreecommitdiffstats
path: root/.github/workflows/review.yml
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 02:57:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 02:57:58 +0000
commitbe1c7e50e1e8809ea56f2c9d472eccd8ffd73a97 (patch)
tree9754ff1ca740f6346cf8483ec915d4054bc5da2d /.github/workflows/review.yml
parentInitial commit. (diff)
downloadnetdata-upstream.tar.xz
netdata-upstream.zip
Adding upstream version 1.44.3.upstream/1.44.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '.github/workflows/review.yml')
-rw-r--r--.github/workflows/review.yml254
1 files changed, 254 insertions, 0 deletions
diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml
new file mode 100644
index 00000000..8cb61f2c
--- /dev/null
+++ b/.github/workflows/review.yml
@@ -0,0 +1,254 @@
+---
+# 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@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 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@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
+
+ 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@v4
+ 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@v4
+ 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@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