mirror of
https://git.tt-rss.org/fox/tt-rss.git
synced 2025-08-05 13:47:25 +02:00
264 lines
6.9 KiB
YAML
264 lines
6.9 KiB
YAML
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
|