version: 2.1 orbs: browser-tools: circleci/browser-tools@1.4.8 # Inspired by: # https://github.com/CircleCI-Public/circleci-demo-workflows/blob/workspace-forwarding/.circleci/config.yml # https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs # # For list of official CircleCI node.js images, go to: # https://hub.docker.com/r/cimg/node/tags/ jobs: install-and-cibuild: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - checkout - run: name: Set up build environment command: .circleci/env_build.sh - run: name: Pretest command: npm run pretest - run: name: CI-Build command: npm run cibuild - run: name: Delete git command: rm -rf .git - persist_to_workspace: root: /home/circleci paths: - plotly.js timezone-jasmine: docker: # need '-browsers' version to test in real (xvfb-wrapped) browsers - image: cimg/node:18.20.4-browsers working_directory: ~/plotly.js steps: - run: sudo apt-get update - browser-tools/install-browser-tools: install-firefox: false install-geckodriver: false install-chrome: true chrome-version: "127.0.6533.119" - attach_workspace: at: ~/ - run: name: Run hover_label test in UTC timezone environment: TZ: "UTC" command: date && npm run test-jasmine hover_label - run: name: Run hover_label test in Europe/Berlin timezone environment: TZ: "Europe/Berlin" command: date && npm run test-jasmine hover_label - run: name: Run hover_label test in Asia/Tokyo timezone environment: TZ: "Asia/Tokyo" command: date && npm run test-jasmine hover_label - run: name: Run hover_label test in America/Toronto timezone environment: TZ: "America/Toronto" command: date && npm run test-jasmine hover_label no-gl-jasmine: docker: # need '-browsers' version to test in real (xvfb-wrapped) browsers - image: cimg/node:18.20.4-browsers environment: # Alaska time (arbitrary timezone to test date logic) TZ: "America/Anchorage" parallelism: 12 working_directory: ~/plotly.js steps: - run: sudo apt-get update - browser-tools/install-browser-tools: install-firefox: false install-geckodriver: false install-chrome: true chrome-version: "127.0.6533.119" - attach_workspace: at: ~/ - run: name: Run jasmine tests (part A) command: .circleci/test.sh no-gl-jasmine webgl-jasmine: docker: # need '-browsers' version to test in real (xvfb-wrapped) browsers - image: cimg/node:18.20.4-browsers environment: # Alaska time (arbitrary timezone to test date logic) TZ: "America/Anchorage" parallelism: 8 working_directory: ~/plotly.js steps: - run: sudo apt-get update - browser-tools/install-browser-tools: install-firefox: false install-geckodriver: false install-chrome: true chrome-version: "127.0.6533.119" - attach_workspace: at: ~/ - run: name: Run jasmine tests (part B) command: .circleci/test.sh webgl-jasmine virtual-webgl-jasmine: docker: # need '-browsers' version to test in real (xvfb-wrapped) browsers - image: cimg/node:18.20.4-browsers environment: # Alaska time (arbitrary timezone to test date logic) TZ: "America/Anchorage" parallelism: 8 working_directory: ~/plotly.js steps: - run: sudo apt-get update - browser-tools/install-browser-tools: install-firefox: false install-geckodriver: false install-chrome: true chrome-version: "127.0.6533.119" - attach_workspace: at: ~/ - run: name: Run jasmine tests (part B) command: .circleci/test.sh virtual-webgl-jasmine webgl-jasmine-chromeLatest: docker: # need '-browsers' version to test in real (xvfb-wrapped) browsers - image: cimg/node:18.20.4-browsers environment: # Alaska time (arbitrary timezone to test date logic) TZ: "America/Anchorage" parallelism: 8 working_directory: ~/plotly.js steps: - browser-tools/install-browser-tools: &browser-versions install-firefox: false install-geckodriver: false install-chrome: true - attach_workspace: at: ~/ - run: name: Run jasmine tests (part B) command: .circleci/test.sh webgl-jasmine flaky-no-gl-jasmine: docker: # need '-browsers' version to test in real (xvfb-wrapped) browsers - image: cimg/node:18.20.4-browsers environment: # Alaska time (arbitrary timezone to test date logic) TZ: "America/Anchorage" working_directory: ~/plotly.js steps: - run: sudo apt-get update - browser-tools/install-browser-tools: install-firefox: false install-geckodriver: false install-chrome: true chrome-version: "127.0.6533.119" - attach_workspace: at: ~/ - run: name: Run jasmine tests (part C) command: .circleci/test.sh flaky-no-gl-jasmine bundle-jasmine: docker: # need '-browsers' version to test in real (xvfb-wrapped) browsers - image: cimg/node:18.20.4-browsers environment: # Alaska time (arbitrary timezone to test date logic) TZ: "America/Anchorage" working_directory: ~/plotly.js steps: - run: sudo apt-get update - browser-tools/install-browser-tools: install-firefox: false install-geckodriver: false install-chrome: true chrome-version: "127.0.6533.119" - attach_workspace: at: ~/ - run: name: Run jasmine tests (part D) command: .circleci/test.sh bundle-jasmine mathjax-firefoxLatest: docker: # need '-browsers' version to test in real (xvfb-wrapped) browsers - image: cimg/node:18.20.4-browsers environment: # Alaska time (arbitrary timezone to test date logic) TZ: "America/Anchorage" working_directory: ~/plotly.js steps: - browser-tools/install-browser-tools: install-chrome: false install-chromedriver: false - attach_workspace: at: ~/ - run: name: Test MathJax on firefox-latest command: .circleci/test.sh mathjax-firefox make-baselines-virtual-webgl: parallelism: 8 docker: - image: circleci/python:3.8.9 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Install kaleido, plotly.io and required fonts command: .circleci/env_image.sh - run: name: Create png files using virtual-webgl & WebGL v1 command: .circleci/test.sh make-baselines-virtual-webgl - persist_to_workspace: root: ~/ paths: - plotly.js make-baselines-mathjax3: docker: - image: circleci/python:3.8.9 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Install kaleido, plotly.io and required fonts command: .circleci/env_image.sh - run: name: Create mathjax v3 png files command: .circleci/test.sh make-baselines-mathjax3 - persist_to_workspace: root: ~/ paths: - plotly.js make-baselines: parallelism: 12 docker: - image: circleci/python:3.8.9 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Install kaleido, plotly.io and required fonts command: .circleci/env_image.sh - run: name: Create all png files command: .circleci/test.sh make-baselines - persist_to_workspace: root: ~/ paths: - plotly.js make-baselines-b64: parallelism: 12 docker: - image: circleci/python:3.8.9 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Install kaleido, plotly.io and required fonts command: .circleci/env_image.sh - run: name: Create all png files command: .circleci/test.sh make-baselines-b64 - persist_to_workspace: root: ~/ paths: - plotly.js test-baselines: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Compare pixels command: .circleci/test.sh test-image ; find build -maxdepth 1 -type f -delete - store_artifacts: path: build destination: / test-baselines-virtual-webgl: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Compare pixels command: .circleci/test.sh test-image-virtual-webgl ; find build -maxdepth 1 -type f -delete - store_artifacts: path: build destination: / test-baselines-b64: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Compare pixels command: .circleci/test.sh test-image ; find build -maxdepth 1 -type f -delete - store_artifacts: path: build destination: / test-baselines-mathjax3: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Compare pixels of mathjax v3 baselines command: .circleci/test.sh test-image-mathjax3 - store_artifacts: path: build destination: / make-exports: docker: - image: circleci/python:3.8.9 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Install kaleido, plotly.io and required fonts command: .circleci/env_image.sh - run: name: Install poppler-utils to have pdftops for exporting eps command: | sudo apt-get update --allow-releaseinfo-change sudo apt-get install poppler-utils - run: name: Create svg, jpg, jpeg, webp, pdf and eps files command: python3 test/image/make_exports.py - persist_to_workspace: root: ~/ paths: - plotly.js test-exports: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Test export sizes command: node test/image/export_test.js ; find build -maxdepth 1 -type f -delete - store_artifacts: path: build destination: / mock-validation: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Test validation using node.js and jsdom command: npm run test-plain-obj - run: name: Validate mocks command: npm run test-mock source-syntax: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - attach_workspace: at: ~/ - run: name: Run syntax tests on source files command: .circleci/test.sh source-syntax publish-dist: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - checkout - run: name: Set up build environment command: .circleci/env_build.sh - run: name: Preview CHANGELOG for next release (only on master) command: | if [ $CIRCLE_BRANCH == "master" ] then npm run use-draftlogs && git --no-pager diff --color-words CHANGELOG.md || true fi - run: name: Set draft version in package.json command: | node --eval "var fs = require('fs'); var inOut = './package.json'; var data = JSON.parse(fs.readFileSync(inOut)); var a = process.argv; data.version = a[a.length - 1].replace('v', ''); fs.writeFileSync(inOut, JSON.stringify(data, null, 2) + '\n');" `git describe` - run: name: View package.json diff between previous and next releases (including above draft version change) command: git --no-pager diff --color-words tags/$(git describe --tags --abbrev=0) package.json || true - run: name: Build dist/ command: npm run build - store_artifacts: path: dist destination: dist - run: name: View dist/README.md diff between previous and next releases (including new bundle sizes) command: git --no-pager diff --color-words tags/$(git describe --tags --abbrev=0) dist/README.md || true - run: name: Preview plot-schema diff between previous and next releases (only on master) command: | if [ $CIRCLE_BRANCH == "master" ] then git --no-pager diff tags/$(git describe --tags --abbrev=0) dist/plot-schema.json || true fi - run: name: Pack tarball command: | npm pack version=$(node --eval "console.log(require('./package.json').version)") mv plotly.js-$version.tgz plotly.js.tgz - store_artifacts: path: plotly.js.tgz destination: /plotly.js.tgz - run: name: Show URLs to build files command: | PROJECT_NUM=45646037 echo https://$CIRCLE_BUILD_NUM-$PROJECT_NUM-gh.circle-artifacts.com/0/plotly.js.tgz echo https://$CIRCLE_BUILD_NUM-$PROJECT_NUM-gh.circle-artifacts.com/0/dist/plotly.js echo https://$CIRCLE_BUILD_NUM-$PROJECT_NUM-gh.circle-artifacts.com/0/dist/plotly.min.js echo https://$CIRCLE_BUILD_NUM-$PROJECT_NUM-gh.circle-artifacts.com/0/dist/plot-schema.json - run: name: Test plot-schema.json diff - If failed, after (npm start) you could run (npm run schema && git add test/plot-schema.json && git commit -m "update plot-schema diff") command: diff --unified --color dist/plot-schema.json test/plot-schema.json - run: name: Test plotly.min.js import using amdefine command: npm run test-amdefine - run: name: Test plotly.min.js import using requirejs command: npm run test-requirejs test-stackgl-bundle: docker: - image: cimg/node:18.20.4 working_directory: ~/plotly.js steps: - checkout - run: name: Set up build environment command: cd stackgl_modules && npm ci - run: name: Bundle bundle-stackgl/index.js command: cd stackgl_modules && cp index.js INDEX.js && npm run bundle-stackgl - run: name: Test stackgl_modules/index.js diff - If failed please remember this file in auto generated and you should not modify it directly until a dependeny change. To suggest changes please submit pull request to the relevant dependency. command: diff --unified --color stackgl_modules/INDEX.js stackgl_modules/index.js - store_artifacts: path: stackgl_modules/index.js destination: stackgl_modules/index.js workflows: version: 2 build-and-test: jobs: - install-and-cibuild - timezone-jasmine: requires: - install-and-cibuild - bundle-jasmine: requires: - install-and-cibuild - mathjax-firefoxLatest: requires: - install-and-cibuild - no-gl-jasmine: requires: - install-and-cibuild - webgl-jasmine: requires: - install-and-cibuild - virtual-webgl-jasmine: requires: - install-and-cibuild - webgl-jasmine-chromeLatest: requires: - install-and-cibuild - flaky-no-gl-jasmine: requires: - install-and-cibuild - make-baselines-virtual-webgl: requires: - install-and-cibuild - test-baselines-virtual-webgl: requires: - make-baselines-virtual-webgl - make-baselines-mathjax3: requires: - install-and-cibuild - test-baselines-mathjax3: requires: - make-baselines-mathjax3 - make-baselines-b64: requires: - install-and-cibuild - test-baselines-b64: requires: - make-baselines-b64 - make-baselines: requires: - install-and-cibuild - test-baselines: requires: - make-baselines - make-exports: requires: - install-and-cibuild - test-exports: requires: - make-exports - mock-validation: requires: - install-and-cibuild - source-syntax: requires: - install-and-cibuild - publish-dist - test-stackgl-bundle