# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4

PortSystem              1.0
PortGroup               select 1.0
PortGroup               legacysupport 1.1

name                    kubectl
categories              sysutils
license                 Apache-2
homepage                https://kubectl.docs.kubernetes.io/
installs_libs           no

maintainers             {@patarra gmail.com:patarra} \
                        @pedrohdz \
                        {gmail.com:herby.gillot @herbygillot} \
                        openmaintainer

subport kubectl_select {}

set source_build        no

# *NOTE* Remember to update `latestVersion` on a version upgrade.
set latestVersion       kubectl-1.25

# When source_build is yes, the checksum should be the one for the
# kubernetes source tarball, instead of the zipped pre-built binary.

subport kubectl-1.25 {
    set source_build    yes
    supported_archs     x86_64 arm64

    set patchNumber     5
    revision            0
    checksums           rmd160  d97cbc2446338976637393b2412d4ba4430db89e \
                        sha256  4d64668fc6a6ba7effe121c3c647e6c37498cd6b154576c2bfebfee286d12f70 \
                        size    38145275
}

subport kubectl-1.24 {
    set source_build    yes
    supported_archs     x86_64 arm64

    set patchNumber     9
    revision            0
    checksums           rmd160  84c7d93ec620a04b06f3b6cf5824be7fb8363ce1 \
                        sha256  58e3811bbe72243eda05788c6ae00f56fd309d3f108e8a6c4436f66fac255df7 \
                        size    37831367
}

subport kubectl-1.23 {
    set source_build    yes
    supported_archs     x86_64 arm64

    set patchNumber     15
    revision            0
    checksums           rmd160  f6d73e6492f9d36bf4644a840b8550059631ed91 \
                        sha256  56ba1bad20327c918aa1ed2bb1851d9c78a203318f48404e9dc7e5cc69fa2486 \
                        size    38273440
}

subport kubectl-1.22 {
    set source_build    yes
    supported_archs     x86_64 arm64

    set patchNumber     17
    revision            0

    checksums           rmd160  aed0b0cff951dcdebb692f69e932f133b82aa364 \
                        sha256  d6082dfe3048339921736085167f8878abcec09c839d05ba2e3a8248adfccb11 \
                        size    36116829
}

subport kubectl-1.21 {
    set patchNumber     14
    revision            0

    # Use pre-built version to resolve https://trac.macports.org/ticket/63503
    checksums           rmd160  15e92202b68b15776bcc045f753985541ff60339 \
                        sha256  30c529fe2891eb93dda99597b5c84cb10d2318bb92ae89e1e6189b3ae5fb6296 \
                        size    52867344
}

subport kubectl-1.20 {
    set source_build    yes
    supported_archs     x86_64

    set patchNumber     15
    revision            0

    # because source_build is yes, this is the checksum of the kubernetes
    # source tarball
    checksums           rmd160  5fbd8e7c81a3d9c2012143e350a78c4440688fe7 \
                        sha256  527289e39bd202f49dbe10d10b3f9856a01de4da68d4ab973deb422f6cf4d034 \
                        size    34555426
}

subport kubectl-1.19 {
    set source_build    yes
    supported_archs     x86_64

    set patchNumber     16
    revision            0

    # because source_build is yes, this is the checksum of the kubernetes
    # source tarball
    checksums           rmd160  9a32c6ea4aae6871fe36e435f6e952d0ae837d79 \
                        sha256  0879f67d8a1b1a1a59952c6104761786e41d4db5065de37680f2816734854070 \
                        size    33574817
}

subport kubectl-1.18 {
    set patchNumber     20
    revision            0
    checksums           rmd160  8f4313fecacbb6169305754538a06c61423227f7 \
                        sha256  bc709378c27da458b31395787a74cd9ac58dce7dbe2a7ba92f8bc2221eeed0be \
                        size    50095696
}

subport kubectl-1.17 {
    set patchNumber     17
    revision            0
    checksums           rmd160  4710ba1c832cd9ac6917600bcd54c70eb2b46666 \
                        sha256  e76b57bbed823a8572f7ccbf9caae56855048434d818dc13559e89ead5f91578 \
                        size    49542736
}

subport kubectl-1.16 {
    set patchNumber     15
    checksums           rmd160  7450d9abe9aa07c1929b39e96b9e1995257b42ae \
                        sha256  aff54bfaaed905813f61a2d0ca039176d6d309e59f92ebdb297c7da1df105485 \
                        size    48907792
}

subport kubectl-1.15 {
    set patchNumber     12
    checksums           rmd160  879ef587b357fa4108ca239527e8dd51186ad65d \
                        sha256  1b06cab9ee7988f8e71c48dd1d9379aa7c14123cbbc63e12ab5342c3e9130972 \
                        size    48668112
}

subport kubectl-1.14 {
    set patchNumber     10
    checksums           rmd160  10bdebc38c14482972e0c344d349a6d450c8d182 \
                        sha256  43d2c24eafb2ef09a6ac77c2b99070668e83edaa325a16a362e304ba578fdc48 \
                        size    48716328
}

