httpx/.gitlab-ci.yml
2022-03-29 12:57:50 +01:00

191 lines
3.9 KiB
YAML

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'