Browse Source

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

Denny Korsukéwitz 4 years ago
parent
commit
7aeeb6ed1a

+ 19 - 614
.gitlab-ci.yml

@@ -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 - 0
.gitlab/ci/base.yml

@@ -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:
+    - ''

+ 88 - 0
.gitlab/ci/browser-core.yml

@@ -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:
+    - ''

+ 17 - 0
.gitlab/ci/browser-core/api_client_php.yml

@@ -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

+ 12 - 0
.gitlab/ci/browser-core/api_client_ruby.yml

@@ -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
+

+ 5 - 0
.gitlab/ci/browser-core/autowizard_chrome.yml

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

+ 5 - 0
.gitlab/ci/browser-core/autowizard_ff.yml

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

+ 17 - 0
.gitlab/ci/browser-core/build.yml

@@ -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

+ 5 - 0
.gitlab/ci/browser-core/capybara_chrome.yml

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

+ 5 - 0
.gitlab/ci/browser-core/capybara_ff.yml

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

Some files were not shown because too many files changed in this diff