image: ruby:2.5 stages: - images - build - test - deploy - docker-stable # # Pick the remote branch, by default master (see the Rakefile for more info) # variables: BRANCH_CE: 'master' BRANCH_EE: 'master' BRANCH_OMNIBUS: 'master' BRANCH_RUNNER: 'master' before_script: - ruby -v - bundle install --jobs 4 --path vendor ############################################### # Build the website # ############################################### .build_base: &build_base stage: build script: - rake setup_git default - nanoc compile -VV artifacts: paths: - public expire_in: 1w cache: key: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" paths: - tmp/ - vendor/ruby tags: - docker # # Compile only on master and stable branches # compile_prod: <<: *build_base variables: NANOC_ENV: 'production' only: - master - /^\d{1,2}\.\d{1,2}$/ # # Compile on all branches except master # compile_dev: <<: *build_base only: - branches except: - master - /^\d{1,2}\.\d{1,2}$/ ############################################### # Test the website # ############################################### # # Check for 404s in internal links # internal_links: stage: test script: - nanoc check internal_links allow_failure: true cache: key: "test-$CI_COMMIT_REF_NAME" paths: - vendor/ruby tags: - docker # Skip this job when it's invoked by a cross project pipeline. That will speed # up the pipeline when a docs preview is triggered. We already check for # internal links in every MR anyway. For more info: # https://docs.gitlab.com/ee/development/writing_documentation.html#previewing-the-changes-live except: - pipelines # # SCSS linting # scss_lint: stage: test script: - bundle exec scss-lint cache: key: "test-$CI_COMMIT_REF_NAME" paths: - vendor/ruby tags: - docker # Skip this job when it's invoked by a cross project pipeline. That will speed # up the pipeline when a docs preview is triggered. The triggered pipeline is # always a branch off master which should be green anyway. For more info: # https://docs.gitlab.com/ee/development/writing_documentation.html#previewing-the-changes-live except: - pipelines ############################################### # Review Apps # ############################################### # # Deploy the Review App on a dev server # review: stage: deploy variables: GIT_STRATEGY: none dependencies: - compile_dev before_script: [] cache: {} script: - rsync -av --delete public /srv/nginx/pages/$CI_COMMIT_REF_SLUG environment: name: review/$CI_COMMIT_REF_SLUG url: http://$CI_COMMIT_REF_SLUG.$APPS_DOMAIN on_stop: review_stop only: - branches@gitlab-com/gitlab-docs # Except master and stable branches except: - master - /^\d{1,2}\.\d{1,2}$/ tags: - nginx - review-apps # # Stop the Review App # review_stop: stage: deploy variables: GIT_STRATEGY: none dependencies: [] artifacts: {} before_script: [] cache: {} script: - rm -rf public /srv/nginx/pages/$CI_COMMIT_REF_SLUG when: manual environment: name: review/$CI_COMMIT_REF_SLUG action: stop only: - branches@gitlab-com/gitlab-docs # Except master and stable branches except: - master - /^\d{1,2}\.\d{1,2}$/ tags: - nginx - review-apps ############################################### # GitLab Pages (production) # ############################################### # # Deploy to production with GitLab Pages # pages: stage: deploy variables: GIT_STRATEGY: none before_script: [] cache: {} environment: name: production url: https://docs.gitlab.com script: # Symlink all README.html to index.html - for i in `find public -name README.html`; do ln -sf README.html $(dirname $i)/index.html; done artifacts: paths: - public expire_in: 1h only: - master@gitlab-com/gitlab-docs tags: - docker dependencies: - compile_prod ############################################### # Docker images builds # ############################################### .docker_build: &docker_build image: docker:latest services: - docker:dind before_script: - docker info - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY # # Except stable branches with versions like 10.4 # .except_stable: &except_stable except: - /^\d{1,2}\.\d{1,2}$/ # # Build the image containing all build dependencies # image:bootstrap: stage: images <<: *docker_build variables: IMAGE_NAME: $CI_REGISTRY_IMAGE:bootstrap script: - docker build -t $IMAGE_NAME -f dockerfiles/Dockerfile.bootstrap . - docker push $IMAGE_NAME when: manual <<: *except_stable # # Build the image that takes the website and builds it # image:builder-onbuild: stage: images <<: *docker_build variables: IMAGE_NAME: $CI_REGISTRY_IMAGE:builder-onbuild script: - docker build -t $IMAGE_NAME -f dockerfiles/Dockerfile.builder.onbuild . - docker push $IMAGE_NAME when: manual <<: *except_stable # # Build the image that copies the final HTML files in a smaller image # image:nginx-onbuild: stage: images <<: *docker_build variables: IMAGE_NAME: $CI_REGISTRY_IMAGE:nginx-onbuild script: - docker build -t $IMAGE_NAME -f dockerfiles/Dockerfile.nginx.onbuild . - docker push $IMAGE_NAME when: manual only: - web # # Build the single archive image for stable versions # image:docs-stable: stage: docker-stable <<: *docker_build variables: NANOC_ENV: 'production' IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME script: - docker build --build-arg NANOC_ENV=${NANOC_ENV} --build-arg CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} -t $IMAGE_NAME . - docker push $IMAGE_NAME # Only branches with versions like 10.4 only: - /^\d{1,2}\.\d{1,2}$/ except: - tags # # Build the multiple archives image # image:docs-archives: stage: images <<: *docker_build variables: IMAGE_NAME: $CI_REGISTRY_IMAGE:archives script: - docker build -t $IMAGE_NAME -f dockerfiles/Dockerfile.archives . - docker push $IMAGE_NAME when: manual <<: *except_stable # # Build master containing all archives and latest docs # image:docs-latest: stage: docker-stable <<: *docker_build variables: NANOC_ENV: 'production' IMAGE_NAME: $CI_REGISTRY_IMAGE:latest script: - docker build --build-arg NANOC_ENV=${NANOC_ENV} --build-arg CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} -t $IMAGE_NAME . - docker push $IMAGE_NAME only: - master allow_failure: true