stages: - lint - build - push - test - publish variables: ESLINT_PATHS: js plugins REGISTRY_PROJECT: cthulhoo IMAGE_TAR_FPM: image-fpm.tar IMAGE_TAR_WEB: image-web.tar include: - project: 'ci/ci-templates' ref: master file: .ci-build-docker-kaniko.yml - project: 'ci/ci-templates' ref: master file: .ci-registry-push.yml - project: 'ci/ci-templates' ref: master file: .ci-lint-common.yml - project: 'ci/ci-templates' ref: master file: .ci-update-helm-imagetag.yml phpunit: extends: .phpunit variables: PHPUNIT_ARGS: --exclude integration --coverage-filter classes --coverage-filter include eslint: extends: .eslint phpstan: extends: .phpstan ttrss-fpm-pgsql-static:build: extends: .build-docker-kaniko-no-push variables: DOCKERFILE: ${CI_PROJECT_DIR}/.docker/app/Dockerfile IMAGE_TAR: ${IMAGE_TAR_FPM} ttrss-fpm-pgsql-static:push-commit-only-gitlab: extends: .crane-image-registry-push-commit-only-gitlab variables: IMAGE_TAR: ${IMAGE_TAR_FPM} needs: - job: ttrss-fpm-pgsql-static:build ttrss-web-nginx:build: extends: .build-docker-kaniko-no-push variables: DOCKERFILE: ${CI_PROJECT_DIR}/.docker/web-nginx/Dockerfile IMAGE_TAR: ${IMAGE_TAR_WEB} ttrss-web-nginx:push-commit-only-gitlab: extends: .crane-image-registry-push-commit-only-gitlab variables: IMAGE_TAR: ${IMAGE_TAR_WEB} needs: - job: ttrss-web-nginx:build phpdoc:build: image: ${PHP_IMAGE} stage: publish rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH script: - php84 /phpDocumentor.phar -d classes -d include -t phpdoc --visibility=public artifacts: paths: - phpdoc phpdoc:publish: extends: .build-docker-kaniko stage: publish needs: - job: phpdoc:build rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $REGISTRY_USER != null && $REGISTRY_PASSWORD != null variables: DOCKERFILE: ${CI_PROJECT_DIR}/.docker/phpdoc/Dockerfile NAME: ttrss-phpdoc VERSION: latest phpunit-integration: image: ${PHP_IMAGE} variables: POSTGRES_DB: postgres POSTGRES_USER: postgres POSTGRES_PASSWORD: password TTRSS_DB_HOST: db TTRSS_DB_USER: ${POSTGRES_USER} TTRSS_DB_NAME: ${POSTGRES_DB} TTRSS_DB_PASS: ${POSTGRES_PASSWORD} FF_NETWORK_PER_BUILD: "true" APP_WEB_ROOT: /builds/shared-root APP_INSTALL_BASE_DIR: ${APP_WEB_ROOT} APP_FASTCGI_PASS: app:9000 # skip resolver AUTO_CREATE_USER: test AUTO_CREATE_USER_PASS: 'test' AUTO_CREATE_USER_ACCESS_LEVEL: '10' AUTO_CREATE_USER_ENABLE_API: 'true' APP_URL: http://web-nginx/tt-rss API_URL: ${APP_URL}/api/ HEALTHCHECK_URL: ${APP_URL}/public.php?op=healthcheck services: - &svc_db name: registry.fakecake.org/docker.io/postgres:15-alpine alias: db - &svc_app name: ${CI_REGISTRY}/${CI_PROJECT_PATH}/ttrss-fpm-pgsql-static:${CI_COMMIT_SHORT_SHA} alias: app - &svc_web name: ${CI_REGISTRY}/${CI_PROJECT_PATH}/ttrss-web-nginx:${CI_COMMIT_SHORT_SHA} alias: web-nginx rules: - if: $CI_COMMIT_BRANCH needs: - job: ttrss-fpm-pgsql-static:push-commit-only-gitlab - job: ttrss-web-nginx:push-commit-only-gitlab before_script: # wait for everything to start - | for a in `seq 1 15`; do curl -fs ${HEALTHCHECK_URL} && break sleep 5 done script: - php84 vendor/bin/phpunit --group integration --do-not-cache-result --log-junit phpunit-report.xml --coverage-cobertura phpunit-coverage.xml --coverage-text --colors=never artifacts: when: always reports: junit: phpunit-report.xml coverage_report: coverage_format: cobertura path: phpunit-coverage.xml coverage: '/^\s*Lines:\s*\d+.\d+\%/' phpunit-integration:root-location: variables: APP_WEB_ROOT: /builds/shared-root/tt-rss APP_INSTALL_BASE_DIR: /builds/shared-root APP_BASE: "" APP_URL: http://web-nginx extends: phpunit-integration selenium: extends: phpunit-integration image: ${SELENIUM_IMAGE} variables: SELENIUM_GRID_ENDPOINT: http://selenium:4444/wd/hub services: - *svc_db - *svc_app - *svc_web - name: registry.fakecake.org/docker.io/selenium/standalone-chrome:4.32.0-20250515 alias: selenium script: - | for i in `seq 1 10`; do echo attempt $i... python3 tests/integration/selenium_test.py && break sleep 10 done artifacts: when: always reports: junit: selenium-report.xml ttrss-fpm-pgsql-static:publish: stage: publish extends: .crane-image-registry-push-master variables: IMAGE_TAR: ${IMAGE_TAR_FPM} needs: - job: ttrss-fpm-pgsql-static:build - job: phpunit-integration - job: selenium ttrss-fpm-pgsql-static:publish-docker-hub: stage: publish extends: .crane-image-registry-push-master-docker-hub variables: IMAGE_TAR: ${IMAGE_TAR_FPM} needs: - job: ttrss-fpm-pgsql-static:build - job: phpunit-integration - job: selenium ttrss-fpm-pgsql-static:publish-gitlab: stage: publish extends: .crane-image-registry-push-master-gitlab variables: IMAGE_TAR: ${IMAGE_TAR_FPM} needs: - job: ttrss-fpm-pgsql-static:build - job: phpunit-integration - job: selenium ttrss-web-nginx:publish: stage: publish extends: .crane-image-registry-push-master variables: IMAGE_TAR: ${IMAGE_TAR_WEB} needs: - job: ttrss-web-nginx:build - job: phpunit-integration - job: selenium ttrss-web-nginx:publish-docker-hub: stage: publish extends: .crane-image-registry-push-master-docker-hub variables: IMAGE_TAR: ${IMAGE_TAR_WEB} needs: - job: ttrss-web-nginx:build - job: phpunit-integration - job: selenium ttrss-web-nginx:publish-gitlab: stage: publish extends: .crane-image-registry-push-master-gitlab variables: IMAGE_TAR: ${IMAGE_TAR_WEB} needs: - job: ttrss-web-nginx:build - job: phpunit-integration - job: selenium update-demo: stage: publish extends: .update-helm-imagetag variables: CHART_REPO: gitlab.fakecake.org/git/helm-charts/tt-rss.git CHART_VALUES: values-demo.yaml ACCESS_TOKEN: ${DEMO_HELM_TOKEN} rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $DEMO_HELM_TOKEN != null update-prod: stage: publish extends: .update-helm-imagetag variables: CHART_REPO: gitlab.fakecake.org/git/helm-charts/tt-rss-prod.git CHART_VALUES: values-prod.yaml ACCESS_TOKEN: ${PROD_HELM_TOKEN} rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $PROD_HELM_TOKEN != null # https://about.gitlab.com/blog/how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci/ weblate-integration-auto-mr: image: ${INFRA_IMAGE} stage: publish rules: - if: $CI_COMMIT_BRANCH == "weblate-integration" && $AUTO_MR_TOKEN != null script: - HOST=${CI_PROJECT_URL} CI_PROJECT_ID=${CI_PROJECT_ID} CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} GITLAB_USER_ID=${GITLAB_USER_ID} PRIVATE_TOKEN=${AUTO_MR_TOKEN} ./utils/autoMergeRequest.sh