image: studip/studip:tests-php7.2 variables: GIT_DEPTH: 1 MYSQL_RANDOM_ROOT_PASSWORD: "true" MYSQL_DATABASE: studip_db MYSQL_USER: studip_user MYSQL_PASSWORD: studip_password MYSQL_HOST: mariadb DEMO_DATA: "true" MAIL_TRANSPORT: debug PHPSTAN_LEVEL: 0 # Optimize caching FF_USE_FASTZIP: "true" CACHE_COMPRESSION_LEVEL: "fast" # Use faster docker driver DOCKER_DRIVER: overlay2 # Images NODE_IMAGE: node:14-slim # Directories CACHE_DIR: .caches REPORT_DIR: .reports stages: - checks - analyse - test - packaging - release - build .scripts: mkdir-caches: &mkdir-caches - mkdir -p $CACHE_DIR mkdir-reports: &mkdir-reports - mkdir -p $REPORT_DIR install-composer: &install-composer - make composer-dev configure-studip: &configure-studip - *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 - chmod +x .gitlab/scripts/install_db.sh - .gitlab/scripts/install_db.sh - cli/studip migrate .caches: php: &composer-cache key: "php-$CI_COMMIT_REF_SLUG" paths: - composer/ - $CACHE_DIR/phplint-cache - $CACHE_DIR/resultCache.php - $CACHE_DIR/cache/* - $CACHE_DIR/resultCaches/* js: &npm-cache key: "js-$CI_COMMIT_REF_SLUG" paths: - node_modules/ - $CACHE_DIR/eslint-cache - $CACHE_DIR/stylelint-cache lint-php: stage: checks needs: [] cache: *composer-cache variables: PHPLINT_JSON_REPORT: $REPORT_DIR/phplint-report.json PHPLINT_CODE_QUALITY_REPORT: $REPORT_DIR/phplint-codequality.json interruptible: true before_script: - *mkdir-caches - *mkdir-reports - *install-composer script: - php -d memory_limit=-1 composer/bin/phplint --json $PHPLINT_JSON_REPORT --cache=$CACHE_DIR/phplint-cache after_script: - ./.gitlab/scripts/convert-phplint-report $PHPLINT_JSON_REPORT > $PHPLINT_CODE_QUALITY_REPORT artifacts: reports: codequality: $PHPLINT_CODE_QUALITY_REPORT lint-js: stage: checks needs: [] image: $NODE_IMAGE variables: ESLINT_CODE_QUALITY_REPORT: $REPORT_DIR/eslint-codequality.json interruptible: true before_script: - *mkdir-reports - npm install --no-save --no-audit --no-fund --loglevel=error eslint eslint-formatter-gitlab script: - npx eslint --ext .js,.vue --format gitlab resources/assets/javascripts resources/vue artifacts: reports: codequality: $ESLINT_CODE_QUALITY_REPORT lint-css: stage: checks needs: [] image: $NODE_IMAGE variables: STYLELINT_CODE_QUALITY_REPORT: $REPORT_DIR/stylelint-codequality.json interruptible: true before_script: - *mkdir-reports - npm install --no-save --no-audit --no-fund --loglevel=error stylelint@^14.9.1 stylelint-config-standard@^26.0.0 stylelint-formatter-gitlab script: - npx stylelint --custom-formatter=node_modules/stylelint-formatter-gitlab resources/assets/stylesheets artifacts: reports: codequality: $STYLELINT_CODE_QUALITY_REPORT phpstan: stage: analyse needs: [lint-php] variables: PHPSTAN_CODE_QUALITY_REPORT: $REPORT_DIR/phpstan-codequality.json allow_failure: true interruptible: true when: manual cache: *composer-cache before_script: - *mkdir-reports - *install-composer script: - php composer/bin/phpstan analyse --memory-limit=1G --no-progress --level=$PHPSTAN_LEVEL --error-format=gitlab > $PHPSTAN_CODE_QUALITY_REPORT artifacts: reports: codequality: $PHPSTAN_CODE_QUALITY_REPORT test-unit: stage: test needs: [lint-php] variables: PHPUNIT_XML_REPORT: $REPORT_DIR/phpunit-report.xml cache: <<: *composer-cache policy: pull allow_failure: false interruptible: true before_script: - *mkdir-reports - *configure-studip script: - 'composer/bin/codecept run unit --xml=$PHPUNIT_XML_REPORT -o "paths: output: ."' after_script: - sed -i "s%$PWD/%%" $PHPUNIT_XML_REPORT artifacts: reports: junit: $PHPUNIT_XML_REPORT test-functional: stage: test needs: [lint-php] variables: FUNCTIONAL_XML_REPORT: $REPORT_DIR/functional-report.xml FUNCTIONAL_CODE_QUALITY_REPORT: $REPORT_DIR/functional-codequality.json cache: <<: *composer-cache policy: pull services: - mariadb allow_failure: false interruptible: true before_script: - *mkdir-reports - *initialize-studip-database script: - 'composer/bin/codecept run functional --xml=$FUNCTIONAL_XML_REPORT -o "paths: output: ."' after_script: - sed -i "s%$PWD/%%" $FUNCTIONAL_XML_REPORT artifacts: reports: junit: $FUNCTIONAL_XML_REPORT test-jsonapi: stage: test needs: [lint-php] cache: <<: *composer-cache policy: pull services: - mariadb variables: JSONAPI_XML_REPORT: $REPORT_DIR/jsonapi-report.xml interruptible: true before_script: - *mkdir-reports - *initialize-studip-database script: - 'composer/bin/codecept run jsonapi --xml=$JSONAPI_XML_REPORT -o "paths: output: ."' after_script: - sed -i "s%$PWD/%%" $JSONAPI_XML_REPORT artifacts: reports: junit: $JSONAPI_XML_REPORT test-assets: stage: test needs: [] image: $NODE_IMAGE cache: *npm-cache interruptible: true before_script: - npm install script: - npm run webpack-dev packaging: stage: packaging cache: [] rules: - if: $CI_COMMIT_TAG before_script: - echo GE_JOB_ID=$CI_JOB_ID >> .packaging.env - mkdir .pkg script: - echo 'Running packaging job' - make build clean-npm - zip -r9 .pkg/studip-$CI_COMMIT_TAG.zip * - tar -czf .pkg/studip-$CI_COMMIT_TAG.tar.gz * artifacts: name: 'Stud.IP-Release-$CI_COMMIT_TAG' paths: - .pkg/studip-$CI_COMMIT_TAG.zip - .pkg/studip-$CI_COMMIT_TAG.tar.gz reports: dotenv: .packaging.env expire_in: never release: stage: release image: studip/release-cli cache: [] rules: - if: $CI_COMMIT_TAG script: - echo 'Running release job' needs: - job: packaging artifacts: true release: name: "$CI_COMMIT_TAG" description: "https://gitlab.studip.de/studip/studip/-/blob/${CI_COMMIT_TAG}/ChangeLog" tag_name: "$CI_COMMIT_TAG" assets: links: - name: "studip-$CI_COMMIT_TAG.zip" url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/${GE_JOB_ID}/artifacts/.pkg/studip-$CI_COMMIT_TAG.zip" link_type: package - name: "studip-$CI_COMMIT_TAG.tar.gz" url: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/${GE_JOB_ID}/artifacts/.pkg/studip-$CI_COMMIT_TAG.tar.gz" link_type: package