diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000..562eb776d --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,94 @@ +stages: + - lint + - build + +.build-master: + image: + name: ${CI_DOCKER_IMAGE} + stage: build + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + 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} + +# .build-branch: +# image: +# name: ${CI_KANIKO_IMAGE} +# entrypoint: [""] # kaniko doesn't have /bin/sh +# stage: build +# rules: +# - if: $CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH +# script: +# - /kaniko/executor +# --context "${BUILD_CONTEXT}" +# --dockerfile "${DOCKER_DIR}/Dockerfile" +# --destination "${CI_REGISTRY}/cthulhoo/${NAME}:${CI_COMMIT_BRANCH}-latest" +# --destination "${CI_REGISTRY}/cthulhoo/${NAME}:${CI_COMMIT_BRANCH}-${CI_COMMIT_SHORT_SHA}" +# --no-push + +phpunit: + image: + name: ${CI_DOCKER_IMAGE} + stage: lint + rules: + - if: $CI_COMMIT_BRANCH + changes: + - '**/*.php' + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + script: + - php81 ./vendor/bin/phpunit + +eslint: + image: + name: ${CI_DOCKER_IMAGE} + stage: lint + rules: + - if: $CI_COMMIT_BRANCH + changes: + - '**/*.js' + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + script: + - npm install + - npx eslint js plugins + +phpstan: + image: + name: ${CI_DOCKER_IMAGE} + stage: lint + rules: + - if: $CI_COMMIT_BRANCH + changes: + - '**/*.php' + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + 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 +