From c75c7852756470c7359dddc5a603a2a94913dc8b Mon Sep 17 00:00:00 2001 From: eitsupi <50911393+eitsupi@users.noreply.github.com> Date: Wed, 1 Mar 2023 18:46:19 +0900 Subject: [PATCH] build: add very experimental MegaLinter config files (#1974) * build: add MegaLinter config files * build: disable errors of some linters * chore: temporarily enable linting for all codes * build: disable stylelint because of looong time required in CI * chore: auto formatting * build: disable all Linter errors that are currently causing errors * build: disable markdown-link-chack's error * build: disable megalinter's GitHub comment reporter * chore: add comments in megalinter config files * docs: add note about MegaLinter * Revert "chore: temporarily enable linting for all codes" This reverts commit a665b2dd19bf6b16ba437d76b106a4e2e1582a43. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * build: fix workflow trigger not to run twice in PR from other branch --------- Co-authored-by: Maximilian Roos <5635139+max-sixty@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/workflows/mega-linter.yaml | 105 +++++++++++++++++++++++++++ .mega-linter.yaml | 34 +++++++++ book/src/contributing/development.md | 3 + 3 files changed, 142 insertions(+) create mode 100644 .github/workflows/mega-linter.yaml create mode 100644 .mega-linter.yaml diff --git a/.github/workflows/mega-linter.yaml b/.github/workflows/mega-linter.yaml new file mode 100644 index 000000000000..542bcb365b59 --- /dev/null +++ b/.github/workflows/mega-linter.yaml @@ -0,0 +1,105 @@ +# This MegaLinter workflow is very experimental stage. Open to changes and updates. +# https://github.com/PRQL/prql/pull/1974 + +# MegaLinter GitHub Action configuration file +# More info at https://megalinter.io +name: MegaLinter + +on: + push: + branches: + - main + pull_request: + branches: + - main + +env: # Comment env block if you do not want to apply fixes + # Apply linter fixes configuration + # APPLY_FIXES: all # When active, APPLY_FIXES must also be defined as environment variable (in github/workflows/mega-linter.yml or other CI tool) + APPLY_FIXES_EVENT: pull_request # Decide which event triggers application of fixes in a commit or a PR (pull_request, push, all) + APPLY_FIXES_MODE: commit # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) or posted in a PR (pull_request) + +concurrency: + group: ${{ github.ref }}-${{ github.workflow }} + cancel-in-progress: true + +jobs: + build: + name: MegaLinter + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 # If you use VALIDATE_ALL_CODEBASE = true, you can remove this line to improve performances + + # MegaLinter + - name: MegaLinter + id: ml + # You can override MegaLinter flavor used to have faster performances + # More info at https://megalinter.io/flavors/ + uses: oxsecurity/megalinter@v6 + env: + # All available variables are described in documentation + # https://megalinter.io/configuration/ + VALIDATE_ALL_CODEBASE: ${{ github.event_name == 'push' && github.ref + == 'refs/heads/main' }} # Validates all source when push on main, else just the git diff with main. Override with true if you always want to lint all sources + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # ADD YOUR CUSTOM ENV VARIABLES HERE OR DEFINE THEM IN A FILE .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY + # DISABLE: COPYPASTE,SPELL # Uncomment to disable copy-paste and spell checks + + # Upload MegaLinter artifacts + - name: Archive production artifacts + if: ${{ success() }} || ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: MegaLinter reports + path: | + megalinter-reports + mega-linter.log + + # Create pull request if applicable (for now works only on PR from same repository, not from forks) + - name: Create Pull Request with applied fixes + id: cpr + if: + steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == + 'all' || env.APPLY_FIXES_EVENT == github.event_name) && + env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' + || github.event.pull_request.head.repo.full_name == github.repository) + uses: peter-evans/create-pull-request@v4 + with: + token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} + commit-message: "[MegaLinter] Apply linters automatic fixes" + title: "[MegaLinter] Apply linters automatic fixes" + labels: bot + - name: Create PR output + if: + steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == + 'all' || env.APPLY_FIXES_EVENT == github.event_name) && + env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' + || github.event.pull_request.head.repo.full_name == github.repository) + run: | + echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" + + # Push new commit if applicable (for now works only on PR from same repository, not from forks) + - name: Prepare commit + if: + steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == + 'all' || env.APPLY_FIXES_EVENT == github.event_name) && + env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && + (github.event_name == 'push' || + github.event.pull_request.head.repo.full_name == github.repository) + run: sudo chown -Rc $UID .git/ + - name: Commit and push applied linter fixes + if: + steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == + 'all' || env.APPLY_FIXES_EVENT == github.event_name) && + env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && + (github.event_name == 'push' || + github.event.pull_request.head.repo.full_name == github.repository) + uses: stefanzweifel/git-auto-commit-action@v4 + with: + branch: + ${{ github.event.pull_request.head.ref || github.head_ref || + github.ref }} + commit_message: "[MegaLinter] Apply linters fixes" diff --git a/.mega-linter.yaml b/.mega-linter.yaml new file mode 100644 index 000000000000..680a2e9edbe4 --- /dev/null +++ b/.mega-linter.yaml @@ -0,0 +1,34 @@ +# This MegaLinter config is very experimental stage. Open to changes and updates. +# https://github.com/PRQL/prql/pull/1974 + +GITHUB_COMMENT_REPORTER: false +DISABLE: + - RUST + - JAVASCRIPT + - PYTHON +DISABLE_LINTERS: + - SPELL_CSPELL + - CSS_STYLELINT +DISABLE_ERRORS_LINTERS: + - COPYPASTE_JSCPD + - REPOSITORY_TRIVY + - REPOSITORY_CHECKOV + - REPOSITORY_DEVSKIM + - ACTION_ACTIONLINT + - BASH_SHELLCHECK + - C_CPPLINT + - CPP_CPPLINT + - DOCKERFILE_HADOLINT + - HTML_DJLINT + - HTML_HTMLHINT + - JAVA_CHECKSTYLE + - JAVA_PMD + - JSON_JSONLINT + - MAKEFILE_CHECKMAKE + - MARKDOWN_MARKDOWN_LINK_CHECK + - PHP_PHPCS + - PHP_PHPSTAN + - PHP_PSALM + - SPELL_MISSPELL + - SQL_TSQLLINT + - YAML_V8R diff --git a/book/src/contributing/development.md b/book/src/contributing/development.md index 2f482a58f65d..1d8e6666c362 100644 --- a/book/src/contributing/development.md +++ b/book/src/contributing/development.md @@ -253,6 +253,9 @@ Our tests, from the bottom of the pyramid to the top: on GitHub on every commit; any changes they make are added onto the branch automatically in an additional commit. + - Checking by [MegaLinter](https://megalinter.io/latest/), which includes more + Linters, is also done automatically on GitHub. (experimental) + - **Unit tests & inline insta snapshots** — we rely on unit tests to rapidly check that our code basically works. We extensively use [Insta](https://insta.rs/), a snapshot testing tool which writes out the