Integraci贸n del proyecto PHP en GitHub y Scrutinizer

Registrarse con Scrutinizer

Probablemente sea m谩s f谩cil iniciar sesi贸n con su cuenta de GitHub. esto le ahorra la molestia de vincular su perfil de GitHub, lo que a煤n tiene que hacer.





Para instalar la aplicaci贸n Scrutinizer, siga el enlace , puede omitir este paso, pero tenga en cuenta que en el futuro, los bollos interactivos no funcionar谩n para usted y se colgar谩 una notificaci贸n: La aplicaci贸n Scrutinizer GitHub no est谩 instalada ...





Le damos todos los alcances que requiere. No temas, Scrutinizer no eliminar谩 tus repositorios ni te da帽ar谩 de ninguna manera. Esto es necesario para que la aplicaci贸n pueda comunicarse con su GitHub a trav茅s de API y administrar su Check Suite en tiempo real, brind谩ndole comentarios y el c贸digo en su PR para la conveniencia de las revisiones, etc.





Un ejemplo de c贸mo se ve la ventana de instalaci贸n de Scrutinizer





Crea una configuraci贸n global

En t茅rminos generales, si tiene muchos repositorios, las Mejores pr谩cticas se consideran correctas para tener una configuraci贸n global, donde almacenar la configuraci贸n general y colocar configuraciones espec铆ficas en la configuraci贸n de sus repositorios, como si sobrescribiera partes individuales de configuraciones.





Para crear una configuraci贸n global, siga el enlace .





Un ejemplo de configuraci贸n global para un proyecto PHP
build:
    environment:
        php: 7.3.15

build_failure_conditions:
  - 'project.metric_change("scrutinizer.quality", < -0.10)'
  - 'elements.rating(<= D).exists'                                # No classes/methods with a rating of D or worse
  - 'elements.rating(<= D).new.exists'                            # No new classes/methods with a rating of D or worse allowed
  - 'issues.label("coding-style").exists'                         # No coding style issues allowed
  - 'issues.label("coding-style").new.exists'                     # No new coding style issues allowed
  - 'issues.severity(>= MAJOR).new.exists'                        # New issues of major or higher severity                        
  - 'project.metric("scrutinizer.quality", < 9)'                  # Code Quality Rating drops below 9
  - 'patches.label("Doc Comments").exists'                        # No doc comments patches allowed
  - 'patches.label("Spacing").exists'                             # No spacing patches allowed

checks:
    php:
        verify_property_names: true
        verify_argument_usable_as_reference: true
        verify_access_scope_valid: true
        variable_existence: true
        useless_calls: true
        use_statement_alias_conflict: true
        unused_variables: true
        unused_properties: true
        unused_parameters: true
        unused_methods: true
        unreachable_code: true
        too_many_arguments: true
        symfony_request_injection: true
        switch_fallthrough_commented: true
        sql_injection_vulnerabilities: true
        simplify_boolean_return: true
        security_vulnerabilities: true
        return_in_constructor: true
        return_doc_comments: true
        return_doc_comment_if_not_inferrable: true
        require_scope_for_methods: true
        require_php_tag_first: true
        remove_extra_empty_lines: true
        property_assignments: true
        properties_in_camelcaps: true
        precedence_mistakes: true
        precedence_in_conditions: true
        phpunit_assertions: true
        parse_doc_comments: true
        parameters_in_camelcaps: true
        parameter_non_unique: true
        parameter_doc_comments: true
        param_doc_comment_if_not_inferrable: true
        overriding_private_members: true
        overriding_parameter: true
        non_commented_empty_catch_block: true
        no_trait_type_hints: true
        no_trailing_whitespace: true
        no_short_variable_names:
            minimum: '3'
        no_short_open_tag: true
        no_short_method_names:
            minimum: '3'
        no_property_on_interface: true
        no_non_implemented_abstract_methods: true
        no_long_variable_names:
            maximum: '20'
        no_goto: true
        no_exit: true
        no_eval: true
        no_error_suppression: true
        no_debug_code: true
        naming_conventions:
            local_variable: '^[a-z][a-zA-Z0-9]*$'
            abstract_class_name: ^Abstract|Factory$
            utility_class_name: 'Utils?$'
            constant_name: '^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*$'
            property_name: '^[a-z][a-zA-Z0-9]*$'
            method_name: '^(?:[a-z]|__)[a-zA-Z0-9]*$'
            parameter_name: '^[a-z][a-zA-Z0-9]*$'
            interface_name: '^[A-Z][a-zA-Z0-9]*Interface$'
            type_name: '^[A-Z][a-zA-Z0-9]*$'
            exception_name: '^[A-Z][a-zA-Z0-9]*Exception$'
            isser_method_name: '^(?:is|has|should|may|supports)'
        more_specific_types_in_doc_comments: true
        missing_arguments: true
        method_calls_on_non_object: true
        instanceof_class_exists: true
        foreach_usable_as_reference: true
        foreach_traversable: true
        fix_use_statements:
            remove_unused: true
            preserve_multiple: false
            preserve_blanklines: false
            order_alphabetically: false
        fix_line_ending: true
        fix_doc_comments: true
        encourage_shallow_comparison: true
        duplication: true
        deprecated_code_usage: true
        deadlock_detection_in_loops: true
        comparison_always_same_result: true
        code_rating: true
        closure_use_not_conflicting: true
        closure_use_modifiable: true
        check_method_contracts:
            verify_interface_like_constraints: true
            verify_documented_constraints: true
            verify_parent_constraints: true
        catch_class_exists: true
        call_to_parent_method: true
        avoid_superglobals: true
        avoid_length_functions_in_loops: true
        avoid_entity_manager_injection: true
        avoid_duplicate_types: true
        avoid_closing_tag: true
        assignment_of_null_return: true
        argument_type_checks: true
      
      







