Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
41 changes: 21 additions & 20 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jobs:

services:
mariadb:
image: mariadb:10.3
image: mariadb:10.11
ports:
- 3306:3306
env:
Expand All @@ -15,43 +15,44 @@ jobs:
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=5

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
persist-credentials: false

- name: Install mariadb-client
run: |
sudo apt update
sudo apt install mariadb-client

- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v6
with:
node-version: '22'
cache: 'pnpm'

- uses: shivammathur/setup-php@v2
with:
php-version: '7.2'
coverage: pcov
php-version: '8.4'
tools: cs2pr

- uses: actions/cache@v4
- uses: actions/cache@v5
with:
path: ~/.cache/composer
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-

- uses: actions/cache@v4
with:
path: ~/.cache/yarn
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: ${{ runner.os }}-yarn-

- name: Setup problem matchers for PHP
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"

- name: Setup problem matchers for PHPUnit
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"

# Prepare our app
- run: mysql --protocol=tcp --user=root --execute='SET GLOBAL sql_mode = "";'
- run: cp application/configs/application.sample.ini application/configs/application.ini
- run: cp config/autoload/local.php.dist config/autoload/local.php
- run: ./bin/build.sh
- run: ./bin/load-test-data.sh

# Lint and tests
- run: ./vendor/bin/php-cs-fixer fix --format=checkstyle | cs2pr
- run: ./vendor/bin/phpstan analyse
- run: ./vendor/bin/pcov clobber
- run: ./vendor/bin/phpunit --coverage-clover coverage-clover.xml

