pipeline {
    agent none

    options {
        timestamps()
    }

    parameters{
        string defaultValue: 'registry.milvus.io', description: 'Local Docker registry URL', name: 'LOCAL_DOKCER_REGISTRY_URL', trim: true
        string defaultValue: 'registry-1.docker.io', description: 'Remote Docker registry URL', name: 'REMOTE_DOKCER_REGISTRY_URL', trim: true
        string defaultValue: 'milvus-docker-access-token', description: 'Remote Docker credentials id', name: 'REMOTE_DOCKER_CREDENTIALS_ID', trim: true
        string(defaultValue: "master", description: 'Milvus server version', name: 'BRANCH')
    }

    environment {
        DAILY_BUILD_VERSION = VersionNumber([
            versionNumberString : '${BUILD_DATE_FORMATTED, "yyyyMMdd"}'
        ]);
    }

    stages {
        stage('Push Daily Docker Images') {
            matrix {
                agent none
                axes {
                    axis {
                        name 'OS_NAME'
                        values 'ubuntu20.04', 'centos7'
                    }

                    axis {
                        name 'CPU_ARCH'
                        values 'amd64'
                    }

                    axis {
                        name 'BINARY_VERSION'
                        values 'gpu', 'cpu'
                    }
                }

                stages {
                    stage("Publish Docker Images") {
                        environment {
                            DOCKER_VERSION = "${params.BRANCH}-${BINARY_VERSION}-${OS_NAME}-release"
                            REMOTE_DOCKER_VERSION = "${params.BRANCH}-${OS_NAME}-${BINARY_VERSION}-${DAILY_BUILD_VERSION}"
                            REMOTE_DOCKER_LATEST_VERSION = "${params.BRANCH}-${OS_NAME}-${BINARY_VERSION}-latest"
                        }

                        agent {
                            kubernetes {
                                label "${OS_NAME}-${BINARY_VERSION}-publish-${env.BUILD_NUMBER}"
                                defaultContainer 'jnlp'
                                yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: publish
    componet: docker
spec:
  containers:
  - name: publish-images
    image: registry.milvus.io/library/docker:v1.0.0
    securityContext:
      privileged: true
    command:
    - cat
    tty: true
    resources:
      limits:
        memory: "4Gi"
        cpu: "1.0"
      requests:
        memory: "2Gi"
        cpu: "0.5"
    volumeMounts:
    - name: docker-sock
      mountPath: /var/run/docker.sock
  volumes:
  - name: docker-sock
    hostPath:
      path: /var/run/docker.sock
                                """
                            }
                        }

                        stages {
                            stage('Publish') {
                                steps {
                                    container('publish-images') {
                                        script {
                                            load "${env.WORKSPACE}/ci/jenkinsfile/publishDailyImages.groovy"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
