# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Deploy submarine docker images

# Trigger the workflow on master branch push
on:
  push:
    branches: [master, 'branch-0.8']

jobs:
  deploy-server:
    if: github.repository == 'apache/submarine'
    runs-on: ubuntu-latest
    timeout-minutes: 240
    env:
      SUBMARINE_VERSION: 0.8.0-RC0
    steps:
      - uses: actions/checkout@v2
        with:
          repository: apache/submarine
      - uses: docker/login-action@v1
        name: Login to Docker Hub
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: "11"
      - name: Set up Maven 3.6.3
        uses: stCarolas/setup-maven@v4
        with:
          maven-version: 3.6.3
      - name: Check version
        run: |
          mvn --version
          java -version
      - name: Build with Maven
        run: mvn clean install -DskipTests

      - name: Build submarine server
        run: ./dev-support/docker-images/submarine/build.sh
      - name: Push submarine-server docker image
        run: |
          docker push apache/submarine:server-$SUBMARINE_VERSION
          docker rmi apache/submarine:server-$SUBMARINE_VERSION

      - name: Build submarine agent
        run: ./dev-support/docker-images/agent/build.sh
      - name: Push submarine-agent docker image
        run: |
          docker push apache/submarine:agent-$SUBMARINE_VERSION
          docker rmi apache/submarine:agent-$SUBMARINE_VERSION

      ## TODO(cdmikechen): In the future, we will not include the database as a built-in image 
      ##                   to facilitate subsequent upgrades.
      - name: Build submarine database
        run: ./dev-support/docker-images/database/build.sh
      - name: Push submarine-database docker image
        run: |
          docker push apache/submarine:database-$SUBMARINE_VERSION
          docker rmi apache/submarine:database-$SUBMARINE_VERSION

  deploy-builtin-images:
    if: github.repository == 'apache/submarine'
    runs-on: ubuntu-latest
    timeout-minutes: 240
    env:
      SUBMARINE_VERSION: 0.8.0-RC0
    steps:
      - uses: actions/checkout@v2
        with:
          repository: apache/submarine
      - uses: docker/login-action@v1
        name: Login to Docker Hub
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build submarine jupyter
        run: ./dev-support/docker-images/jupyter/build.sh
      - name: Push submarine-jupyter docker image
        run: |
          docker push apache/submarine:jupyter-notebook-$SUBMARINE_VERSION
          docker rmi apache/submarine:jupyter-notebook-$SUBMARINE_VERSION

      - name: Build submarine jupyter gpu
        run: ./dev-support/docker-images/jupyter-gpu/build.sh
      - name: Push submarine-jupyter-gpu docker image
        run: |
          docker push apache/submarine:jupyter-notebook-gpu-$SUBMARINE_VERSION
          docker rmi apache/submarine:jupyter-notebook-gpu-$SUBMARINE_VERSION

      - name: Build submarine mlflow
        run: ./dev-support/docker-images/mlflow/build.sh
      - name: Push submarine-mlflow docker image
        run: |
          docker push apache/submarine:mlflow-$SUBMARINE_VERSION
          docker rmi apache/submarine:mlflow-$SUBMARINE_VERSION

      - name: Build submarine quickstart
        run: ./dev-support/examples/quickstart/build.sh
      - name: Push submarine quickstart docker image
        run: |
          docker push apache/submarine:quickstart-$SUBMARINE_VERSION
          docker rmi apache/submarine:quickstart-$SUBMARINE_VERSION

  deploy-cloud-native-and-cicd:
    if: github.repository == 'apache/submarine'
    runs-on: ubuntu-latest
    timeout-minutes: 240
    env:
      SUBMARINE_VERSION: 0.8.0-RC0
    steps:
      - uses: actions/checkout@v2
        with:
          repository: apache/submarine
      - uses: docker/login-action@v1
        name: Login to Docker Hub
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build submarine operator
        run: ./dev-support/docker-images/operator-v3/build.sh
      - name: Push submarine-operator docker image
        run: |
          docker push apache/submarine:operator-$SUBMARINE_VERSION
          docker rmi apache/submarine:operator-$SUBMARINE_VERSION

      - name: Build submarine cicd
        run: ./dev-support/cicd/build.sh
      - name: Push submarine-cicd docker image
        run: |
          docker push apache/submarine:cicd-$SUBMARINE_VERSION
          docker rmi apache/submarine:cicd-$SUBMARINE_VERSION
