.yarn-install: &yarn-install - source scripts/utils.sh - run_timed_command "retry yarn install --frozen-lockfile" .storybook-yarn-install: &storybook-yarn-install - source scripts/utils.sh - run_timed_command "retry yarn run storybook:install --frozen-lockfile" .compile-assets-base: extends: - .default-retry - .default-before_script - .assets-compile-cache image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-${DEBIAN_VERSION}-ruby-${RUBY_VERSION}-node-16.14:rubygems-3.2-git-2.33-lfs-2.9-yarn-1.22-graphicsmagick-1.3.36 variables: SETUP_DB: "false" WEBPACK_VENDOR_DLL: "true" # Disable warnings in browserslist which can break on backports # https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384 BROWSERSLIST_IGNORE_OLD_DATA: "true" stage: prepare script: - *yarn-install - run_timed_command "bin/rake gitlab:assets:compile" - run_timed_command "scripts/clean-old-cached-assets" compile-production-assets: extends: - .compile-assets-base - .frontend:rules:compile-production-assets variables: NODE_ENV: "production" RAILS_ENV: "production" WEBPACK_REPORT: "true" artifacts: name: webpack-report expire_in: 31d paths: # These assets are used in multiple locations: # - in `build-assets-image` job to create assets image for packaging systems # - GitLab UI for integration tests: https://gitlab.com/gitlab-org/gitlab-ui/-/blob/e88493b3c855aea30bf60baee692a64606b0eb1e/.storybook/preview-head.pug#L1 - public/assets/ - webpack-report/ when: always before_script: - !reference [.default-before_script, before_script] after_script: - rm -f /etc/apt/sources.list.d/google*.list # We don't need to update Chrome here compile-test-assets: extends: - .compile-assets-base - .frontend:rules:compile-test-assets artifacts: expire_in: 7d paths: - public/assets/ - node_modules/@gitlab/svgs/dist/icons.json # app/helpers/icons_helper.rb uses this file when: always compile-test-assets as-if-foss: extends: - compile-test-assets - .frontend:rules:compile-test-assets-as-if-foss - .as-if-foss update-assets-compile-production-cache: extends: - compile-production-assets - .assets-compile-cache-push - .shared:rules:update-cache stage: prepare artifacts: {} # This job's purpose is only to update the cache. update-assets-compile-test-cache: extends: - compile-test-assets - .assets-compile-cache-push - .shared:rules:update-cache stage: prepare artifacts: {} # This job's purpose is only to update the cache. update-yarn-cache: extends: - .default-retry - .yarn-cache-push - .shared:rules:update-cache stage: prepare script: - *yarn-install update-storybook-yarn-cache: extends: - .default-retry - .storybook-yarn-cache-push - .shared:rules:update-cache stage: prepare script: - *storybook-yarn-install .frontend-fixtures-base: extends: - .default-retry - .default-before_script - .rails-cache - .use-pg12 stage: fixtures needs: ["setup-test-env", "retrieve-tests-metadata"] variables: WEBPACK_VENDOR_DLL: "true" script: - run_timed_command "gem install knapsack --no-document" - run_timed_command "scripts/gitaly-test-spawn" - source ./scripts/rspec_helpers.sh - rspec_paralellized_job artifacts: name: frontend-fixtures expire_in: 31d when: always paths: - tmp/tests/frontend/ - knapsack/ - crystalball/ # Builds FOSS, and EE fixtures in the EE project. # Builds FOSS fixtures in the FOSS project. rspec-all frontend_fixture: extends: - .frontend-fixtures-base - .frontend:rules:default-frontend-jobs needs: - !reference [.frontend-fixtures-base, needs] - "compile-test-assets" parallel: 5 # Builds FOSS fixtures in the EE project, with the `ee/` folder removed (due to `as-if-foss`). rspec-all frontend_fixture as-if-foss: extends: - .frontend-fixtures-base - .frontend:rules:frontend_fixture-as-if-foss - .as-if-foss needs: - !reference [.frontend-fixtures-base, needs] - "compile-test-assets as-if-foss" graphql-schema-dump: variables: SETUP_DB: "false" extends: - .default-retry - .rails-cache - .default-before_script - .frontend:rules:default-frontend-jobs stage: fixtures needs: [] script: - bundle exec rake gitlab:graphql:schema:dump artifacts: name: graphql-schema paths: - tmp/tests/graphql/gitlab_schema.graphql - tmp/tests/graphql/gitlab_schema.json graphql-schema-dump as-if-foss: extends: - graphql-schema-dump - .frontend:rules:eslint-as-if-foss - .as-if-foss .frontend-test-base: extends: - .default-retry - .yarn-cache variables: # Disable warnings in browserslist which can break on backports # https://github.com/browserslist/browserslist/blob/a287ec6/node.js#L367-L384 BROWSERSLIST_IGNORE_OLD_DATA: "true" USE_BUNDLE_INSTALL: "false" SETUP_DB: "false" before_script: - !reference [.default-before_script, before_script] - *yarn-install stage: test .jest-base: extends: .frontend-test-base script: - run_timed_command "yarn jest:ci" jest: extends: - .jest-base - .frontend:rules:jest needs: ["rspec-all frontend_fixture"] artifacts: name: coverage-frontend expire_in: 31d when: always paths: - coverage-frontend/ - junit_jest.xml - tmp/tests/frontend/ reports: junit: junit_jest.xml parallel: 5 jest minimal: extends: - jest - .frontend:rules:jest:minimal needs: - !reference [jest, needs] - "detect-tests" script: - if [[ -s "$RSPEC_CHANGED_FILES_PATH" ]]; then run_timed_command "yarn jest:ci:minimal"; fi jest as-if-foss: extends: - .jest-base - .frontend:rules:jest:as-if-foss - .as-if-foss needs: ["rspec-all frontend_fixture as-if-foss"] parallel: 2 jest minimal as-if-foss: extends: - .jest-base - .frontend:rules:jest:minimal:as-if-foss - .as-if-foss needs: - "rspec-all frontend_fixture as-if-foss" - "detect-tests" script: - if [[ -s "$RSPEC_CHANGED_FILES_PATH" ]]; then run_timed_command "yarn jest:ci:minimal"; fi jest-integration: extends: - .frontend-test-base - .frontend:rules:default-frontend-jobs script: - run_timed_command "yarn jest:integration --ci" needs: - job: "rspec-all frontend_fixture" - job: "graphql-schema-dump" coverage-frontend: extends: - .default-retry - .yarn-cache - .frontend:rules:ee-mr-and-default-branch-only needs: - job: "jest" optional: true - job: "jest minimal" optional: true stage: post-test before_script: - *yarn-install script: - run_timed_command "yarn node scripts/frontend/merge_coverage_frontend.js" # Removing the individual coverage results, as we just merged them. - if ls coverage-frontend/jest-* > /dev/null 2>&1; then rm -r coverage-frontend/jest-*; fi coverage: '/^Statements\s*:\s*?(\d+(?:\.\d+)?)%/' artifacts: name: coverage-frontend expire_in: 31d paths: - coverage-frontend/ reports: coverage_report: coverage_format: cobertura path: coverage-frontend/cobertura-coverage.xml .qa-frontend-node: extends: - .default-retry - .yarn-cache - .frontend:rules:qa-frontend-node stage: test dependencies: [] script: - *yarn-install - run_timed_command "retry yarn run webpack-prod" qa-frontend-node:14: extends: .qa-frontend-node image: ${GITLAB_DEPENDENCY_PROXY}node:14 qa-frontend-node:16: extends: .qa-frontend-node image: ${GITLAB_DEPENDENCY_PROXY}node:16 qa-frontend-node:latest: extends: - .qa-frontend-node - .frontend:rules:qa-frontend-node-latest image: ${GITLAB_DEPENDENCY_PROXY}node:latest webpack-dev-server: extends: - .default-retry - .yarn-cache - .frontend:rules:default-frontend-jobs stage: test needs: [] variables: WEBPACK_MEMORY_TEST: "true" WEBPACK_VENDOR_DLL: "true" script: - *yarn-install - run_timed_command "retry yarn webpack-vendor" - run_timed_command "node --expose-gc node_modules/.bin/webpack-dev-server --config config/webpack.config.js" artifacts: name: webpack-dev-server expire_in: 31d paths: - webpack-dev-server.json bundle-size-review: extends: - .default-retry - .frontend:rules:bundle-size-review image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:danger stage: test needs: ["compile-production-assets"] script: - source scripts/utils.sh - mkdir -p bundle-size-review - cp webpack-report/index.html bundle-size-review/bundle-report.html - yarn global add https://gitlab.com/gitlab-org/frontend/playground/webpack-memory-metrics.git - | danger_id=$(echo -n ${DANGER_GITLAB_API_TOKEN} | md5sum | awk '{print $1}' | cut -c5-10) run_timed_command "danger --dangerfile=danger/Dangerfile-bundle_size --fail-on-errors=true --verbose --danger_id=bundle-size-review-${danger_id}" artifacts: when: always name: bundle-size-review expire_in: 31d paths: - bundle-size-review .startup-css-check-base: extends: - .frontend-test-base script: - run_timed_command "yarn generate:startup_css" - yarn check:startup_css startup-css-check: extends: - .startup-css-check-base - .frontend:rules:default-frontend-jobs needs: - job: "compile-test-assets" - job: "rspec-all frontend_fixture" startup-css-check as-if-foss: extends: - .startup-css-check-base - .as-if-foss - .frontend:rules:default-frontend-jobs-as-if-foss needs: - job: "compile-test-assets as-if-foss" - job: "rspec-all frontend_fixture as-if-foss" .compile-storybook-base: extends: - .frontend-test-base - .storybook-yarn-cache script: - *storybook-yarn-install - yarn run storybook:build needs: ["graphql-schema-dump"] compile-storybook: extends: - .compile-storybook-base - .frontend:rules:default-frontend-jobs needs: - !reference [.compile-storybook-base, needs] - job: "rspec-all frontend_fixture" artifacts: name: storybook expire_in: 31d when: always paths: - storybook/public compile-storybook as-if-foss: extends: - .compile-storybook-base - .as-if-foss - .frontend:rules:default-frontend-jobs-as-if-foss needs: - !reference [.compile-storybook-base, needs] - job: "rspec-all frontend_fixture as-if-foss"