From 22b1bfd1895b6e582610e8527d5100580dc77f24 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 31 Jul 2020 12:08:58 +0200 Subject: [PATCH] Small improvements to CI --- .env.ci => .ci/.env.ci | 0 .ci/firefly-iii-standard.yml | 251 ++++++++++++++++++++++++++++++++++ .github/workflows/laravel.yml | 10 +- 3 files changed, 256 insertions(+), 5 deletions(-) rename .env.ci => .ci/.env.ci (100%) create mode 100644 .ci/firefly-iii-standard.yml diff --git a/.env.ci b/.ci/.env.ci similarity index 100% rename from .env.ci rename to .ci/.env.ci diff --git a/.ci/firefly-iii-standard.yml b/.ci/firefly-iii-standard.yml new file mode 100644 index 0000000000..c7837c4ddf --- /dev/null +++ b/.ci/firefly-iii-standard.yml @@ -0,0 +1,251 @@ +parameters: + indentation: tab + + file_extensions: + - php + - phpt + + exclude_files: + - fixtures/* + - fixtures*/* + - temp/* + - tmp/* + +services: + # Checkers bellow aim on 1:1 copy of https://nette.org/en/coding-standard + + # General rules - https://nette.org/en/coding-standard#toc-general-rules + + # use tabs over spaces + # PHP_CodeSniffer\Standards\Generic\Sniffs\WhiteSpace\DisallowSpaceIndentSniff: ~ + # PHP code must use only UTF-8 without BOM + PhpCsFixer\Fixer\Basic\EncodingFixer: ~ + # tag must be omitted from files containing only PHP. + PhpCsFixer\Fixer\PhpTag\NoClosingTagFixer: ~ + # There must not be trailing whitespace at the end of lines. + PhpCsFixer\Fixer\Whitespace\NoTrailingWhitespaceFixer: ~ + # ...and at the end of blank lines. + PhpCsFixer\Fixer\Whitespace\NoWhitespaceInBlankLineFixer: ~ + # All files must end with a single blank line. + PhpCsFixer\Fixer\Whitespace\SingleBlankLineAtEofFixer: ~ + # File name should match class name if possible. + PhpCsFixer\Fixer\Basic\Psr4Fixer: ~ + # Enforces using shorthand scalar typehint variants in phpDocs: `int` instead of `integer` and `bool` instead of `boolean` + SlevomatCodingStandard\Sniffs\TypeHints\LongTypeHintsSniff: ~ + + # File Header - https://nette.org/en/coding-standard#toc-file-header + + # empty line before namespace + PhpCsFixer\Fixer\NamespaceNotation\SingleBlankLineBeforeNamespaceFixer: ~ + # 1 Use statement per line + PhpCsFixer\Fixer\Import\SingleImportPerStatementFixer: ~ + # Use statements are alphabetically ordered + PhpCsFixer\Fixer\Import\OrderedImportsFixer: ~ + # disallow group use declarations use FooLibrary\Bar\Baz\{ ClassA, ClassB, ClassC, ClassD as Fizbo } + SlevomatCodingStandard\Sniffs\Namespaces\DisallowGroupUseSniff: ~ + # Disallows leading backslash in use statement: use \Foo\Bar; + SlevomatCodingStandard\Sniffs\Namespaces\UseDoesNotStartWithBackslashSniff: ~ + # Looks for unused imports from other namespaces. + Nette\CodingStandard\Sniffs\Namespaces\UnusedUsesSniff: + searchAnnotations: yes + ignoredAnnotationNames: ['@testCase'] + ignoredAnnotations: ['@internal'] + + # Language Construct (should be placed before some other fixers) + + # Functions should be used with `$strict` param set to `true` + PhpCsFixer\Fixer\Strict\StrictParamFixer: ~ + # replaces is_null(parameter) expression with `null === parameter`. + PhpCsFixer\Fixer\LanguageConstruct\IsNullFixer: + use_yoda_style: true + # Calling `unset` on multiple items should be done in one call. + PhpCsFixer\Fixer\LanguageConstruct\CombineConsecutiveUnsetsFixer: ~ + # Replace all `<>` with `!=`. + PhpCsFixer\Fixer\Operator\StandardizeNotEqualsFixer: ~ + # Include/Require and file path should be divided with a single space. File path should not be placed under brackets. + PhpCsFixer\Fixer\ControlStructure\IncludeFixer: ~ + # Requires short ternary operator ?: when possible + SlevomatCodingStandard\Sniffs\ControlStructures\RequireShortTernaryOperatorSniff: ~ + + # Arrays - https://nette.org/en/coding-standard#toc-arrays + + # use short array fixes + PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer: + syntax: short + # use trailing command in last array element + PhpCsFixer\Fixer\ArrayNotation\TrailingCommaInMultilineArrayFixer: ~ + # PHP single-line arrays should not have trailing comma. + # PhpCsFixer\Fixer\ArrayNotation\NoTrailingCommaInSinglelineArrayFixer: ~ + # In array declaration, there MUST NOT be a whitespace before each comma. + PhpCsFixer\Fixer\ArrayNotation\NoWhitespaceBeforeCommaInArrayFixer: ~ + # Arrays should be formatted like function/method arguments, without leading or trailing single line space. + PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer: ~ + # In array declaration, there MUST be a whitespace after each comma. + PhpCsFixer\Fixer\ArrayNotation\WhitespaceAfterCommaInArrayFixer: ~ + + # Strings + + # Convert `heredoc` to `nowdoc` where possible. + PhpCsFixer\Fixer\StringNotation\HeredocToNowdocFixer: ~ + # Convert double quotes to single quotes for simple strings. + PhpCsFixer\Fixer\StringNotation\SingleQuoteFixer: ~ + + # Keywords and True/False/Null - https://nette.org/en/coding-standard#toc-keywords-and-true-false-null + + # PHP keywords must be in lower case + PhpCsFixer\Fixer\Casing\LowercaseKeywordsFixer: ~ + # The PHP constants `true`, `false`, and `null` MUST be in lower case + PhpCsFixer\Fixer\Casing\LowercaseConstantsFixer: ~ + + # Method and Functions Calls - https://nette.org/en/coding-standard#toc-method-and-function-calls + + # Function defined by PHP should be called using the correct casing + PhpCsFixer\Fixer\Casing\NativeFunctionCasingFixer: ~ + # In the argument list, there must be one space after each comma, and there must no be a space before each comma + PhpCsFixer\Fixer\FunctionNotation\MethodArgumentSpaceFixer: ~ + # This sniff checks that there are two blank lines between functions declarations and single between signatures. + #Nette\CodingStandard\Sniffs\WhiteSpace\FunctionSpacingSniff: ~ + + # Classes - https://nette.org/en/coding-standard#toc-classes + + # Inside a classy element "self" should be preferred to the class name itself. + PhpCsFixer\Fixer\ClassNotation\SelfAccessorFixer: ~ + # class element order: constants, properties, from public to private + PhpCsFixer\Fixer\ClassNotation\OrderedClassElementsFixer: + order: + - use_trait + - constant + - constant_public + - constant_protected + - constant_private + - property_public + - property_protected + - property_private + + # Constants - https://nette.org/en/coding-standard#toc-constants + + # constant names are CAPITALIZED (manuall fixing only :() + PHP_CodeSniffer\Standards\Generic\Sniffs\NamingConventions\UpperCaseConstantNameSniff: ~ + + # Class Properties - https://nette.org/en/coding-standard#toc-class-properties + + # There MUST NOT be more than one property declared per statement. + PhpCsFixer\Fixer\ClassNotation\SingleClassElementPerStatementFixer: + elements: ['property'] + + # Methods - https://nette.org/en/coding-standard#toc-methods + + # They must be declared in camelCase. + PHP_CodeSniffer\Standards\PSR1\Sniffs\Methods\CamelCapsMethodNameSniff: ~ + # Checks that there's a single space between a typehint and a parameter name and no whitespace between a nullability symbol and a typehint + SlevomatCodingStandard\Sniffs\TypeHints\ParameterTypeHintSpacingSniff: ~ + # Spaces should be properly placed in a function declaration. + PhpCsFixer\Fixer\FunctionNotation\FunctionDeclarationFixer: ~ + # In function arguments there must not be arguments with default values before non-default ones. + PhpCsFixer\Fixer\FunctionNotation\NoUnreachableDefaultArgumentValueFixer: ~ + + # Constans, Class Properties, Methods + + # Constants and Properties should be separated by 1 blank line + #PhpCsFixer\Fixer\ClassNotation\ClassAttributesSeparationFixer: + # elements: [const, property] + + # Last property and 1st method should be separated by 2 spaces + Nette\CodingStandard\Fixer\ClassNotation\LastPropertyAndFirstMethodSeparationFixer: + space_count: 2 + + # Control Statements - https://nette.org/en/coding-standard#toc-control-statements + + # The keyword `elseif` should be used instead of `else if` so that all control keywords look like single words. + PhpCsFixer\Fixer\ControlStructure\ElseifFixer: ~ + # Remove useless semicolon statements. + PhpCsFixer\Fixer\Semicolon\NoEmptyStatementFixer: ~ + # Remove trailing commas in list() calls. + PhpCsFixer\Fixer\ControlStructure\NoTrailingCommaInListCallFixer: ~ + # Removes unneeded parentheses around control statements. + PhpCsFixer\Fixer\ControlStructure\NoUnneededControlParenthesesFixer: ~ + # A case should be followed by a colon and not a semicolon. + PhpCsFixer\Fixer\ControlStructure\SwitchCaseSemicolonToColonFixer: ~ + # The structure body must be indented once. + # The closing brace must be on the next line after the body. + # There should not be more than one statement per line. + #Nette\CodingStandard\Fixer\Basic\BracesFixer: + # allow_single_line_closure: true + # changes if (1 === $cond) to if ($cond === 1) + #SlevomatCodingStandard\Sniffs\ControlStructures\DisallowYodaComparisonSniff: ~ + # finds unreachable catch blocks: + SlevomatCodingStandard\Sniffs\Exceptions\DeadCatchSniff: ~ + + # Casting + + # A single space or none should be between cast and variable (int) $val + PhpCsFixer\Fixer\CastNotation\CastSpacesFixer: ~ + # Cast should be written in lower case. + PhpCsFixer\Fixer\CastNotation\LowercaseCastFixer: ~ + # Replaces `intval`, `floatval`, `doubleval`, `strval` and `boolval` function calls with according type casting operator + PhpCsFixer\Fixer\CastNotation\ModernizeTypesCastingFixer: ~ + # Short cast `bool` using double exclamation mark should not be used + PhpCsFixer\Fixer\CastNotation\NoShortBoolCastFixer: ~ + # Cast `(boolean)` and `(integer)` should be written as `(bool)` and `(int)`, `(double)` and `(real)` as `(float)` + PhpCsFixer\Fixer\CastNotation\ShortScalarCastFixer: ~ + + # Language Whitespace + + # Binary operators should be surrounded by at least one space. DO NOT USE + #PhpCsFixer\Fixer\Operator\BinaryOperatorSpacesFixer: ~ + # Unary operators should be placed adjacent to their operands. + PhpCsFixer\Fixer\Operator\UnaryOperatorSpacesFixer: ~ + # No space after the opening parenthesis and before the closing parenthesis + PhpCsFixer\Fixer\Whitespace\NoSpacesInsideParenthesisFixer: ~ + # There MUST NOT be spaces around offset braces $a[0] + PhpCsFixer\Fixer\Whitespace\NoSpacesAroundOffsetFixer: ~ + # There should not be space before or after object `T_OBJECT_OPERATOR` `->`. + PhpCsFixer\Fixer\Operator\ObjectOperatorWithoutWhitespaceFixer: ~ + # Standardize spaces around ternary operator. + PhpCsFixer\Fixer\Operator\TernaryOperatorSpacesFixer: ~ + # Concatenation $a . $b should be spaced according configuration + PhpCsFixer\Fixer\Operator\ConcatSpaceFixer: + spacing: one + # Removes extra spaces between colon and case value. + PhpCsFixer\Fixer\ControlStructure\SwitchCaseSpaceFixer: ~ + + # Comments + + # Docblocks should have the same indentation as the documented subject. + PhpCsFixer\Fixer\Phpdoc\PhpdocIndentFixer: ~ + # There should not be any empty comments. + PhpCsFixer\Fixer\Comment\NoEmptyCommentFixer: ~ + # There should not be empty PHPDoc blocks. + #PhpCsFixer\Fixer\Phpdoc\NoEmptyPhpdocFixer: ~ + # Phpdocs should start and end with content, excluding the very first and last line of the docblocks. + PhpCsFixer\Fixer\Phpdoc\PhpdocTrimFixer: ~ + # Single-line comments comments with only one line of actual content should use the `//` syntax. + PhpCsFixer\Fixer\Comment\SingleLineCommentStyleFixer: + comment_types: ['hash'] + # Require comments with single-line content to be written as one-liners + SlevomatCodingStandard\Sniffs\Commenting\RequireOneLinePropertyDocCommentSniff: ~ + + + # Properties MUST not be explicitly initialized with `null`. + #PhpCsFixer\Fixer\ClassNotation\NoNullPropertyInitializationFixer: ~ + + PhpCsFixer\Fixer\ControlStructure\NoBreakCommentFixer: + comment_text: 'break omitted' + + # declare(strict_types=1); + PhpCsFixer\Fixer\Strict\DeclareStrictTypesFixer: ~ + # Enforces consistent formatting of return typehints: function foo(): ?int + SlevomatCodingStandard\Sniffs\TypeHints\ReturnTypeHintSpacingSniff: ~ + # Use `null` coalescing operator `??` where possible. + PhpCsFixer\Fixer\Operator\TernaryToNullCoalescingFixer: ~ + + Nette\CodingStandard\Fixer\ClassNotation\ClassAndTraitVisibilityRequiredFixer: + elements: ['const', 'property', 'method'] + + # short list() syntax [] + PhpCsFixer\Fixer\ListNotation\ListSyntaxFixer: + syntax: short diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index dd199b6446..b8cbe64e92 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -22,7 +22,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Copy .env - run: test -f .env || cp .env.ci .env + run: test -f .env || cp .ci/.env.ci .env - name: Prepare dependencies run: | set -euxo pipefail @@ -62,7 +62,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Copy .env - run: test -f .env || cp .env.ci .env + run: test -f .env || cp .ci/.env.ci .env - name: Download database uses: actions/download-artifact@v2 with: @@ -97,7 +97,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Copy .env - run: test -f .env || cp .env.ci .env + run: test -f .env || cp .ci/.env.ci .env - name: Download database uses: actions/download-artifact@v2 with: @@ -119,7 +119,7 @@ jobs: composer install --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-suggest - name: Execute code standard - run: /home/runner/.composer/vendor/bin/ecs check app tests --config ~/.composer/vendor/nette/coding-standard/coding-standard-php71.yml + run: /home/runner/.composer/vendor/bin/ecs check app tests --config ./.ci/firefly-iii-standard.yml phpstan: @@ -131,7 +131,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Copy .env - run: test -f .env || cp .env.ci .env + run: test -f .env || cp .ci/.env.ci .env - name: Download database uses: actions/download-artifact@v2 with: