GitHubとScrutinizerへのPHPプロジェクトの統合

Scrutinizerへの登録

GitHubアカウントでログインする方がおそらく簡単です。これにより、GitHubプロファイルをリンクする手間が省けます。





Scrutinizerアプリケーションをインストールするには、リンクをたどってください。この手順はスキップできますが、将来的にはインタラクティブバンが機能せず、通知がハングすることに注意してください:ScrutinizerGitHubアプリがインストールされていません...





私たちは彼に彼が必要とするすべてのスコープを与えます。恐れることはありません。Scrutinizerはリポジトリを削除したり、害を及ぼすことはありません。これは、アプリケーションがAPIを介してGitHubと通信し、Check Suiteをリアルタイムで管理してフィードバックを提供したり、レビューなどの便宜のためにPRのコードを提供したりするために必要です。





Scrutinizerのインストールウィンドウの例





グローバル構成を作成する

一般的に、リポジトリが多数ある場合、Best Practiesは、一般的な設定を保存する1つのグローバル構成を持ち、個々の構成を上書きするかのように、リポジトリの構成に特定の構成を配置することが正しいと見なされます。





グローバル構成を作成するには、リンクをたどってください





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
      
      







以下で説明するチェックはビルドの失敗につながることに注意してください。したがって、それらのいくつかが必要ない場合は、制限を削除するか下げてください。





アセンブリチェック
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' 
      
      







私は注意したいのですが、常にあなたの環境(PHPバージョン、データベースなど)を示してください。デフォルトは変更される可能性があり、ビルドはいつか障害が発生します。先日、PHP8.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