# 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
    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
    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
    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
