diff --git a/.circleci/config.yml b/.circleci/config.yml index 33d5102a8..dce6d4861 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,81 +1,112 @@ -defaults: &defaults - working_directory: ~/welcome-ui - docker: - - image: cimg/node:18.17.1 - version: 2.1 +orbs: + aws-cli: circleci/aws-cli@4.1.3 + aws-s3: circleci/aws-s3@4.0.0 + parameters: cache_version: type: string - default: v4 + default: v5 + nodejs_base_image: + type: string + default: 'cimg/node:18.17.1' -orbs: - aws-s3: circleci/aws-s3@2.0.0 +executors: + nodejs: + docker: + - image: << pipeline.parameters.nodejs_base_image >> + docker_builder: + resource_class: medium + machine: + image: ubuntu-2204:current + +default: &default + working_directory: /home/circleci/welcome-ui + +checkout: &checkout + checkout: + path: /home/circleci/welcome-ui + +restore_node_modules: &restore_node_modules + restore_cache: + keys: + - << pipeline.parameters.cache_version >>-yarn-{{ checksum "/home/circleci/welcome_ui/yarn.lock" }} jobs: checkout: - <<: *defaults + <<: *default + executor: nodejs steps: - - checkout + - *checkout + - run: + name: Run yarn install and save node modules + command: yarn install + - *restore_node_modules - save_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + key: << pipeline.parameters.cache_version >>-yarn-{{ checksum "/home/circleci/welcome-ui/yarn.lock" }} paths: - - ~/welcome-ui + - ~/.cache/yarn + - ~/welcome-ui/node_modules + - ~/welcome-ui/website/node_modules - yarn_install: - <<: *defaults + vulnerabilities_yarn: + <<: *default + executor: nodejs + resource_class: small steps: - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - - run: yarn install - - store_artifacts: - path: yarn.lock + - *checkout + - *restore_node_modules + - attach_workspace: + at: ~/welcome-ui + - run: + name: Critical vulnerabilities (yarn audit), lib versions and missing deps + command: yarn check:audit && yarn check:libs && yarn check:deps + + build: + <<: *default + executor: nodejs + resource_class: xlarge + steps: + - *checkout + - *restore_node_modules + - run: yarn icons:build + - run: yarn build - persist_to_workspace: root: ~/welcome-ui paths: - - node_modules - - website/node_modules + - packages/**/dist + - packages/Themes/**/dist + - icons/dist + - packages/IconFont/fonts lint: - <<: *defaults + <<: *default + executor: nodejs steps: - - attach_workspace: - at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - *checkout + - *restore_node_modules - run: yarn lint test: - <<: *defaults + <<: *default + executor: nodejs parallelism: 4 steps: + - *checkout + - *restore_node_modules - attach_workspace: at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - run: yarn jest --detectOpenHandles $(circleci tests glob "./packages/**/*.test.{ts,js,tsx}" | circleci tests split | xargs) - vulnerabilities_yarn: - <<: *defaults - docker: - - image: cimg/node:16.16.0 - steps: - - attach_workspace: - at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - - run: - name: Critical vulnerabilities test (yarn audit) and check no missing or unused dependencies - command: yarn check:audit && yarn check:deps - build_and_release_icon_font: - <<: *defaults + <<: *default + executor: nodejs steps: + - *checkout + - *restore_node_modules - attach_workspace: at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - run: yarn icons:collect --force - run: yarn webfont:build - run: @@ -84,6 +115,10 @@ jobs: echo "export ICON_FONT_HASH=$(sha1sum packages/IconFont/fonts/welcome-icon-font.woff2 | awk '{ print $1 }')" >> $BASH_ENV source $BASH_ENV yarn build:core + - aws-cli/setup: + aws_access_key_id: AWS_ACCESS_KEY_ID + aws_secret_access_key: AWS_SECRET_ACCESS_KEY + region: ${AWS_REGION} - aws-s3/sync: from: packages/IconFont/fonts to: s3://welcome-ui/public/fonts/icon-font/$ICON_FONT_HASH --cache-control 'public, max-age=31536000' --exclude '*' --include 'welcome-icon-font.woff' --include 'welcome-icon-font.woff2' @@ -95,32 +130,15 @@ jobs: arguments: | --metadata GitCommit=$CIRCLE_SHA1 --delete - build: - <<: *defaults - resource_class: xlarge - steps: - - attach_workspace: - at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - - run: yarn icons:build - - run: yarn build - - persist_to_workspace: - root: ~/welcome-ui - paths: - - packages/**/dist - - packages/Themes/**/dist - - icons/dist - - packages/IconFont/fonts - # current version build (common to previews & prod) website_build: - <<: *defaults + <<: *default + executor: nodejs steps: + - *checkout + - *restore_node_modules - attach_workspace: at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - run: yarn website:build - persist_to_workspace: root: ~/welcome-ui @@ -129,79 +147,90 @@ jobs: # current version deploy for previews website_deploy_preview: - <<: *defaults + <<: *default + executor: nodejs steps: + - *checkout + - *restore_node_modules - attach_workspace: at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - - run: node_modules/.bin/netlify deploy --filter=website --dir=website/out --alias $CIRCLE_BRANCH + - aws-cli/setup: + aws_access_key_id: AWS_ACCESS_KEY_ID + aws_secret_access_key: AWS_SECRET_ACCESS_KEY + region: ${AWS_REGION} + - aws-s3/sync: + from: website/out + to: s3://welcome-ui/preprod/$(echo "$CIRCLE_BRANCH" | sed "s/[^[:alnum:]-]/-/g" | tr '[:upper:]' '[:lower:]' | cut -c -63) # current version deploy for production website_deploy_prod: - <<: *defaults + <<: *default + executor: nodejs steps: + - *checkout + - *restore_node_modules - attach_workspace: at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - aws-cli/setup: + aws_access_key_id: AWS_ACCESS_KEY_ID + aws_secret_access_key: AWS_SECRET_ACCESS_KEY + region: ${AWS_REGION} - aws-s3/sync: from: website/out to: s3://welcome-ui/docs_production arguments: | --metadata GitCommit=$CIRCLE_SHA1 - - aws-s3/sync: - from: s3://welcome-ui/docs_production - to: docs_production - - run: node_modules/.bin/netlify deploy --filter=website --dir=docs_production --prod # previous versions build & deploy for production previous_website_versions_build_deploy_prod: - <<: *defaults + <<: *default + executor: nodejs steps: + - *checkout + - *restore_node_modules - attach_workspace: at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - run: name: build w/ prefix command: VERSION=$CIRCLE_BRANCH yarn website:build + - aws-cli/setup: + aws_access_key_id: AWS_ACCESS_KEY_ID + aws_secret_access_key: AWS_SECRET_ACCESS_KEY + region: ${AWS_REGION} - aws-s3/sync: from: website/out to: s3://welcome-ui/docs_production/$CIRCLE_BRANCH arguments: | --metadata GitCommit=$CIRCLE_SHA1 --delete - - aws-s3/sync: - from: s3://welcome-ui/docs_production - to: docs_production - - run: node_modules/.bin/netlify deploy --filter=website --dir=docs_production --prod release: - <<: *defaults + <<: *default + executor: nodejs steps: + - *checkout + - *restore_node_modules - attach_workspace: at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - run: - name: login to registry + name: Login to registry command: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc - run: - name: release to npm + name: Release to npm command: yarn lerna publish from-git --yes --no-verify-access prerelease: - <<: *defaults + <<: *default + executor: nodejs steps: + - *checkout + - *restore_node_modules - attach_workspace: at: ~/welcome-ui - - restore_cache: - key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} - run: - name: login to registry + name: Login to registry command: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc - run: - name: release to npm + name: Release to npm command: yarn lerna publish from-git --yes --no-verify-access --dist-tag next workflows: @@ -211,97 +240,79 @@ workflows: filters: tags: only: /.*/ - - yarn_install: - filters: - tags: - only: /.*/ - requires: - - checkout - vulnerabilities_yarn: filters: tags: only: /.*/ requires: - - yarn_install - - build_and_release_icon_font: - filters: - tags: - only: /.*/ - context: - - aws - requires: - - lint - - test + - checkout - build: filters: tags: only: /.*/ requires: - - yarn_install + - checkout - lint: filters: tags: only: /.*/ requires: - - yarn_install - build - test: filters: tags: only: /.*/ requires: - - yarn_install - build + - build_and_release_icon_font: + filters: + tags: + only: /.*/ + context: + - aws + requires: + - lint + - test - website_build: filters: tags: only: /.*/ requires: - build - - website_deploy_prod: + - website_deploy_preview: context: - aws - - netlify - welcome-ui + requires: + - website_build + - build_and_release_icon_font + - website_deploy_prod: filters: branches: ignore: /.*/ tags: only: /v5.(\d\d|\d).(\d\d|\d)/ - requires: - - test - - lint - - website_build - - build_and_release_icon_font - - website_deploy_preview: context: - - netlify + - aws - welcome-ui requires: - - test - - lint - website_build - build_and_release_icon_font - previous_website_versions_build_deploy_prod: - context: - - aws - - netlify - - welcome-ui filters: # should add branches here to keep previous doc version of future majors branches: only: /v3|v4/ + context: + - aws + - welcome-ui requires: - - test - - lint - build - build_and_release_icon_font - release: context: - welcome-ui requires: - - test - - lint - build - build_and_release_icon_font filters: @@ -309,17 +320,14 @@ workflows: ignore: /.*/ tags: only: /v\d.(\d\d|\d).(\d\d|\d)/ - - prerelease: context: - welcome-ui requires: - - test - - lint - build - build_and_release_icon_font filters: branches: ignore: /.*/ tags: - only: /v\d.(\d\d|\d).(\d\d|\d)-.*/ + only: /v\d.(\d\d|\d).(\d\d|\d)-.*/ \ No newline at end of file diff --git a/.circleci/config_old.yml b/.circleci/config_old.yml new file mode 100644 index 000000000..58b68cce0 --- /dev/null +++ b/.circleci/config_old.yml @@ -0,0 +1,334 @@ +defaults: &defaults + working_directory: ~/welcome-ui + docker: + - image: cimg/node:18.17.1 + +version: 2.1 + +parameters: + cache_version: + type: string + default: v4 + +orbs: + aws-s3: circleci/aws-s3@2.0.0 + +jobs: + checkout: + <<: *defaults + steps: + - checkout + - save_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + paths: + - ~/welcome-ui + + yarn_install: + <<: *defaults + steps: + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn install + - store_artifacts: + path: yarn.lock + - persist_to_workspace: + root: ~/welcome-ui + paths: + - node_modules + - website/node_modules + + lint: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn lint + + test: + <<: *defaults + parallelism: 4 + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn jest --detectOpenHandles $(circleci tests glob "./packages/**/*.test.{ts,js,tsx}" | circleci tests split | xargs) + + vulnerabilities_yarn: + <<: *defaults + docker: + - image: cimg/node:16.16.0 + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: + name: Critical vulnerabilities test (yarn audit) and check no missing or unused dependencies + command: yarn check:audit && yarn check:deps + + build_and_release_icon_font: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn icons:collect --force + - run: yarn webfont:build + - run: + name: prepare font hash + command: | + echo "export ICON_FONT_HASH=$(sha1sum packages/IconFont/fonts/welcome-icon-font.woff2 | awk '{ print $1 }')" >> $BASH_ENV + source $BASH_ENV + yarn build:core + - aws-s3/sync: + from: packages/IconFont/fonts + to: s3://welcome-ui/public/fonts/icon-font/$ICON_FONT_HASH --cache-control 'public, max-age=31536000' --exclude '*' --include 'welcome-icon-font.woff' --include 'welcome-icon-font.woff2' + arguments: | + --metadata GitCommit=$CIRCLE_SHA1 --delete + - aws-s3/sync: + from: packages/IconFont/fonts + to: s3://wttj-production/fonts/icon-font/$ICON_FONT_HASH --cache-control 'public, max-age=31536000' --exclude '*' --include 'welcome-icon-font.woff' --include 'welcome-icon-font.woff2' + arguments: | + --metadata GitCommit=$CIRCLE_SHA1 --delete + + build: + <<: *defaults + resource_class: xlarge + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn icons:build + - run: yarn build + - persist_to_workspace: + root: ~/welcome-ui + paths: + - packages/**/dist + - packages/Themes/**/dist + - icons/dist + - packages/IconFont/fonts + + # current version build (common to previews & prod) + website_build: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: yarn website:build + - persist_to_workspace: + root: ~/welcome-ui + paths: + - website/out + + # current version deploy for previews + website_deploy_preview: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: node_modules/.bin/netlify deploy --filter=website --dir=website/out --alias $CIRCLE_BRANCH + + # current version deploy for previews + docs_deploy_s3: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - aws-s3/sync: + from: docs/out + to: s3://welcome-ui/preprod/$(echo "$CIRCLE_BRANCH" | sed "s/[^[:alnum:]-]/-/g" | tr '[:upper:]' '[:lower:]' | cut -c -63) + + # current version deploy for production + website_deploy_prod: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - aws-s3/sync: + from: website/out + to: s3://welcome-ui/docs_production + arguments: | + --metadata GitCommit=$CIRCLE_SHA1 + - aws-s3/sync: + from: s3://welcome-ui/docs_production + to: docs_production + - run: node_modules/.bin/netlify deploy --filter=website --dir=docs_production --prod + + # previous versions build & deploy for production + previous_website_versions_build_deploy_prod: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: + name: build w/ prefix + command: VERSION=$CIRCLE_BRANCH yarn website:build + - aws-s3/sync: + from: website/out + to: s3://welcome-ui/docs_production/$CIRCLE_BRANCH + arguments: | + --metadata GitCommit=$CIRCLE_SHA1 --delete + - aws-s3/sync: + from: s3://welcome-ui/docs_production + to: docs_production + - run: node_modules/.bin/netlify deploy --filter=website --dir=docs_production --prod + + release: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: + name: login to registry + command: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc + - run: + name: release to npm + command: yarn lerna publish from-git --yes --no-verify-access + + prerelease: + <<: *defaults + steps: + - attach_workspace: + at: ~/welcome-ui + - restore_cache: + key: << pipeline.parameters.cache_version >>-welcome-ui-{{ .Environment.CIRCLE_SHA1 }} + - run: + name: login to registry + command: echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc + - run: + name: release to npm + command: yarn lerna publish from-git --yes --no-verify-access --dist-tag next + +workflows: + btd: + jobs: + - checkout: + filters: + tags: + only: /.*/ + - yarn_install: + filters: + tags: + only: /.*/ + requires: + - checkout + - vulnerabilities_yarn: + filters: + tags: + only: /.*/ + requires: + - yarn_install + - build_and_release_icon_font: + filters: + tags: + only: /.*/ + context: + - aws + requires: + - lint + - test + - build: + filters: + tags: + only: /.*/ + requires: + - yarn_install + - lint: + filters: + tags: + only: /.*/ + requires: + - yarn_install + - build + - test: + filters: + tags: + only: /.*/ + requires: + - yarn_install + - build + - website_build: + filters: + tags: + only: /.*/ + requires: + - build + - website_deploy_prod: + context: + - aws + - welcome-ui + filters: + branches: + ignore: /.*/ + tags: + only: /v5.(\d\d|\d).(\d\d|\d)/ + requires: + - test + - lint + - website_build + - build_and_release_icon_font + - docs_deploy_s3: + context: + - aws + - welcome-ui + requires: + - test + - lint + - website_build + - build_and_release_icon_font + - previous_website_versions_build_deploy_prod: + context: + - aws + - welcome-ui + filters: + # should add branches here to keep previous doc version of future majors + branches: + only: /v3|v4/ + requires: + - test + - lint + - build + - build_and_release_icon_font + - release: + context: + - welcome-ui + requires: + - test + - lint + - build + - build_and_release_icon_font + filters: + branches: + ignore: /.*/ + tags: + only: /v\d.\d.\d/ + - prerelease: + context: + - welcome-ui + requires: + - test + - lint + - build + - build_and_release_icon_font + filters: + branches: + ignore: /.*/ + tags: + only: /v\d.(\d\d|\d).(\d\d|\d)-.*/ diff --git a/.github/workflows/demo-link.yml b/.github/workflows/demo-link.yml index dc518d614..02de45259 100644 --- a/.github/workflows/demo-link.yml +++ b/.github/workflows/demo-link.yml @@ -24,5 +24,5 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, issue_number: pullRequestId, - body: `👀 [Visit Preview](https://${pullRequestBranch}--welcome-ui.netlify.app)` + body: `👀 [Visit Preview](https://${pullRequestBranch}.preprod.welcome-ui.com)` });