diff --git a/.github/workflows/ci-composer-scripts.yml b/.github/workflows/ci-composer-scripts.yml new file mode 100644 index 0000000..e8593d8 --- /dev/null +++ b/.github/workflows/ci-composer-scripts.yml @@ -0,0 +1,208 @@ +--- +name: CI Composer scripts +on: + push: + branches: + - main + pull_request: + schedule: + - cron: '15 3 * * 1' +jobs: + php-lint: + name: "PHP linter" + runs-on: ubuntu-20.04 + steps: + - name: "Checkout" + uses: actions/checkout@v2 + - name: "Install PHP" + uses: shivammathur/setup-php@v2 + with: + php-version: "${{ matrix.php-version }}" + coverage: none + tools: composer:v2 + - name: "Run PHP lint" + run: "composer ci:php:lint" + strategy: + fail-fast: false + matrix: + php-version: + - 7.2 + - 7.3 + - 7.4 + code-quality: + name: "Code quality checks" + runs-on: ubuntu-20.04 + steps: + - name: "Checkout" + uses: actions/checkout@v2 + - name: "Install PHP" + uses: shivammathur/setup-php@v2 + with: + php-version: "${{ matrix.php-version }}" + coverage: none + tools: composer:v2 + - name: "Show Composer version" + run: composer --version + - name: "Cache dependencies installed with composer" + uses: actions/cache@v1 + with: + key: "php${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.json') }}" + path: ~/.cache/composer + restore-keys: "php${{ matrix.php-version }}-composer-\n" + - name: "Install Composer dependencies" + run: "composer install --no-progress" + - name: "Run command" + run: "composer ci:${{ matrix.command }}" + strategy: + fail-fast: false + matrix: + command: + - "ts:lint" + - "yaml:lint" + - "json:lint" + - "php:sniff" + - "php:copypaste" + - "php:stan" + - "composer:normalize" + - "json:lint" + - "php:cs-fixer" + php-version: + - 7.4 + code-quality-frontend: + name: "Code quality frontend checks" + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + command: + - "style" + - "js" + steps: + - name: "Checkout" + uses: actions/checkout@v2 + - name: "Install modules" + working-directory: ./Resources/Private + run: yarn + - name: "Run command" + working-directory: ./Resources/Private + run: "yarn lint:${{ matrix.command }}" + xliff-lint: + name: "Xliff linter" + runs-on: ubuntu-20.04 + steps: + - name: "Checkout" + uses: actions/checkout@v2 + - name: "Run the xliff lint" + uses: TYPO3-Continuous-Integration/TYPO3-CI-Xliff-Lint@v1 + unit-tests: + name: "Unit tests" + runs-on: ubuntu-20.04 + needs: php-lint + steps: + - name: "Checkout" + uses: actions/checkout@v2 + - name: "Install PHP" + uses: shivammathur/setup-php@v2 + with: + php-version: "${{ matrix.php-version }}" + coverage: none + tools: composer:v2 + - name: "Show Composer version" + run: composer --version + - name: "Cache dependencies installed with composer" + uses: actions/cache@v1 + with: + key: "php${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.json') }}" + path: ~/.cache/composer + restore-keys: "php${{ matrix.php-version }}-composer-\n" + - env: + TYPO3: "${{ matrix.typo3-version }}" + name: "Install TYPO3 Core" + run: | + composer require --no-progress typo3/minimal:"$TYPO3" + composer show + - if: "matrix.composer-dependencies == 'lowest'" + name: "Install lowest dependencies with composer" + run: | + composer update --no-ansi --no-interaction --no-progress --with-dependencies --prefer-lowest + composer show + - if: "matrix.composer-dependencies == 'highest'" + name: "Install highest dependencies with composer" + run: | + composer update --no-ansi --no-interaction --no-progress --with-dependencies + composer show + - name: "Run unit tests" + run: "composer ci:tests:unit" + strategy: + fail-fast: false + matrix: + composer-dependencies: + - highest + - lowest + php-version: + - 7.2 + - 7.3 + - 7.4 + typo3-version: + - ^9.5 + - ^10.4 + functional-tests: + name: "Functional tests" + runs-on: ubuntu-18.04 + needs: php-lint + steps: + - name: "Checkout" + uses: actions/checkout@v2 + - name: "Install PHP" + uses: shivammathur/setup-php@v2 + with: + php-version: "${{ matrix.php-version }}" + tools: composer:v2 + extensions: mysqli + coverage: none + - name: "Show Composer version" + run: composer --version + - name: "Cache dependencies installed with composer" + uses: actions/cache@v1 + with: + key: "php${{ matrix.php-version }}-composer-${{ hashFiles('**/composer.json') }}" + path: ~/.cache/composer + restore-keys: "php${{ matrix.php-version }}-composer-\n" + - env: + TYPO3: "${{ matrix.typo3-version }}" + name: "Install TYPO3 Core" + run: | + composer require --no-progress typo3/minimal:"$TYPO3" + composer show + - if: "matrix.composer-dependencies == 'lowest'" + name: "Install lowest dependencies with composer" + run: | + composer update --no-ansi --no-interaction --no-progress --with-dependencies --prefer-lowest + composer show + - if: "matrix.composer-dependencies == 'highest'" + name: "Install highest dependencies with composer" + run: | + composer update --no-ansi --no-interaction --no-progress --with-dependencies + composer show + - name: "Start MySQL" + run: "sudo /etc/init.d/mysql start" + - name: "Run functional tests" + run: | + export typo3DatabaseName="typo3"; + export typo3DatabaseHost="127.0.0.1"; + export typo3DatabaseUsername="root"; + export typo3DatabasePassword="root"; + composer ci:tests:functional + strategy: + fail-fast: false + matrix: + composer-dependencies: + - highest + - lowest + php-version: + - 7.2 + - 7.3 + - 7.4 + typo3-version: + - ^9.5 + - ^10.4 diff --git a/Documentation/Index.rst b/Documentation/Index.rst index 75dcb38..8036315 100644 --- a/Documentation/Index.rst +++ b/Documentation/Index.rst @@ -53,10 +53,11 @@ Table of Contents ================= .. toctree:: - :maxdepth: 3 + :maxdepth: 5 :titlesonly: :glob: Introduction/Index + Linters/Index Documentation/Rendering/Index Sitemap diff --git a/Documentation/Linters/GitHub/Index.rst b/Documentation/Linters/GitHub/Index.rst new file mode 100644 index 0000000..b4334dd --- /dev/null +++ b/Documentation/Linters/GitHub/Index.rst @@ -0,0 +1,22 @@ +.. include:: ../../Includes.txt + +.. _linters_github: + +======================= +Running lints in GitHub +======================= + +For GitHub, we prepared two ways of running lints. First one relies on executing +composer scripts, and second is using exported, prepared GitHub Actions in your +workflow. + +Composer scripts +================ +You can run your lints using composer scripts. An example workflow is defined in +`ci-composer-scripts.yml`. + +Ready to use GitHub Actions +=========================== +You can use prepared GitHub Actions. All of ready to use GitHub Actions are in +`TYPO3 Continuous Integration organisation `_ +An example workflow is defined in `ci.yml`. diff --git a/Documentation/Linters/GitLab/Index.rst b/Documentation/Linters/GitLab/Index.rst new file mode 100644 index 0000000..1c5f6fb --- /dev/null +++ b/Documentation/Linters/GitLab/Index.rst @@ -0,0 +1,13 @@ +.. include:: ../../Includes.txt + +.. _linters_gitlab: + +======================= +Running lints in GitLab +======================= +In GitLab CI you should use composer scripts. + +Composer scripts +================ +You can run your lints using composer scripts. An example workflow is defined in +`.gitlab-ci.yml`. diff --git a/Documentation/Linters/Index.rst b/Documentation/Linters/Index.rst new file mode 100644 index 0000000..f721b8f --- /dev/null +++ b/Documentation/Linters/Index.rst @@ -0,0 +1,18 @@ +.. include:: ../Includes.txt + +.. _linters: + +======================= +Linters +======================= + +.. only:: html + + This chapter describes how to use linters in CI. + +.. toctree:: + :maxdepth: 5 + :titlesonly: + + GitHub/Index + GitLab/Index diff --git a/README.md b/README.md index c21993d..6bb8fcf 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ ddev composer ci:ts:lint ## Running tests locally via DDEV -###Unit tests +### Unit tests To run unit tests, type: @@ -147,6 +147,20 @@ To run unit tests, type: composer ci:tests:unit ``` +## Running lints in CI +### GitHub +For GitHub, we prepared two ways of running lints: +1. relies on executing composer scripts +2. using exported, prepared GitHub Actions in your workflow. +#### Composer scripts +You can run your lints using composer scripts. An example workflow is defined in +`ci-composer-scripts.yml`. +#### Ready to use GitHub Actions +You can use prepared GitHub Actions. All of ready to use GitHub Actions are in +[TYPO3 Continuous Integration organisation](https://github.com/TYPO3-Continuous-Integration). +An example workflow is defined in `ci.yml` +### GitLab +For GitLab, please use the pipeline that is defined in `.gitlab-ci.yml`. ## Security Libraries and extensions do not need the security check as they should not have