- name: Upload code coverage
run: |
curl -LO https://scrutinizer-ci.com/ocular.phar
php ocular.phar code-coverage:upload --format=php-clover coverage-clover.xml
- run: ./vendor/bin/phpunit
24 changes: 15 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
*.pyc
/.idea/
/.php_cs.cache
/application/configs/application.ini
/doc/html
/.idea
/node_modules
/public/css
/public/js/min
/tests/data
/tests/log
/config/autoload/*.local.php
/config/autoload/local.php
/config/development.config.php
/data/!.gitignore
/data/!cache
/data/!cache/.gitkeep
/data/cache/
/data/tmp/
/library/searchengine/nova3/engines/jackett.json
/logs/
/node_modules/
/public/css/
/public/js/min/
/vendor/
*.pyc
100 changes: 75 additions & 25 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,57 @@

$finder = PhpCsFixer\Finder::create()
->exclude('library')
->exclude('data')
->exclude('node_modules')
->exclude('vendor')
->name('*.phtml')
->in(__DIR__);

return (new PhpCsFixer\Config())
return new PhpCsFixer\Config()
->setParallelConfig(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect())
->setRiskyAllowed(true)
->setFinder($finder)
->setCacheFile(sys_get_temp_dir() . '/php-cs-fixer' . preg_replace('~\W~', '-', __DIR__))
->setUnsupportedPhpVersionAllowed(true)
->setRules([
'align_multiline_comment' => true,
'array_indentation' => true,
'array_push' => true,
'array_syntax' => ['syntax' => 'short'],
'assign_null_coalescing_to_coalesce_equal' => true,
'attribute_empty_parentheses' => true,
'backtick_to_shell_exec' => false, // Backticks are a very concise way to execute shell
'binary_operator_spaces' => true,
'blank_line_after_namespace' => true,
'blank_line_after_opening_tag' => true,
'blank_line_before_statement' => true,
'braces' => false, // Mess up our templates, eg: application/layouts/scripts/layout.phtml
'blank_line_between_import_groups' => true,
'blank_lines_before_namespace' => true,
'braces' => false, // Deprecated
'braces_position' => false, // Mess up our templates, eg: application/layouts/scripts/layout.phtml
'cast_spaces' => true,
'class_attributes_separation' => ['elements' => ['method' => 'one', 'property' => 'one']], // const are often grouped with other related const
'class_definition' => true,
'class_keyword' => false, // Because risky, and sometimes we prefer to keep FQCN as is
'class_keyword_remove' => false, // Deprecated, and ::class keyword gives us better support in IDE
'class_reference_name_casing' => true,
'clean_namespace' => true,
'combine_consecutive_issets' => true,
'combine_consecutive_unsets' => true,
'combine_nested_dirname' => true,
'comment_to_phpdoc' => true,
'compact_nullable_typehint' => true,
'compact_nullable_type_declaration' => true,
'compact_nullable_typehint' => false, // Deprecated
'concat_space' => ['spacing' => 'one'],
'constant_case' => true,
'control_structure_braces' => true,
'control_structure_continuation_position' => true,
'curly_braces_position' => false, // Deprecated
'date_time_create_from_format_call' => false, // Because risky
'date_time_immutable' => true,
'declare_equal_normalize' => true,
'declare_parentheses' => true,
'declare_strict_types' => false, // Too early to adopt strict types
'declare_strict_types' => false,
'dir_constant' => true,
'doctrine_annotation_array_assignment' => true,
'doctrine_annotation_braces' => true,
Expand All @@ -53,7 +67,7 @@
'encoding' => true,
'ereg_to_preg' => true,
'error_suppression' => true,
'escape_implicit_backslashes' => true,
'escape_implicit_backslashes' => false, // Deprecated
'explicit_indirect_variable' => false, // I feel it makes the code actually harder to read
'explicit_string_variable' => false, // I feel it makes the code actually harder to read
'final_class' => false, // We need non-final classes
Expand All @@ -65,12 +79,15 @@
'fully_qualified_strict_types' => true,
'function_declaration' => true,
'function_to_constant' => true,
'function_typehint_space' => true,
'function_typehint_space' => false, // Deprecated
'general_attribute_remove' => true,
'general_phpdoc_annotation_remove' => ['annotations' => ['author', 'category', 'copyright', 'package', 'throws']],
'general_phpdoc_tag_rename' => true,
'get_class_to_class_keyword' => true,
'global_namespace_import' => true,
'group_import' => false, // I feel it makes the code actually harder to read
'header_comment' => false, // We don't use common header in all our files
'heredoc_closing_marker' => ['closing_marker' => 'STRING'],
'heredoc_indentation' => true,
'heredoc_to_nowdoc' => false, // We often use variable in heredoc
'implode_call' => true,
Expand All @@ -82,8 +99,9 @@
'lambda_not_used_import' => true,
'line_ending' => true,
'linebreak_after_opening_tag' => true,
'list_syntax' => ['syntax' => 'short'],
'list_syntax' => true,
'logical_operators' => true,
'long_to_shorthand_operator' => false, // Because risky
'lowercase_cast' => true,
'lowercase_keywords' => true,
'lowercase_static_reference' => true,
Expand All @@ -95,19 +113,24 @@
'modernize_strpos' => true,
'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true,
'multiline_promoted_properties' => true, // Experimental
'multiline_string_to_heredoc' => false, // We prefer to keep some freedom
'multiline_whitespace_before_semicolons' => true,
'native_constant_invocation' => false, // Micro optimization that look messy
'native_function_casing' => true,
'native_function_invocation' => false, // I suppose this would be best, but I am still unconvinced about the visual aspect of it
'native_function_type_declaration_casing' => true,
'new_with_braces' => true,
'native_function_type_declaration_casing' => false, // Deprecated
'native_type_declaration_casing' => true,
'new_expression_parentheses' => true,
'new_with_braces' => false, // Deprecated
'new_with_parentheses' => true,
'no_alias_functions' => true,
'no_alias_language_construct_call' => true,
'no_alternative_syntax' => false, // We want to use alternative syntax in .phtml
'no_binary_string' => true,
'no_blank_lines_after_class_opening' => true,
'no_blank_lines_after_phpdoc' => true,
'no_blank_lines_before_namespace' => false, // we want 1 blank line before namespace
'no_blank_lines_before_namespace' => false, // Deprecated
'no_break_comment' => true,
'no_closing_tag' => true,
'no_empty_comment' => true,
Expand All @@ -119,29 +142,35 @@
'no_leading_namespace_whitespace' => true,
'no_mixed_echo_print' => true,
'no_multiline_whitespace_around_double_arrow' => true,
'no_multiple_statements_per_line' => true,
'no_null_property_initialization' => true,
'no_php4_constructor' => false, // Because our BootstrapCli class is affected by https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/3096
'no_php4_constructor' => true,
'no_short_bool_cast' => true,
'no_singleline_whitespace_before_semicolons' => true,
'no_space_around_double_colon' => true,
'no_spaces_after_function_name' => true,
'no_spaces_around_offset' => true,
'no_spaces_inside_parenthesis' => true,
'no_spaces_inside_parenthesis' => false, // Deprecated
'no_superfluous_elseif' => true,
'no_superfluous_phpdoc_tags' => ['allow_mixed' => true],
'no_trailing_comma_in_list_call' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_trailing_comma_in_list_call' => false, // Deprecated
'no_trailing_comma_in_singleline' => true,
'no_trailing_comma_in_singleline_array' => false, // Deprecated
'no_trailing_comma_in_singleline_function_call' => true, // Deprecated
'no_trailing_whitespace' => true,
'no_trailing_whitespace_in_comment' => true,
'no_trailing_whitespace_in_string' => false, // Too dangerous
'no_unneeded_control_parentheses' => true,
'no_unneeded_curly_braces' => true,
'no_unneeded_curly_braces' => false, // Deprecated
'no_unneeded_final_method' => true,
'no_unneeded_import_alias' => true,
'no_unreachable_default_argument_value' => true,
'no_unset_cast' => true,
'no_unset_on_property' => true,
'no_unused_imports' => true,
'no_useless_concat_operator' => true,
'no_useless_else' => true,
'no_useless_nullsafe_operator' => true,
'no_useless_return' => true,
'no_useless_sprintf' => true,
'no_whitespace_before_comma_in_array' => true,
Expand All @@ -150,15 +179,25 @@
'normalize_index_brace' => true,
'not_operator_with_space' => false, // No we prefer to keep '!' without spaces
'not_operator_with_successor_space' => false, // idem
'nullable_type_declaration' => true,
'nullable_type_declaration_for_default_null_value' => true,
'numeric_literal_separator' => false, // Maybe later...
'object_operator_without_whitespace' => true,
'octal_notation' => true,
'operator_linebreak' => true,
'ordered_attributes' => false, // We prefer to keep some freedom
'ordered_class_elements' => false, // We prefer to keep some freedom
'ordered_imports' => true,
'ordered_interfaces' => true,
'ordered_traits' => true,
'ordered_types' => false, // We prefer to keep some freedom
'php_unit_assert_new_names' => true,
'php_unit_attributes' => true,
'php_unit_construct' => true,
'php_unit_data_provider_method_order' => true,
'php_unit_data_provider_name' => ['prefix' => 'provider', 'suffix' => ''],
'php_unit_data_provider_return_type' => true,
'php_unit_data_provider_static' => true,
'php_unit_dedicate_assert' => true,
'php_unit_dedicate_assert_internal_type' => true,
'php_unit_expectation' => true,
Expand All @@ -178,16 +217,17 @@
'phpdoc_add_missing_param_annotation' => true,
'phpdoc_align' => false, // Waste of time
'phpdoc_annotation_without_dot' => true,
'phpdoc_array_type' => false, // We prefer `T[]` instead of `array<T>`
'phpdoc_indent' => true,
'phpdoc_inline_tag_normalizer' => true,
'phpdoc_line_span' => true,
'phpdoc_list_type' => false, // Because we are not always sure what type it should actually be
'phpdoc_no_access' => true,
'phpdoc_no_alias_tag' => true,
'phpdoc_no_empty_return' => true,
'phpdoc_no_package' => true,
'phpdoc_no_useless_inheritdoc' => true,
'phpdoc_order' => true,
'phpdoc_order_by_value' => true,
'phpdoc_param_order' => true,
'phpdoc_readonly_class_comment_to_keyword' => true,
'phpdoc_return_self_reference' => true,
'phpdoc_scalar' => true,
'phpdoc_separation' => true,
Expand All @@ -207,10 +247,11 @@
'phpdoc_var_without_name' => true,
'pow_to_exponentiation' => true,
'protected_to_private' => true,
'psr_autoloading' => false, // We unfortunately cannot be entirely PSR-0 compliant with ZF1 because of classes like Admin_ChapterController
'psr_autoloading' => true,
'random_api_migration' => true,
'regular_callable_call' => true,
'return_assignment' => false, // Sometimes useful for clarity or debug
'return_to_yield_from' => false, // That seems useless
'return_type_declaration' => true,
'self_accessor' => true,
'self_static_accessor' => true,
Expand All @@ -221,21 +262,28 @@
'simplified_if_return' => false, // Even if technically correct we prefer to be explicit
'simplified_null_return' => false, // Even if technically correct we prefer to be explicit
'single_blank_line_at_eof' => true,
'single_blank_line_before_namespace' => true,
'single_blank_line_before_namespace' => false, // Deprecated
'single_class_element_per_statement' => true,
'single_import_per_statement' => true,
'single_line_after_imports' => true,
'single_line_comment_spacing' => true,
'single_line_comment_style' => true,
'single_line_empty_body' => true,
'single_line_throw' => false, // I don't see any reason for having a special case for Exception
'single_quote' => true,
'single_space_after_construct' => true,
'single_space_after_construct' => false, // Deprecated
'single_space_around_construct' => true,
'single_trait_insert_per_statement' => true,
'space_after_semicolon' => true,
'spaces_inside_parentheses' => true,
'standardize_increment' => true,
'standardize_not_equals' => true,
'statement_indentation' => true,
'static_lambda' => false, // Risky if we can't guarantee nobody use `bindTo()`
'strict_comparison' => false, // We sometimes need to compare DateTime objects with non-strict operator
'strict_param' => false, // No, too dangerous to change that
'static_private_method' => false, // In PHP we'd rather avoid static as a rule of thumb
'strict_comparison' => true,
'strict_param' => true,
'string_implicit_backslashes' => false, // It's incompatible with generated code
'string_length_to_empty' => true,
'string_line_ending' => true,
'switch_case_semicolon_to_colon' => true,
Expand All @@ -244,13 +292,15 @@
'ternary_operator_spaces' => true,
'ternary_to_elvis_operator' => true,
'ternary_to_null_coalescing' => true,
'trailing_comma_in_multiline' => true,
'trailing_comma_in_multiline' => ['elements' => ['arguments', 'array_destructuring', 'arrays', 'match', 'parameters']],
'trim_array_spaces' => true,
'type_declaration_spaces' => true,
'types_spaces' => true,
'unary_operator_spaces' => true,
'use_arrow_functions' => true,
'visibility_required' => true,
'void_return' => true,
'whitespace_after_comma_in_array' => true,
'yoda_style' => false,
'yield_from_array_to_yields' => true,
'yoda_style' => false, // Like Yoda we speak not
]);
Loading