version: 2.1 commands: install_dependencies: description: "Installs dependencies and uses CircleCI's cache" steps: - checkout - restore_cache: keys: - dependencies-{{ checksum "yarn.lock" }} - dependencies- - run: command: | yarn install - save_cache: paths: - node_modules key: dependencies-{{ checksum "yarn.lock" }} jobs: style: docker: - image: node:latest steps: - install_dependencies - run: name: prettier command: | yarn prettier --check - run: name: lint command: | yarn lint dashboard: docker: - image: node:latest steps: - install_dependencies - run: name: typecheck command: | yarn typecheck - run: name: test command: | yarn test --coverage - run: name: coverage command: | yarn coverage build: docker: - image: docker:latest steps: - checkout - setup_remote_docker: version: 20.10.7 - run: name: Load Docker image layer cache command: | set +o pipefail docker load -i /caches/app.tar | true - run: name: Build application Docker image command: | docker build --cache-from=app -t app . - run: name: Save Docker image layer cache command: | mkdir -p /caches docker save -o /caches/app.tar app - save_cache: key: v1-{{ .Branch }}-{{ epoch }} paths: - /caches/app.tar - deploy: name: Push application Docker image command: | docker login --username ${DOCKER_USER} --password ${DOCKER_PASSWORD} docker tag app phntxx/dashboard:latest docker push phntxx/dashboard:latest workflows: version: 2 dashboard: jobs: - style - dashboard - build: requires: - style - dashboard