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 vakhrushev.me >> ~/.ssh/known_hosts
  #     - run: cat docker/deploy-prod | ssh dayoff@vakhrushev.me 

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