Skip to content
Snippets Groups Projects

Draft: Ci opt

Open Jan-Hendrik Willms requested to merge ci-opt into main
+ 88
41
@@ -33,18 +33,18 @@ stages:
- release
.scripts:
mkdir-caches: &mkdir-caches
mkdir-caches:
- mkdir -p $CACHE_DIR
mkdir-reports: &mkdir-reports
mkdir-reports:
- mkdir -p $REPORT_DIR
install-composer: &install-composer
install-composer:
- make composer-dev
configure-studip: &configure-studip
- *install-composer
configure-studip:
- !reference [.scripts, install-composer]
- cp docker/studip/config_local.php config/config_local.inc.php
- cp config/config.inc.php.dist config/config.inc.php
initialize-studip-database: &initialize-studip-database
- *configure-studip
initialize-studip-database:
- !reference [.scripts, configure-studip]
- chmod +x .gitlab/scripts/install_db.sh
- .gitlab/scripts/install_db.sh
- cli/studip migrate
@@ -57,21 +57,40 @@ stages:
paths:
- composer/
policy: pull
npm: &npm-cache
npm:
key:
files:
- package-lock.json
paths:
- .npm
.services:
mariadb:
- name: mariadb
command: [ "--sql_mode=","--character-set-client=utf8","--character-set-server=utf8","--collation-server=utf8_unicode_ci" ]
.definitions:
mariadb-service: &mariadb-service
- name: mariadb
command: [ "--sql_mode=","--character-set-client=utf8","--character-set-server=utf8","--collation-server=utf8_unicode_ci"]
php-changed:
- changes:
- "**/*.php"
- composer.json
- composer.lock
css-changed:
- changes:
- "resources/assets/stylesheets/**/*"
- "resources/vue/**/*"
- package-lock.json
js-changed:
- changes:
- "resources/assets/javascripts/**/*"
- "resources/vue/**/*"
- package-lock.json
build-composer:
stage: build
needs: []
rules:
- !reference [.definitions, php-changed]
interruptible: true
variables:
COMPOSER_CACHE: $CACHE_DIR/composer-cache
@@ -80,7 +99,7 @@ build-composer:
script:
- composer install
cache:
- *composer-cache
- !reference [.caches, composer]
- key: composer-package-cache
paths:
- $COMPOSER_CACHE
@@ -89,20 +108,22 @@ build-composer:
lint-php:
stage: checks
needs: [build-composer]
rules:
- !reference [.definitions, php-changed]
variables:
CACHE_LOCATION: $CACHE_DIR/phplint-cache
PHPLINT_JSON_REPORT: $REPORT_DIR/phplint-report.json
PHPLINT_CODE_QUALITY_REPORT: $REPORT_DIR/phplint-codequality.json
interruptible: true
cache:
- *composer-cache
- !reference [.caches, composer]
- key: "$CI_JOB_NAME_SLUG:$CI_COMMIT_REF_SLUG"
paths:
- $CACHE_LOCATION
before_script:
- *mkdir-caches
- *mkdir-reports
- *install-composer
- !reference [.scripts, mkdir-caches]
- !reference [.scripts, mkdir-reports]
- !reference [.scripts, install-composer]
script:
- COMPOSER_MEMORY_LIMIT=-1
composer exec phplint
@@ -118,6 +139,8 @@ lint-php:
lint-php-8.3:
image: studip/studip:tests-php8.3
stage: checks
rules:
- !reference [.definitions, php-changed]
needs: [build-composer]
variables:
CACHE_LOCATION: $CACHE_DIR/phplint-cache
@@ -125,14 +148,14 @@ lint-php-8.3:
PHPLINT_CODE_QUALITY_REPORT: $REPORT_DIR/phplint-codequality-8.3.json
interruptible: true
cache:
- *composer-cache
- !reference [.caches, composer]
- key: "$CI_JOB_NAME_SLUG:$CI_COMMIT_REF_SLUG"
paths:
- $CACHE_LOCATION
before_script:
- *mkdir-caches
- *mkdir-reports
- *install-composer
- !reference [.scripts, mkdir-caches]
- !reference [.scripts, mkdir-reports]
- !reference [.scripts, install-composer]
script:
- COMPOSER_MEMORY_LIMIT=-1
composer exec phplint
@@ -148,6 +171,8 @@ lint-php-8.3:
lint-js:
stage: checks
needs: []
rules:
- !reference [.definitions, js-changed]
image: $NODE_IMAGE
variables:
CACHE_LOCATION: $CACHE_DIR/eslint-cache
@@ -158,7 +183,7 @@ lint-js:
- $CACHE_LOCATION
interruptible: true
before_script:
- *mkdir-reports
- !reference [.scripts, mkdir-reports]
- npm install -g npm@7
- npm install
--no-save --no-audit --no-fund
@@ -177,6 +202,8 @@ lint-js:
lint-css:
stage: checks
needs: []
rules:
- !reference [.definitions, css-changed]
image: $NODE_IMAGE
variables:
CACHE_LOCATION: $CACHE_DIR/stylelint-cache
@@ -187,7 +214,7 @@ lint-css:
paths:
- $CACHE_LOCATION
before_script:
- *mkdir-reports
- !reference [.scripts, mkdir-reports]
- npm install
--no-save --no-audit --no-fund
--loglevel=error
@@ -208,19 +235,24 @@ lint-css:
phpstan:
stage: analyse
needs: [build-composer]
rules:
- changes:
- "app/controllers/**/*.php"
- "lib/**/*.php"
- "tests/**/*.php"
variables:
CACHE_LOCATION: $CACHE_DIR/phpstan
PHPSTAN_CODE_QUALITY_REPORT: $REPORT_DIR/phpstan-codequality.json
interruptible: true
cache:
- *composer-cache
- !reference [.caches, composer]
- key: "$CO_JOB_NAME_SLUG:$CI_COMMIT_REF_SLUG"
paths:
- $CACHE_LOCATION
before_script:
- *mkdir-caches
- *mkdir-reports
- *install-composer
- !reference [.scripts, mkdir-caches]
- !reference [.scripts, mkdir-reports]
- !reference [.scripts, install-composer]
- 'echo -e "includes:\n - phpstan.neon.dist\n\nparameters:\n tmpDir: $PHPSTAN_CACHE_PATH" > phpstan.neon'
script:
- php
@@ -238,6 +270,8 @@ phpstan:
test-unit:
stage: test
needs: [lint-php]
rules:
- !reference [.definitions, php-changed]
variables:
PHPUNIT_XML_REPORT: $REPORT_DIR/phpunit-report.xml
cache:
@@ -246,8 +280,8 @@ test-unit:
allow_failure: false
interruptible: true
before_script:
- *mkdir-reports
- *configure-studip
- !reference [.scripts, mkdir-reports]
- !reference [.scripts, configure-studip]
script:
- 'composer/bin/codecept
run unit
@@ -262,13 +296,16 @@ test-unit:
test-jest:
stage: test
needs: [lint-js]
rules:
- !reference [.definitions, js-changed]
image: $NODE_IMAGE
variables:
JS_TEST_REPORT: $REPORT_DIR/jest.xml
cache: *npm-cache
cache:
- !reference [.caches, npm]
interruptible: true
before_script:
- *mkdir-reports
- !reference [.scripts, mkdir-reports]
- npm install
script:
- JEST_JUNIT_OUTPUT_FILE="$JS_TEST_REPORT" npx jest tests/jest/ --ci --reporters=default --reporters=jest-junit
@@ -279,6 +316,8 @@ test-jest:
test-functional:
stage: test
needs: [lint-php]
rules:
- !reference [.definitions, php-changed]
variables:
FUNCTIONAL_XML_REPORT: $REPORT_DIR/functional-report.xml
FUNCTIONAL_CODE_QUALITY_REPORT: $REPORT_DIR/functional-codequality.json
@@ -286,12 +325,12 @@ test-functional:
<<: *composer-cache
policy: pull
services:
- *mariadb-service
- !reference [.services, mariadb]
allow_failure: false
interruptible: true
before_script:
- *mkdir-reports
- *initialize-studip-database
- !reference [.scripts, mkdir-reports]
- !reference [.scripts, initialize-studip-database]
script:
- 'composer/bin/codecept
run functional
@@ -306,17 +345,19 @@ test-functional:
test-jsonapi:
stage: test
needs: [lint-php]
rules:
- !reference [.definitions, php-changed]
cache:
<<: *composer-cache
policy: pull
services:
- *mariadb-service
- !reference [.services, mariadb]
variables:
JSONAPI_XML_REPORT: $REPORT_DIR/jsonapi-report.xml
interruptible: true
before_script:
- *mkdir-reports
- *initialize-studip-database
- !reference [.scripts, mkdir-reports]
- !reference [.scripts, initialize-studip-database]
script:
- 'composer/bin/codecept
run jsonapi
@@ -330,9 +371,13 @@ test-jsonapi:
test-assets:
stage: test
rules:
- !reference [.definitions, css-changed]
- !reference [.definitions, js-changed]
needs: []
image: $NODE_IMAGE
cache: *npm-cache
cache:
- !reference [.caches, npm]
interruptible: true
before_script:
- npm install
@@ -351,9 +396,10 @@ test-e2e:
E2E_REPORT: $REPORT_DIR/e2e.xml
interruptible: true
when: manual
allow_failure: true
cache:
- *composer-cache
- *npm-cache
- !reference [.caches, composer]
- !reference [.caches, npm]
before_script:
- mkdir ./bin
- apt-get update
@@ -372,8 +418,8 @@ test-e2e:
- php composer-setup.php --install-dir=./bin --filename=composer
- export PATH="./bin:$PATH"
- php -r "unlink('composer-setup.php');"
- *mkdir-reports
- *initialize-studip-database
- !reference [.scripts, mkdir-reports]
- !reference [.scripts, initialize-studip-database]
- ./cli/studip config:set SHOW_TERMS_ON_FIRST_LOGIN 0
- npm install playwright
- npm ci
@@ -417,6 +463,7 @@ build_image:
entrypoint: [""]
stage: build
when: manual
allow_failure: true
interruptible: true
variables:
IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
Loading