stages: - lint - build .build-master: image: name: ${CI_DOCKER_IMAGE} stage: build rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "web" changes: - '**/*.php' - '**/*.js' - '.docker/**/*' - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual before_script: - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} - docker login -u ${DOCKER_HUB_USER} -p ${DOCKER_HUB_TOKEN} - docker run --privileged --rm registry.fakecake.org/docker.io/tonistiigi/binfmt --install all - docker buildx create --name mp-builder --driver docker-container --bootstrap --use script: - BUILD_TIMESTAMP=$(date -d $(echo ${CI_COMMIT_TIMESTAMP} | cut -b 1-10) +%y.%m) - docker buildx build --push --platform linux/amd64,linux/arm64,linux/arm/v7 --tag ${CI_REGISTRY}/cthulhoo/${CI_JOB_NAME}:${BUILD_TIMESTAMP}-${CI_COMMIT_SHORT_SHA} --tag ${CI_REGISTRY}/cthulhoo/${CI_JOB_NAME}:latest --tag cthulhoo/${CI_JOB_NAME}:${BUILD_TIMESTAMP}-${CI_COMMIT_SHORT_SHA} --tag cthulhoo/${CI_JOB_NAME}:latest --build-context app-src=. --cache-from type=registry,ref=${CI_REGISTRY}/cthulhoo/${CI_JOB_NAME}:latest --cache-to type=inline ${BUILD_CONTEXT} # note: CI_REGISTRY, etc. variables are privileged # # .build-branch: # image: # name: ${CI_DOCKER_IMAGE} # stage: build # rules: # - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "web" # changes: # - '**/*.php' # - '**/*.js' # - '.docker/**/*' # - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH # when: manual # before_script: # - docker buildx create --name mp-builder --driver docker-container --bootstrap --use # - CONTAINER_NAME=$(echo ${CI_JOB_NAME} | sed 's/branch://') # script: # - docker buildx build # --push # --platform linux/amd64 # --tag ${CI_REGISTRY}/cthulhoo/$CONTAINER_NAME:${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA} # --tag ${CI_REGISTRY}/cthulhoo/$CONTAINER_NAME:${CI_COMMIT_BRANCH} # --build-context app-src=. # --cache-from type=registry,ref=${CI_REGISTRY}/cthulhoo/$CONTAINER_NAME:${CI_COMMIT_BRANCH} # --cache-to type=inline # ${BUILD_CONTEXT} phpunit: image: name: ${CI_DOCKER_IMAGE} stage: lint rules: - if: $CI_COMMIT_BRANCH && $CI_PIPELINE_SOURCE != "web" changes: - '**/*.php' - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_COMMIT_BRANCH when: manual allow_failure: true script: - php81 ./vendor/bin/phpunit eslint: image: name: ${CI_DOCKER_IMAGE} stage: lint rules: - if: $CI_COMMIT_BRANCH && $CI_PIPELINE_SOURCE != "web" changes: - '**/*.js' - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_COMMIT_BRANCH when: manual allow_failure: true script: - npm install - npx eslint js plugins phpstan: image: name: ${CI_DOCKER_IMAGE} needs: - phpunit stage: lint rules: - if: $CI_COMMIT_BRANCH && $CI_PIPELINE_SOURCE != "web" changes: - '**/*.php' - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_COMMIT_BRANCH when: manual allow_failure: true script: - php81 -d memory_limit=-1 ./vendor/bin/phpstan --memory-limit=2G ttrss-web-nginx: extends: .build-master variables: BUILD_CONTEXT: ${CI_PROJECT_DIR}/.docker/web-nginx ttrss-fpm-pgsql-static: extends: .build-master variables: BUILD_CONTEXT: ${CI_PROJECT_DIR}/.docker/app # branch:ttrss-web-nginx: # extends: .build-branch # variables: # BUILD_CONTEXT: ${CI_PROJECT_DIR}/.docker/web-nginx # branch:ttrss-fpm-pgsql-static: # extends: .build-branch # variables: # BUILD_CONTEXT: ${CI_PROJECT_DIR}/.docker/app phpdoc: image: name: ${CI_DOCKER_IMAGE} stage: build rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "web" changes: - '**/*.php' - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH when: manual script: - php81 /phpDocumentor.phar -d classes -d include -t phpdoc --visibility=public - mkdir -p ~/.ssh && cp ${PHPDOC_DEPLOY_SSH_KEY} ~/.ssh/id_ed25519 && chmod 0600 ~/.ssh/id_ed25519 - rsync -av -e 'ssh -o StrictHostKeyChecking=no' phpdoc/ ${PHPDOC_DEPLOY_HOST}:phpdoc/