Tenga en cuenta que las comprobaciones que se describen a continuaci贸n provocar谩n un error de compilaci贸n, por lo que si no necesita algunas de ellas, elimine o reduzca los l铆mites:





Verificaciones de ensamblajes
build_failure_conditions:
  - 'project.metric_change("scrutinizer.quality", < -0.10)'
  - 'elements.rating(<= D).exists'
  - 'elements.rating(<= D).new.exists' 
  - 'issues.label("coding-style").exists' 
  - 'issues.label("coding-style").new.exists'              
  - 'issues.severity(>= MAJOR).new.exists'                                     
  - 'project.metric("scrutinizer.quality", < 9)'
  - 'patches.label("Doc Comments").exists'
  - 'patches.label("Spacing").exists' 
      
      







Me gustar铆a se帽alar, siempre indique su entorno (versi贸n de PHP, base de datos, etc.), porque los valores predeterminados pueden cambiar y sus compilaciones alg煤n d铆a ser谩n defectuosas. Eso realmente me sucedi贸 el otro d铆a, cuando se lanz贸 PHP 8.0.1.





GitHub, .





, .









, :

https://scrutinizer-ci.com/g/-/-/settings





Check Suite

.





, Scrutinizer , 20.





GitHub CI , , - , - Scrutinizer.





Tracking Settings

. , CheckSuite, , , .





  • Pull-Request Tracking - Pull- .





  • Pull-Request Notification - , , , GitHub Check Suite.





  • Tracked Branches - . , "Track only branches listed below" .









Auto-Cancel Non-Finished Inspections

, .





, .









:

https://scrutinizer-ci.com/g/-/-/settings/build-config





.





,





Postgres
build:
    nodes:
        coverage:
            services:
                postgres: 12
            tests:
                override:
                    -
                        command: |
                            sed -e "s/\${USERNAME}/scrutinizer/" \
                                -e "s/\${PASSWORD}/scrutinizer/" \
                                -e "s/\${DATABASE}/scrutinizer/" \
                                -e "s/\${HOST}/127.0.0.1/" \
                                phpunit.xml.dist > phpunit.xml
                            ./vendor/bin/phpunit \
                                --verbose  \
                                --stderr  \
                                --coverage-clover build/logs/clover.xml \
                                --coverage-text
                        coverage:
                            file: build/logs/clover.xml
                            format: clover
        analysis:
            tests:
                override:
                    - php-scrutinizer-run
                    -
                        command: phpcs-run
                        use_website_config: true
    cache:
        disabled: true
        directories:
            - vendor/
filter:
    excluded_paths:
        - 'tests/*'
      
      







- phpcs , .





phpcs.xml
<?xml version="1.0"?>
<ruleset>
    <file>./</file>
    <exclude-pattern>./vendor/*</exclude-pattern>
    <exclude-pattern>./tests/*</exclude-pattern>
    <exclude-pattern>./.github/*</exclude-pattern>
    <rule ref="PSR1" />
</ruleset>
      
      







composer.json require-dev :





"squizlabs/php_codesniffer": "^3.5"
      
      



, , Check Suite Scrutinizer.





GitHub





( ) GitHub ( ), - GitHub Actions.





Scrutinizer

Scrutinizer : Code Intelligence, Issues Coverage.





, , ...





Code Intelligence , .





, , Code Intelligence .





, .





- , .





Scrutinizer, , - . , .





, , , , .












All Articles