stages: - build - test - prepare - deploy image: name: docker/compose:latest variables: # this variable enables caching withing docker-in-docker # https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-workflow-with-docker-executor MOUNT_POINT: /builds/$CI_PROJECT_PATH/vendor # bundler-specific BUNDLE_JOBS: 4 BUNDLE_PATH: vendor .test_settings: &test_settings variables: BUNDLE_WITHOUT: website:assorted stage: test services: - docker:dind artifacts: paths: - coverage/ .jit_matrix: &jit_matrix parallel: matrix: - RUBYOPT: ["", "--jit --jit-warnings --jit-wait"] .yjit_matrix: &yjit_matrix parallel: matrix: - RUBYOPT: ["", "--jit --jit-warnings --jit-wait", "--yjit"] # Cache gems in between builds cache: key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG" paths: - vendor test jruby: <<: *test_settings script: ./spec.sh jruby 9.0.0.0 allow_failure: true test ruby 2/1: <<: *test_settings script: ./spec.sh ruby 2.1 test ruby 2/2: <<: *test_settings only: - master script: ./spec.sh ruby 2.2 test ruby 2/3: <<: *test_settings script: ./spec.sh ruby 2.3 test ruby 2/4: <<: *test_settings only: - master script: ./spec.sh ruby 2.4 test ruby 2/5: <<: *test_settings only: - master script: ./spec.sh ruby 2.5 test ruby 2/6: <<: *test_settings <<: *jit_matrix only: - master script: ./spec.sh ruby 2.6 test ruby 2/7: <<: *test_settings <<: *jit_matrix script: ./spec.sh ruby 2.7 test ruby 3/0: <<: *test_settings <<: *jit_matrix script: ./spec.sh ruby 3.0 test ruby 3/1: <<: *test_settings <<: *yjit_matrix script: ./spec.sh ruby 3.1 test truffleruby: <<: *test_settings script: ./spec.sh truffleruby latest allow_failure: true jekyll: stage: test image: "ruby:3.1" variables: JEKYLL_ENV: production BUNDLE_WITHOUT: test:coverage:assorted script: - bundle install --quiet - bundle exec rake prepare_website - mv rdoc/ www - mv wiki/ www - bundle exec opal -c www/scripts/curl_to_ruby.js.rb > www/scripts/curl_to_ruby.js - bundle exec jekyll build -s www -d public artifacts: paths: - public/ only: - master - blog coverage: coverage: '/\(\d+.\d+\%\) covered/' stage: prepare variables: BUNDLE_WITHOUT: test:website:assorted image: "ruby:3.1" script: - gem install simplecov --no-doc # this is a workaround, because simplecov doesn't support relative paths. # # https://github.com/simplecov-ruby/simplecov/issues/887 # # this is necessary in our case, because coverage files are generated inside # the custom docker container, which runs in /home, and the absolute paths aren't # gonna match the paths where the files are, once we merge them. Therefore, # all of those have to be rewritten before the merge happens. # - find coverage -name "*resultset.json" -exec sed -i 's?/home?'`pwd`'?' {} \; - rake coverage:report artifacts: paths: - "coverage/" pages: stage: deploy needs: - coverage - jekyll script: - "if [ -d coverage ] ; then mv coverage public ; fi" artifacts: paths: - public expire_in: 30 days only: - master - blog prepare_release: stage: prepare rules: - if: $CI_COMMIT_TAG when: never script: - echo "EXTRA_DESCRIPTION=$(cat doc/release_notes/${${CI_COMMIT_TAG:1}//./_}.md)" >> variables.env - echo "TAG=v$(cat CI_COMMIT_TAG)" >> variables.env artifacts: reports: dotenv: variables.env release: stage: deploy image: registry.gitlab.com/gitlab-org/release-cli:latest needs: - job: prepare_release artifacts: true rules: - if: $CI_COMMIT_TAG when: never script: - echo "running release_job for $TAG" release: name: 'Release $TAG' description: '$EXTRA_DESCRIPTION' tag_name: '$TAG' ref: '$CI_COMMIT_SHA'