version: 2.1 jobs: build_server: docker: - image: alpine:3.10.3 steps: - checkout - run: ./docker/provide-crystal-alpine - run: shards install - run: make spec STAGE=prod - run: make build STAGE=prod - persist_to_workspace: root: build paths: ['*'] build_assets: docker: - image: circleci/node:12.13 steps: - checkout - run: npm ci - run: npm run-script build-prod - run: ls -la ./public/assets - persist_to_workspace: root: public/assets paths: ['*'] build_docker_image: docker: - image: docker:19.03 steps: - attach_workspace: at: /tmp/data - run: ls -la /tmp/data - checkout - run: mkdir -p ./build/ - run: cp /tmp/data/dayoff ./build/dayoff - run: mkdir -p ./public/assets/ - run: cp /tmp/data/main.css /tmp/data/main.js ./public/assets/ - setup_remote_docker - run: echo "$YANDEX_CLOUD_DOCKER_REGISTRY_KEY" | docker login --username json_key --password-stdin cr.yandex - run: docker build --file ./docker/Dockerfile.prod --tag cr.yandex/crplfk0168i4o8kd7ade/dayoff . - run: docker push cr.yandex/crplfk0168i4o8kd7ade/dayoff deploy_app: docker: - image: alpine:3.10.3 steps: - checkout - add_ssh_keys - run: apk add -u openssh-client - run: ssh-keyscan "$TARGET_HOST" >> ~/.ssh/known_hosts - run: echo "$YANDEX_CLOUD_DOCKER_REGISTRY_KEY" | ssh "dayoff@$TARGET_HOST" -T "cat > /home/dayoff/yandex_cloud_docker_registry_key.json" - run: cat docker/deploy-prod | ssh "dayoff@$TARGET_HOST" workflows: version: 2 test_and_build: jobs: - build_server - build_assets - build_docker_image: requires: - build_server - build_assets filters: branches: only: master - deploy_app: requires: - build_docker_image filters: branches: only: master