Skip to content

Commit

Permalink
Merge pull request #1290 from saschagrunert/kubepkg-tests
Browse files Browse the repository at this point in the history
Enhance kubepkg testing
  • Loading branch information
k8s-ci-robot authored May 18, 2020
2 parents 44fe53c + 8b0f1b7 commit dd0d344
Show file tree
Hide file tree
Showing 5 changed files with 650 additions and 104 deletions.
6 changes: 4 additions & 2 deletions pkg/kubepkg/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ go_library(
"//pkg/release:go_default_library",
"//pkg/util:go_default_library",
"@com_github_blang_semver//:go_default_library",
"@com_github_google_go_github_v29//github:go_default_library",
"@com_github_pkg_errors//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
],
Expand All @@ -31,6 +32,7 @@ filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//pkg/kubepkg/kubepkgfakes:all-srcs",
"//pkg/kubepkg/options:all-srcs",
],
tags = ["automanaged"],
Expand All @@ -42,9 +44,9 @@ go_test(
srcs = ["kubepkg_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/github/githubfakes:go_default_library",
"//pkg/kubepkg/kubepkgfakes:go_default_library",
"//pkg/kubepkg/options:go_default_library",
"//pkg/release/releasefakes:go_default_library",
"@com_github_pkg_errors//:go_default_library",
"@com_github_stretchr_testify//require:go_default_library",
],
)
127 changes: 78 additions & 49 deletions pkg/kubepkg/kubepkg.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
"github.com/pkg/errors"
"github.com/sirupsen/logrus"

gogithub "github.com/google/go-github/v29/github"
"k8s.io/release/pkg/command"
"k8s.io/release/pkg/github"
"k8s.io/release/pkg/kubepkg/options"
Expand All @@ -44,8 +45,8 @@ const (
ChannelNightly ChannelType = "nightly"

minimumKubernetesVersion = "1.13.0"
minimumCNIVersion = "0.7.5"
pre117CNIVersion = "0.7.5"
MinimumCNIVersion = "0.7.5"
Pre117CNIVersion = "0.7.5"

kubeadmConf = "10-kubeadm.conf"
)
Expand Down Expand Up @@ -85,18 +86,47 @@ var (

type Client struct {
options *options.Options
version *release.Version
github *github.GitHub
impl Impl
}

func New(o *options.Options) *Client {
return &Client{
options: o,
version: release.NewVersion(),
github: github.New(),
impl: &impl{},
}
}

func (c *Client) SetImpl(impl Impl) {
c.impl = impl
}

type impl struct{}

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
//counterfeiter:generate . Impl
type Impl interface {
RunSuccessWithWorkDir(workDir, cmd string, args ...string) error
RunSuccess(workDir, cmd string, args ...string) error
Releases(owner, repo string, includePrereleases bool) ([]*gogithub.RepositoryRelease, error)
GetKubeVersion(versionType release.VersionType) (string, error)
}

func (i *impl) RunSuccessWithWorkDir(workDir, cmd string, args ...string) error {
return command.NewWithWorkDir(workDir, cmd, args...).RunSuccess()
}

func (i *impl) RunSuccess(workDir, cmd string, args ...string) error {
return command.New(cmd, args...).RunSuccess()
}

func (i *impl) Releases(owner, repo string, includePrereleases bool) ([]*gogithub.RepositoryRelease, error) {
return github.New().Releases(owner, repo, includePrereleases)
}

func (i *impl) GetKubeVersion(versionType release.VersionType) (string, error) {
return release.NewVersion().GetKubeVersion(versionType)
}

type Build struct {
Type options.BuildType
Package string
Expand Down Expand Up @@ -250,12 +280,12 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,
}
}

bc.KubernetesVersion, err = c.getKubernetesVersion(pd)
bc.KubernetesVersion, err = c.GetKubernetesVersion(pd)
if err != nil {
return errors.Wrap(err, "getting Kubernetes version")
}

bc.DownloadLinkBase, err = c.getDownloadLinkBase(pd)
bc.DownloadLinkBase, err = c.GetDownloadLinkBase(pd)
if err != nil {
return errors.Wrap(err, "getting Kubernetes download link base")
}
Expand All @@ -266,14 +296,14 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,
// of "+" with "-", so that we build with a valid Debian package version.
bc.KubernetesVersion = strings.Replace(bc.KubernetesVersion, "+", "-", 1)

bc.Version, err = c.getPackageVersion(pd)
bc.Version, err = c.GetPackageVersion(pd)
if err != nil {
return errors.Wrap(err, "getting package version")
}

