#!groovy

def repository = "registry.c.test-chamber-13.lan"
def repositoryCreds = "harbor-repository-creds"

def workspace
def dockerFile

def label = "kubernetes-${UUID.randomUUID().toString()}"
def templateName = "pipeline-worker"
pipeline {
    agent {
        kubernetes {
            yaml functions.podYaml(
                repo: repository,
                templateName: templateName,
                kaniko: true,
                alpine: true
            )
        }
    }

    stages {
        stage ('Initalize Jenkins') {
            steps {
                script {
                    workspace = pwd()
                    writeFile(file: workspace + "/test-chamber-13.lan.root.crt", text: functions.getCurrentRootCA())
                    writeFile(file: workspace + "/test-chamber-13.lan.ret.root.crt", text: functions.getRetiredRootCA())
                    dockerFile = """FROM ${repository}/dockerhub/gitea/gitea:latest-rootless

USER root

COPY test-chamber-13.lan.root.crt test-chamber-13.lan.ret.root.crt /usr/local/share/ca-certificates/

RUN apk add --no-cache --virtual=.packagecache ca-certificates && \\
    update-ca-certificates --fresh && \\
    apk del .packagecache

USER git
"""
                }
            }
        }

        stage ('Build & Push') {
            steps {
                container ('kaniko') {
                    script {
                        declarativeFunctions.buildContainerMultipleDestinations(
                            dockerFile: dockerFile,
                            repositoryAccess: [
                                [
                                    repository: repository,
                                    credentials: repositoryCreds
                                ],
                            ],
                            destination: [
                                "${repository}/library/gitea:latest-rootless",
                            ]
                        )
                    }
                }
            }
        }

        stage ('Delete Running Container') {
            steps {
                container ('alpine') {
                    script {
                        declarativeFunctions.deletePod(
                            kubeAuth: "k8s-development-access",
                            kubeURL: "https://k8s.test-chamber-13.lan:8043",
                            namespace: "development",
                            selector: "app=gitea,app.kubernetes.io/name=gitea"
                        )
                    }
                }
            }
        }
    }
}