name: joystream-node-docker
on: push

jobs:
  build:
    name: Build joystream/node Docker image
    if: github.repository == 'Joystream/joystream'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: '12.x'

      - id: compute_shasum
        name: Compute runtime code shasum
        run: |
          export RUNTIME_CODE_SHASUM=`scripts/runtime-code-shasum.sh`
          echo "::set-output name=shasum::${RUNTIME_CODE_SHASUM}"

      - name: Setup cache directory
        run: mkdir ~/docker-images

      - name: Cache docker images
        uses: actions/cache@v2
        env:
          cache-name: joystream-node-docker
        with:
          path: ~/docker-images
          key: ${{ env.cache-name }}-${{ steps.compute_shasum.outputs.shasum }}

      - name: Check if we have cached image
        continue-on-error: true
        run: |
          if [ -f ~/docker-images/joystream-node-docker-image.tar.gz ]; then
            docker load --input ~/docker-images/joystream-node-docker-image.tar.gz
            cp ~/docker-images/joystream-node-docker-image.tar.gz .
          fi

      - name: Check if we have pre-built image on Dockerhub
        continue-on-error: true
        run: |
          if ! [ -f joystream-node-docker-image.tar.gz ]; then
            docker pull joystream/node:${{ steps.compute_shasum.outputs.shasum }}
            docker image tag joystream/node:${{ steps.compute_shasum.outputs.shasum }} joystream/node:latest
            docker save --output joystream-node-docker-image.tar joystream/node:latest
            gzip joystream-node-docker-image.tar
            cp joystream-node-docker-image.tar.gz ~/docker-images/
          fi

      - name: Build new joystream/node image
        run: |
          if ! [ -f joystream-node-docker-image.tar.gz ]; then
            docker build . --file joystream-node.Dockerfile --tag joystream/node
            docker save --output joystream-node-docker-image.tar joystream/node
            gzip joystream-node-docker-image.tar
            cp joystream-node-docker-image.tar.gz ~/docker-images/
            echo "NEW_BUILD=true" >> $GITHUB_ENV
          fi

      - name: Save joystream/node image to Artifacts
        uses: actions/upload-artifact@v2
        with:
          name: ${{ steps.compute_shasum.outputs.shasum }}-joystream-node-docker-image.tar.gz
          path: joystream-node-docker-image.tar.gz

      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_PASSWORD }}
        if: env.NEW_BUILD

      - name: Publish new image to DockerHub
        run: |
          docker image tag joystream/node joystream/node:${{ steps.compute_shasum.outputs.shasum }}
          docker push joystream/node:${{ steps.compute_shasum.outputs.shasum }}
        if: env.NEW_BUILD
  