image: docker.io/alpine stages: - test - build .yarn-template: image: docker.io/node before_script: - yarn install cache: paths: - node_modules test: extends: .yarn-template stage: test script: - yarn test build: extends: .yarn-template stage: build script: - yarn build artifacts: paths: - target .docker-template: image: docker.io/docker stage: build services: - docker:dind before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY docker-release: extends: .docker-template rules: - if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/' script: - docker build --pull -t "${CI_REGISTRY_IMAGE}:latest" -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" . - docker push "${CI_REGISTRY_IMAGE}:latest" - docker push "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" docker-tags: extends: .docker-template rules: - if: '$CI_COMMIT_TAG && $CI_COMMIT_TAG !~ /^v\d+\.\d+\.\d+$/' script: - docker build --pull -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" . - docker push "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" docker-branches: extends: .docker-template rules: - if: $CI_COMMIT_BRANCH script: - docker build --pull -t "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}" . - docker push "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}"