# 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]
jobs:
  deploy-images:
    if: github.repository == 'apache/submarine'
    runs-on: ubuntu-latest
    timeout-minutes: 240
    env:
      SUBMARINE_VERSION: 0.8.0-SNAPSHOT
    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 and push submarine server
        run: ./dev-support/docker-images/submarine/build.sh

      - name: Build and push submarine agent
        run: ./dev-support/docker-images/agent/build.sh

      - name: Build and push submarine database
        run: ./dev-support/docker-images/database/build.sh

      - name: Build and push submarine jupyter
        run: ./dev-support/docker-images/jupyter/build.sh

      - name: Build and push submarine jupyter gpu
        run: ./dev-support/docker-images/jupyter-gpu/build.sh

      - name: Build and push submarine operator
        run: ./dev-support/docker-images/operator-v3/build.sh

      - name: Build and push submarine mlflow
        run: ./dev-support/docker-images/mlflow/build.sh

      - name: Build and push submarine serve
        run: ./dev-support/docker-images/serve/build.sh

      - name: Build and push submarine quickstart
        run: ./dev-support/examples/quickstart/build.sh

      - name: Build and push submarine cicd
        run: ./dev-support/cicd/build.sh
