image: ruby:3.0 stages: - build - test - review - accessibility - deploy .artifacts_extension: artifacts: paths: - public expire_in: 1d .cache_latest: &cache_latest cache: key: latest paths: - vendor/bundle - assets/img/jumbotrons .cache_production: &cache_production cache: key: production paths: - vendor/bundle - assets/img/jumbotrons .common_production: &production_before_script before_script: - "[[ -x \"$(command -v apt-get)\" ]] && \ apt-get update && \ apt-get install -y ffmpeg" - gem install bundler --no-document - bundle config set without 'test' - bundle install --jobs $(nproc) <<: *cache_production .common_latest: &latest_before_script before_script: - "[[ -x \"$(command -v apt-get)\" ]] && \ apt-get update && \ apt-get install -y ffmpeg" - "[[ -f \"Gemfile.lock\" ]] && rm Gemfile.lock" - bundle config set without 'test' - bundle install --jobs $(nproc) --without test "${FLAGS[@]}" - bundle update --jobs $(nproc) "${FLAGS[@]}" <<: *cache_latest .common_variables: &common_variables GIT_SUBMODULE_STRATEGY: recursive SUBPATH: "/" BUNDLE_PATH: vendor/bundle NOKOGIRI_USE_SYSTEM_LIBRARIES: "1" .builds: &builds stage: build variables: <<: *common_variables script: - "bash scripts/create_jumbotrons.sh assets/img/jumbotrons/" - "bundle exec jekyll build --future \ --config _config.yml \ -d public$SUBPATH \ --baseurl $SUBPATH" - "cp _favicons/* public/$SUBPATH" # https://docs.gitlab.com/ce/ci/yaml/#interruptible interruptible: true .builds_reviewapps: &builds_reviewapps stage: build variables: <<: *common_variables script: - "bash scripts/create_jumbotrons.sh assets/img/jumbotrons/" - "bundle exec jekyll build --future \ --config _config.yml,_config_reviewapps.yml \ -d public$SUBPATH \ --baseurl $SUBPATH" - "cp _favicons/* public/$SUBPATH" # https://docs.gitlab.com/ce/ci/yaml/#interruptible interruptible: true .tests: &tests stage: test variables: <<: *common_variables before_script: # Installing, generating and exporting locale because htmlproofer needs it. # Locale is not set in "standard" docker containers. - "[[ -x \"$(command -v apt-get)\" ]] && \ apt-get update && \ apt-get install -y locales && \ echo \"en_US UTF-8\" > /etc/locale.gen && \ locale-gen en_US.UTF-8 && \ export LANG=en_US.UTF-8 && \ export LANGUAGE=en_US:en && \ export LC_ALL=en_US.UTF-8" - gem install bundler --no-document - bundle install --jobs $(nproc) script: - "bundle exec htmlproofer \ --internal-domains localhost:4000 \ --disable-external \ --assume-extension public/" # Use yaml-lint tool to check yaml files. - "bundle exec yaml-lint _data/ _config.yml" <<: *cache_production # https://docs.gitlab.com/ce/ci/yaml/#interruptible interruptible: true # Job runs jekyll build with latest dependencies. build:latest: <<: *builds <<: *latest_before_script image: ruby:latest allow_failure: true # Job runs jekyll build latest dependencies, # puts everything in a sub-directory while specifying baseurl. build:production:subpath: <<: *builds <<: *production_before_script image: ruby:latest variables: <<: *common_variables SUBPATH: /$CI_PROJECT_NAME extends: - .artifacts_extension # Job runs jekyll build with production dependencies, # puts everything in a sub-directory as required for review apps. build:production:review-apps: <<: *builds_reviewapps <<: *production_before_script variables: <<: *common_variables SUBPATH: /review-apps/$CI_PROJECT_PATH_SLUG/$CI_COMMIT_REF_SLUG extends: - .artifacts_extension # Job runs jekyll build with current production dependencies build:production: <<: *builds <<: *production_before_script extends: - .artifacts_extension # Job runs htmlproofer basing on production build. test:htmlproofer: <<: *tests dependencies: - build:production needs: ["build:production"] # Job runs htmlproofer basing on production build with subpath. test:htmlproofer:subpath: <<: *tests dependencies: - build:production:subpath needs: ["build:production:subpath"] # Job tests external links in addition to test:htmlproofer job. test:htmlproofer:external_links: <<: *tests dependencies: - build:production needs: ["build:production"] script: - "bundle exec htmlproofer \ --internal-domains localhost:4000 \ --url-ignore '/www.openstoragenetwork.org/,/www.hzdr.de/,/indico4.twgrid.org/,/aai.helmholtz.de/,/cvs.data.kit.edu/' \ --assume-extension public/" rules: - if: '$CI_PIPELINE_SOURCE == "schedule"' tags: - internal allow_failure: true review: stage: review variables: GIT_STRATEGY: none REVIEW_APPS_PATH: review-apps/$CI_PROJECT_PATH_SLUG/$CI_COMMIT_REF_SLUG dependencies: - build:production:review-apps needs: ["build:production:review-apps"] script: - mkdir -p /var/www/html/gl-review-apps/$REVIEW_APPS_PATH - rsync -a --delete ./public/$REVIEW_APPS_PATH/. /var/www/html/gl-review-apps/$REVIEW_APPS_PATH/. environment: name: review/$CI_COMMIT_REF_NAME url: https://$APPS_DOMAIN/review-apps/$CI_PROJECT_PATH_SLUG/$CI_COMMIT_REF_SLUG on_stop: stop_review tags: - review-apps stop_review: stage: review variables: GIT_STRATEGY: none REVIEW_APPS_PATH: review-apps/$CI_PROJECT_PATH_SLUG/$CI_COMMIT_REF_SLUG script: - rm -rf public /var/www/html/gl-review-apps/$REVIEW_APPS_PATH - rmdir --ignore-fail-on-non-empty /var/www/html/gl-review-apps/review-apps/$CI_PROJECT_PATH_SLUG/ dependencies: [] when: manual environment: name: review/$CI_COMMIT_REF_NAME action: stop tags: - review-apps include: - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml' - template: 'Verify/Accessibility.gitlab-ci.yml' - local: '/.gitlab/ci/a11y.gitlab-ci.yml' pages: image: alpine:latest stage: deploy variables: GIT_STRATEGY: none script: - mv public/$CI_PROJECT_NAME/* public/. - rmdir public/$CI_PROJECT_NAME dependencies: - build:production:subpath needs: ["build:production:subpath"] artifacts: paths: - public rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH