.frontend-base: extends: - .default-retry - .default-before_script - .assets-compile-cache variables: SETUP_DB: "false" # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 WEBPACK_VENDOR_DLL: "true" .compile-assets-base: extends: .frontend-base image: registry.gitlab.com/gitlab-org/gitlab-build-images:ruby-2.6.6-git-2.27-lfs-2.9-node-12.x-yarn-1.21-graphicsmagick-1.3.34 stage: prepare script: - node --version - run_timed_command "retry yarn install --frozen-lockfile" - free -m - run_timed_command "bin/rake gitlab:assets:compile > assets-compile.log 2>&1" - 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: - assets-compile.log # 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: - assets-compile.log - 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 - .shared:rules:update-cache stage: prepare artifacts: {} # This job's purpose is only to update the cache. cache: policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. update-assets-compile-test-cache: extends: - compile-test-assets - .shared:rules:update-cache stage: prepare artifacts: {} # This job's purpose is only to update the cache. cache: policy: push # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up. update-yarn-cache: extends: - .default-retry - .yarn-cache - .shared:rules:update-cache stage: prepare script: - source scripts/utils.sh - run_timed_command "retry yarn install --frozen-lockfile" cache: policy: push .frontend-fixtures-base: extends: - .frontend-base - .rails-cache - .use-pg11 stage: fixtures needs: ["setup-test-env", "compile-test-assets"] variables: SETUP_DB: "true" script: - run_timed_command "scripts/gitaly-test-build" - run_timed_command "scripts/gitaly-test-spawn" - run_timed_command "bin/rake frontend:fixtures" artifacts: name: frontend-fixtures expire_in: 31d when: always paths: - tmp/tests/frontend/ frontend-fixtures: extends: - .frontend-fixtures-base - .frontend:rules:default-frontend-jobs frontend-fixtures-as-if-foss: extends: - .frontend-fixtures-base - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss .frontend-test-base: extends: - .default-retry - .yarn-cache variables: USE_BUNDLE_INSTALL: "false" SETUP_DB: "false" stage: test before_script: - source scripts/utils.sh .karma-base: extends: .frontend-test-base variables: # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 script: - source scripts/utils.sh - export BABEL_ENV=coverage CHROME_LOG_FILE=chrome_debug.log - run_timed_command "retry yarn install --frozen-lockfile" - run_timed_command "yarn karma" karma: extends: - .karma-base - .frontend:rules:default-frontend-jobs needs: ["frontend-fixtures"] 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: ["frontend-fixtures-as-if-foss"] .jest-base: extends: .frontend-test-base script: - source scripts/utils.sh - run_timed_command "retry yarn install --frozen-lockfile" - run_timed_command "yarn jest --ci --coverage --testSequencer ./scripts/frontend/parallel_ci_sequencer.js" jest: extends: - .jest-base - .frontend:rules:default-frontend-jobs needs: ["frontend-fixtures"] 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: - source scripts/utils.sh - run_timed_command "retry yarn install --frozen-lockfile" - run_timed_command "yarn jest:integration --ci" needs: ["frontend-fixtures"] jest-as-if-foss: extends: - .jest-base - .frontend:rules:default-frontend-jobs-as-if-foss - .as-if-foss needs: ["frontend-fixtures-as-if-foss"] parallel: 2 coverage-frontend: extends: - .default-retry - .yarn-cache - .frontend:rules:ee-mr-and-master-only needs: ["jest"] stage: post-test before_script: - source scripts/utils.sh - run_timed_command "retry yarn install --frozen-lockfile" script: - run_timed_command "yarn node scripts/frontend/merge_coverage_frontend.js" 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: - source scripts/utils.sh - run_timed_command "yarn install --frozen-lockfile" - run_timed_command "yarn run webpack-prod" qa-frontend-node:10: extends: .qa-frontend-node image: node:dubnium qa-frontend-node:latest: extends: - .qa-frontend-node - .frontend:rules:qa-frontend-node-latest image: 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: - source scripts/utils.sh - run_timed_command "retry yarn install --frozen-lockfile" - 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