---
defaults: &defaults
  docker:
    - image: library/docker:17.06.0-ce
  working_directory: /tmp/build
  steps:
    - setup_remote_docker:
        version: 17.06.0-ce
        reusable: true
    - run:
        name: Check docker is running and install git
        command: |
          docker info
          apk update && apk upgrade && apk add --nocache \
            make \
            jq \
            git \
            bash \
            nodejs \
            nodejs-npm \
            openssh-client
    - checkout
    - run:
        name: Install npm dependencies
        working_directory: /tmp/build/automation
        command: |
            JOBS=max npm install \
              && npm cache clean
    - run:
        name: Initialize the submodules (yocto layers)
        command: |
            git submodule update --init --recursive
            git clean -fxd base-image
            git submodule foreach --recursive git clean -fxd
    - run:
        name: Build $ARCH-supervisor
        no_output_timeout: 10800
        command: |
            VERSION_TAG=v$(jq .version package.json | sed 's/"//g')
            if [ "${CIRCLE_BRANCH}" = "master" ]; then
              export EXTRA_TAG=$VERSION_TAG
            fi
            echo "Starting build.sh"
            if [ "$DOCKER_PASSWORD" != "" ]; then
              docker login --username $DOCKER_USERNAME --password $DOCKER_PASSWORD
              export PUSH_IMAGES=${PUSH_IMAGES}
            else
              export PUSH_IMAGES=false
            fi
            # start the build for this architecture
            export TAG=$(echo ${CIRCLE_BRANCH} | sed 's/[^a-z0-9A-Z_.-]/-/g')
            export ARCH=${ARCH}
            bash automation/build.sh
            if [ "${CIRCLE_BRANCH}" = "master" ] && [ "${DEPLOY_TO_RESIN}" = "true" ]; then
              echo "Deploying to Resin API (staging)"
              ARCH=${ARCH} TAG=$VERSION_TAG API_KEY=$STAGING_API_KEY API_ENDPOINT=$STAGING_API_ENDPOINT node automation/deploy-to-resin.js
              echo "Deploying to Resin API (production)"
              ARCH=${ARCH} TAG=$VERSION_TAG API_KEY=$PRODUCTION_API_KEY API_ENDPOINT=$PRODUCTION_API_ENDPOINT node automation/deploy-to-resin.js
            fi

version: 2
jobs:
  amd64:
    <<: *defaults
    environment:
      DOCKER_USERNAME: travisciresin
      ARCH: amd64
      PUSH_IMAGES: "true"
      STAGING_API_ENDPOINT: https://api.resinstaging.io
      PRODUCTION_API_ENDPOINT: https://api.resin.io
  i386:
    <<: *defaults
    environment:
      DOCKER_USERNAME: travisciresin
      ARCH: i386
      PUSH_IMAGES: "true"
      STAGING_API_ENDPOINT: https://api.resinstaging.io
      PRODUCTION_API_ENDPOINT: https://api.resin.io
  i386-nlp:
    <<: *defaults
    environment:
      DOCKER_USERNAME: travisciresin
      ARCH: i386-nlp
      PUSH_IMAGES: "true"
      STAGING_API_ENDPOINT: https://api.resinstaging.io
      PRODUCTION_API_ENDPOINT: https://api.resin.io
  armv7hf:
    <<: *defaults
    environment:
      DOCKER_USERNAME: travisciresin
      ARCH: armv7hf
      PUSH_IMAGES: "true"
      STAGING_API_ENDPOINT: https://api.resinstaging.io
      PRODUCTION_API_ENDPOINT: https://api.resin.io
  aarch64:
    <<: *defaults
    environment:
      DOCKER_USERNAME: travisciresin
      ARCH: aarch64
      PUSH_IMAGES: "true"
      STAGING_API_ENDPOINT: https://api.resinstaging.io
      PRODUCTION_API_ENDPOINT: https://api.resin.io
  rpi:
    <<: *defaults
    environment:
      DOCKER_USERNAME: travisciresin
      ARCH: rpi
      PUSH_IMAGES: "true"
      STAGING_API_ENDPOINT: https://api.resinstaging.io
      PRODUCTION_API_ENDPOINT: https://api.resin.io

workflows:
  version: 2
  build_and_maybe_deploy:
    jobs:
      - amd64
      - i386
      - rpi
      - armv7hf
      - aarch64
      - i386-nlp