Refactoring: Reorganise GitLab CI definition by splitting it up in dedicated, logical parts. Also introduce SINGLETESTNAME ENV to run single test 🚀

This commit is contained in:
Denny Korsukéwitz 2020-05-06 11:32:26 +02:00 committed by Thorsten Eckel
parent d146919a07
commit 7aeeb6ed1a
35 changed files with 703 additions and 614 deletions

View file

@ -1,4 +1,21 @@
image: registry.znuny.com/docker/zammad-ruby:2.6.5
default:
image: registry.znuny.com/docker/zammad-ruby:2.6.5
include:
- local: '/.gitlab/ci/base.yml'
- local: '/.gitlab/ci/pre.yml'
- local: '/.gitlab/ci/integration.yml'
- local: '/.gitlab/ci/rspec.yml'
- local: '/.gitlab/ci/unit.yml'
- local: '/.gitlab/ci/browser-core.yml'
- local: '/.gitlab/ci/browser-integration.yml'
# Stages
stages:
- pre
- test
- browser-core
- browser-integration
# Global variables added to the ENV of each job
variables:
@ -17,48 +34,6 @@ variables:
MAIL_ADDRESS: "zammad@mail.test.dc.zammad.com"
MAIL_PASS: "zammad"
# Artifacts are stored for failed jobs for 2 days
.artifacts_error_template: &artifacts_error
artifacts:
expire_in: 2 days
when: on_failure
paths:
- tmp/screenshot*
- tmp/screenshots/*
- log/*.log
# Workaround to enable usage of mixed SSH and Docker GitLab CI runners
.docker_env_template: &docker_env
tags:
- docker
# Workaround for blocked port 25 access on cloud provider infrastructure
.requires_mail_port_access_template: &requires_mail_port_access
tags:
- mail
.base_env_template: &base_env
<<: *docker_env
<<: *artifacts_error
# General required Docker services for different/random DB envs
.services_mysql_template: &services_mysql
services:
- name: registry.znuny.com/docker/zammad-mysql:latest
alias: mysql
.services_postgresql_template: &services_postgresql
services:
- name: registry.znuny.com/docker/zammad-postgresql:latest
alias: postgresql
.services_random_db_template: &services_random_db
services:
- name: registry.znuny.com/docker/zammad-mysql:latest
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:latest
alias: postgresql
# Cache gems in between jobs and pipelines
# ATTENTION: We use a combination of the Ruby major and minor version number
# as a key for the cache to avoid cache growth and incompatibilities between
@ -70,577 +45,7 @@ cache:
# Initialize application env
before_script:
- env # todo delete me !!!
- bundle install -j $(nproc) --path vendor
- bundle exec ruby script/build/database_config.rb
# Stages
stages:
- pre
- test
- browser-core
- browser-integration
# pre stage
# Workaround to enable usage of mixed SSH and Docker GitLab CI runners
.pre_stage_template: &pre_stage
<<: *docker_env
stage: pre
before_script:
- '' # disable before_script for pre "non-application" env
pre:rubocop:
<<: *pre_stage
script:
- bundle install -j $(nproc) --path vendor
- bundle exec rubocop
pre:coffeelint:
<<: *pre_stage
script:
- coffeelint app/
pre:bundle-audit:
<<: *pre_stage
script:
- gem install bundler-audit
- bundle-audit update
- bundle-audit --ignore CVE-2015-9284
pre:github:
<<: *pre_stage
tags:
- deploy
script:
- script/build/sync_repo.sh git@github.com:zammad/zammad.git
# test stage
## RSpec
.script_rspec_template: &script_rspec_definition
<<: *base_env
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:db:init
- bundle exec rspec -t ~type:system -t ~searchindex
test:rspec:mysql:
stage: test
<<: *services_mysql
<<: *script_rspec_definition
test:rspec:postgresql:
stage: test
<<: *services_postgresql
<<: *script_rspec_definition
## Unit and Controller tests
.script_unit_template: &script_unit_definition
<<: *base_env
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:db:init
- bundle exec rake test:units
- bundle exec rails test test/integration/object_manager_test.rb
- bundle exec rails test test/integration/package_test.rb
test:unit:mysql:
stage: test
<<: *services_mysql
<<: *script_unit_definition
test:unit:postgresql:
stage: test
<<: *services_postgresql
<<: *script_unit_definition
## Integration tests
.test_integration_template: &test_integration_definition
<<: *base_env
<<: *services_random_db
stage: test
variables:
RAILS_ENV: "test"
test:integration:email_helper_deliver:
<<: *test_integration_definition
<<: *requires_mail_port_access
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/email_helper_test.rb
- bundle exec rails test test/integration/email_deliver_test.rb
- bundle exec rails test test/integration/email_keep_on_server_test.rb
- bundle exec rails test test/integration/email_postmaster_to_sender.rb
test:integration:facebook:
<<: *test_integration_definition
script:
- bundle exec rake zammad:db:init
- bundle exec rails test test/integration/facebook_test.rb
allow_failure: true
test:integration:geo:
<<: *test_integration_definition
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/geo_calendar_test.rb
- bundle exec rails test test/integration/geo_location_test.rb
- bundle exec rails test test/integration/geo_ip_test.rb
test:integration:user_agent:
<<: *test_integration_definition
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/user_agent_test.rb
- export ZAMMAD_PROXY_TEST=true
- bundle exec rails test test/integration/user_agent_test.rb
allow_failure: true
test:integration:slack:
<<: *test_integration_definition
script:
- bundle exec rake zammad:db:unseeded
- echo "gem 'slack-api'" >> Gemfile.local
- bundle install -j $(nproc)
- bundle exec rails test test/integration/slack_test.rb
test:integration:clearbit:
<<: *test_integration_definition
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/clearbit_test.rb
allow_failure: true
### Elasticsearch
.script_integration_es_variables: &script_integration_es_variables
ES_INDEX_RAND: "true"
ES_URL: "http://elasticsearch:9200"
.script_integration_es_template: &script_integration_es_definition
<<: *base_env
stage: test
variables:
<<: *script_integration_es_variables
RAILS_ENV: "test"
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/elasticsearch_active_test.rb
- bundle exec rails test test/integration/elasticsearch_test.rb
- bundle exec rspec --tag searchindex --tag ~type:system
- bundle exec rails test test/integration/report_test.rb
test:integration:es:5.6:
<<: *script_integration_es_definition
services:
- name: registry.znuny.com/docker/zammad-mysql:latest
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:latest
alias: postgresql
- name: registry.znuny.com/docker/zammad-elasticsearch:5.6
alias: elasticsearch
test:integration:es:6:
<<: *script_integration_es_definition
services:
- name: registry.znuny.com/docker/zammad-mysql:latest
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:latest
alias: postgresql
- name: registry.znuny.com/docker/zammad-elasticsearch:6
alias: elasticsearch
test:integration:es:7:
<<: *script_integration_es_definition
services:
- name: registry.znuny.com/docker/zammad-mysql:latest
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:latest
alias: postgresql
- name: registry.znuny.com/docker/zammad-elasticsearch:7
alias: elasticsearch
### Zendesk
test:integration:zendesk:
<<: *base_env
<<: *services_random_db
stage: test
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/zendesk_import_test.rb
### OTRS
.script_integration_otrs_template: &script_integration_otrs_definition
<<: *base_env
<<: *services_random_db
stage: test
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/otrs_import_test.rb
test:integration:otrs_6:
<<: *script_integration_otrs_definition
variables:
RAILS_ENV: "test"
IMPORT_OTRS_ENDPOINT: "https://vz1185.test.znuny.com/otrs/public.pl?Action=ZammadMigrator"
test:integration:otrs_5:
<<: *script_integration_otrs_definition
variables:
RAILS_ENV: "test"
IMPORT_OTRS_ENDPOINT: "http://vz1109.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
test:integration:otrs_4:
<<: *script_integration_otrs_definition
variables:
RAILS_ENV: "test"
IMPORT_OTRS_ENDPOINT: "http://vz383.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
test:integration:otrs_33:
<<: *script_integration_otrs_definition
variables:
RAILS_ENV: "test"
IMPORT_OTRS_ENDPOINT: "http://vz305.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
test:integration:otrs_32:
<<: *script_integration_otrs_definition
variables:
RAILS_ENV: "test"
IMPORT_OTRS_ENDPOINT: "http://vz382.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
test:integration:otrs_31:
<<: *script_integration_otrs_definition
variables:
RAILS_ENV: "test"
IMPORT_OTRS_ENDPOINT: "http://vz381.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
# Browser tests
## preparation (asset precompile)
browser:build:
<<: *base_env
<<: *services_postgresql
stage: test
variables:
RAILS_ENV: "production"
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rake assets:precompile
artifacts:
expire_in: 1 week
paths:
- public/assets/.sprockets-manifest*
- public/assets/application-*
- public/assets/knowledge_base*
- public/assets/print-*
.services_browser_template: &services_browser_definition
services:
- name: registry.znuny.com/docker/zammad-mysql:latest
alias: mysql
- name: registry.znuny.com/docker/zammad-postgresql:latest
alias: postgresql
- name: registry.znuny.com/docker/zammad-elasticsearch:stable
alias: elasticsearch
- name: docker.io/elgalu/selenium:3.141.59-p32
alias: selenium
- name: registry.znuny.com/docker/docker-imap-devel:latest
alias: mail
## Browser core tests
.variables_browser_template: &variables_browser_definition
RAILS_ENV: "production"
APP_RESTART_CMD: "bundle exec rake environment zammad:ci:app:restart"
.test_browser_core_template: &test_browser_core_definition
<<: *base_env
stage: browser-core
dependencies:
- browser:build
## Capybara
.test_capybara_template: &test_capybara_definition
<<: *test_browser_core_definition
script:
- bundle exec rake zammad:ci:test:prepare[with_elasticsearch]
- bundle exec rspec --fail-fast -t type:system
.variables_capybara_chrome_template: &variables_capybara_chrome_definition
<<: *test_capybara_definition
variables:
<<: *script_integration_es_variables
RAILS_ENV: "test"
BROWSER: "chrome"
.variables_capybara_ff_template: &variables_capybara_ff_definition
<<: *test_capybara_definition
variables:
<<: *script_integration_es_variables
RAILS_ENV: "test"
BROWSER: "firefox"
test:browser:core:capybara_chrome:
<<: *variables_capybara_chrome_definition
<<: *services_browser_definition
test:browser:core:capybara_ff:
<<: *variables_capybara_ff_definition
<<: *services_browser_definition
### API clients
test:browser:integration:api_client_ruby:
<<: *test_browser_core_definition
<<: *services_random_db
variables:
<<: *variables_browser_definition
script:
- RAILS_ENV=test bundle exec rake db:create
- cp contrib/auto_wizard_test.json auto_wizard.json
- bundle exec rake zammad:ci:test:start
- git clone https://github.com/zammad/zammad-api-client-ruby.git
- cd zammad-api-client-ruby
- bundle install -j $(nproc)
- bundle exec rspec
test:browser:integration:api_client_php:
<<: *test_browser_core_definition
<<: *services_random_db
variables:
<<: *variables_browser_definition
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_URL: "http://localhost:3000"
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_USERNAME: "master@example.com"
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_PASSWORD: "test"
script:
- RAILS_ENV=test bundle exec rake db:create
- RAILS_ENV=test bundle exec rake zammad:ci:test:start zammad:setup:auto_wizard
- git clone https://github.com/zammad/zammad-api-client-php.git
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php composer-setup.php --install-dir=/usr/local/bin
- ln -s /usr/local/bin/composer.phar /usr/local/bin/composer
- cd zammad-api-client-php
- composer install
- vendor/bin/phpunit
### Browser test slices
#### Templates
.script_browser_slice_template: &script_browser_slice_definition
script:
# temporary workaround to check Yahoo! mailbox only in test:browser:core:ff_3_* tests
- if [[ $CI_JOB_NAME != test:browser:core:ff_3_* ]]; then unset MAILBOX_AUTO1 ; fi
- if [[ $CI_JOB_NAME != test:browser:core:ff_3_* ]]; then unset MAILBOX_AUTO2 ; fi
- if [[ $CI_JOB_NAME != test:browser:core:ff_3_* ]]; then unset MAILBOX_MANUAL1 ; fi
- if [[ $CI_JOB_NAME != test:browser:core:ff_3_* ]]; then unset MAILBOX_MANUAL2 ; fi
- env
- script/build/test_slice_tests.sh $TEST_SLICE
- RAILS_ENV=test bundle exec rake db:create
- bundle exec rake zammad:ci:test:start[with_elasticsearch]
- time bundle exec rails test --fail-fast test/browser
.test_browser_core_base_template: &test_browser_core_base_definition
<<: *test_browser_core_definition
<<: *script_browser_slice_definition
<<: *services_browser_definition
#### Firefox
test:browser:core:ff_1:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "firefox"
TEST_SLICE: "1"
test:browser:core:ff_2:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "firefox"
TEST_SLICE: "2"
test:browser:core:ff_3:
<<: *test_browser_core_base_definition
<<: *requires_mail_port_access
variables:
<<: *variables_browser_definition
BROWSER: "firefox"
TEST_SLICE: "3"
test:browser:core:ff_4:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "firefox"
TEST_SLICE: "4"
test:browser:core:ff_5:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "firefox"
TEST_SLICE: "5"
test:browser:core:ff_6:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "firefox"
TEST_SLICE: "6"
### Chrome
test:browser:core:chrome_1:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
TEST_SLICE: "1"
test:browser:core:chrome_2:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
TEST_SLICE: "2"
test:browser:core:chrome_3:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
TEST_SLICE: "3"
test:browser:core:chrome_4:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
TEST_SLICE: "4"
test:browser:core:chrome_5:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
TEST_SLICE: "5"
test:browser:core:chrome_6:
<<: *test_browser_core_base_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
TEST_SLICE: "6"
### Auto wizard
.auto_wizard_services_template: &auto_wizard_services
services:
- name: registry.znuny.com/docker/zammad-postgresql:latest
alias: postgresql
- name: docker.io/elgalu/selenium:3.141.59-p32
alias: selenium
.test_browser_integration_template: &test_browser_integration_definition
<<: *base_env
<<: *auto_wizard_services
stage: browser-integration
dependencies:
- browser:build
.script_integration_auto_wizard_template: &script_integration_auto_wizard_definition
script:
- RAILS_ENV=test bundle exec rake db:create
- cp $AUTO_WIZARD_FILE auto_wizard.json
- bundle exec rake zammad:ci:test:start
- bundle exec rails test $TEST_FILE
.browser_core_auto_wizard_template: &browser_core_auto_wizard_definition
<<: *test_browser_core_definition
<<: *auto_wizard_services
<<: *script_integration_auto_wizard_definition
test:browser:autowizard_chrome:
<<: *browser_core_auto_wizard_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
AUTO_WIZARD_FILE: "contrib/auto_wizard_example.json"
TEST_FILE: "test/integration/auto_wizard_browser_test.rb"
test:browser:autowizard_ff:
<<: *browser_core_auto_wizard_definition
variables:
<<: *variables_browser_definition
BROWSER: "firefox"
AUTO_WIZARD_FILE: "contrib/auto_wizard_example.json"
TEST_FILE: "test/integration/auto_wizard_browser_test.rb"
### Browser integration tests
.browser_integration_auto_wizard_template: &browser_integration_auto_wizard_definition
<<: *test_browser_integration_definition
<<: *script_integration_auto_wizard_definition
test:browser:integration:facebook_chrome:
<<: *browser_integration_auto_wizard_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
AUTO_WIZARD_FILE: "contrib/auto_wizard_test.json"
TEST_FILE: "test/integration/facebook_browser_test.rb"
test:browser:integration:facebook_ff:
<<: *browser_integration_auto_wizard_definition
variables:
<<: *variables_browser_definition
BROWSER: "firefox"
AUTO_WIZARD_FILE: "contrib/auto_wizard_test.json"
TEST_FILE: "test/integration/facebook_browser_test.rb"
test:browser:integration:idoit_chrome:
<<: *browser_integration_auto_wizard_definition
variables:
<<: *variables_browser_definition
BROWSER: "chrome"
AUTO_WIZARD_FILE: "contrib/auto_wizard_test.json"
TEST_FILE: "test/integration/idoit_browser_test.rb"
### Browser integration tests
.variables_browser_import_template: &variables_browser_import_definition
BROWSER: "chrome"
RAILS_SERVE_STATIC_FILES: "true"
RAILS_ENV: "production"
.browser_integration_import_template: &browser_integration_import_definition
<<: *test_browser_integration_definition
script:
- RAILS_ENV=test bundle exec rake db:create
- bundle exec rake zammad:ci:test:start
- bundle exec rails test $TEST_FILE
test:browser:integration:otrs_chrome:
<<: *browser_integration_import_definition
variables:
<<: *variables_browser_import_definition
TEST_FILE: "test/integration/otrs_import_browser_test.rb"
test:browser:integration:zendesk_chrome:
<<: *browser_integration_import_definition
variables:
<<: *variables_browser_import_definition
TEST_FILE: "test/integration/zendesk_import_browser_test.rb"

116
.gitlab/ci/base.yml Normal file
View file

@ -0,0 +1,116 @@
# Artifacts are stored for failed jobs for 2 days
.artifacts_error: &artifacts_error
artifacts:
expire_in: 2 days
when: on_failure
paths:
- tmp/screenshot*
- tmp/screenshots/*
- log/*.log
.variables_es: &variables_es
variables:
ES_INDEX_RAND: "true"
ES_URL: "http://elasticsearch:9200"
.variables_app_restart_cmd: &variables_app_restart_cmd
variables:
APP_RESTART_CMD: "bundle exec rake environment zammad:ci:app:restart"
.rules_singletest: &rules_singletest
rules:
- if: $CI_MERGE_REQUEST_ID
when: never
- if: '$SINGLETESTNAME && $SINGLETESTNAME == $CI_JOB_NAME'
when: always
- if: '$SINGLETESTNAME && $SINGLETESTNAME != $CI_JOB_NAME'
when: never
- if: '$CI_JOB_NAME'
when: on_success
# Workaround to enable usage of mixed SSH and Docker GitLab CI runners
.tags_docker: &tags_docker
tags:
- docker
# Workaround for blocked port 25 access on cloud provider infrastructure
.tags_mail: &tags_mail
tags:
- mail
.env_base: &env_base
<<: *tags_docker
<<: *artifacts_error
<<: *rules_singletest
# DB Docker
.docker_mysql: &docker_mysql
name: registry.znuny.com/docker/zammad-mysql:latest
alias: mysql
.docker_postgresql: &docker_postgresql
name: registry.znuny.com/docker/zammad-postgresql:latest
alias: postgresql
# elasticsearch docker
.docker_elasticsearch: &docker_elasticsearch
name: registry.znuny.com/docker/zammad-elasticsearch:$ELASTICSEARCH_TAG
alias: elasticsearch
# selenium docker
.docker_selenium: &docker_selenium
name: docker.io/elgalu/selenium:3.141.59-p32
alias: selenium
# selenium docker
.docker_imap: &docker_imap
name: registry.znuny.com/docker/docker-imap-devel:latest
alias: mail
# service templates
.services_mysql: &services_mysql
services:
- <<: *docker_mysql
.services_postgresql: &services_postgresql
services:
- <<: *docker_postgresql
.services_mysql_postgresql: &services_mysql_postgresql
services:
- <<: *docker_mysql
- <<: *docker_postgresql
.services_postgresql_selenium: &services_postgresql_selenium
services:
- <<: *docker_postgresql
- <<: *docker_selenium
.services_mysql_postgresql_elasticsearch: &services_mysql_postgresql_elasticsearch
variables:
ELASTICSEARCH_TAG: 'stable'
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_elasticsearch
.services_mysql_postgresql_elasticsearch_selenium_imap: &services_mysql_postgresql_elasticsearch_selenium_imap
variables:
ELASTICSEARCH_TAG: 'stable'
services:
- <<: *docker_mysql
- <<: *docker_postgresql
- <<: *docker_elasticsearch
- <<: *docker_selenium
- <<: *docker_imap
# we need at least one job to store and include this template
# but we skip this via 'only' -> 'variables' -> '$IGNORE'
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View file

@ -0,0 +1,88 @@
include:
# browser-core
- local: '/.gitlab/ci/browser-core/build.yml'
- local: '/.gitlab/ci/browser-core/autowizard_chrome.yml'
- local: '/.gitlab/ci/browser-core/autowizard_ff.yml'
- local: '/.gitlab/ci/browser-core/api_client_php.yml'
- local: '/.gitlab/ci/browser-core/api_client_ruby.yml'
- local: '/.gitlab/ci/browser-core/capybara_chrome.yml'
- local: '/.gitlab/ci/browser-core/capybara_ff.yml'
- local: '/.gitlab/ci/browser-core/chrome.yml'
- local: '/.gitlab/ci/browser-core/firefox.yml'
.template_browser-core: &template_browser-core
stage: browser-core
dependencies:
- browser:build
extends:
- .env_base
- .variables_es
- .variables_app_restart_cmd
- .services_mysql_postgresql_elasticsearch_selenium_imap
variables:
RAILS_ENV: "production"
script:
# temporary workaround to check Yahoo! mailbox only in 3_firefox* tests
- if [[ $CI_JOB_NAME != 3_firefox* ]]; then unset MAILBOX_AUTO1 ; fi
- if [[ $CI_JOB_NAME != 3_firefox* ]]; then unset MAILBOX_AUTO2 ; fi
- if [[ $CI_JOB_NAME != 3_firefox* ]]; then unset MAILBOX_MANUAL1 ; fi
- if [[ $CI_JOB_NAME != 3_firefox* ]]; then unset MAILBOX_MANUAL2 ; fi
- env
- script/build/test_slice_tests.sh $TEST_SLICE
- RAILS_ENV=test bundle exec rake db:create
- bundle exec rake zammad:ci:test:start[with_elasticsearch]
- time bundle exec rails test --fail-fast test/browser
.template_browser-core_autowizard: &template_browser-core_autowizard
stage: browser-core
dependencies:
- browser:build
extends:
- .env_base
- .variables_app_restart_cmd
- .services_postgresql_selenium
variables:
RAILS_ENV: "production"
AUTO_WIZARD_FILE: "contrib/auto_wizard_example.json"
TEST_FILE: "test/integration/auto_wizard_browser_test.rb"
script:
- RAILS_ENV=test bundle exec rake db:create
- cp $AUTO_WIZARD_FILE auto_wizard.json
- bundle exec rake zammad:ci:test:start
- bundle exec rails test $TEST_FILE
.template_browser-core_api_client: &template_browser-core_api_client
stage: browser-core
dependencies:
- browser:build
extends:
- .env_base
- .variables_app_restart_cmd
- .services_mysql_postgresql
variables:
RAILS_ENV: "production"
.template_browser-core_capybara: &template_browser-core_capybara
stage: browser-core
dependencies:
- browser:build
extends:
- .env_base
- .variables_es
- .services_mysql_postgresql_elasticsearch_selenium_imap
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:ci:test:prepare[with_elasticsearch]
- bundle exec rspec --fail-fast -t type:system
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View file

@ -0,0 +1,17 @@
api_client_php:
extends:
- .template_browser-core_api_client
variables:
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_URL: "http://localhost:3000"
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_USERNAME: "master@example.com"
ZAMMAD_PHP_API_CLIENT_UNIT_TESTS_PASSWORD: "test"
script:
- RAILS_ENV=test bundle exec rake db:create
- RAILS_ENV=test bundle exec rake zammad:ci:test:start zammad:setup:auto_wizard
- git clone https://github.com/zammad/zammad-api-client-php.git
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php composer-setup.php --install-dir=/usr/local/bin
- ln -s /usr/local/bin/composer.phar /usr/local/bin/composer
- cd zammad-api-client-php
- composer install
- vendor/bin/phpunit

View file

@ -0,0 +1,12 @@
api_client_ruby:
extends:
- .template_browser-core_api_client
script:
- RAILS_ENV=test bundle exec rake db:create
- cp contrib/auto_wizard_test.json auto_wizard.json
- bundle exec rake zammad:ci:test:start
- git clone https://github.com/zammad/zammad-api-client-ruby.git
- cd zammad-api-client-ruby
- bundle install -j $(nproc)
- bundle exec rspec

View file

@ -0,0 +1,5 @@
autowizard_chrome:
extends:
- .template_browser-core_autowizard
variables:
BROWSER: "chrome"

View file

@ -0,0 +1,5 @@
autowizard_ff:
extends:
- .template_browser-core_autowizard
variables:
BROWSER: "firefox"

View file

@ -0,0 +1,17 @@
browser:build:
stage: test
extends:
- .tags_docker
- .services_postgresql
artifacts:
expire_in: 1 week
paths:
- public/assets/.sprockets-manifest*
- public/assets/application-*
- public/assets/knowledge_base*
- public/assets/print-*
variables:
RAILS_ENV: "production"
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rake assets:precompile

View file

@ -0,0 +1,5 @@
capybara_chrome:
extends:
- .template_browser-core_capybara
variables:
BROWSER: "chrome"

View file

@ -0,0 +1,5 @@
capybara_ff:
extends:
- .template_browser-core_capybara
variables:
BROWSER: "firefox"

View file

@ -0,0 +1,41 @@
1_chrome:
extends:
- .template_browser-core
variables:
BROWSER: "chrome"
TEST_SLICE: "1"
2_chrome:
extends:
- .template_browser-core
variables:
BROWSER: "chrome"
TEST_SLICE: "2"
3_chrome:
extends:
- .template_browser-core
variables:
BROWSER: "chrome"
TEST_SLICE: "3"
4_chrome:
extends:
- .template_browser-core
variables:
BROWSER: "chrome"
TEST_SLICE: "4"
5_chrome:
extends:
- .template_browser-core
variables:
BROWSER: "chrome"
TEST_SLICE: "5"
6_chrome:
extends:
- .template_browser-core
variables:
BROWSER: "chrome"
TEST_SLICE: "6"

View file

@ -0,0 +1,42 @@
1_firefox:
extends:
- .template_browser-core
variables:
BROWSER: "firefox"
TEST_SLICE: "1"
2_firefox:
extends:
- .template_browser-core
variables:
BROWSER: "firefox"
TEST_SLICE: "2"
3_firefox:
extends:
- .template_browser-core
- .tags_mail
variables:
BROWSER: "firefox"
TEST_SLICE: "3"
4_firefox:
extends:
- .template_browser-core
variables:
BROWSER: "firefox"
TEST_SLICE: "4"
5_firefox:
extends:
- .template_browser-core
variables:
BROWSER: "firefox"
TEST_SLICE: "5"
6_firefox:
extends:
- .template_browser-core
variables:
BROWSER: "firefox"
TEST_SLICE: "6"

View file

@ -0,0 +1,51 @@
include:
# browser-integration
- local: '/.gitlab/ci/browser-integration/facebook_chrome.yml'
- local: '/.gitlab/ci/browser-integration/facebook_ff.yml'
- local: '/.gitlab/ci/browser-integration/idoit_chrome.yml'
- local: '/.gitlab/ci/browser-integration/otrs_chrome.yml'
- local: '/.gitlab/ci/browser-integration/zendesk_chrome.yml'
.template_browser-integration: &template_browser-integration
stage: browser-integration
dependencies:
- browser:build
extends:
- .env_base
- .variables_app_restart_cmd
- .services_postgresql_selenium
variables:
RAILS_ENV: "production"
AUTO_WIZARD_FILE: "contrib/auto_wizard_test.json"
script:
- RAILS_ENV=test bundle exec rake db:create
- cp $AUTO_WIZARD_FILE auto_wizard.json
- bundle exec rake zammad:ci:test:start
- bundle exec rails test $TEST_FILE
.template_browser-integration_import: &template_browser-integration_import
stage: browser-integration
dependencies:
- browser:build
extends:
- .env_base
- .services_postgresql_selenium
variables:
RAILS_ENV: "production"
BROWSER: "chrome"
RAILS_SERVE_STATIC_FILES: "true"
script:
- RAILS_ENV=test bundle exec rake db:create
- bundle exec rake zammad:ci:test:start
- bundle exec rails test $TEST_FILE
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View file

@ -0,0 +1,6 @@
facebook_chrome:
extends:
- .template_browser-integration
variables:
BROWSER: "chrome"
TEST_FILE: "test/integration/facebook_browser_test.rb"

View file

@ -0,0 +1,6 @@
facebook_ff:
extends:
- .template_browser-integration
variables:
BROWSER: "firefox"
TEST_FILE: "test/integration/facebook_browser_test.rb"

View file

@ -0,0 +1,6 @@
idoit_chrome:
extends:
- .template_browser-integration
variables:
BROWSER: "chrome"
TEST_FILE: "test/integration/idoit_browser_test.rb"

View file

@ -0,0 +1,5 @@
otrs_chrome:
extends:
- .template_browser-integration_import
variables:
TEST_FILE: "test/integration/otrs_import_browser_test.rb"

View file

@ -0,0 +1,5 @@
zendesk_chrome:
extends:
- .template_browser-integration_import
variables:
TEST_FILE: "test/integration/zendesk_import_browser_test.rb"

View file

@ -0,0 +1,30 @@
include:
- local: '/.gitlab/ci/integration/clearbit.yml'
- local: '/.gitlab/ci/integration/email_helper_deliver.yml'
- local: '/.gitlab/ci/integration/es.yml'
- local: '/.gitlab/ci/integration/facebook.yml'
- local: '/.gitlab/ci/integration/geo.yml'
- local: '/.gitlab/ci/integration/otrs.yml'
- local: '/.gitlab/ci/integration/slack.yml'
- local: '/.gitlab/ci/integration/user_agent.yml'
- local: '/.gitlab/ci/integration/zendesk.yml'
.template_integration: &template_integration
extends:
- .env_base
- .services_mysql_postgresql
tags:
- integration
stage: test
variables:
RAILS_ENV: "test"
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View file

@ -0,0 +1,7 @@
clearbit:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/clearbit_test.rb
allow_failure: true

View file

@ -0,0 +1,10 @@
email_helper_deliver:
extends:
- .template_integration
- .tags_mail
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/email_helper_test.rb
- bundle exec rails test test/integration/email_deliver_test.rb
- bundle exec rails test test/integration/email_keep_on_server_test.rb
- bundle exec rails test test/integration/email_postmaster_to_sender.rb

View file

@ -0,0 +1,32 @@
.template_integration_es: &template_integration_es
extends:
- .env_base
- .services_mysql_postgresql_elasticsearch
- .variables_es
stage: test
tags:
- integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/elasticsearch_active_test.rb
- bundle exec rails test test/integration/elasticsearch_test.rb
- bundle exec rspec --tag searchindex --tag ~type:system
- bundle exec rails test test/integration/report_test.rb
es:5.6:
<<: *template_integration_es
variables:
ELASTICSEARCH_TAG: '5.6'
RAILS_ENV: "test"
es:6:
<<: *template_integration_es
variables:
ELASTICSEARCH_TAG: '6'
RAILS_ENV: "test"
es:7:
<<: *template_integration_es
variables:
ELASTICSEARCH_TAG: '7'
RAILS_ENV: "test"

View file

@ -0,0 +1,7 @@
facebook:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:init
- bundle exec rails test test/integration/facebook_test.rb
allow_failure: true

View file

@ -0,0 +1,8 @@
geo:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/geo_calendar_test.rb
- bundle exec rails test test/integration/geo_location_test.rb
- bundle exec rails test test/integration/geo_ip_test.rb

View file

@ -0,0 +1,36 @@
.template_integration_otrs: &template_integration_otrs
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/otrs_import_test.rb
otrs:6:
<<: *template_integration_otrs
variables:
IMPORT_OTRS_ENDPOINT: "https://vz1185.test.znuny.com/otrs/public.pl?Action=ZammadMigrator"
otrs:5:
<<: *template_integration_otrs
variables:
IMPORT_OTRS_ENDPOINT: "http://vz1109.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
otrs:4:
<<: *template_integration_otrs
variables:
IMPORT_OTRS_ENDPOINT: "http://vz383.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
otrs:33:
<<: *template_integration_otrs
variables:
IMPORT_OTRS_ENDPOINT: "http://vz305.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
otrs:32:
<<: *template_integration_otrs
variables:
IMPORT_OTRS_ENDPOINT: "http://vz382.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
otrs:31:
<<: *template_integration_otrs
variables:
IMPORT_OTRS_ENDPOINT: "http://vz381.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"

View file

@ -0,0 +1,8 @@
slack:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- echo "gem 'slack-api'" >> Gemfile.local
- bundle install -j $(nproc)
- bundle exec rails test test/integration/slack_test.rb

View file

@ -0,0 +1,9 @@
user_agent:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/user_agent_test.rb
- export ZAMMAD_PROXY_TEST=true
- bundle exec rails test test/integration/user_agent_test.rb
allow_failure: true

View file

@ -0,0 +1,6 @@
zendesk:
extends:
- .template_integration
script:
- bundle exec rake zammad:db:unseeded
- bundle exec rails test test/integration/zendesk_import_test.rb

33
.gitlab/ci/pre.yml Normal file
View file

@ -0,0 +1,33 @@
# Workaround to enable usage of mixed SSH and Docker GitLab CI runners
.template_pre: &template_pre
stage: pre
extends:
- .tags_docker
- .rules_singletest
before_script:
- '' # disable before_script for pre "non-application" env
rubocop:
<<: *template_pre
script:
- bundle install -j $(nproc) --path vendor
- bundle exec rubocop
coffeelint:
<<: *template_pre
script:
- coffeelint app/
bundle-audit:
<<: *template_pre
script:
- gem install bundler-audit
- bundle-audit update
- bundle-audit --ignore CVE-2015-9284
github:
<<: *template_pre
tags:
- deploy
script:
- script/build/sync_repo.sh git@github.com:zammad/zammad.git

22
.gitlab/ci/rspec.yml Normal file
View file

@ -0,0 +1,22 @@
include:
- local: '/.gitlab/ci/rspec/mysql.yml'
- local: '/.gitlab/ci/rspec/postgresql.yml'
.template_rspec: &template_rspec
extends:
- .env_base
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:db:init
- bundle exec rspec -t ~type:system -t ~searchindex
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View file

@ -0,0 +1,5 @@
rspec:mysql:
stage: test
extends:
- .services_mysql
- .template_rspec

View file

@ -0,0 +1,5 @@
rspec:postgresql:
stage: test
extends:
- .services_postgresql
- .template_rspec

24
.gitlab/ci/unit.yml Normal file
View file

@ -0,0 +1,24 @@
include:
- local: '/.gitlab/ci/unit/mysql.yml'
- local: '/.gitlab/ci/unit/postgresql.yml'
.template_unit: &template_unit
extends:
- .env_base
variables:
RAILS_ENV: "test"
script:
- bundle exec rake zammad:db:init
- bundle exec rake test:units
- bundle exec rails test test/integration/object_manager_test.rb
- bundle exec rails test test/integration/package_test.rb
# we need at least one job to store and include this template
# $IGNORE is not defined
ignore:
stage: test
only:
variables:
- $IGNORE
script:
- ''

View file

@ -0,0 +1,5 @@
unit:mysql:
stage: test
extends:
- .services_mysql
- .template_unit

View file

@ -0,0 +1,5 @@
unit:postgresql:
stage: test
extends:
- .services_postgresql
- .template_unit