Registering with Scrutinizer
It's probably easier to log in with your GitHub account. this saves you the trouble of linking your GitHub profile, which you still have to do.
To install the Scrutinizer application, follow the link , you can skip this step, but keep in mind that in the future, interactive buns will not work for you and a notification will hang: Scrutinizer GitHub App Is Not Installed ...
We give him all the scopes that he requires. Fear not, Scrutinizer will not delete your repos or harm you in any way. This is necessary so that the application can communicate with your GitHub via API and manage your Check Suite in real-time, giving it feedback, and the code in your PRs for the convenience of reviews, etc.
An example of what the Scrutinizer installation window looks like
Create a global configuration
Generally speaking, if you have many repositories, then Best Practies is considered correct to have one global configuration, where to store general settings, and place specific configs in the configuration of your repositories, as if overwriting individual pieces of configurations.
To create a global configuration follow the link .
An example of a global configuration for a PHP project
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
Please note that the checks described below will result in a build failure, so if you don't need some of them, remove or lower the limits:
Assemblies checks
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'
I would like to note, always indicate your environment (PHP version, database, etc.), because the defaults can change and your builds will one day be faulty. That actually happened to me just the other day, when PHP 8.0.1 was released.
, .
, :
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, , - . , .
, , , , .