stages: - test - lint - build - deploy - review - dast - staging - canary - production - incremental rollout 10% - incremental rollout 25% - incremental rollout 50% - incremental rollout 100% - performance - cleanup lint: stage: lint image: node:18 before_script: - git checkout $CI_COMMIT_BRANCH - git config user.name metahkg-bot - git config user.email bot@metahkg.org - git remote set-url origin https://wcyat:$gitlab_token@gitlab.com/$CI_PROJECT_PATH script: - yarn install - yarn lint - git commit -a -m lint || exit 0 - git push origin $CI_COMMIT_BRANCH rules: - if: $CI_COMMIT_TAG when: never - if: $CI_COMMIT_AUTHOR != "metahkg-bot " docker-build: image: docker:latest stage: build services: - docker:dind before_script: - apk add nodejs-current - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - version=$(node -e 'console.log(require("./package.json").version)') - docker build --build-arg REACT_APP_build=$CI_COMMIT_SHORT_SHA --build-arg REACT_APP_version=$version --pull -t "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:latest" -t "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:$CI_COMMIT_SHORT_SHA" -t "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:$version" . - docker push "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:latest" - docker push "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:$CI_COMMIT_SHORT_SHA" - docker push "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:$version" rules: - if: $CI_COMMIT_TAG when: never - if: "$CI_COMMIT_BRANCH" exists: - Dockerfile - if: $CI_COMMIT_TAG when: never tagging: image: node:18-alpine stage: deploy allow_failure: true before_script: - apk add git script: - git config --global user.name metahkg-bot - git config --global user.email bot@metahkg.org - tag=$(node -e "console.log(require('./package.json').version)") - if [ $CI_COMMIT_BRANCH = "dev" ]; then tag=${tag}-dev; fi; - git tag "$tag" - git push --tags https://root:$gitlab_token@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:${CI_COMMIT_BRANCH} rules: - if: $CI_COMMIT_AUTHOR != "metahkg-bot " && ($CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "master") - if: $CI_COMMIT_TAG when: never publish: image: node:latest stage: deploy allow_failure: true script: - yarn install - yarn lint - yarn build:module # login to npm registry - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' >> .npmrc # Extract a few values from package.json - if [ "$CI_COMMIT_BRANCH" = "dev" ]; then suffix="-dev"; else suffix=""; fi; - NPM_PACKAGE_ORIGINAL_VERSION=$(node -p "require('./package.json').version") - NPM_PACKAGE_VERSION=$(node -p "require('./package.json').version + \"${suffix}\"") - sed -i "s/${NPM_PACKAGE_ORIGINAL_VERSION}/${NPM_PACKAGE_VERSION}/" package.json - if [ "$CI_COMMIT_BRANCH" = "dev" ]; then npm publish --tag dev; else npm publish; fi; rules: - if: $CI_COMMIT_TAG container_scanning: stage: review needs: [ "docker-build" ] variables: GIT_STRATEGY: fetch CI_APPLICATION_REPOSITORY: "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH" CI_APPLICATION_TAG: $CI_COMMIT_SHORT_SHA CLAIR_OUTPUT: High artifacts: paths: - gl-container-scanning-report.json rules: - if: $CI_COMMIT_TAG when: never sast: stage: test rules: - if: $CI_COMMIT_TAG when: never tagging: image: node:18-alpine stage: deploy allow_failure: true before_script: - apk add git script: - git config --global user.name metahkg-bot - git config --global user.email bot@metahkg.org - tag=$(node -e "console.log(require('./package.json').version)") - if [ $CI_COMMIT_BRANCH = "dev" ]; then tag=${tag}-dev; fi; - git tag "$tag" - git push https://root:$gitlab_token@$CI_SERVER_HOST/$CI_PROJECT_PATH.git $tag rules: - if: $CI_COMMIT_TAG when: never - if: $CI_COMMIT_AUTHOR != "metahkg-bot " && ($CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "master") publish: image: node:latest stage: deploy allow_failure: true script: - yarn install - yarn lint - yarn build:module - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' >> .npmrc - NPM_PACKAGE_ORIGINAL_VERSION=$(node -p "require('./package.json').version") - NPM_PACKAGE_VERSION=$CI_COMMIT_TAG - sed -i "s/${NPM_PACKAGE_ORIGINAL_VERSION}/${NPM_PACKAGE_VERSION}/" package.json - if [ "$CI_COMMIT_TAG" = "${NPM_PACKAGE_ORIGINAL_VERSION}-dev" ]; then npm publish --tag dev; else npm publish; fi; rules: - if: $CI_COMMIT_TAG container_scanning: stage: review needs: [ "docker-build" ] variables: GIT_STRATEGY: fetch CI_APPLICATION_REPOSITORY: "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH" CI_APPLICATION_TAG: $CI_COMMIT_SHORT_SHA CLAIR_OUTPUT: High artifacts: paths: - gl-container-scanning-report.json rules: - if: $CI_COMMIT_TAG when: never sast: stage: test rules: - if: $CI_COMMIT_TAG when: never tagging: image: node:18-alpine stage: deploy allow_failure: true before_script: - apk add git script: - git config --global user.name metahkg-bot - git config --global user.email bot@metahkg.org - tag=$(node -e "console.log(require('./package.json').version)") - if [ $CI_COMMIT_BRANCH = "dev" ]; then tag=${tag}-dev; fi; - git tag "$tag" - git push https://root:$gitlab_token@$CI_SERVER_HOST/$CI_PROJECT_PATH.git $tag rules: - if: $CI_COMMIT_TAG when: never - if: $CI_COMMIT_AUTHOR != "metahkg-bot " && ($CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "master") publish: image: node:latest stage: deploy allow_failure: true script: - yarn install - yarn lint - yarn build:module - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' >> .npmrc - NPM_PACKAGE_ORIGINAL_VERSION=$(node -p "require('./package.json').version") - NPM_PACKAGE_VERSION=$CI_COMMIT_TAG - sed -i "s/${NPM_PACKAGE_ORIGINAL_VERSION}/${NPM_PACKAGE_VERSION}/" package.json - if [ "$CI_COMMIT_TAG" = "${NPM_PACKAGE_ORIGINAL_VERSION}-dev" ]; then npm publish --tag dev; else npm publish; fi; rules: - if: $CI_COMMIT_TAG container_scanning: stage: review needs: [ "docker-build" ] variables: GIT_STRATEGY: fetch CI_APPLICATION_REPOSITORY: "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH" CI_APPLICATION_TAG: $CI_COMMIT_SHORT_SHA CLAIR_OUTPUT: High artifacts: paths: - gl-container-scanning-report.json rules: - if: $CI_COMMIT_TAG when: never sast: stage: test rules: - if: $CI_COMMIT_TAG when: never tagging: image: node:18-alpine stage: deploy allow_failure: true before_script: - apk add git script: - git config --global user.name metahkg-bot - git config --global user.email bot@metahkg.org - tag=$(node -e "console.log(require('./package.json').version)") - if [ $CI_COMMIT_BRANCH = "dev" ]; then tag=${tag}-dev; fi; - git tag "$tag" - git push https://root:$gitlab_token@$CI_SERVER_HOST/$CI_PROJECT_PATH.git $tag rules: - if: $CI_COMMIT_TAG when: never - if: $CI_COMMIT_AUTHOR != "metahkg-bot " && ($CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "master") publish: image: node:latest stage: deploy allow_failure: true script: - yarn install - yarn lint - yarn build:module - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' >> .npmrc - NPM_PACKAGE_ORIGINAL_VERSION=$(node -p "require('./package.json').version") - NPM_PACKAGE_VERSION=$CI_COMMIT_TAG - sed -i "s/${NPM_PACKAGE_ORIGINAL_VERSION}/${NPM_PACKAGE_VERSION}/" package.json - if [ "$CI_COMMIT_TAG" = "${NPM_PACKAGE_ORIGINAL_VERSION}-dev" ]; then npm publish --tag dev; else npm publish; fi; rules: - if: $CI_COMMIT_TAG container_scanning: stage: review needs: [ "docker-build" ] variables: GIT_STRATEGY: fetch CI_APPLICATION_REPOSITORY: "$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH" CI_APPLICATION_TAG: $CI_COMMIT_SHORT_SHA CLAIR_OUTPUT: High artifacts: paths: - gl-container-scanning-report.json rules: - if: $CI_COMMIT_TAG when: never sast: stage: test rules: - if: $CI_COMMIT_TAG when: never include: - template: Auto-DevOps.gitlab-ci.yml