diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dcab6143bbbd60a26a5a6942a1b90e17fe35b19e..08a25e8c9695ab00de14a2606c7ffce1a7a56e82 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,17 +1,139 @@ -# -# https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates/Nodejs.gitlab-ci.yml -# -image: node:latest +image: node:lts-alpine -# Cache modules in between jobs -cache: - key: $CI_COMMIT_REF_SLUG - paths: - - .npm/ +stages: + - install + - build + - quality + # - deploy + - audit -before_script: - - npm ci --cache .npm --prefer-offline +variables: + npm_config_cache: "$CI_PROJECT_DIR/.npm" -test_async: +install: + stage: install script: - - npm run test:unit \ No newline at end of file + - npm ci + artifacts: + name: "artifacts" + untracked: true + expire_in: 60 mins + paths: + - .npm/ + - node_modules/ + +build: + stage: build + script: + - CI=false npm run build + artifacts: + paths: + - build + expire_in: 60 mins + dependencies: + - install + +linting: + stage: quality + script: + - npm run lint + dependencies: + - install + +test:unit: + stage: quality + script: + - npm run test:unit + dependencies: + - install + coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/ + +# test:e2e: +# stage: quality +# image: cypress/browsers:chrome69 +# dependencies: +# - install +# - build +# script: +# - npm run e2e:ci +# artifacts: +# paths: +# - cypress/screenshots +# - cypress/videos +# expire_in: 1 day + +# .deploy: +# stage: deploy +# before_script: +# - npm install -g firebase-tools +# - (if [ -d "build" ]; then echo ok; else exit "no build folder, try to run pipeline again"; fi); +# script: +# - firebase deploy --token $FIREBASE_TOKEN --non-interactive --only hosting:$ENV +# when: manual + +# deploy_to_alpha: +# environment: +# name: alpha +# url: $ALPHA_URL +# extends: .deploy +# variables: +# ENV: alpha +# except: +# - develop +# - main + +# deploy_to_beta: +# environment: +# name: beta +# url: $BETA_URL +# extends: .deploy +# variables: +# ENV: beta +# only: +# - develop + +# deploy_to_prod: +# environment: +# name: prod +# url: $PROD_URL +# extends: .deploy +# variables: +# ENV: prod +# only: +# refs: +# - main + +.lighthouse: + image: markhobson/node-chrome + stage: audit + before_script: + - npm i -g lighthouse + script: + - lighthouse --chrome-flags="--headless --no-sandbox" $LIGHTHOUSE_TEST_URL --output html --output-path ./report.html + artifacts: + paths: + - ./report.html + expire_in: 1 week + when: manual + +# run_lighthouse_alpha: +# extends: .lighthouse +# variables: +# LIGHTHOUSE_TEST_URL: $ALPHA_URL +# except: +# - develop +# - main + +# run_lighthouse_beta: +# extends: .lighthouse +# variables: +# LIGHTHOUSE_TEST_URL: $BETA_URL +# only: +# - develop + +run_lighthouse_prod: + extends: .lighthouse + variables: + LIGHTHOUSE_TEST_URL: $PROD_URL + only: + - main