diff --git a/.github/workflows/mega-linter.yml b/.github/workflows/mega-linter.yml new file mode 100644 index 0000000000..4db9cdc478 --- /dev/null +++ b/.github/workflows/mega-linter.yml @@ -0,0 +1,87 @@ +--- +# Mega-Linter GitHub Action configuration file +# More info at https://nvuillam.github.io/mega-linter +name: Mega-Linter + +on: + # Trigger mega-linter at every push. Action will also be visible from Pull Requests to main + # push: # Comment this line to trigger action only on pull-requests (not recommended if you don't pay for GH Actions) + 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) + +jobs: + # Cancel duplicate jobs: https://github.com/fkirc/skip-duplicate-actions#option-3-cancellation-only + cancel_duplicates: + name: Cancel duplicate jobs + runs-on: ubuntu-latest + steps: + - uses: fkirc/skip-duplicate-actions@master + with: + github_token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} + + build: + name: Mega-Linter + runs-on: ubuntu-latest + steps: + # Git Checkout + - name: Checkout Code + uses: actions/checkout@v2 + with: + token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} + fetch-depth: 0 + + # Mega-Linter + - name: Mega-Linter + id: ml + # You can override Mega-Linter flavor used to have faster performances + # More info at https://nvuillam.github.io/mega-linter/flavors/ + uses: nvuillam/mega-linter/flavors/python@v4 + env: + # All available variables are described in documentation + # https://nvuillam.github.io/mega-linter/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. Set 'true' if you always want to lint all sources + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # ADD YOUR CUSTOM ENV VARIABLES HERE TO OVERRIDE VALUES OF .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY + + # Upload Mega-Linter artifacts + - name: Archive production artifacts + if: ${{ success() }} || ${{ failure() }} + uses: actions/upload-artifact@v2 + with: + name: Mega-Linter reports + path: | + report + 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) && !contains(github.event.head_commit.message, 'skip fix') + uses: peter-evans/create-pull-request@v3 + with: + token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} + commit-message: "[Mega-Linter] Apply linters automatic fixes" + title: "[Mega-Linter] 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) && !contains(github.event.head_commit.message, 'skip fix') + 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) && !contains(github.event.head_commit.message, 'skip fix') + 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) && !contains(github.event.head_commit.message, 'skip fix') + uses: stefanzweifel/git-auto-commit-action@v4 + with: + branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }} + commit_message: "[Mega-Linter] Apply linters fixes" diff --git a/.gitignore b/.gitignore index 42621fd2ae..a8f3735696 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Linter +report/ + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/.mega-linter.yml b/.mega-linter.yml new file mode 100644 index 0000000000..fc48677e2b --- /dev/null +++ b/.mega-linter.yml @@ -0,0 +1,53 @@ +# Configuration file for Mega-Linter +# See all available variables at https://nvuillam.github.io/mega-linter/configuration/ and in linters documentation + +APPLY_FIXES: none # all, none, or list of linter keys +DEFAULT_BRANCH: main # Usually master or main +SHOW_ELAPSED_TIME: true +FILEIO_REPORTER: false +PRINT_ALPACA: false +VALIDATE_ALL_CODEBASE: false +ENABLE_LINTERS: # If you use ENABLE_LINTERS variable, all other linters will be disabled by default + - MARKDOWN_MARKDOWN_LINK_CHECK + - MARKDOWN_MARKDOWNLINT + - PYTHON_BANDIT + - PYTHON_BLACK + - PYTHON_FLAKE8 + - PYTHON_ISORT + - PYTHON_PYLINT + - RST_RST_LINT + - RST_RSTCHECK + - RST_RSTFMT + - YAML_PRETTIER + - YAML_V8R + - YAML_YAMLLINT +# IGNORE_GITIGNORED_FILES: true # Currently broken +EXCLUDED_DIRECTORIES: + - "__pycache__" + - ".eggs" + - ".env" + - ".mypy_cache" + - ".nox" + - ".pytest_cache" + - ".pytype" + - ".tox" + - ".venv" + - "build" + - "cover" + - "cython_debug" + - "develop-eggs" + - "dist" + - "downloads" + - "eggs" + - "env" + - "htmlcov" + - "lib" + - "lib64" + - "parts" + - "report" + - "sdist" + - "python-wheels" + - "target" + - "var" + - "venv" + - "wheels" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000..ff54541ba5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,12 @@ +[tool.black] +line-length = 120 +include = '\.pyi?$' + +[tool.isort] +profile = "black" + +[tool.pylint.messages_control] +disable = "C0330, C0326" + +[tool.pylint.format] +max-line-length = "88" diff --git a/setup.cfg b/setup.cfg index b6b21a0c9a..516f59c860 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,3 +2,7 @@ license_files = LICENSE THIRD_PARTY_NOTICES.md + +[flake8] +max-line-length = 120 +extend-ignore = E203,E501 diff --git a/tests/framework_graphene/_target_application.py b/tests/framework_graphene/_target_application.py index 349326cce5..cfcb002ae5 100644 --- a/tests/framework_graphene/_target_application.py +++ b/tests/framework_graphene/_target_application.py @@ -11,17 +11,9 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from graphene import ( - ObjectType, - Field, - String, - Schema, - Mutation as GrapheneMutation, - Int, - List, - NonNull, - Union, -) +from graphene import Field, Int, List +from graphene import Mutation as GrapheneMutation +from graphene import NonNull, ObjectType, Schema, String, Union class Author(ObjectType): @@ -59,7 +51,6 @@ class Library(ObjectType): Storage = List(String) - authors = [ Author( first_name="New", @@ -120,14 +111,13 @@ class Library(ObjectType): storage = [] - class StorageAdd(GrapheneMutation): class Arguments: string = String(required=True) string = String() - def mutate(parent, info, string): + def mutate(self, info, string): storage.append(string) return String(string=string) @@ -140,25 +130,25 @@ class Query(ObjectType): storage = Storage error = String() - def resolve_library(parent, info, index): + def resolve_library(self, info, index): # returns an object that represents a Person return libraries[index] - def resolve_storage(parent, info): + def resolve_storage(self, info): return storage - def resolve_search(parent, info, contains): + def resolve_search(self, info, contains): search_books = [b for b in books if contains in b.name] search_magazines = [m for m in magazines if contains in m.name] return search_books + search_magazines - def resolve_hello(root, info): + def resolve_hello(self, info): return "Hello!" - def resolve_echo(root, info, echo): + def resolve_echo(self, info, echo): return echo - def resolve_error(root, info): + def resolve_error(self, info): raise RuntimeError("Runtime Error!") error_non_null = Field(NonNull(String), resolver=resolve_error) @@ -167,4 +157,5 @@ def resolve_error(root, info): class Mutation(ObjectType): storage_add = StorageAdd.Field() + _target_application = Schema(query=Query, mutation=Mutation, auto_camelcase=False)