mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-04 00:00:37 -04:00
200 lines
4.3 KiB
YAML
200 lines
4.3 KiB
YAML
stages:
|
|
- build
|
|
- test
|
|
- prepare
|
|
- deploy
|
|
|
|
image:
|
|
name: docker/compose:latest
|
|
|
|
variables:
|
|
# this variable enables caching within 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: assorted
|
|
stage: test
|
|
services:
|
|
- docker:dind
|
|
before_script:
|
|
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
artifacts:
|
|
paths:
|
|
- coverage/
|
|
|
|
.yjit_matrix: &yjit_matrix
|
|
parallel:
|
|
matrix:
|
|
- RUBYOPT: ["", "--yjit"]
|
|
|
|
# Cache gems in between builds
|
|
cache:
|
|
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
|
|
paths:
|
|
- vendor
|
|
|
|
lint rubocop code:
|
|
image: "ruby:3.4"
|
|
variables:
|
|
BUNDLE_WITHOUT: test:coverage:assorted
|
|
before_script:
|
|
- bundle install
|
|
script:
|
|
- bundle exec rake rubocop
|
|
lint rubocop wiki:
|
|
image: "ruby:3.4"
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "schedule"
|
|
variables:
|
|
BUNDLE_ONLY: lint
|
|
before_script:
|
|
- git clone https://gitlab.com/os85/httpx.wiki.git
|
|
- bundle install
|
|
- |
|
|
cat > .rubocop-wiki.yml << FILE
|
|
require:
|
|
- rubocop-md
|
|
|
|
AllCops:
|
|
TargetRubyVersion: 3.4
|
|
DisabledByDefault: true
|
|
FILE
|
|
script:
|
|
- bundle exec rubocop httpx.wiki --config .rubocop-wiki.yml
|
|
|
|
test jruby:
|
|
<<: *test_settings
|
|
script:
|
|
./spec.sh jruby 9.0.0.0
|
|
allow_failure: true
|
|
test ruby 2/7:
|
|
<<: *test_settings
|
|
script:
|
|
./spec.sh ruby 2.7
|
|
test ruby 3/0:
|
|
<<: *test_settings
|
|
only:
|
|
- master
|
|
script:
|
|
./spec.sh ruby 3.0
|
|
test ruby 3/1:
|
|
<<: *test_settings
|
|
only:
|
|
- master
|
|
script:
|
|
./spec.sh ruby 3.1
|
|
test ruby 3/2:
|
|
<<: *test_settings
|
|
<<: *yjit_matrix
|
|
script:
|
|
./spec.sh ruby 3.2
|
|
test ruby 3/3:
|
|
<<: *test_settings
|
|
<<: *yjit_matrix
|
|
script:
|
|
./spec.sh ruby 3.3
|
|
test ruby 3/4:
|
|
<<: *test_settings
|
|
<<: *yjit_matrix
|
|
script:
|
|
./spec.sh ruby 3.4
|
|
test truffleruby:
|
|
<<: *test_settings
|
|
script:
|
|
./spec.sh truffleruby latest
|
|
allow_failure: true
|
|
regression tests:
|
|
image: "ruby:3.4"
|
|
variables:
|
|
BUNDLE_WITHOUT: lint:assorted
|
|
CI: 1
|
|
COVERAGE_KEY: "$RUBY_ENGINE-$RUBY_VERSION-regression-tests"
|
|
artifacts:
|
|
paths:
|
|
- coverage/
|
|
stage: test
|
|
before_script:
|
|
- apt-get update && apt-get install -y libmagic-dev shared-mime-info
|
|
- bundle install
|
|
script:
|
|
- bundle exec rake regression_tests
|
|
|
|
coverage:
|
|
coverage: '/Coverage: \d+.\d+\%/'
|
|
stage: prepare
|
|
variables:
|
|
BUNDLE_WITHOUT: lint:test:assorted
|
|
|
|
image: "ruby:3.4"
|
|
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
|
|
image: "ruby:3.4"
|
|
before_script:
|
|
- gem install hanna-nouveau
|
|
script:
|
|
- rake prepare_website
|
|
- mkdir -p public/
|
|
- cp -r coverage/ public/
|
|
artifacts:
|
|
paths:
|
|
- rdoc/
|
|
- wiki/
|
|
- data/
|
|
- coverage/
|
|
- public/
|
|
only:
|
|
- master
|
|
|
|
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'
|