.yarn-install: &yarn-install - source scripts/utils.sh - run_timed_command "retry yarn install --frozen-lockfile" .compile-assets-base: extends: - .default-retry - .default-before_script - .assets-compile-cache image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.7.2-git-2.31-lfs-2.9-node-14.15-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 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 .frontend-fixtures-base: extends: - .default-retry - .default-before_script - .rails-cache - .use-pg12 stage: fixtures needs: ["setup-test-env", "retrieve-tests-metadata", "compile-test-assets"] 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 "--tag frontend_fixture" artifacts: name: frontend-fixtures expire_in: 31d when: always paths: - tmp/tests/frontend/ - knapsack/ rspec frontend_fixture: extends: - .frontend-fixtures-base - .frontend:rules:default-frontend-jobs rspec frontend_fixture as-if-foss: extends: - .frontend-fixtures-base - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss rspec-ee frontend_fixture: extends: - .frontend-fixtures-base - .frontend:rules:default-frontend-jobs-ee parallel: 2 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 .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" stage: test eslint-as-if-foss: extends: - .frontend-test-base - .frontend:rules:eslint-as-if-foss - .as-if-foss needs: [] script: - *yarn-install - run_timed_command "yarn run lint:eslint:all" .karma-base: extends: .frontend-test-base script: - export BABEL_ENV=coverage CHROME_LOG_FILE=chrome_debug.log - *yarn-install - run_timed_command "yarn karma" karma: extends: - .karma-base - .frontend:rules:default-frontend-jobs needs: - job: "rspec frontend_fixture" - job: "rspec-ee frontend_fixture" optional: true coverage: '/^Statements *: (\d+\.\d+%)/' artifacts: name: coverage-javascript expire_in: 31d when: always paths: - chrome_debug.log - coverage-javascript/ - tmp/tests/frontend/ reports: junit: junit_karma.xml cobertura: coverage-javascript/cobertura-coverage.xml karma-as-if-foss: extends: - .karma-base - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss needs: ["rspec frontend_fixture as-if-foss"] .jest-base: extends: .frontend-test-base script: - *yarn-install - run_timed_command "yarn jest --ci --coverage --testSequencer ./scripts/frontend/parallel_ci_sequencer.js" jest: extends: - .jest-base - .frontend:rules:default-frontend-jobs needs: - job: "rspec frontend_fixture" - job: "rspec-ee frontend_fixture" optional: true artifacts: name: coverage-frontend expire_in: 31d when: always paths: - coverage-frontend/ - junit_jest.xml - tmp/tests/frontend/ reports: junit: junit_jest.xml parallel: 4 jest-integration: extends: - .frontend-test-base - .frontend:rules:default-frontend-jobs script: - *yarn-install - run_timed_command "yarn jest:integration --ci" needs: - job: "rspec frontend_fixture" - job: "rspec-ee frontend_fixture" optional: true - job: "graphql-schema-dump" jest-as-if-foss: extends: - .jest-base - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss needs: ["rspec frontend_fixture as-if-foss"] parallel: 2 coverage-frontend: extends: - .default-retry - .yarn-cache - .frontend:rules:ee-mr-and-default-branch-only needs: ["jest"] 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. - rm -r coverage-frontend/jest-* coverage: '/^Statements\s*:\s*?(\d+(?:\.\d+)?)%/' artifacts: name: coverage-frontend expire_in: 31d paths: - coverage-frontend/ reports: cobertura: 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:10: extends: .qa-frontend-node image: ${GITLAB_DEPENDENCY_PROXY}node:dubnium 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.gitlab.com/gitlab-org/gitlab-build-images:danger stage: test needs: ["compile-production-assets"] script: - 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 --dangerfile=danger/bundle_size/Dangerfile --fail-on-errors=true --verbose --danger_id=bundle-size-review artifacts: when: always name: bundle-size-review expire_in: 31d paths: - bundle-size-review .startup-css-check-base: extends: - .frontend-test-base script: - *yarn-install - 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 frontend_fixture" - job: "rspec-ee frontend_fixture" optional: true 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 frontend_fixture as-if-foss"