image: registry.gitlab.com/openstapps/app before_script: - npm ci default: tags: - performance interruptible: true stages: - setup - build - test - publish - deploy - ui test setup: image: registry.gitlab.com/openstapps/projectmanagement/builder stage: setup only: - schedules variables: DOCKER_DRIVER: overlay2 services: - docker:dind script: - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com - docker build -t registry.gitlab.com/openstapps/app . - docker push registry.gitlab.com/openstapps/app cache: {} # disable irrelevant cache for this job before_script: [] # do not run irrelevant before script for this job tags: - dind interruptible: false build: stage: build script: - npm run build artifacts: paths: - www except: - schedules scheduled-build: stage: build script: - npm run build only: - schedules lint: stage: build script: - npm run lint format: stage: build script: - npm run format:check unit: stage: test script: - npm run check-icons - npm run test -- --watch=false --no-progress --code-coverage coverage: '/Statements[^:]*\:[^:]*\s+([\d\.]+)%/' artifacts: paths: - coverage reports: coverage_report: coverage_format: cobertura path: coverage/cobertura-coverage.xml .e2e-chrome: image: registry.gitlab.com/openstapps/projectmanagement/cypress stage: test script: - npm run e2e -- --watch=false --headless=true --browser=chrome artifacts: when: on_failure paths: - cypress/videos - cypress/screenshots .e2e-firefox: image: registry.gitlab.com/openstapps/projectmanagement/cypress stage: test script: - npm run e2e -- --watch=false --headless=true --browser=firefox artifacts: when: on_failure paths: - cypress/videos - cypress/screenshots ui-chrome: extends: .e2e-chrome rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: never - if: ($CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "main") when: always allow_failure: false - if: ($CI_COMMIT_REF_NAME != "develop" && $CI_COMMIT_REF_NAME != "main") when: never ui-firefox: extends: .e2e-firefox rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: never - if: ($CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "main") when: always allow_failure: false - if: ($CI_COMMIT_REF_NAME != "develop" && $CI_COMMIT_REF_NAME != "main") when: never e2e-chrome: extends: .e2e-chrome stage: ui test rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: never - if: ($CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "main") when: never - if: ($CI_COMMIT_REF_NAME != "develop" && $CI_COMMIT_REF_NAME != "main") when: manual allow_failure: false e2e-firefox: extends: .e2e-firefox stage: ui test rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: never - if: ($CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "main") when: never - if: ($CI_COMMIT_REF_NAME != "develop" && $CI_COMMIT_REF_NAME != "main") when: manual allow_failure: false audit: stage: test script: - npm audit allow_failure: true except: - schedules scheduled-audit: stage: test script: - npm audit --production only: - schedules pages: stage: publish script: - npm run documentation - mv docs public only: - main except: - schedules artifacts: paths: - public review: stage: deploy script: - npm run build:prod - .gitlab/ci/enableGitlabReviewToolbar.sh www/index.html "$CI_PROJECT_ID" "$CI_OPEN_MERGE_REQUESTS" - cp www/index.html www/200.html - ./node_modules/.bin/surge -p ./www -d https://$CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh/ environment: name: review/$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_NAME url: https://$CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh/ on_stop: stop_review rules: - if: ($CI_COMMIT_REF_NAME != "develop" && $CI_COMMIT_REF_NAME != "main" && $CI_MERGE_REQUEST_EVENT_TYPE != "merge_train" && ($CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web")) stop_review: stage: deploy script: - ./node_modules/.bin/surge teardown $CI_PROJECT_PATH_SLUG-$CI_ENVIRONMENT_SLUG.surge.sh when: manual environment: name: review/$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_NAME action: stop rules: - if: ($CI_COMMIT_REF_NAME != "develop" && $CI_COMMIT_REF_NAME != "main" && $CI_MERGE_REQUEST_EVENT_TYPE != "merge_train" && ($CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "web")) staging: stage: deploy script: - npm run build:prod - cp www/index.html www/200.html - ./node_modules/.bin/surge -p ./www -d https://$CI_PROJECT_PATH_SLUG-staging.surge.sh/ environment: name: staging url: https://$CI_PROJECT_PATH_SLUG-staging.surge.sh/ only: - develop except: - schedules production_demo: stage: deploy script: - npm run build:prod - cp www/index.html www/200.html - ./node_modules/.bin/surge -p ./www -d https://$CI_PROJECT_PATH_SLUG.surge.sh/ environment: name: production url: https://$CI_PROJECT_PATH_SLUG.surge.sh/ only: - main except: - schedules