summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.docker/app/Dockerfile1
-rw-r--r--.docker/app/backup.sh2
-rw-r--r--.docker/app/startup.sh6
-rw-r--r--.docker/app/updater.sh6
-rw-r--r--.gitlab-ci.yml8
-rw-r--r--.gitlab-ci.yml~245
6 files changed, 258 insertions, 10 deletions
diff --git a/.docker/app/Dockerfile b/.docker/app/Dockerfile
index 786179bd5..553f397e6 100644
--- a/.docker/app/Dockerfile
+++ b/.docker/app/Dockerfile
@@ -7,6 +7,7 @@ ARG ALPINE_MIRROR
ENV SCRIPT_ROOT=/opt/tt-rss
ENV SRC_DIR=/src/tt-rss/
+ENV APP_WEB_ROOT=/var/www/html
# Used to centralize the PHP version suffix for packages and paths
ENV PHP_SUFFIX=84
diff --git a/.docker/app/backup.sh b/.docker/app/backup.sh
index 4ecc860b9..f35a5086b 100644
--- a/.docker/app/backup.sh
+++ b/.docker/app/backup.sh
@@ -2,7 +2,7 @@
DST_DIR=/backups
KEEP_DAYS=28
-APP_ROOT=/var/www/html/tt-rss
+APP_ROOT=$APP_WEB_ROOT/tt-rss
if pg_isready -h $TTRSS_DB_HOST -U $TTRSS_DB_USER -p $TTRSS_DB_PORT; then
DST_FILE=ttrss-backup-$(date +%Y%m%d).sql.gz
diff --git a/.docker/app/startup.sh b/.docker/app/startup.sh
index cf93b7413..3085edaf7 100644
--- a/.docker/app/startup.sh
+++ b/.docker/app/startup.sh
@@ -11,18 +11,18 @@ unset HTTP_HOST
if ! id app >/dev/null 2>&1; then
addgroup -g $OWNER_GID app
- adduser -D -h /var/www/html -G app -u $OWNER_UID app
+ adduser -D -h $APP_WEB_ROOT -G app -u $OWNER_UID app
fi
update-ca-certificates || true
-DST_DIR=/var/www/html/tt-rss
+DST_DIR=$APP_WEB_ROOT/tt-rss
[ -e $DST_DIR ] && rm -f $DST_DIR/.app_is_ready
export PGPASSWORD=$TTRSS_DB_PASS
-[ ! -e /var/www/html/index.php ] && cp ${SCRIPT_ROOT}/index.php /var/www/html
+[ ! -e $APP_WEB_ROOT/index.php ] && cp ${SCRIPT_ROOT}/index.php $APP_WEB_ROOT
if [ -z $SKIP_RSYNC_ON_STARTUP ]; then
if [ ! -d $DST_DIR ]; then
diff --git a/.docker/app/updater.sh b/.docker/app/updater.sh
index c35982a44..782d52ca5 100644
--- a/.docker/app/updater.sh
+++ b/.docker/app/updater.sh
@@ -12,7 +12,7 @@ sleep 30
if ! id app; then
addgroup -g $OWNER_GID app
- adduser -D -h /var/www/html -G app -u $OWNER_UID app
+ adduser -D -h $APP_WEB_ROOT -G app -u $OWNER_UID app
fi
while ! pg_isready -h $TTRSS_DB_HOST -U $TTRSS_DB_USER -p $TTRSS_DB_PORT; do
@@ -23,11 +23,11 @@ done
sed -i.bak "s/^\(memory_limit\) = \(.*\)/\1 = ${PHP_WORKER_MEMORY_LIMIT}/" \
/etc/php${PHP_SUFFIX}/php.ini
-DST_DIR=/var/www/html/tt-rss
+DST_DIR=$APP_WEB_ROOT/tt-rss
while [ ! -s $DST_DIR/config.php -a -e $DST_DIR/.app_is_ready ]; do
echo waiting for app container...
sleep 3
done
-sudo -E -u app "${TTRSS_PHP_EXECUTABLE}" /var/www/html/tt-rss/update_daemon2.php "$@"
+sudo -E -u app "${TTRSS_PHP_EXECUTABLE}" $APP_WEB_ROOT/tt-rss/update_daemon2.php "$@"
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a54138312..1c17804e1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -118,6 +118,8 @@ phpunit-integration:
AUTO_CREATE_USER_PASS: 'test'
AUTO_CREATE_USER_ACCESS_LEVEL: '10'
AUTO_CREATE_USER_ENABLE_API: 'true'
+ API_URL: http://web-nginx/tt-rss/api/
+ HEALTHCHECK_URL: http://web-nginx/tt-rss/public.php?op=healthcheck
services:
- name: registry.fakecake.org/docker.io/postgres:15-alpine
alias: db
@@ -128,12 +130,12 @@ phpunit-integration:
rules:
- if: $CI_COMMIT_BRANCH && $REGISTRY_USER != null
script:
- - export API_URL="http://web-nginx/tt-rss/api/"
- |
for a in `seq 1 15`; do
- php83 vendor/bin/phpunit --group integration --do-not-cache-result --log-junit phpunit-report.xml --coverage-cobertura phpunit-coverage.xml --coverage-text --colors=never && exit 0
- sleep 10
+ curl -fvs ${HEALTHCHECK_URL} && break
+ sleep 5
done
+ - php83 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:
diff --git a/.gitlab-ci.yml~ b/.gitlab-ci.yml~
new file mode 100644
index 000000000..6027f9c8b
--- /dev/null
+++ b/.gitlab-ci.yml~
@@ -0,0 +1,245 @@
+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-integration-test.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-master-commit-only:
+ extends: .crane-image-registry-push-master-commit-only
+ variables:
+ IMAGE_TAR: ${IMAGE_TAR_FPM}
+ needs:
+ - job: ttrss-fpm-pgsql-static:build
+
+ttrss-fpm-pgsql-static:push-branch:
+ extends: .crane-image-registry-push-branch
+ 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-master-commit-only:
+ extends: .crane-image-registry-push-master-commit-only
+ variables:
+ IMAGE_TAR: ${IMAGE_TAR_WEB}
+ needs:
+ - job: ttrss-web-nginx:build
+
+ttrss-web-nginx:push-branch:
+ extends: .crane-image-registry-push-branch
+ 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:
+# - php83 /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
+ AUTO_CREATE_USER: test
+ AUTO_CREATE_USER_PASS: 'test'
+ AUTO_CREATE_USER_ACCESS_LEVEL: '10'
+ AUTO_CREATE_USER_ENABLE_API: 'true'
+ services:
+ - name: registry.fakecake.org/docker.io/postgres:15-alpine
+ alias: db
+ - name: registry.fakecake.org/cthulhoo/ttrss-fpm-pgsql-static:${CI_COMMIT_SHORT_SHA}
+ alias: app
+ - name: registry.fakecake.org/cthulhoo/ttrss-web-nginx:${CI_COMMIT_SHORT_SHA}
+ alias: web-nginx
+ rules:
+ - if: $CI_COMMIT_BRANCH && $REGISTRY_USER != null
+ script:
+ - export API_URL="http://web-nginx/tt-rss/api/"
+ - |
+ for a in `seq 1 15`; do
+ php83 vendor/bin/phpunit --group integration --do-not-cache-result --log-junit phpunit-report.xml --coverage-cobertura phpunit-coverage.xml --coverage-text --colors=never && exit 0
+ sleep 10
+ done
+ artifacts:
+ when: always
+ reports:
+ junit: phpunit-report.xml
+ coverage_report:
+ coverage_format: cobertura
+ path: phpunit-coverage.xml
+ coverage: '/^\s*Lines:\s*\d+.\d+\%/'
+
+# selenium:
+# image: ${SELENIUM_IMAGE}
+# variables:
+# TEST_HELM_REPO: oci://registry.fakecake.org/infra/helm-charts/tt-rss
+# SELENIUM_GRID_ENDPOINT: http://selenium-hub.selenium-grid.svc.cluster.local:4444/wd/hub
+# extends: .integration-test
+# script:
+# - export K8S_NAMESPACE=$(kubectl get pods -o=custom-columns=NS:.metadata.namespace | tail -1)
+# - |
+# for i in `seq 1 3`; do
+# echo attempt $i...
+# python3 tests/integration/selenium_test.py && break
+# sleep 3
+# done
+# needs:
+# - job: phpunit-integration
+# 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