logrus.Infof("%s package version: %s", bc.Name, bc.Version)

bc.Dependencies, err = getDependencies(pd)
bc.Dependencies, err = GetDependencies(pd)
if err != nil {
return errors.Wrap(err, "getting dependencies")
}
Expand All @@ -282,16 +312,16 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,

bc.BuildArch = getBuildArch(bc.GoArch, bc.Type)

bc.CNIDownloadLink, err = getCNIDownloadLink(pd, bc.GoArch)
bc.CNIDownloadLink, err = GetCNIDownloadLink(pd, bc.GoArch)
if err != nil {
return errors.Wrap(err, "getting CNI download link")
}

logrus.Infof("Building %s package for %s/%s architecture...", bc.Package, bc.GoArch, bc.BuildArch)
return bc.run()
return c.run(bc)
}

func (bc *buildConfig) run() error {
func (c *Client) run(bc *buildConfig) error {
workspaceInfo, err := os.Stat(bc.workspace)
if err != nil {
return err
Expand Down Expand Up @@ -323,31 +353,30 @@ func (bc *buildConfig) run() error {
case options.BuildDeb:
logrus.Infof("Running dpkg-buildpackage for %s (%s/%s)", bc.Package, bc.GoArch, bc.BuildArch)

dpkgErr := command.NewWithWorkDir(
if err := c.impl.RunSuccessWithWorkDir(
specDirWithArch,
"dpkg-buildpackage",
"--unsigned-source",
"--unsigned-changes",
"--build=binary",
"--host-arch",
bc.BuildArch,
).RunSuccess()

if dpkgErr != nil {
return dpkgErr
); err != nil {
return errors.Wrap(err, "running debian package build")
}

fileName := fmt.Sprintf("%s_%s-%s_%s.deb", bc.Package, bc.Version, bc.Revision, bc.BuildArch)
dstParts := []string{"bin", string(bc.Channel), fileName}

dstPath := filepath.Join(dstParts...)
if mkdirErr := os.MkdirAll(dstPath, os.FileMode(0777)); mkdirErr != nil {
return mkdirErr
if err := os.MkdirAll(dstPath, os.FileMode(0777)); err != nil {
return err
}

mvErr := command.New("mv", filepath.Join(specDir, fileName), dstPath).RunSuccess()
if mvErr != nil {
return mvErr
if err := c.impl.RunSuccess(
"mv", filepath.Join(specDir, fileName), dstPath,
); err != nil {
return err
}

logrus.Infof("Successfully built %s", dstPath)
Expand All @@ -358,17 +387,17 @@ func (bc *buildConfig) run() error {
return nil
}

func (c *Client) getPackageVersion(packageDef *PackageDefinition) (string, error) {
func (c *Client) GetPackageVersion(packageDef *PackageDefinition) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}

logrus.Infof("Setting version for %s package...", packageDef.Name)
switch packageDef.Name {
case "kubernetes-cni":
return getCNIVersion(packageDef)
return GetCNIVersion(packageDef)
case "cri-tools":
return c.getCRIToolsVersion(packageDef)
return c.GetCRIToolsVersion(packageDef)
}

logrus.Infof(
Expand All @@ -378,7 +407,7 @@ func (c *Client) getPackageVersion(packageDef *PackageDefinition) (string, error
return util.TrimTagPrefix(packageDef.KubernetesVersion), nil
}

func (c *Client) getKubernetesVersion(packageDef *PackageDefinition) (string, error) {
func (c *Client) GetKubernetesVersion(packageDef *PackageDefinition) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}
Expand All @@ -389,15 +418,15 @@ func (c *Client) getKubernetesVersion(packageDef *PackageDefinition) (string, er
}
switch packageDef.Channel {
case ChannelTesting:
return c.version.GetKubeVersion(release.VersionTypeStablePreRelease)
return c.impl.GetKubeVersion(release.VersionTypeStablePreRelease)
case ChannelNightly:
return c.version.GetKubeVersion(release.VersionTypeCILatest)
return c.impl.GetKubeVersion(release.VersionTypeCILatest)
}

return c.version.GetKubeVersion(release.VersionTypeStable)
return c.impl.GetKubeVersion(release.VersionTypeStable)
}

func getCNIVersion(packageDef *PackageDefinition) (string, error) {
func GetCNIVersion(packageDef *PackageDefinition) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}
Expand All @@ -416,20 +445,20 @@ func getCNIVersion(packageDef *PackageDefinition) (string, error) {

if packageDef.Version != "" {
if kubeSemver.LT(v117) {
logrus.Infof("Kubernetes version earlier than 1.17 must use CNI version <= %s", pre117CNIVersion)
logrus.Infof("Setting CNI version to %s", pre117CNIVersion)
return pre117CNIVersion, nil
logrus.Infof("Kubernetes version earlier than 1.17 must use CNI version <= %s", Pre117CNIVersion)
logrus.Infof("Setting CNI version to %s", Pre117CNIVersion)
return Pre117CNIVersion, nil
}

logrus.Infof("Setting CNI version to %s", packageDef.Version)
return packageDef.Version, nil
}

logrus.Infof("Setting CNI version to %s", minimumCNIVersion)
return minimumCNIVersion, nil
logrus.Infof("Setting CNI version to %s", MinimumCNIVersion)
return MinimumCNIVersion, nil
}

func (c *Client) getCRIToolsVersion(packageDef *PackageDefinition) (string, error) {
func (c *Client) GetCRIToolsVersion(packageDef *PackageDefinition) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}
Expand Down Expand Up @@ -470,7 +499,7 @@ func (c *Client) getCRIToolsVersion(packageDef *PackageDefinition) (string, erro

criToolsVersion := fmt.Sprintf("%s.%s.0", criToolsMajor, criToolsMinor)

releases, err := c.github.Releases("kubernetes-sigs", "cri-tools", false)
releases, err := c.impl.Releases("kubernetes-sigs", "cri-tools", false)
if err != nil {
return "", err
}
Expand Down Expand Up @@ -506,27 +535,27 @@ func (c *Client) getCRIToolsVersion(packageDef *PackageDefinition) (string, erro
return criToolsVersion, nil
}

func (c *Client) getDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
func (c *Client) GetDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}

if packageDef.Channel == ChannelNightly {
return c.getCIBuildsDownloadLinkBase(packageDef)
return c.GetCIBuildsDownloadLinkBase(packageDef)
}

return getDefaultReleaseDownloadLinkBase(packageDef)
return GetDefaultReleaseDownloadLinkBase(packageDef)
}

func (c *Client) getCIBuildsDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
func (c *Client) GetCIBuildsDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}

ciVersion := packageDef.KubernetesVersion
if ciVersion == "" {
var err error
ciVersion, err = c.version.GetKubeVersion(release.VersionTypeCILatest)
ciVersion, err = c.impl.GetKubeVersion(release.VersionTypeCILatest)
if err != nil {
return "", err
}
Expand All @@ -535,7 +564,7 @@ func (c *Client) getCIBuildsDownloadLinkBase(packageDef *PackageDefinition) (str
return fmt.Sprintf("https://dl.k8s.io/ci/%s", util.AddTagPrefix(ciVersion)), nil
}

func getDefaultReleaseDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
func GetDefaultReleaseDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}
Expand All @@ -547,7 +576,7 @@ func getDefaultReleaseDownloadLinkBase(packageDef *PackageDefinition) (string, e
), nil
}

func getDependencies(packageDef *PackageDefinition) (map[string]string, error) {
func GetDependencies(packageDef *PackageDefinition) (map[string]string, error) {
if packageDef == nil {
return nil, errors.New("package definition cannot be nil")
}
Expand All @@ -556,11 +585,11 @@ func getDependencies(packageDef *PackageDefinition) (map[string]string, error) {

switch packageDef.Name {
case "kubelet":
deps["kubernetes-cni"] = minimumCNIVersion
deps["kubernetes-cni"] = MinimumCNIVersion
case "kubeadm":
deps["kubelet"] = minimumKubernetesVersion
deps["kubectl"] = minimumKubernetesVersion
deps["kubernetes-cni"] = minimumCNIVersion
deps["kubernetes-cni"] = MinimumCNIVersion
deps["cri-tools"] = minimumCRIToolsVersion
}

Expand All @@ -571,7 +600,7 @@ func getBuildArch(goArch string, buildType options.BuildType) string {
return buildArchMap[goArch][buildType]
}

func getCNIDownloadLink(packageDef *PackageDefinition, arch string) (string, error) {
func GetCNIDownloadLink(packageDef *PackageDefinition, arch string) (string, error) {
if packageDef == nil {
return "", errors.New("package definition cannot be nil")
}
Expand All @@ -581,7 +610,7 @@ func getCNIDownloadLink(packageDef *PackageDefinition, arch string) (string, err
return "", err
}

v075, err := semver.Make(pre117CNIVersion)
v075, err := semver.Make(Pre117CNIVersion)
if err != nil {
return "", err
}
Expand Down
Loading

0 comments on commit dd0d344

Please sign in to comment.