diff --git a/build/debs/Dockerfile b/build/debs/Dockerfile index eb623605400..7eac2f534ba 100644 --- a/build/debs/Dockerfile +++ b/build/debs/Dockerfile @@ -37,12 +37,7 @@ WORKDIR /home/builder/workspace RUN mkdir ./bin -COPY --chown=builder:builder bionic ./bionic -COPY --chown=builder:builder jessie ./jessie -COPY --chown=builder:builder sid ./sid -COPY --chown=builder:builder stretch ./stretch -COPY --chown=builder:builder trusty ./trusty -COPY --chown=builder:builder xenial ./xenial +COPY --chown=builder:builder packages ./packages COPY --from=builder --chown=builder:builder /workspace/deb-builder . diff --git a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf deleted file mode 120000 index 63ab75bfcda..00000000000 --- a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf deleted file mode 120000 index 21aa672ba29..00000000000 --- a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf deleted file mode 120000 index 8bf2c840060..00000000000 --- a/build/debs/bionic/kubeadm/channel/nightly/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf deleted file mode 100644 index 24b24c4c441..00000000000 --- a/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf +++ /dev/null @@ -1,10 +0,0 @@ -[Service] -Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" -Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true" -Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin" -Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local" -Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt" -Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0" -Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki" -ExecStart= -ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS diff --git a/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf deleted file mode 100644 index 674a7425628..00000000000 --- a/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf +++ /dev/null @@ -1,9 +0,0 @@ -[Service] -Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true" -Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true" -Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin" -Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local" -Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt" -Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0" -ExecStart= -ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_EXTRA_ARGS diff --git a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf deleted file mode 120000 index 63ab75bfcda..00000000000 --- a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf b/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf deleted file mode 120000 index 21aa672ba29..00000000000 --- a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/post-1.8/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf b/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf deleted file mode 120000 index 8bf2c840060..00000000000 --- a/build/debs/bionic/kubeadm/channel/unstable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf +++ /dev/null @@ -1 +0,0 @@ -../../../../../../stable/etc/systemd/system/kubelet.service.d/pre-1.8/10-kubeadm.conf \ No newline at end of file diff --git a/build/debs/bionic/kubeadm/debian/kubeadm.install b/build/debs/bionic/kubeadm/debian/kubeadm.install deleted file mode 100644 index 3356ff6ef6e..00000000000 --- a/build/debs/bionic/kubeadm/debian/kubeadm.install +++ /dev/null @@ -1,2 +0,0 @@ -usr/bin/kubeadm usr/bin/ -channel/{{ .Channel }}/etc/systemd/system/kubelet.service.d/{{ .KubeadmKubeletConfigFile }} etc/systemd/system/kubelet.service.d/ diff --git a/build/debs/build.go b/build/debs/build.go index 58b51c88aff..6a13e4f18b1 100644 --- a/build/debs/build.go +++ b/build/debs/build.go @@ -1,6 +1,22 @@ +/* +Copyright 2019 The Kubernetes Authors. +Licensed 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. +*/ + package main import ( + "context" "flag" "fmt" "io/ioutil" @@ -9,51 +25,71 @@ import ( "os" "os/exec" "path/filepath" + "strconv" "strings" "text/template" "time" "github.com/blang/semver" + "github.com/google/go-github/v28/github" ) type ChannelType string const ( - ChannelStable ChannelType = "stable" - ChannelUnstable ChannelType = "unstable" - ChannelNightly ChannelType = "nightly" - - cniVersion = "0.7.5" - criToolsVersion = "1.13.0" - pre180kubeadmconf = "pre-1.8/10-kubeadm.conf" - pre1110kubeadmconf = "post-1.8/10-kubeadm.conf" - latestkubeadmconf = "post-1.10/10-kubeadm.conf" + ChannelRelease ChannelType = "release" + ChannelTesting ChannelType = "testing" + ChannelNightly ChannelType = "nightly" + + minimumKubernetesVersion = "1.13.0" + minimumCNIVersion = "0.7.5" + pre117CNIVersion = "0.7.5" + + defaultRevision = "0" + + packagesRootDir = "packages" + + kubeadmConf = "10-kubeadm.conf" +) + +var ( + minimumCRIToolsVersion = minimumKubernetesVersion + latestPackagesDir = fmt.Sprintf("%s/%s", packagesRootDir, "latest") ) type work struct { - src, dst string - t *template.Template - info os.FileInfo + src string + dst string + t *template.Template + info os.FileInfo } type build struct { - Package string - Distros []string - Versions []version + Package string + Definitions []packageDefinition } -type version struct { - Version, Revision, DownloadLinkBase string - Channel ChannelType - GetVersion func() (string, error) - GetDownloadLinkBase func(v version) (string, error) - KubeadmKubeletConfigFile string - KubeletCNIVersion string +type packageDefinition struct { + Name string + Version string + Revision string + + Channel ChannelType + KubernetesVersion string + KubeletCNIVersion string + + DownloadLinkBase string + KubeadmKubeletConfigFile string + + CNIDownloadLink string } type cfg struct { - version - DistroName, Arch, DebArch, Package, Dependencies string + *packageDefinition + Arch string + DebArch string + Package string + Dependencies string } type stringList []string @@ -67,14 +103,15 @@ func (ss *stringList) Set(v string) error { } var ( + revision string + kubeVersion string + cniVersion string + criToolsVersion string + + packages = stringList{"kubelet", "kubectl", "kubeadm", "kubernetes-cni", "cri-tools"} + channels = stringList{"release", "testing", "nightly"} architectures = stringList{"amd64", "arm", "arm64", "ppc64le", "s390x"} - // distros describes the Debian and Ubuntu versions that binaries will be built for. - // Each distro build definition is currently symlinked to the most recent ubuntu build definition in the repo. - // Build definitions should be kept up to date across release cycles, removing Debian/Ubuntu versions - // that are no longer supported from the perspective of the OS distribution maintainers. - distros = stringList{"bionic", "xenial", "trusty", "stretch", "jessie", "sid"} - kubeVersion = "" - revision = "00" + releaseDownloadLinkBase = "https://dl.k8s.io" builtins = map[string]interface{}{ @@ -87,31 +124,163 @@ var ( ) func init() { - flag.Var(&architectures, "arch", "Architectures to build for.") - flag.Var(&distros, "distros", "Distros to build for.") - flag.StringVar(&kubeVersion, "kube-version", "", "Distros to build for.") - flag.StringVar(&revision, "revision", "00", "Deb package revision.") - flag.StringVar(&releaseDownloadLinkBase, "release-download-link-base", "https://dl.k8s.io", "Release download link base.") + flag.Var(&packages, "packages", "packages to build") + flag.Var(&channels, "channels", "channels to build for") + flag.Var(&architectures, "arch", "architectures to build for") + flag.StringVar(&kubeVersion, "kube-version", "", "Kubernetes version to build") + flag.StringVar(&revision, "revision", defaultRevision, "deb package revision.") + flag.StringVar(&cniVersion, "cni-version", "", "CNI version to build") + flag.StringVar(&criToolsVersion, "cri-tools-version", "", "CRI tools version to build") + flag.StringVar(&releaseDownloadLinkBase, "release-download-link-base", "https://dl.k8s.io", "release download link base.") } -func runCommand(pwd string, command string, cmdArgs ...string) error { - cmd := exec.Command(command, cmdArgs...) - if len(pwd) != 0 { - cmd.Dir = pwd +func main() { + flag.Parse() + + // Replace the "+" with a "-" to make it semver-compliant + kubeVersion = strings.TrimPrefix(kubeVersion, "v") + + builds, err := constructBuilds(packages, channels, kubeVersion, revision, cniVersion) + if err != nil { + log.Fatalf("err: %v", err) } - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - return err + + if err := walkBuilds(builds); err != nil { + log.Fatalf("err: %v", err) + } +} + +func constructBuilds(packages, channels []string, kubeVersion, revision, cniVersion string) ([]build, error) { + var builds []build + + for _, pkg := range packages { + b := &build{ + Package: pkg, + } + + for _, channel := range channels { + packageDef := &packageDefinition{ + Revision: revision, + Channel: ChannelType(channel), + } + + packageDef.KubernetesVersion = kubeVersion + + switch b.Package { + case "kubernetes-cni": + packageDef.Version = cniVersion + case "cri-tools": + packageDef.Version = criToolsVersion + } + + b.Definitions = append(b.Definitions, *packageDef) + } + + builds = append(builds, *b) + } + + return builds, nil +} + +func walkBuilds(builds []build) error { + for _, arch := range architectures { + for _, build := range builds { + for _, packageDef := range build.Definitions { + if err := buildPackage(build.Package, arch, packageDef); err != nil { + return err + } + } + } } return nil } +func buildPackage(pkg, arch string, packageDef packageDefinition) error { + c := cfg{ + packageDefinition: &packageDef, + Package: pkg, + Arch: arch, + } + + c.Name = pkg + + var err error + + if c.KubernetesVersion != "" { + log.Printf("checking k8s semver") + kubeSemver, err := semver.Parse(c.KubernetesVersion) + if err != nil { + log.Fatalf("could not parse k8s semver: %v", err) + } + + kubeVersionString := kubeSemver.String() + kubeVersionParts := strings.Split(kubeVersionString, ".") + + log.Printf("%v, len: %d", kubeVersionParts, len(kubeVersionParts)) + switch { + case len(kubeVersionParts) > 4: + c.Channel = ChannelNightly + case len(kubeVersionParts) == 4: + c.Channel = ChannelTesting + default: + c.Channel = ChannelRelease + } + } + + c.KubernetesVersion, err = getKubernetesVersion(packageDef) + if err != nil { + log.Fatalf("error getting Kubernetes version: %v", err) + } + + log.Printf("download link base is %s", c.DownloadLinkBase) + c.DownloadLinkBase, err = getDownloadLinkBase(packageDef) + if err != nil { + log.Fatalf("error getting Kubernetes download link base: %v", err) + } + + log.Printf("download link base is %s", c.DownloadLinkBase) + + // TODO: Add note about this + c.KubernetesVersion = strings.Replace(c.KubernetesVersion, "+", "-", 1) + + c.Version, err = getPackageVersion(packageDef) + if err != nil { + log.Fatalf("error getting package version: %v", err) + } + + log.Printf("package version is %s", c.Version) + + c.KubeletCNIVersion = minimumCNIVersion + + c.Dependencies, err = getKubeadmDependencies(packageDef) + if err != nil { + log.Fatalf("error getting kubeadm dependencies: %v", err) + } + + c.KubeadmKubeletConfigFile = kubeadmConf + + if c.Arch == "arm" { + c.DebArch = "armhf" + } else if c.Arch == "ppc64le" { + c.DebArch = "ppc64el" + } else { + c.DebArch = c.Arch + } + + c.CNIDownloadLink, err = getCNIDownloadLink(packageDef, c.Arch) + if err != nil { + log.Fatalf("error getting CNI download link: %v", err) + } + + return c.run() +} + func (c cfg) run() error { log.Printf("!!!!!!!!! doing: %#v", c) var w []work - srcdir := filepath.Join(c.DistroName, c.Package) + // TODO: Get package directory for any version once package definitions are broken out + srcdir := filepath.Join(latestPackagesDir, c.Package) dstdir, err := ioutil.TempDir(os.TempDir(), "debs") if err != nil { return err @@ -120,18 +289,11 @@ func (c cfg) run() error { defer os.RemoveAll(dstdir) } - // allow base package dir to by a symlink so we can reuse packages - // that don't change between distros - realSrcdir, err := filepath.EvalSymlinks(srcdir) - if err != nil { - return err - } - - if err := filepath.Walk(realSrcdir, func(srcfile string, f os.FileInfo, err error) error { + if err := filepath.Walk(srcdir, func(srcfile string, f os.FileInfo, err error) error { if err != nil { return err } - dstfile := filepath.Join(dstdir, srcfile[len(realSrcdir):]) + dstfile := filepath.Join(dstdir, srcfile[len(srcdir):]) if dstfile == dstdir { return nil } @@ -185,7 +347,7 @@ func (c cfg) run() error { return err } - dstParts := []string{"bin", string(c.Channel), c.DistroName} + dstParts := []string{"bin", string(c.Channel)} dstPath := filepath.Join(dstParts...) os.MkdirAll(dstPath, 0777) @@ -199,413 +361,245 @@ func (c cfg) run() error { return nil } -func walkBuilds(builds []build, f func(pkg, distro, arch string, v version) error) error { - for _, a := range architectures { - for _, b := range builds { - for _, d := range b.Distros { - for _, v := range b.Versions { - // Populate the version if it doesn't exist - if len(v.Version) == 0 && v.GetVersion != nil { - var err error - v.Version, err = v.GetVersion() - if err != nil { - return err - } - } - - // Populate the version if it doesn't exist - if len(v.DownloadLinkBase) == 0 && v.GetDownloadLinkBase != nil { - var err error - v.DownloadLinkBase, err = v.GetDownloadLinkBase(v) - if err != nil { - return err - } - } - - if err := f(b.Package, d, a, v); err != nil { - return err - } - } - } - } +func runCommand(pwd string, command string, cmdArgs ...string) error { + cmd := exec.Command(command, cmdArgs...) + if len(pwd) != 0 { + cmd.Dir = pwd + } + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + return err } return nil } -func fetchVersion(url string) (string, error) { - res, err := http.Get(url) - if err != nil { - return "", err +func getPackageVersion(packageDef packageDefinition) (string, error) { + log.Printf("Setting version for %s package...", packageDef.Name) + switch packageDef.Name { + case "kubernetes-cni": + return getCNIVersion(packageDef) + case "cri-tools": + return getCRIToolsVersion(packageDef) } - versionBytes, err := ioutil.ReadAll(res.Body) - res.Body.Close() - if err != nil { - return "", err - } - // Remove a newline and the v prefix from the string - return strings.Replace(strings.Replace(string(versionBytes), "v", "", 1), "\n", "", 1), nil + log.Printf("using Kubernetes version") + return packageDef.KubernetesVersion, nil } -func getStableKubeVersion() (string, error) { - return fetchVersion("https://dl.k8s.io/release/stable.txt") -} +func getKubernetesVersion(packageDef packageDefinition) (string, error) { + if packageDef.KubernetesVersion != "" { + log.Printf("Using Kubernetes version (%s) for %s package...", packageDef.KubernetesVersion, packageDef.Name) + return packageDef.KubernetesVersion, nil + } + switch packageDef.Channel { + case ChannelTesting: + return getTestingKubeVersion() + case ChannelNightly: + return getNightlyKubeVersion() + } -func getLatestKubeVersion() (string, error) { - return fetchVersion("https://dl.k8s.io/release/latest.txt") + return getReleaseKubeVersion() } -func getLatestCIVersion() (string, error) { - latestVersion, err := getLatestKubeCIBuild() - if err != nil { - return "", err - } - - // Replace the "+" with a "-" to make it semver-compliant - return strings.Replace(latestVersion, "+", "-", 1), nil +func getReleaseKubeVersion() (string, error) { + log.Print("Retrieving Kubernetes release version...") + return fetchVersion("https://dl.k8s.io/release/stable.txt") } -func getCRIToolsLatestVersion() (string, error) { - return criToolsVersion, nil +func getTestingKubeVersion() (string, error) { + log.Print("Retrieving Kubernetes testing version...") + return fetchVersion("https://dl.k8s.io/release/latest.txt") } -func getLatestKubeCIBuild() (string, error) { +func getNightlyKubeVersion() (string, error) { + log.Print("Retrieving Kubernetes nightly version...") return fetchVersion("https://dl.k8s.io/ci/k8s-master.txt") } -func getCIBuildsDownloadLinkBase(_ version) (string, error) { - latestCiVersion, err := getLatestKubeCIBuild() +func fetchVersion(url string) (string, error) { + res, err := http.Get(url) if err != nil { return "", err } - return fmt.Sprintf("https://dl.k8s.io/ci/v%s", latestCiVersion), nil -} - -func getReleaseDownloadLinkBase(v version) (string, error) { - return fmt.Sprintf("%s/v%s", releaseDownloadLinkBase, v.Version), nil -} - -func getKubeadmDependencies(v version) (string, error) { - cniVersion, err := getKubeletCNIVersion(v) + versionBytes, err := ioutil.ReadAll(res.Body) + res.Body.Close() if err != nil { return "", err } - deps := []string{ - "kubelet (>= 1.13.0)", - "kubectl (>= 1.13.0)", - fmt.Sprintf("kubernetes-cni (%s)", cniVersion), - "${misc:Depends}", - } - sv, err := semver.Make(v.Version) + // Remove a newline and the v prefix from the string + return strings.Replace(strings.Replace(string(versionBytes), "v", "", 1), "\n", "", 1), nil +} + +func getCNIVersion(packageDef packageDefinition) (string, error) { + log.Printf("using CNI version") + + kubeSemver, err := semver.Make(packageDef.KubernetesVersion) if err != nil { return "", err } - v1110, err := semver.Make("1.11.0-alpha.0") + v117, err := semver.Make("1.17.0-alpha.0") if err != nil { return "", err } - if sv.GTE(v1110) { - criToolsVersion, err := getCRIToolsVersion(v) - if err != nil { - return "", err + log.Printf("checking kube version (%s) against %s", kubeSemver.String(), v117.String()) + if packageDef.Version != "" { + if kubeSemver.LT(v117) { + return pre117CNIVersion, nil } - - deps = append(deps, fmt.Sprintf("cri-tools (>= %s)", criToolsVersion)) - return strings.Join(deps, ", "), nil + return packageDef.Version, nil } - return strings.Join(deps, ", "), nil + + return minimumCNIVersion, nil } -// The version of this file to use changed in 1.8 and 1.11 so use the target build -// version to figure out which copy of it to include in the deb. -func getKubeadmKubeletConfigFile(v version) (string, error) { - sv, err := semver.Make(v.Version) - if err != nil { - return "", err +func getCRIToolsVersion(packageDef packageDefinition) (string, error) { + if packageDef.Version != "" { + return packageDef.Version, nil } - v180, err := semver.Make("1.8.0-alpha.0") - if err != nil { - return "", err - } - v1110, err := semver.Make("1.11.0-alpha.0") + kubeSemver, err := semver.Parse(packageDef.KubernetesVersion) if err != nil { return "", err } - if sv.LT(v1110) { - if sv.LT(v180) { - return pre180kubeadmconf, nil + log.Printf("using CRI version") + kubeVersionString := kubeSemver.String() + kubeVersionParts := strings.Split(kubeVersionString, ".") + + criToolsMajor := kubeVersionParts[0] + criToolsMinor := kubeVersionParts[1] + + log.Printf("%v, len: %v", kubeVersionParts, len(kubeVersionParts)) + // v1.17.0-alpha.0.1809+ff8716f4cf6180 + if len(kubeVersionParts) >= 4 { + criToolsMinorInt, err := strconv.Atoi(criToolsMinor) + if err != nil { + return "", err } - return pre1110kubeadmconf, nil - } - return latestkubeadmconf, nil -} -// CNI get bumped in 1.9, which is incompatible for kubelet<1.9. -// So we need to restrict the CNI version when install kubelet. -func getKubeletCNIVersion(v version) (string, error) { - sv, err := semver.Make(v.Version) - if err != nil { - return "", err + log.Printf("CRI minor is %s", criToolsMinor) + criToolsMinorInt-- + criToolsMinor = strconv.Itoa(criToolsMinorInt) + log.Printf("CRI minor is %s", criToolsMinor) } - v190, err := semver.Make("1.9.0-alpha.0") + criToolsVersion := fmt.Sprintf("%s.%s.0", criToolsMajor, criToolsMinor) + + releases, err := fetchReleases("kubernetes-sigs", "cri-tools", false) if err != nil { - return "", err + log.Fatalf("err: %v", err) } - if sv.GTE(v190) { - return fmt.Sprintf(">= %s", cniVersion), nil - } - return fmt.Sprint("= 0.5.1"), nil -} + var tags []string + for _, release := range releases { + criToolsReleaseTag := strings.Trim(*release.TagName, "v") + criToolsReleaseVersionParts := strings.Split(criToolsReleaseTag, ".") + criToolsReleaseMinor := criToolsReleaseVersionParts[1] -// getCRIToolsVersion assumes v coming in is >= 1.11.0-alpha.0 -func getCRIToolsVersion(v version) (string, error) { - sv, err := semver.Make(v.Version) - if err != nil { - return "", err + if criToolsReleaseMinor == criToolsMinor { + tags = append(tags, criToolsReleaseTag) + } } - v1110, err := semver.Make("1.11.0-alpha.0") - if err != nil { - return "", err - } - v1121, err := semver.Make("1.12.1-alpha.0") - if err != nil { - return "", err - } + for _, tag := range tags { + tagSemver, err := semver.Parse(tag) + if err != nil { + log.Fatalf("could not parse tag semver: %v", err) + } + + criToolsSemver, err := semver.Parse(criToolsVersion) + if err != nil { + log.Fatalf("could not parse CRI tools semver: %v", err) + } - if sv.GTE(v1110) && sv.LT(v1121) { - return "1.11.1", nil + if tagSemver.GTE(criToolsSemver) { + criToolsVersion = tag + } } + + log.Printf("CRI tools version is %s", criToolsVersion) return criToolsVersion, nil } -func main() { - flag.Parse() +func fetchReleases(owner, repo string, includePrereleases bool) ([]*github.RepositoryRelease, error) { + ghClient := github.NewClient(nil) - builds := []build{ - { - Package: "kubectl", - Distros: distros, - Versions: []version{ - { - GetVersion: getStableKubeVersion, - Revision: revision, - Channel: ChannelStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - { - GetVersion: getLatestKubeVersion, - Revision: revision, - Channel: ChannelUnstable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - { - GetVersion: getLatestCIVersion, - Revision: revision, - Channel: ChannelNightly, - GetDownloadLinkBase: getCIBuildsDownloadLinkBase, - }, - }, - }, - { - Package: "kubelet", - Distros: distros, - Versions: []version{ - { - GetVersion: getStableKubeVersion, - Revision: revision, - Channel: ChannelStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - { - GetVersion: getLatestKubeVersion, - Revision: revision, - Channel: ChannelUnstable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - { - GetVersion: getLatestCIVersion, - Revision: revision, - Channel: ChannelNightly, - GetDownloadLinkBase: getCIBuildsDownloadLinkBase, - }, - }, - }, - { - Package: "kubernetes-cni", - Distros: distros, - Versions: []version{ - { - Version: cniVersion, - Revision: revision, - Channel: ChannelStable, - }, - { - Version: cniVersion, - Revision: revision, - Channel: ChannelUnstable, - }, - { - Version: cniVersion, - Revision: revision, - Channel: ChannelNightly, - }, - }, - }, - { - Package: "kubeadm", - Distros: distros, - Versions: []version{ - { - GetVersion: getStableKubeVersion, - Revision: revision, - Channel: ChannelStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - { - GetVersion: getLatestKubeVersion, - Revision: revision, - Channel: ChannelUnstable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - { - GetVersion: getLatestCIVersion, - Revision: revision, - Channel: ChannelNightly, - GetDownloadLinkBase: getCIBuildsDownloadLinkBase, - }, - }, - }, - { - Package: "cri-tools", - Distros: distros, - Versions: []version{ - { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Channel: ChannelStable, - }, - { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Channel: ChannelUnstable, - }, - { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Channel: ChannelNightly, - }, - }, - }, + allReleases, _, err := ghClient.Repositories.ListReleases(context.Background(), owner, repo, nil) + if err != nil { + return nil, err } - if kubeVersion != "" { - getSpecifiedVersion := func() (string, error) { - return kubeVersion, nil - } - builds = []build{ - { - Package: "kubectl", - Distros: distros, - Versions: []version{ - { - GetVersion: getSpecifiedVersion, - Revision: revision, - Channel: ChannelStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - }, - }, - { - Package: "kubelet", - Distros: distros, - Versions: []version{ - { - GetVersion: getSpecifiedVersion, - Revision: revision, - Channel: ChannelStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - }, - }, - { - Package: "kubernetes-cni", - Distros: distros, - Versions: []version{ - { - Version: cniVersion, - Revision: revision, - Channel: ChannelStable, - }, - }, - }, - { - Package: "kubeadm", - Distros: distros, - Versions: []version{ - { - GetVersion: getSpecifiedVersion, - Revision: revision, - Channel: ChannelStable, - GetDownloadLinkBase: getReleaseDownloadLinkBase, - }, - }, - }, - { - Package: "cri-tools", - Distros: distros, - Versions: []version{ - { - GetVersion: getCRIToolsLatestVersion, - Revision: revision, - Channel: ChannelStable, - }, - }, - }, + var releases []*github.RepositoryRelease + for _, release := range allReleases { + if *release.Prerelease { + if includePrereleases { + releases = append(releases, release) + } + } else { + releases = append(releases, release) } } - if err := walkBuilds(builds, func(pkg, distro, arch string, v version) error { - c := cfg{ - Package: pkg, - version: v, - DistroName: distro, - Arch: arch, - } - if c.Arch == "arm" { - c.DebArch = "armhf" - } else if c.Arch == "ppc64le" { - c.DebArch = "ppc64el" - } else { - c.DebArch = c.Arch - } + return releases, nil +} + +func getDownloadLinkBase(packageDef packageDefinition) (string, error) { + switch packageDef.Channel { + case ChannelNightly: + return getCIBuildsDownloadLinkBase(packageDef) + } + return getReleaseDownloadLinkBase(packageDef) +} + +func getCIBuildsDownloadLinkBase(packageDef packageDefinition) (string, error) { + ciVersion := packageDef.KubernetesVersion + if ciVersion == "" { var err error - c.KubeadmKubeletConfigFile, err = getKubeadmKubeletConfigFile(v) + ciVersion, err = getNightlyKubeVersion() if err != nil { - log.Fatalf("error getting kubeadm config: %v", err) + return "", err } + } - c.Dependencies, err = getKubeadmDependencies(v) - if err != nil { - log.Fatalf("error getting kubeadm dependencies: %v", err) - } + return fmt.Sprintf("https://dl.k8s.io/ci/v%s", ciVersion), nil +} - c.KubeletCNIVersion, err = getKubeletCNIVersion(v) - if err != nil { - log.Fatalf("error getting kubelet CNI Version: %v", err) - } +func getReleaseDownloadLinkBase(packageDef packageDefinition) (string, error) { + return fmt.Sprintf("%s/v%s", releaseDownloadLinkBase, packageDef.KubernetesVersion), nil +} - return c.run() - }); err != nil { - log.Fatalf("err: %v", err) +func getKubeadmDependencies(packageDef packageDefinition) (string, error) { + deps := []string{ + fmt.Sprintf("kubelet (>= %s)", minimumKubernetesVersion), + fmt.Sprintf("kubectl (>= %s)", minimumKubernetesVersion), + fmt.Sprintf("kubernetes-cni (>= %s)", minimumCNIVersion), + fmt.Sprintf("cri-tools (>= %s)", minimumCRIToolsVersion), + "${misc:Depends}", } + + return strings.Join(deps, ", "), nil +} + +func getCNIDownloadLink(packageDef packageDefinition, arch string) (string, error) { + sv, err := semver.Parse(packageDef.Version) + if err != nil { + return "", err + } + + v075, err := semver.Make(pre117CNIVersion) + if err != nil { + return "", err + } + + if sv.LTE(v075) { + return fmt.Sprintf("https://github.com/containernetworking/plugins/releases/download/v%s/cni-plugins-%s-v%s.tgz", packageDef.Version, arch, packageDef.Version), nil + } + + return fmt.Sprintf("https://github.com/containernetworking/plugins/releases/download/v%s/cni-plugins-linux-%s-v%s.tgz", packageDef.Version, arch, packageDef.Version), nil } diff --git a/build/debs/build_test.go b/build/debs/build_test.go index 4afe44def50..a154318a3ed 100644 --- a/build/debs/build_test.go +++ b/build/debs/build_test.go @@ -6,52 +6,6 @@ import ( "testing" ) -func TestGetKubeadmConfig(t *testing.T) { - testcases := []struct { - version string - expectConfig string - expectErr bool - }{ - { - "not-a-real-version", - "", - true, - }, - { - "1.12.0", - "post-1.10/10-kubeadm.conf", - false, - }, - { - "1.13.0", - "post-1.10/10-kubeadm.conf", - false, - }, - { - "1.15.0", - "post-1.10/10-kubeadm.conf", - false, - }, - } - - for _, tc := range testcases { - v := version{ - Version: tc.version, - } - kubeadmConfig, err := getKubeadmKubeletConfigFile(v) - - if err != nil { - if !tc.expectErr { - t.Errorf("getKubeadmConfig(%s) returned unwanted error: %v", tc.version, err) - } - } else { - if kubeadmConfig != tc.expectConfig { - t.Errorf("getKubeadmConfig(%s) got %q, wanted %q", tc.version, kubeadmConfig, tc.expectConfig) - } - } - } -} - func TestGetKubeadmDependencies(t *testing.T) { testcases := []struct { name string @@ -65,26 +19,49 @@ func TestGetKubeadmDependencies(t *testing.T) { "kubelet (>= 1.13.0)", "kubectl (>= 1.13.0)", "kubernetes-cni (>= 0.7.5)", - "${misc:Depends}", "cri-tools (>= 1.13.0)", + "${misc:Depends}", }, }, { name: "latest stable minor kubernetes", - version: "1.15.0", + version: "1.16.0", + deps: []string{ + "kubelet (>= 1.13.0)", + "kubectl (>= 1.13.0)", + "kubernetes-cni (>= 0.7.5)", + "cri-tools (>= 1.13.0)", + "${misc:Depends}", + }, + }, + { + name: "latest alpha kubernetes", + version: "1.17.0-alpha.0", deps: []string{ "kubelet (>= 1.13.0)", "kubectl (>= 1.13.0)", "kubernetes-cni (>= 0.7.5)", + "cri-tools (>= 1.13.0)", "${misc:Depends}", + }, + }, + { + name: "next stable minor kubernetes", + version: "1.17.0", + deps: []string{ + "kubelet (>= 1.13.0)", + "kubectl (>= 1.13.0)", + "kubernetes-cni (>= 0.7.5)", "cri-tools (>= 1.13.0)", + "${misc:Depends}", }, }, } + for _, tc := range testcases { t.Run(tc.name, func(t *testing.T) { - v := version{Version: tc.version} - deps, err := getKubeadmDependencies(v) + packageDef := packageDefinition{Version: tc.version} + deps, err := getKubeadmDependencies(packageDef) if err != nil { t.Fatalf("did not expect an error: %v", err) } diff --git a/build/debs/go.mod b/build/debs/go.mod index 869e61151d7..7963c42e578 100644 --- a/build/debs/go.mod +++ b/build/debs/go.mod @@ -2,4 +2,7 @@ module k8s.io/release/build/deb-builder go 1.12 -require github.com/blang/semver v3.5.1+incompatible +require ( + github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906 + github.com/google/go-github/v28 v28.1.1 +) diff --git a/build/debs/go.sum b/build/debs/go.sum index e55390a18c4..22eb1c1586d 100644 --- a/build/debs/go.sum +++ b/build/debs/go.sum @@ -1,2 +1,15 @@ -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906 h1:KGe2go3VELJLcQfKBUlviUzERqg79dO6VYzCvQxF01w= +github.com/blang/semver v0.0.0-20190414102917-ba2c2ddd8906/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-github/v28 v28.1.1 h1:kORf5ekX5qwXO2mGzXXOjMe/g6ap8ahVe0sBEulhSxo= +github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= diff --git a/build/debs/jessie b/build/debs/jessie deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/jessie +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/build/debs/bionic/cri-tools/debian/changelog b/build/debs/packages/latest/cri-tools/debian/changelog similarity index 61% rename from build/debs/bionic/cri-tools/debian/changelog rename to build/debs/packages/latest/cri-tools/debian/changelog index 63f31f0add0..4649e4027fd 100644 --- a/build/debs/bionic/cri-tools/debian/changelog +++ b/build/debs/packages/latest/cri-tools/debian/changelog @@ -1,4 +1,4 @@ -cri-tools ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +cri-tools ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes-sigs/cri-tools/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/cri-tools/debian/compat b/build/debs/packages/latest/cri-tools/debian/compat similarity index 100% rename from build/debs/bionic/cri-tools/debian/compat rename to build/debs/packages/latest/cri-tools/debian/compat diff --git a/build/debs/bionic/cri-tools/debian/control b/build/debs/packages/latest/cri-tools/debian/control similarity index 100% rename from build/debs/bionic/cri-tools/debian/control rename to build/debs/packages/latest/cri-tools/debian/control diff --git a/build/debs/bionic/cri-tools/debian/copyright b/build/debs/packages/latest/cri-tools/debian/copyright similarity index 100% rename from build/debs/bionic/cri-tools/debian/copyright rename to build/debs/packages/latest/cri-tools/debian/copyright diff --git a/build/debs/bionic/cri-tools/debian/cri-tools.install b/build/debs/packages/latest/cri-tools/debian/cri-tools.install similarity index 100% rename from build/debs/bionic/cri-tools/debian/cri-tools.install rename to build/debs/packages/latest/cri-tools/debian/cri-tools.install diff --git a/build/debs/bionic/cri-tools/debian/rules b/build/debs/packages/latest/cri-tools/debian/rules old mode 100644 new mode 100755 similarity index 73% rename from build/debs/bionic/cri-tools/debian/rules rename to build/debs/packages/latest/cri-tools/debian/rules index 56606ad9f02..bc2d722a983 --- a/build/debs/bionic/cri-tools/debian/rules +++ b/build/debs/packages/latest/cri-tools/debian/rules @@ -1,15 +1,13 @@ #!/usr/bin/make -f # -*- makefile -*- -CRI_TOOLS_VERSION = {{ .Version }} - build: echo noop binary: mkdir -p ./bin curl -sSL --fail --retry 5 \ - "https://github.com/kubernetes-sigs/cri-tools/releases/download/v$(CRI_TOOLS_VERSION)/crictl-v$(CRI_TOOLS_VERSION)-linux-{{ .Arch }}.tar.gz" \ + "https://github.com/kubernetes-sigs/cri-tools/releases/download/v{{ .Version }}/crictl-v{{ .Version }}-linux-{{ .Arch }}.tar.gz" \ | tar -C ./bin -xz dh_testroot dh_auto_install diff --git a/build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf b/build/debs/packages/latest/kubeadm/10-kubeadm.conf similarity index 100% rename from build/debs/bionic/kubeadm/channel/stable/etc/systemd/system/kubelet.service.d/post-1.10/10-kubeadm.conf rename to build/debs/packages/latest/kubeadm/10-kubeadm.conf diff --git a/build/debs/bionic/kubeadm/debian/changelog b/build/debs/packages/latest/kubeadm/debian/changelog similarity index 61% rename from build/debs/bionic/kubeadm/debian/changelog rename to build/debs/packages/latest/kubeadm/debian/changelog index 512a293ead1..095985e7f75 100644 --- a/build/debs/bionic/kubeadm/debian/changelog +++ b/build/debs/packages/latest/kubeadm/debian/changelog @@ -1,4 +1,4 @@ -kubeadm ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +kubeadm ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/kubeadm/debian/compat b/build/debs/packages/latest/kubeadm/debian/compat similarity index 100% rename from build/debs/bionic/kubeadm/debian/compat rename to build/debs/packages/latest/kubeadm/debian/compat diff --git a/build/debs/bionic/kubeadm/debian/control b/build/debs/packages/latest/kubeadm/debian/control similarity index 94% rename from build/debs/bionic/kubeadm/debian/control rename to build/debs/packages/latest/kubeadm/debian/control index 0ffa1eff196..a3c42f597ba 100644 --- a/build/debs/bionic/kubeadm/debian/control +++ b/build/debs/packages/latest/kubeadm/debian/control @@ -10,6 +10,6 @@ Vcs-Browser: https://github.com/kubernetes/kubernetes Package: kubeadm Architecture: {{ .DebArch }} -Depends: {{.Dependencies}} +Depends: {{ .Dependencies }} Description: Kubernetes Cluster Bootstrapping Tool The Kubernetes command line tool for bootstrapping a Kubernetes cluster. diff --git a/build/debs/bionic/kubeadm/debian/copyright b/build/debs/packages/latest/kubeadm/debian/copyright similarity index 100% rename from build/debs/bionic/kubeadm/debian/copyright rename to build/debs/packages/latest/kubeadm/debian/copyright diff --git a/build/debs/packages/latest/kubeadm/debian/kubeadm.install b/build/debs/packages/latest/kubeadm/debian/kubeadm.install new file mode 100644 index 00000000000..fcf2ffe70fc --- /dev/null +++ b/build/debs/packages/latest/kubeadm/debian/kubeadm.install @@ -0,0 +1,2 @@ +usr/bin/kubeadm usr/bin/ +{{ .KubeadmKubeletConfigFile }} etc/systemd/system/kubelet.service.d/ diff --git a/build/debs/bionic/kubeadm/debian/postinst b/build/debs/packages/latest/kubeadm/debian/postinst similarity index 100% rename from build/debs/bionic/kubeadm/debian/postinst rename to build/debs/packages/latest/kubeadm/debian/postinst diff --git a/build/debs/bionic/kubeadm/debian/rules b/build/debs/packages/latest/kubeadm/debian/rules similarity index 100% rename from build/debs/bionic/kubeadm/debian/rules rename to build/debs/packages/latest/kubeadm/debian/rules diff --git a/build/debs/bionic/kubeadm/debian/source/format b/build/debs/packages/latest/kubeadm/debian/source/format similarity index 100% rename from build/debs/bionic/kubeadm/debian/source/format rename to build/debs/packages/latest/kubeadm/debian/source/format diff --git a/build/debs/bionic/kubectl/debian/changelog b/build/debs/packages/latest/kubectl/debian/changelog similarity index 61% rename from build/debs/bionic/kubectl/debian/changelog rename to build/debs/packages/latest/kubectl/debian/changelog index 24089c97f4a..ec106f97ca7 100644 --- a/build/debs/bionic/kubectl/debian/changelog +++ b/build/debs/packages/latest/kubectl/debian/changelog @@ -1,4 +1,4 @@ -kubectl ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +kubectl ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/kubectl/debian/compat b/build/debs/packages/latest/kubectl/debian/compat similarity index 100% rename from build/debs/bionic/kubectl/debian/compat rename to build/debs/packages/latest/kubectl/debian/compat diff --git a/build/debs/bionic/kubectl/debian/control b/build/debs/packages/latest/kubectl/debian/control similarity index 100% rename from build/debs/bionic/kubectl/debian/control rename to build/debs/packages/latest/kubectl/debian/control diff --git a/build/debs/bionic/kubectl/debian/copyright b/build/debs/packages/latest/kubectl/debian/copyright similarity index 100% rename from build/debs/bionic/kubectl/debian/copyright rename to build/debs/packages/latest/kubectl/debian/copyright diff --git a/build/debs/bionic/kubectl/debian/kubectl.install b/build/debs/packages/latest/kubectl/debian/kubectl.install similarity index 100% rename from build/debs/bionic/kubectl/debian/kubectl.install rename to build/debs/packages/latest/kubectl/debian/kubectl.install diff --git a/build/debs/bionic/kubectl/debian/postinst b/build/debs/packages/latest/kubectl/debian/postinst similarity index 100% rename from build/debs/bionic/kubectl/debian/postinst rename to build/debs/packages/latest/kubectl/debian/postinst diff --git a/build/debs/bionic/kubectl/debian/rules b/build/debs/packages/latest/kubectl/debian/rules similarity index 90% rename from build/debs/bionic/kubectl/debian/rules rename to build/debs/packages/latest/kubectl/debian/rules index 03e6ee0ab1a..a507f75948d 100755 --- a/build/debs/bionic/kubectl/debian/rules +++ b/build/debs/packages/latest/kubectl/debian/rules @@ -10,7 +10,7 @@ build: binary: mkdir -p usr/bin ifeq ($(KUBE_USE_LOCAL_ARTIFACTS),y) - cp $(shell go env GOPATH)/src/k8s.io/kubernetes/_output/dockerized/bin/linux/{{ .Arch }}/kubeadm usr/bin/kubectl + cp $(shell go env GOPATH)/src/k8s.io/kubernetes/_output/dockerized/bin/linux/{{ .Arch }}/kubectl usr/bin/kubectl else curl --fail -sSL --retry 5 \ -o usr/bin/kubectl \ diff --git a/build/debs/bionic/kubectl/debian/source/format b/build/debs/packages/latest/kubectl/debian/source/format similarity index 100% rename from build/debs/bionic/kubectl/debian/source/format rename to build/debs/packages/latest/kubectl/debian/source/format diff --git a/build/debs/bionic/kubelet/debian/changelog b/build/debs/packages/latest/kubelet/debian/changelog similarity index 61% rename from build/debs/bionic/kubelet/debian/changelog rename to build/debs/packages/latest/kubelet/debian/changelog index 9fb2813f441..dc1a7aab0b9 100644 --- a/build/debs/bionic/kubelet/debian/changelog +++ b/build/debs/packages/latest/kubelet/debian/changelog @@ -1,4 +1,4 @@ -kubelet ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +kubelet ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/kubelet/debian/compat b/build/debs/packages/latest/kubelet/debian/compat similarity index 100% rename from build/debs/bionic/kubelet/debian/compat rename to build/debs/packages/latest/kubelet/debian/compat diff --git a/build/debs/bionic/kubelet/debian/control b/build/debs/packages/latest/kubelet/debian/control similarity index 76% rename from build/debs/bionic/kubelet/debian/control rename to build/debs/packages/latest/kubelet/debian/control index 8f945f62d40..14863ca8930 100644 --- a/build/debs/bionic/kubelet/debian/control +++ b/build/debs/packages/latest/kubelet/debian/control @@ -10,6 +10,6 @@ Vcs-Browser: https://github.com/kubernetes/kubernetes Package: kubelet Architecture: {{ .DebArch }} -Depends: iptables (>= 1.4.21), kubernetes-cni ({{ .KubeletCNIVersion }}), iproute2, socat, util-linux, mount, ebtables, ethtool, conntrack, ${misc:Depends} +Depends: iptables (>= 1.4.21), kubernetes-cni (>= {{ .KubeletCNIVersion }}), iproute2, socat, util-linux, mount, ebtables, ethtool, conntrack, ${misc:Depends} Description: Kubernetes Node Agent The node agent of Kubernetes, the container cluster manager diff --git a/build/debs/bionic/kubelet/debian/copyright b/build/debs/packages/latest/kubelet/debian/copyright similarity index 100% rename from build/debs/bionic/kubelet/debian/copyright rename to build/debs/packages/latest/kubelet/debian/copyright diff --git a/build/debs/bionic/kubelet/debian/kubelet.install b/build/debs/packages/latest/kubelet/debian/kubelet.install similarity index 100% rename from build/debs/bionic/kubelet/debian/kubelet.install rename to build/debs/packages/latest/kubelet/debian/kubelet.install diff --git a/build/debs/bionic/kubelet/debian/postinst b/build/debs/packages/latest/kubelet/debian/postinst similarity index 100% rename from build/debs/bionic/kubelet/debian/postinst rename to build/debs/packages/latest/kubelet/debian/postinst diff --git a/build/debs/bionic/kubelet/debian/rules b/build/debs/packages/latest/kubelet/debian/rules similarity index 91% rename from build/debs/bionic/kubelet/debian/rules rename to build/debs/packages/latest/kubelet/debian/rules index 143fcc103b3..94ae3759867 100755 --- a/build/debs/bionic/kubelet/debian/rules +++ b/build/debs/packages/latest/kubelet/debian/rules @@ -10,7 +10,7 @@ build: binary: mkdir -p usr/bin ifeq ($(KUBE_USE_LOCAL_ARTIFACTS),y) - cp $(shell go env GOPATH)/src/k8s.io/kubernetes/_output/dockerized/bin/linux/{{ .Arch }}/kubeadm usr/bin/kubelet + cp $(shell go env GOPATH)/src/k8s.io/kubernetes/_output/dockerized/bin/linux/{{ .Arch }}/kubelet usr/bin/kubelet else curl --fail -sSL --retry 5 \ -o usr/bin/kubelet \ diff --git a/build/debs/bionic/kubelet/debian/source/format b/build/debs/packages/latest/kubelet/debian/source/format similarity index 100% rename from build/debs/bionic/kubelet/debian/source/format rename to build/debs/packages/latest/kubelet/debian/source/format diff --git a/build/debs/bionic/kubelet/lib/systemd/system/kubelet.service b/build/debs/packages/latest/kubelet/lib/systemd/system/kubelet.service similarity index 100% rename from build/debs/bionic/kubelet/lib/systemd/system/kubelet.service rename to build/debs/packages/latest/kubelet/lib/systemd/system/kubelet.service diff --git a/build/debs/bionic/kubernetes-cni/.gitignore b/build/debs/packages/latest/kubernetes-cni/.gitignore similarity index 100% rename from build/debs/bionic/kubernetes-cni/.gitignore rename to build/debs/packages/latest/kubernetes-cni/.gitignore diff --git a/build/debs/bionic/kubernetes-cni/debian/changelog b/build/debs/packages/latest/kubernetes-cni/debian/changelog similarity index 59% rename from build/debs/bionic/kubernetes-cni/debian/changelog rename to build/debs/packages/latest/kubernetes-cni/debian/changelog index 58f7eab85a7..ab26993cda8 100644 --- a/build/debs/bionic/kubernetes-cni/debian/changelog +++ b/build/debs/packages/latest/kubernetes-cni/debian/changelog @@ -1,4 +1,4 @@ -kubernetes-cni ({{ .Version }}-{{ .Revision }}) {{ .DistroName }} {{ .Arch }}; urgency=optional +kubernetes-cni ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium * https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md diff --git a/build/debs/bionic/kubernetes-cni/debian/compat b/build/debs/packages/latest/kubernetes-cni/debian/compat similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/compat rename to build/debs/packages/latest/kubernetes-cni/debian/compat diff --git a/build/debs/bionic/kubernetes-cni/debian/control b/build/debs/packages/latest/kubernetes-cni/debian/control similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/control rename to build/debs/packages/latest/kubernetes-cni/debian/control diff --git a/build/debs/bionic/kubernetes-cni/debian/copyright b/build/debs/packages/latest/kubernetes-cni/debian/copyright similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/copyright rename to build/debs/packages/latest/kubernetes-cni/debian/copyright diff --git a/build/debs/bionic/kubernetes-cni/debian/kubernetes-cni.install b/build/debs/packages/latest/kubernetes-cni/debian/kubernetes-cni.install similarity index 100% rename from build/debs/bionic/kubernetes-cni/debian/kubernetes-cni.install rename to build/debs/packages/latest/kubernetes-cni/debian/kubernetes-cni.install diff --git a/build/debs/bionic/kubernetes-cni/debian/rules b/build/debs/packages/latest/kubernetes-cni/debian/rules similarity index 72% rename from build/debs/bionic/kubernetes-cni/debian/rules rename to build/debs/packages/latest/kubernetes-cni/debian/rules index 2cea3341bf4..26d9c78064d 100755 --- a/build/debs/bionic/kubernetes-cni/debian/rules +++ b/build/debs/packages/latest/kubernetes-cni/debian/rules @@ -2,7 +2,6 @@ # -*- makefile -*- #export DH_VERBOSE=1 -CNI_VERSION = v0.7.5 build: echo noop @@ -10,7 +9,7 @@ build: binary: mkdir -p ./bin curl -sSL --fail --retry 5 \ - "https://dl.k8s.io/network-plugins/cni-plugins-{{ .Arch }}-$(CNI_VERSION).tgz" \ + "{{ .CNIDownloadLink }}" \ | tar -C ./bin -xz dh_testroot dh_auto_install diff --git a/build/debs/sid b/build/debs/sid deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/sid +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/build/debs/stretch b/build/debs/stretch deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/stretch +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/build/debs/trusty b/build/debs/trusty deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/trusty +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/build/debs/xenial b/build/debs/xenial deleted file mode 120000 index 01285abbd6f..00000000000 --- a/build/debs/xenial +++ /dev/null @@ -1 +0,0 @@ -bionic \ No newline at end of file diff --git a/go.mod b/go.mod index 5f3bd981a6b..710a8bd381e 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.12 require ( github.com/go-kit/kit v0.9.0 github.com/google/go-github/v27 v27.0.6 + github.com/google/go-github/v28 v28.1.1 // indirect github.com/kolide/kit v0.0.0-20190123023048-c155a91098e3 github.com/pkg/errors v0.8.1 github.com/psampaz/go-mod-outdated v0.4.0 diff --git a/go.sum b/go.sum index fd333352b4d..7f58a568cc4 100644 --- a/go.sum +++ b/go.sum @@ -127,6 +127,8 @@ github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4r github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-github/v27 v27.0.6 h1:oiOZuBmGHvrGM1X9uNUAUlLgp5r1UUO/M/KnbHnLRlQ= github.com/google/go-github/v27 v27.0.6/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/LnFyubufRNIS0= +github.com/google/go-github/v28 v28.1.1 h1:kORf5ekX5qwXO2mGzXXOjMe/g6ap8ahVe0sBEulhSxo= +github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=