include: - project: "devops/gitlab-ci" file: "/snippets/.defaults.yaml" - project: "devops/gitlab-ci" file: "/snippets/.autoscaler-cypress-runner.yaml" - project: "devops/gitlab-ci" file: "/snippets/.autoscaler-runner.yaml" - local: "/apps/account/.gitlab-ci.yml" - local: "/apps/console/.gitlab-ci.yml" - local: "/apps/login/.gitlab-ci.yml" - local: "/apps/webapp/.gitlab-ci.yml" - local: "/packages/card/.gitlab-ci.yml" - local: "/packages/charts/.gitlab-ci.yml" workflow: rules: - if: $CI_PIPELINE_SOURCE == "schedule" when: never - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH .base: extends: .autoscaler-runner interruptible: true .base-with-pnpm: extends: .base before_script: - npm i -g pnpm@8.1.0 - pnpm config set store-dir ${PNPM_CACHE_FOLDER} - pnpm install --prefer-offline cache: - key: files: - pnpm-lock.yaml - key: turbo paths: - $TURBO_CACHE_FOLDER .build-push: image: eu.gcr.io/igenius-registry/devops/gitlab-ci/alpine3.12-docker19.03.9-awscli1.18.55 stage: build-push script: - | bm() { local begin=$(date +%s) "$@" local end=$(date +%s) echo Execution time: $(( $end - $begin )) seconds } - export BUILD_PUSH_LOCAL_IMAGE="${PROJECT_NAME}-${CI_JOB_ID}" - export GCR_IMAGE_NAME="${GCR_REGISTRY}/`echo ${CI_COMMIT_TAG} | sed -e 's/@igenius\///' | sed -e 's/@/:v/'`" - set | grep -E "ECR_|GCR_|AWS_|BUILD_PUSH_|PROJECT_|LATEST_|IGENIUS_|DOCKER_" | grep -v -E "PASS|USER|ACCESS|SECRET|AUTH" | grep -v -E "^CI_" - '[[ "${GCR_PUSH_ENABLED}" == "true" ]] && echo $GCR_PASSWORD | docker login -u "$GCR_USERNAME" --password-stdin https://eu.gcr.io' - bm docker build $BUILD_PUSH_DOCKERFILE_ARGS -f "$BUILD_PUSH_DOCKERFILE" -t "$BUILD_PUSH_LOCAL_IMAGE" "$BUILD_PUSH_PATH" - '[[ "${GCR_PUSH_ENABLED}" == "true" ]] && docker tag $BUILD_PUSH_LOCAL_IMAGE $GCR_IMAGE_NAME' - '[[ "${GCR_PUSH_ENABLED}" == "true" ]] && bm docker push $GCR_IMAGE_NAME' - echo Done # it's required to have success pipeline in case of falsy previous script line setup-npm: extends: .base image: alpine:3.14.1 stage: setup script: - touch .npmrc - echo $NPM_REGISTRY > .npmrc - echo $NPM_AUTH >> .npmrc artifacts: paths: - .npmrc npm-install: extends: .base-with-pnpm stage: install script: - pnpm run build --cache-dir="${TURBO_CACHE_FOLDER}" rules: - if: $CI_COMMIT_TAG when: never - when: on_success npm-test: extends: .base-with-pnpm stage: test image: $IGENIUS_CI_TEST_IMAGE script: - pnpm run test --cache-dir="${TURBO_CACHE_FOLDER}" rules: - if: $CI_COMMIT_TAG when: never - when: on_success npm-test-e2e: extends: .base-with-pnpm stage: test image: $IGENIUS_CI_E2E_TEST_IMAGE variables: CHOKIDAR_USEPOLLING: 1 script: - pnpm run test:e2e --cache-dir="${TURBO_CACHE_FOLDER}" default: image: $IGENIUS_CI_RUNTIME_IMAGE variables: NPM_REGISTRY: "@igenius_dev:registry=https://modules.igenius.net/repository/crystal-npm/" NPM_AUTH: "//modules.igenius.net/repository/crystal-npm/:_authToken=${NEXUS_TOKEN}" # cache CYPRESS_CACHE_FOLDER: "$CI_PROJECT_DIR/cache/Cypress" NPM_CACHE_FOLDER: "$CI_PROJECT_DIR/.npm" PNPM_CACHE_FOLDER: "$CI_PROJECT_DIR/.pnpm-store" TURBO_CACHE_FOLDER: "$CI_PROJECT_DIR/.turbo/cache" NODE_MODULES_FOLDER: node_modules # images IGENIUS_CI_RUNTIME_IMAGE: "node:18.2.0-buster" IGENIUS_CI_TEST_IMAGE: "node:18.2.0-buster" IGENIUS_CI_E2E_TEST_IMAGE: "cypress/browsers:node-18.14.1-chrome-111.0.5563.110-1-ff-111.0-edge-111.0.1661.51-1" # BUILD_DIR: "build" PROJECT_NAME: igenius-frontend # LATEST_IMAGE_LABEL: latest BUILD_PUSH_DOCKERFILE: Dockerfile BUILD_PUSH_PATH: "." GCR_PUSH_ENABLED: "true" GCR_REGISTRY: eu.gcr.io/igenius-registry AWS_DEFAULT_REGION: eu-west-1 DOCKER_BUILDKIT: 1 FF_USE_FASTZIP: "true" CACHE_COMPRESSION_LEVEL: "fastest"