subport kubectl-1.13 {
    set patchNumber     12
    checksums           rmd160  fdbdf38601ed7767793a4e8540e8454d43c8e91c \
                        sha256  ddbdc7591569f321b8b0a01dcbd679f6b0a7756f1427a51a39eadfce8d34bea7 \
                        size    44353656
}

subport kubectl-1.12 {
    set patchNumber     10
    checksums           rmd160  4212a9f7709ef6a7d36f3ebd477140a7d0ef8e50 \
                        sha256  67acf17bf77b0a9729d17ad5c058a358c0cbd12dbf46478c37111cdd97a0828c \
                        size    56860112
}

subport kubectl-1.11 {
    set patchNumber     10
    checksums           rmd160  8c3f3121088f745bb9eb279f5531b8b61ff84bc7 \
                        sha256  cf27dd3e8d5a13439de2214b7a07e2371cdbeaf151ee4c7d63e7e7c34ebbf117 \
                        size    54985744
}

subport kubectl-1.10 {
    set patchNumber     13
    checksums           rmd160  fe455ab0eb7c862c8dbce970632a9e66c8987cb1 \
                        sha256  94ec5409ac6715dfec11309795da9b30254b9d818f8b1d38d1ca2e914945868d \
                        size    54670032
}

if {${subport} == ${name}} {
    PortGroup           obsolete 1.0

    replaced_by         ${latestVersion}
    version             1.16.0
    revision            2

} elseif {${subport} == "kubectl_select"} {
    version             0.0.0
    revision            0
    supported_archs     noarch

    description         Common files for selecting the default kubectl version
    long_description    This port installs files that allow 'port select' \
                        to create links to the preferred default version \
                        of kubectl.
    homepage            https://www.macports.org/

    distfiles
    use_configure       no
    build {}

    destroot {
        xinstall -d ${destroot}${prefix}/share/bash-completion/completions
        select::install kubectl ${filespath}/base
        select::install kubectl ${filespath}/none
    }

    livecheck.type     none

} else {

    set baseVersion     [lindex [split ${subport} "-"] 1]
    set patchVersion    ${baseVersion}.${patchNumber}
    set baseName        kubectl${baseVersion}

    if ${source_build} {
        # Build kubectl from source

        PortGroup           golang 1.0

        go.setup            github.com/kubernetes/kubernetes ${patchVersion} v
        go.package          k8s.io/kubernetes

        build.cmd           make
        build.target        kubectl

        github.tarball_from archive

        use_parallel_build  no

        depends_build-append \
                            port:bash

        destroot {
            xinstall ${worksrcpath}/_output/bin/kubectl \
                ${destroot}${prefix}/bin/kubectl${baseVersion}
        }
    } else {
        # Use Darwin amd64 pre-built binary

        PortGroup           github 1.0

        github.setup        kubernetes kubectl ${patchVersion}
        supported_archs     x86_64

        master_sites        https://storage.googleapis.com/kubernetes-release/release/v${version}/bin/darwin/amd64
        distname            kubectl
        dist_subdir         ${name}/${version}
        extract.suffix
        extract.only

        use_configure       no

        build {}

        destroot {
            xinstall ${distpath}/kubectl \
                ${destroot}${prefix}/bin/kubectl${baseVersion}

            # legacysupport tweaks don't work, since the install here is from
            # a binary tarball ... have to tweak the binary to use the legacy
            # support library, which in turn uses the System.B library.
            legacysupport::relink_libSystem ${destroot}${prefix}/bin/kubectl${baseVersion}
        }
    }

    depends_run         port:kubectl_select

    description         Kubernetes cluster CLI
    long_description    Command line interface for running commands against \
                        Kubernetes clusters

    post-build {
        file copy ${filespath}/kubectlX.YY.template ${workpath}/${baseName}
        reinplace "s|@@BASE_VERSION@@|${baseVersion}|g" ${workpath}/${baseName}
        reinplace "s|@@PORT_NAME@@|${subport}|g" ${workpath}/${baseName}
    }

    post-destroot {
        set completionsPath ${destroot}${prefix}/share/${subport}/completion
        xinstall -d ${completionsPath}
        exec ${destroot}${prefix}/bin/kubectl${baseVersion} completion bash \
            > ${completionsPath}/${name}.bash
    }

    # Skip -rc and other pre-release tags
    set regexVersionPart [string map {. {\.}} $baseVersion]
    livecheck.type      regex
    livecheck.url       https://api.github.com/repos/kubernetes/kubernetes/releases?per_page=100
    livecheck.regex     \".+releases/tag/v(${regexVersionPart}\\.\\d+)\"

    # Generate select file
    select.group        kubectl
    select.file         ${workpath}/${baseName}

    notes "
    To make this the default kubectl run:
        sudo port select --set kubectl ${baseName}
    "
}
