Skip to content

Commit

Permalink
debs: Use "channel" as package stream descriptor
Browse files Browse the repository at this point in the history
After discussing with tpepper, we're going to use "channel" instead of
"distribution" to describe a package stream.

The following channel names will be used:
- "release": stable versions of Kubernetes (x.y.z)
- "testing": pre-release versions of Kubernetes (x.y.z-{alpha,beta,rc}.m)
- "nightly": build versions of Kubernetes
(x.y.z-{alpha,beta,rc}.m.nnnn+SHA)

Signed-off-by: Stephen Augustus <saugustus@vmware.com>
  • Loading branch information
justaugustus committed Sep 28, 2019
1 parent a0f945d commit f31f83f
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 91 deletions.
67 changes: 31 additions & 36 deletions build/debs/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ import (
"github.com/google/go-github/v28/github"
)

type DistributionType string
type ChannelType string

const (
DistributionStable DistributionType = "stable"
DistributionTesting DistributionType = "testing"
DistributionUnstable DistributionType = "unstable"
ChannelRelease ChannelType = "release"
ChannelTesting ChannelType = "testing"
ChannelNightly ChannelType = "nightly"

minimumKubernetesVersion = "1.13.0"
minimumCNIVersion = "0.7.5"
Expand Down Expand Up @@ -74,11 +74,11 @@ type packageDefinition struct {
Version string
Revision string

Channel ChannelType
KubernetesVersion string
KubeletCNIVersion string

DownloadLinkBase string
Distribution DistributionType
KubeadmKubeletConfigFile string

CNIDownloadLink string
Expand Down Expand Up @@ -109,7 +109,7 @@ var (
criToolsVersion string

packages = stringList{"kubelet", "kubectl", "kubeadm", "kubernetes-cni", "cri-tools"}
distributions = stringList{"stable", "testing", "unstable"}
channels = stringList{"release", "testing", "nightly"}
architectures = stringList{"amd64", "arm", "arm64", "ppc64le", "s390x"}

releaseDownloadLinkBase = "https://dl.k8s.io"
Expand All @@ -125,7 +125,7 @@ var (

func init() {
flag.Var(&packages, "packages", "packages to build")
flag.Var(&distributions, "distributions", "distributions to build for")
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.")
Expand All @@ -140,7 +140,7 @@ func main() {
// Replace the "+" with a "-" to make it semver-compliant
kubeVersion = strings.TrimPrefix(kubeVersion, "v")

builds, err := constructBuilds(packages, distributions, kubeVersion, revision, cniVersion)
builds, err := constructBuilds(packages, channels, kubeVersion, revision, cniVersion)
if err != nil {
log.Fatalf("err: %v", err)
}
Expand All @@ -150,18 +150,18 @@ func main() {
}
}

func constructBuilds(packages, distributions []string, kubeVersion, revision, cniVersion string) ([]build, error) {
func constructBuilds(packages, channels []string, kubeVersion, revision, cniVersion string) ([]build, error) {
var builds []build

for _, pkg := range packages {
b := &build{
Package: pkg,
}

for _, distribution := range distributions {
for _, channel := range channels {
packageDef := &packageDefinition{
Revision: revision,
Distribution: DistributionType(distribution),
Revision: revision,
Channel: ChannelType(channel),
}

packageDef.KubernetesVersion = kubeVersion
Expand Down Expand Up @@ -219,11 +219,11 @@ func buildPackage(pkg, arch string, packageDef packageDefinition) error {
log.Printf("%v, len: %d", kubeVersionParts, len(kubeVersionParts))
switch {
case len(kubeVersionParts) > 4:
c.Distribution = DistributionUnstable
c.Channel = ChannelNightly
case len(kubeVersionParts) == 4:
c.Distribution = DistributionTesting
c.Channel = ChannelTesting
default:
c.Distribution = DistributionStable
c.Channel = ChannelRelease
}
}

Expand Down Expand Up @@ -347,7 +347,7 @@ func (c cfg) run() error {
return err
}

dstParts := []string{"bin", string(c.Distribution)}
dstParts := []string{"bin", string(c.Channel)}

dstPath := filepath.Join(dstParts...)
os.MkdirAll(dstPath, 0777)
Expand Down Expand Up @@ -375,7 +375,7 @@ func runCommand(pwd string, command string, cmdArgs ...string) error {
}

func getPackageVersion(packageDef packageDefinition) (string, error) {
log.Printf("package name is %s", packageDef.Name)
log.Printf("Setting version for %s package...", packageDef.Name)
switch packageDef.Name {
case "kubernetes-cni":
return getCNIVersion(packageDef)
Expand All @@ -389,36 +389,31 @@ func getPackageVersion(packageDef packageDefinition) (string, error) {

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.Distribution {
case DistributionTesting:
switch packageDef.Channel {
case ChannelTesting:
return getTestingKubeVersion()
case DistributionUnstable:
return getUnstableKubeVersion()
case ChannelNightly:
return getNightlyKubeVersion()
}

return getStableKubeVersion()
return getReleaseKubeVersion()
}

func getStableKubeVersion() (string, error) {
func getReleaseKubeVersion() (string, error) {
log.Print("Retrieving Kubernetes release version...")
return fetchVersion("https://dl.k8s.io/release/stable.txt")
}

func getTestingKubeVersion() (string, error) {
log.Print("Retrieving Kubernetes testing version...")
return fetchVersion("https://dl.k8s.io/release/latest.txt")
}

func getUnstableKubeVersion() (string, error) {
latestCIVersion, err := getLatestKubeCIBuild()
if err != nil {
return "", err
}

return latestCIVersion, nil
}

func getLatestKubeCIBuild() (string, error) {
func getNightlyKubeVersion() (string, error) {
log.Print("Retrieving Kubernetes nightly version...")
return fetchVersion("https://dl.k8s.io/ci/k8s-master.txt")
}

Expand Down Expand Up @@ -554,8 +549,8 @@ func fetchReleases(owner, repo string, includePrereleases bool) ([]*github.Repos
}

func getDownloadLinkBase(packageDef packageDefinition) (string, error) {
switch packageDef.Distribution {
case DistributionUnstable:
switch packageDef.Channel {
case ChannelNightly:
return getCIBuildsDownloadLinkBase(packageDef)
}

Expand All @@ -566,7 +561,7 @@ func getCIBuildsDownloadLinkBase(packageDef packageDefinition) (string, error) {
ciVersion := packageDef.KubernetesVersion
if ciVersion == "" {
var err error
ciVersion, err = getLatestKubeCIBuild()
ciVersion, err = getNightlyKubeVersion()
if err != nil {
return "", err
}
Expand Down
77 changes: 27 additions & 50 deletions build/debs/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
2 changes: 1 addition & 1 deletion build/debs/packages/latest/cri-tools/debian/changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cri-tools ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium
cri-tools ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium

* https://github.com/kubernetes-sigs/cri-tools/blob/master/CHANGELOG.md

Expand Down
2 changes: 1 addition & 1 deletion build/debs/packages/latest/kubeadm/debian/changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
kubeadm ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium
kubeadm ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium

* https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md

Expand Down
2 changes: 1 addition & 1 deletion build/debs/packages/latest/kubectl/debian/changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
kubectl ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium
kubectl ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium

* https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md

Expand Down
2 changes: 1 addition & 1 deletion build/debs/packages/latest/kubelet/debian/changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
kubelet ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium
kubelet ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium

* https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md

Expand Down
2 changes: 1 addition & 1 deletion build/debs/packages/latest/kubernetes-cni/debian/changelog
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
kubernetes-cni ({{ .Version }}-{{ .Revision }}) {{ .Distribution }}; urgency=medium
kubernetes-cni ({{ .Version }}-{{ .Revision }}) {{ .Channel }}; urgency=medium

* https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md

Expand Down

0 comments on commit f31f83f

Please sign in to comment.