version: 2.1 jobs: build: docker: - image: circleci/node:dubnium-browsers steps: - checkout - restore_cache: keys: - yarn-packages-{{ checksum "yarn.lock" }}-{{ .Environment.CACHE_VERSION }} - yarn-packages - run: yarn global add node-gyp && yarn install - save_cache: key: yarn-packages-{{ checksum "yarn.lock" }}-{{ .Environment.CACHE_VERSION }} paths: - node_modules test: docker: - image: circleci/node:dubnium-browsers steps: - checkout - restore_cache: keys: - yarn-packages-{{ checksum "yarn.lock" }}-{{ .Environment.CACHE_VERSION }} - run: command: yarn test prod: docker: - image: circleci/node:dubnium-browsers steps: - checkout - restore_cache: keys: - yarn-packages-{{ checksum "yarn.lock" }}-{{ .Environment.CACHE_VERSION }} - run: command : yarn run build - run: command: | cp dist/ /tmp/dist -r - store_artifacts: path: /tmp/dist - persist_to_workspace: root: /tmp paths: - dist deploy: docker: - image: circleci/node:dubnium-browsers working_directory: ~/deploy-netlfify steps: - attach_workspace: at: /tmp - run: command: | sudo npm install -g --silent netlify-cli netlify deploy --prod --auth $NETLIFY_TOKEN --dir=/tmp/dist --site $NETLIFY_SITE_ID build_image: docker: - image: circleci/buildpack-deps:stretch steps: - checkout - setup_remote_docker - run: name: Build Docker image command: docker build -t sukiadoramu/devops-front:app . - run: name: Archive Docker image command: docker save -o image.tar sukiadoramu/devops-front - persist_to_workspace: root: . paths: - ./image.tar publish_latest: docker: - image: circleci/buildpack-deps:stretch steps: - attach_workspace: at: /tmp/workspace - setup_remote_docker - run: name: Load archived Docker image command: docker load -i /tmp/workspace/image.tar - run: name: Publish Docker Image to Docker Hub command: | echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin docker tag sukiadoramu/devops-front:app sukiadoramu/devops-front:$CIRCLE_BUILD_NUM docker tag sukiadoramu/devops-front:app sukiadoramu/devops-front:latest docker push sukiadoramu/devops-front:latest docker push sukiadoramu/devops-front:$CIRCLE_BUILD_NUM workflows: build_and_test: jobs: - build - prod: requires: - build - deploy: requires: - prod - build_image: requires: - build - publish_latest: requires: - build_image