legendary-doc-site/.gitlab-ci.yml

264 lines
6.3 KiB
YAML
Raw Normal View History

2020-12-19 22:45:02 +00:00
stages:
- test
- deploy_tags
2020-12-19 22:45:02 +00:00
- deploy
2020-07-03 15:34:19 +00:00
variables:
POSTGRES_PASSWORD: "postgres"
POSTGRES_USER: "postgres"
2020-07-03 15:34:19 +00:00
DATABASE_URL: "postgres"
MIX_ENV: "test"
DOCKER_TLS_CERTDIR: "/certs"
2020-12-19 18:51:02 +00:00
DOCKER_HOST: tcp://docker:2376
2021-03-26 22:31:54 +00:00
# fetch & clean the repo rather than completely cloning (faster)
GIT_STRATEGY: fetch
include:
- .gitlab/ci/.cypress.yml
2021-03-26 22:31:54 +00:00
# Test stage. Runs various tests and speculatively builds docker image in
# parallel, in case the build passes.
2021-06-10 21:06:38 +00:00
.test_template: &test_template
2020-12-19 22:45:02 +00:00
stage: test
2021-04-24 16:20:17 +00:00
cache:
2021-06-18 22:08:54 +00:00
key: $CI_JOB_NAME
2021-04-24 16:20:17 +00:00
paths:
- _build/
- deps/
services:
- name: postgres:12
2021-08-05 03:10:32 +00:00
script:
- apk add git
- script/cibuild
2021-07-22 20:39:17 +00:00
test_1.10.4:
2021-06-10 21:06:38 +00:00
<<: *test_template
image: "elixir:1.10.4-alpine"
test_1.11.4:
<<: *test_template
image: "elixir:1.11.4-alpine"
2021-07-22 20:39:17 +00:00
test:
2021-06-10 21:06:38 +00:00
<<: *test_template
image: "elixir:1.12.1-alpine"
2021-07-22 20:39:17 +00:00
script:
2021-08-05 03:10:32 +00:00
- apk add git
- script/cibuild covered
2021-07-22 20:39:17 +00:00
artifacts:
2021-07-23 16:10:53 +00:00
paths:
- cover/excoveralls.json
2021-06-10 21:06:38 +00:00
2021-07-20 21:09:22 +00:00
credo:
stage: test
image: "elixir:1.12.1-alpine"
cache:
key: "test_1.12.1"
paths:
- _build/
- deps/
script:
2021-08-05 03:10:32 +00:00
- apk add git
- mix local.hex --force
- mix local.rebar --force
- mix deps.get
- mix deps.compile
2021-07-20 21:34:29 +00:00
- mix credo --all
2021-07-20 21:09:22 +00:00
2021-07-20 22:42:40 +00:00
stylelint:
stage: test
image: "node:16"
script:
- cd apps/app/assets/
- npm install
2021-07-20 22:42:40 +00:00
- npx stylelint **/*.css
prettier:
stage: test
image: "node:16"
script:
- cd apps/app/assets/
- npm install
2021-07-20 22:42:40 +00:00
- npx prettier --check **/*.js
build_image_for_commit:
stage: test
2021-03-26 22:31:54 +00:00
image: "docker:20.10"
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: on_success
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- Dockerfile
when: on_success
services:
2021-03-26 22:31:54 +00:00
- name: docker:20.10-dind
2021-06-10 21:06:38 +00:00
before_script:
- apk add git
- script/ci-docker-prebuild
script:
2021-06-10 21:06:38 +00:00
- script/ci-docker-build
report_coverage:
stage: deploy_tags
needs: ['test']
image: "elixir:1.12.1-alpine"
script:
- mix local.hex --force
- script/coverage-json-to-metrics
- script/coverage-json-to-cobertura
artifacts:
reports:
metrics: metrics.txt
cobertura: cover/cobertura.xml
2021-03-26 22:31:54 +00:00
# If tests pass, tag the commit and update package versions
deploy_to_tags:
stage: deploy_tags
needs:
- test
- test_1.10.4
- test_1.11.4
- build_image_for_commit
- cypress
- credo
- prettier
- stylelint
image: "node:16"
only:
- master
2021-03-26 22:31:54 +00:00
cache:
key:
files:
- package-lock.json
- package.json
2021-03-26 22:31:54 +00:00
paths:
- node_modules/
script:
- export GIT_AUTHOR_NAME=$GITLAB_USER_NAME
- export GIT_AUTHOR_EMAIL=$GITLAB_USER_EMAIL
- export GIT_COMMITTER_NAME=$GITLAB_USER_NAME
- export GIT_COMMITTER_EMAIL=$GITLAB_USER_EMAIL
- export GIT_BRANCH=$CI_COMMIT_REF_NAME
- git config user.email $GITLAB_USER_EMAIL
- git config user.name $GITLAB_USER_NAME
- npm install --no-save
2021-06-19 02:36:35 +00:00
- npx semantic-release --repository-url=$CI_REPOSITORY_URL
- script/generate-build-version
artifacts:
reports:
dotenv: build.env
2021-03-26 22:31:54 +00:00
# If the tests passed, we take the image for this SHA and tag it with the version
# and latest, so we can signal that it is ready for prod
deploy_commit_image_to_tag:
stage: deploy
needs:
- build_image_for_commit
- job: deploy_to_tags
artifacts: true
only:
- master
image: "docker:19.03.12"
services:
- name: docker:19.03.12-dind
2021-03-26 22:31:54 +00:00
variables:
GIT_STRATEGY: none # this job does not need the project files, only docker
2021-06-10 21:06:38 +00:00
parallel:
matrix:
- IMAGE_TYPE: ["", "-elixir-builder", "-asset-builder"]
script:
- echo "BUILD_VERSION is ${BUILD_VERSION}"
- docker login "https://${CI_REGISTRY}" -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
2020-12-22 20:36:13 +00:00
# Run the docker pull, but retry if it doesn't work at first because layers may be
# still be loading to storage
2021-06-10 21:06:38 +00:00
- for i in 1 2 3 4 5; do docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA$IMAGE_TYPE && break || sleep 15; done
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA$IMAGE_TYPE $CI_REGISTRY_IMAGE:$BUILD_VERSION$IMAGE_TYPE
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA$IMAGE_TYPE $CI_REGISTRY_IMAGE:latest$IMAGE_TYPE
- docker push $CI_REGISTRY_IMAGE:$BUILD_VERSION$IMAGE_TYPE
- docker push $CI_REGISTRY_IMAGE:latest$IMAGE_TYPE
2021-06-23 14:52:43 +00:00
2021-06-23 14:59:19 +00:00
.dependabot_gitlab: &dependabot_gitlab
2021-06-23 14:52:43 +00:00
image:
name: docker.io/andrcuns/dependabot-gitlab:0.9.7
2021-06-23 14:52:43 +00:00
entrypoint: [""]
variables:
GIT_STRATEGY: none
RAILS_ENV: production
SETTINGS__STANDALONE: "true"
SETTINGS__GITLAB_URL: $CI_SERVER_URL
SETTINGS__GITLAB_ACCESS_TOKEN: $GITLAB_TOKEN
before_script:
- cd /home/dependabot/app
script:
- bundle exec rake "dependabot:update[$CI_PROJECT_PATH,$PACKAGE_MANAGER,$DIRECTORY]"
2021-06-23 21:59:34 +00:00
only:
- schedules
2021-06-23 14:52:43 +00:00
npm-release-tools:
extends: .dependabot_gitlab
variables:
DIRECTORY: "/"
PACKAGE_MANAGER: npm
2021-06-23 21:59:34 +00:00
only:
variables:
- $PACKAGE_MANAGER_SET =~ /(\bnpm|yarn\b)/
npm-assets:
extends: .dependabot_gitlab
variables:
DIRECTORY: "/apps/app/assets"
PACKAGE_MANAGER: npm
2021-06-23 21:59:34 +00:00
only:
variables:
- $PACKAGE_MANAGER_SET =~ /(\bnpm|yarn\b)/
2021-06-23 14:52:43 +00:00
mix-admin:
timeout: 3 hours 30 minutes # hopefully temporary hack because hex runs slowly in docker right now
extends: .dependabot_gitlab
variables:
DIRECTORY: "/apps/admin"
PACKAGE_MANAGER: mix
2021-06-23 21:59:34 +00:00
only:
variables:
- $PACKAGE_MANAGER_SET =~ /\bmix\b/
mix-app:
timeout: 3 hours 30 minutes # hopefully temporary hack because hex runs slowly in docker right now
extends: .dependabot_gitlab
variables:
DIRECTORY: "/apps/app"
PACKAGE_MANAGER: mix
2021-06-23 21:59:34 +00:00
only:
variables:
- $PACKAGE_MANAGER_SET =~ /\bmix\b/
mix-core:
timeout: 3 hours 30 minutes # hopefully temporary hack because hex runs slowly in docker right now
extends: .dependabot_gitlab
variables:
DIRECTORY: "/apps/core"
PACKAGE_MANAGER: mix
2021-06-23 21:59:34 +00:00
only:
variables:
- $PACKAGE_MANAGER_SET =~ /\bmix\b/
mix-content:
timeout: 3 hours 30 minutes # hopefully temporary hack because hex runs slowly in docker right now
extends: .dependabot_gitlab
variables:
DIRECTORY: "/apps/content"
PACKAGE_MANAGER: mix
2021-06-23 21:59:34 +00:00
only:
variables:
- $PACKAGE_MANAGER_SET =~ /\bmix\b/
2021-06-23 14:52:43 +00:00
docker:
extends: .dependabot_gitlab
variables:
DIRECTORY: "/"
PACKAGE_MANAGER: docker
2021-06-23 21:59:34 +00:00
only:
variables:
- $PACKAGE_MANAGER_SET =~ /\bdocker\b/