image: node:16-alpine stages: - test - build - deploy # Prevent detached merge request pipelines # https://docs.gitlab.com/ee/ci/merge_request_pipelines/ # Those do not run the environment on_stop jobs when MRs are closed/merged # or when branches get deleted, unlike branch pipelines. workflow: rules: - if: '$CI_MERGE_REQUEST_ID' when: never - when: always before_script: - npm ci frontend-test: stage: test script: - npm run test -- --reporter=xunit --reporter-option output=test-report.xml artifacts: when: always reports: junit: - test-report.xml frontend-lint: stage: test before_script: - npm ci - apk add py3-pip bash git build-base python3-dev - pip3 install pre-commit script: - pre-commit run -a frontend-audit: stage: test script: - npm audit --parseable allow_failure: true .build: stage: build # Ignore frontend-audit to speed up CI builds needs: - frontend-test - frontend-lint artifacts: paths: - dist expire_in: 2 weeks frontend-build-surge: extends: .build # Only deploy branches on surge rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master"' when: on_success - when: never variables: # On merge requests we build using preprod to be able # to test on surge.sh VUE_APP_API_BASE_URL: https://preprod.arkindex.teklia.com/api/v1 script: - npm run surge frontend-build: extends: .build # Build only for master and tags rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master"' when: never - when: on_success script: - npm run production docker-build: stage: build image: docker:20.10 services: - docker:dind # Needed to avoid triggering global npm ci before_script: - '' except: - schedules script: - ci/build.sh frontend-deploy: image: python:3-alpine stage: deploy rules: - if: '$CI_COMMIT_TAG' when: on_success - when: never dependencies: - frontend-build # Needed to avoid triggering global npm ci before_script: - '' script: - ci/deploy.sh sentry-source-maps: image: getsentry/sentry-cli stage: deploy rules: - if: '$CI_COMMIT_TAG' when: on_success - when: never variables: RELEASE: "arkindex-frontend@$CI_COMMIT_TAG" SENTRY_ORG: teklia SENTRY_PROJECT: arkindex-frontend dependencies: - frontend-build # Needed to avoid triggering global npm ci before_script: - '' script: - sentry-cli releases new $RELEASE - sentry-cli releases files $RELEASE upload-sourcemaps dist - sentry-cli releases finalize $RELEASE .surge: stage: deploy environment: name: ${CI_COMMIT_REF_SLUG} before_script: - npm install -g surge deploy-surge: extends: .surge # Only deploy branches on surge rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master"' when: on_success - when: never environment: url: https://${CI_COMMIT_REF_SLUG}-teklia.surge.sh on_stop: stop-surge script: - surge dist ${CI_ENVIRONMENT_URL} stop-surge: extends: .surge # Only deploy branches on surge rules: - if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BRANCH != "master"' when: manual allow_failure: true - when: never # Do not try to checkout the branch if it was deleted variables: GIT_STRATEGY: none environment: action: stop script: - surge teardown ${CI_ENVIRONMENT_URL} release-notes: stage: deploy image: registry.gitlab.teklia.com/infra/devops:latest only: - tags # Needed to avoid triggering global npm ci before_script: - '' script: - devops release-notes