tools/version-tracker/pkg/constants/constants.go (424 lines of code) (raw):
package constants
import (
"github.com/aws/eks-anywhere-build-tooling/tools/version-tracker/pkg/types"
)
// Constants used across the version-tracker source code.
const (
BranchNameEnvVar = "BRANCH_NAME"
BaseRepoOwnerEnvvar = "BASE_REPO_OWNER"
HeadRepoOwnerEnvvar = "HEAD_REPO_OWNER"
GitHubTokenEnvvar = "GITHUB_TOKEN"
CommitAuthorNameEnvvar = "COMMIT_AUTHOR_NAME"
CommitAuthorEmailEnvvar = "COMMIT_AUTHOR_EMAIL"
ReleaseBranchEnvvar = "RELEASE_BRANCH"
DefaultCommitAuthorName = "EKS Distro PR Bot"
DefaultCommitAuthorEmail = "aws-model-rocket-bots+eksdistroprbot@amazon.com"
BuildToolingRepoName = "eks-anywhere-build-tooling"
EKSDistroBuildToolingRepoName = "eks-distro-build-tooling"
AWSOrgName = "aws"
BottlerocketOrgName = "bottlerocket-os"
BottlerocketRepoName = "bottlerocket"
BuildToolingRepoURL = "https://github.com/%s/eks-anywhere-build-tooling"
ReadmeFile = "README.md"
ReadmeUpdateScriptFile = "build/lib/readme_check.sh"
LicenseBoilerplateFile = "hack/boilerplate.yq.txt"
BottlerocketTargetsJSONURLFormat = "https://updates.bottlerocket.aws/2020-07-07/%s-k8s-%s/x86_64/%s.targets.json"
BottlerocketTimestampJSONURLFormat = "https://updates.bottlerocket.aws/2020-07-07/%s-k8s-%s/x86_64/timestamp.json"
BottlerocketAMIImageTargetFormat = "bottlerocket-%s-k8s-%s-x86_64-%s.img.lz4"
BottlerocketOVAImageTargetFormat = "bottlerocket-%s-k8s-%s-x86_64-%s.ova"
BottlerocketRawImageTargetFormat = "bottlerocket-%s-k8s-%s-x86_64-%s.img.lz4"
EKSDistroLatestReleasesFile = "EKSD_LATEST_RELEASES"
EKSDistroReleaseChannelsFileURLFormat = "https://distro.eks.amazonaws.com/releasechannels/%s.yaml"
EKSDistroReleaseManifestURLFormat = "https://distro.eks.amazonaws.com/kubernetes-%[1]s/kubernetes-%[1]s-eks-%d.yaml"
SkippedProjectsFile = "SKIPPED_PROJECTS"
UpstreamProjectsTrackerFile = "UPSTREAM_PROJECTS.yaml"
SupportedReleaseBranchesFile = "release/SUPPORTED_RELEASE_BRANCHES"
GitTagFile = "GIT_TAG"
GoVersionFile = "GOLANG_VERSION"
ChecksumsFile = "CHECKSUMS"
AttributionsFilePattern = "*ATTRIBUTION.txt"
EKSDistroBaseTagFilesPattern = "EKS_DISTRO*TAG_FILE"
EKSDistroBaseUpdatedPackagesFileFormat = "eks-distro-base-updates/%s/update_packages-%s"
BuildDirectory = "build"
ManifestsDirectory = "manifests"
PatchesDirectory = "patches"
FailedPatchApplyMarker = "patch does not apply"
DoesNotExistInIndexMarker = "does not exist in index"
SemverRegex = `v?(?P<major>0|[1-9]\d*)(\.|_)(?P<minor>0|[1-9]\d*)((\.|_)(?P<patch>0|[1-9]\d*))?(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?`
FailedPatchApplyRegex = "Patch failed at .*"
FailedPatchFilesRegex = "error: (.*): patch does not apply"
DoesNotExistInIndexFilesRegex = "error: (.*): does not exist in index"
GitDescribeRegex = `v?\d+\.\d+\.\d+(-([0-9]+)-g.*)?`
BottlerocketReleasesFile = "BOTTLEROCKET_RELEASES"
BottlerocketContainerMetadataFileFormat = "BOTTLEROCKET_%s_CONTAINER_METADATA"
BottlerocketHostContainersTOMLFile = "sources/shared-defaults/public-host-containers.toml"
BottlerocketHostContainerSourceImageRegex = "schnauzer-v2 render --template '(.*)'"
CertManagerManifestYAMLFile = "cert-manager.yaml"
CiliumImageRepository = "public.ecr.aws/isovalent/cilium"
EnvoyImageRepository = "public.ecr.aws/appmesh/aws-appmesh-envoy"
EKSDistroBaseTagsYAMLFile = "EKS_DISTRO_TAG_FILE.yaml"
AL2023Suffix = "-al2023"
TagFileSuffix = "_TAG_FILE"
KindNodeImageBuildArgsScriptFile = "node-image-build-args.sh"
GithubPerPage = 100
datetimeFormat = "%Y-%m-%dT%H:%M:%SZ"
MainBranchName = "main"
BaseRepoHeadRevisionPattern = "refs/remotes/origin/%s"
EKSDistroUpgradePullRequestBody = `This PR bumps EKS Distro releases to the latest available release versions.
/hold
/area dependencies
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.`
EKSDistroBuildToolingUpgradePullRequestBody = `This PR updates the base image tag in tag file(s) with the tag of the newly-built EKS Distro base image and/or its minimal variants.
%s
/hold
/area dependencies
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.`
DefaultUpgradePullRequestBody = `This PR bumps %[1]s/%[2]s to the latest Git revision.
[Compare changes](https://github.com/%[1]s/%[2]s/compare/%[3]s...%[4]s)
[Release notes](https://github.com/%[1]s/%[2]s/releases/%[4]s)
%s
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.`
BottlerocketUpgradePullRequestBody = `This PR bumps Bottlerocket releases to the latest Git revision.
[Compare changes](https://github.com/bottlerocket-os/bottlerocket/compare/%[1]s...%[2]s)
[Release notes](https://github.com/bottlerocket-os/bottlerocket/releases/%[2]s)
/hold
/area dependencies
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.`
CombinedImageBuilderBottlerocketUpgradePullRequestBody = `This PR bumps kubernetes-sigs/image-builder and Bottlerocket releases to the latest Git revision.
[Compare changes for image-builder](https://github.com/kubernetes-sigs/image-builder/compare/%[1]s...%[2]s)
[Release notes for image-builder](https://github.com/kubernetes-sigs/image-builder/releases/%[2]s)
[Compare changes for Bottlerocket](https://github.com/bottlerocket-os/bottlerocket/compare/%[3]s...%[4]s)
[Release notes for Bottlerocket](https://github.com/bottlerocket-os/bottlerocket/releases/%[4]s)
/hold
/area dependencies
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.`
FailedPatchesCommentBody = `## Failed patch details
**Only %d/%d patches were applied!**
%s
The following files in the above patch did not apply successfully:
%s`
FailedUpgradeCommentBody = `# This pull request is incomplete and requires manual intervention from a team member!
The following steps in the upgrade flow failed:
%s`
)
var (
// ProjectReleaseAssets is the mapping of project name to release tarball configurations.
ProjectReleaseAssets = map[string]types.ReleaseTarball{
"apache/cloudstack-cloudmonkey": {
AssetName: "cmk.linux.x86-64",
BinaryName: "cmk.linux.x86-64",
Extract: false,
},
"aquasecurity/trivy": {
AssetName: "trivy_%s_Linux-64bit.tar.gz",
BinaryName: "trivy",
Extract: true,
TrimLeadingVersionPrefix: true,
},
"aws/rolesanywhere-credential-helper": {
OverrideAssetURL: "https://rolesanywhere.amazonaws.com/releases/%s/X86_64/Linux/aws_signing_helper",
AssetName: "aws_signing_helper",
BinaryName: "aws_signing_helper",
Extract: false,
TrimLeadingVersionPrefix: true,
},
"containerd/containerd": {
AssetName: "containerd-%s-linux-amd64.tar.gz",
BinaryName: "bin/containerd",
Extract: true,
TrimLeadingVersionPrefix: true,
},
"distribution/distribution": {
AssetName: "registry_%s_linux_amd64.tar.gz",
BinaryName: "registry",
Extract: true,
TrimLeadingVersionPrefix: true,
},
"fluxcd/flux2": {
AssetName: "flux_%s_linux_amd64.tar.gz",
BinaryName: "flux",
Extract: true,
TrimLeadingVersionPrefix: true,
},
"goharbor/harbor-scanner-trivy": {
AssetName: "harbor-scanner-trivy_%s_Linux_x86_64.tar.gz",
BinaryName: "scanner-trivy",
Extract: true,
TrimLeadingVersionPrefix: true,
},
"helm/helm": {
OverrideAssetURL: "https://get.helm.sh/helm-%s-linux-amd64.tar.gz",
AssetName: "helm-%s-linux-amd64.tar.gz",
BinaryName: "linux-amd64/helm",
Extract: true,
},
"linuxkit/linuxkit": {
AssetName: "linuxkit-linux-amd64",
BinaryName: "linuxkit-linux-amd64",
Extract: false,
},
"kubernetes-sigs/cluster-api": {
AssetName: "clusterctl-linux-amd64",
BinaryName: "clusterctl-linux-amd64",
Extract: false,
},
"kubernetes-sigs/cri-tools": {
AssetName: "crictl-%s-linux-amd64.tar.gz",
BinaryName: "crictl",
Extract: true,
},
"kubernetes-sigs/kind": {
AssetName: "kind-linux-amd64",
BinaryName: "kind-linux-amd64",
Extract: false,
},
"opencontainers/runc": {
AssetName: "runc.amd64",
BinaryName: "runc.amd64",
Extract: false,
},
"prometheus/prometheus": {
AssetName: "prometheus-%s.linux-amd64.tar.gz",
BinaryName: "prometheus-%s.linux-amd64/prometheus",
Extract: true,
TrimLeadingVersionPrefix: true,
},
"prometheus/node_exporter": {
AssetName: "node_exporter-%s.linux-amd64.tar.gz",
BinaryName: "node_exporter-%s.linux-amd64/node_exporter",
Extract: true,
TrimLeadingVersionPrefix: true,
},
"replicatedhq/troubleshoot": {
AssetName: "support-bundle_linux_amd64.tar.gz",
BinaryName: "support-bundle",
Extract: true,
},
"vmware/govmomi": {
AssetName: "govc_Linux_x86_64.tar.gz",
BinaryName: "govc",
Extract: true,
},
}
// ProjectGoVersionSourceOfTruth is the mapping of project name to Go version source of truth files configuration.
ProjectGoVersionSourceOfTruth = map[string]types.GoVersionSourceOfTruth{
"apache/cloudstack-cloudmonkey": {
SourceOfTruthFile: ".github/workflows/build.yml",
GoVersionSearchString: `go-version: (1\.\d\d)`,
},
"aquasecurity/trivy": {
SourceOfTruthFile: "Dockerfile.protoc",
GoVersionSearchString: `golang:(1\.\d\d)`,
},
"aws/etcdadm-bootstrap-provider": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"aws/etcdadm-controller": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"aws/rolesanywhere-credential-helper": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"brancz/kube-rbac-proxy": {
SourceOfTruthFile: ".github/workflows/build.yml",
GoVersionSearchString: `go-version: '(1\.\d\d)'`,
},
"cert-manager/cert-manager": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"containerd/containerd": {
SourceOfTruthFile: ".github/workflows/release.yml",
GoVersionSearchString: `GO_VERSION: "(1\.\d\d)"`,
},
"distribution/distribution": {
SourceOfTruthFile: "Dockerfile",
GoVersionSearchString: `ARG GO_VERSION=(1\.\d\d)`,
},
"emissary-ingress/emissary": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"fluxcd/flux2": {
SourceOfTruthFile: ".github/workflows/release.yaml",
GoVersionSearchString: `go-version: (1\.\d\d)`,
},
"fluxcd/helm-controller": {
SourceOfTruthFile: "Dockerfile",
GoVersionSearchString: `ARG GO_VERSION=(1\.\d\d)`,
},
"fluxcd/kustomize-controller": {
SourceOfTruthFile: "Dockerfile",
GoVersionSearchString: `ARG GO_VERSION=(1\.\d\d)`,
},
"fluxcd/notification-controller": {
SourceOfTruthFile: "Dockerfile",
GoVersionSearchString: `ARG GO_VERSION=(1\.\d\d)`,
},
"fluxcd/source-controller": {
SourceOfTruthFile: "Dockerfile",
GoVersionSearchString: `ARG GO_VERSION=(1\.\d\d)`,
},
"goharbor/harbor": {
SourceOfTruthFile: "Makefile",
GoVersionSearchString: `GOBUILDIMAGE=golang:(1\.\d\d)`,
},
"goharbor/harbor-scanner-trivy": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"helm/helm": {
SourceOfTruthFile: ".github/workflows/release.yaml",
GoVersionSearchString: `go-version: '(1\.\d\d)'`,
},
"linuxkit/linuxkit": {
SourceOfTruthFile: ".github/workflows/release.yml",
GoVersionSearchString: `go-version: '(1\.\d\d)'`,
},
"kube-vip/kube-vip": {
SourceOfTruthFile: "Dockerfile",
GoVersionSearchString: `golang:(1\.\d\d)`,
},
"kubernetes/autoscaler": {
SourceOfTruthFile: "cluster-autoscaler/go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"kubernetes/cloud-provider-aws": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"kubernetes/cloud-provider-vsphere": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"kubernetes-sigs/cluster-api": {
SourceOfTruthFile: "Makefile",
GoVersionSearchString: `GO_VERSION \?= (1\.\d\d)`,
},
"kubernetes-sigs/cluster-api-provider-cloudstack": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"kubernetes-sigs/cluster-api-provider-vsphere": {
SourceOfTruthFile: "Makefile",
GoVersionSearchString: `GO_VERSION \?= (1\.\d\d)`,
},
"kubernetes-sigs/cri-tools": {
SourceOfTruthFile: ".github/workflows/release.yml",
GoVersionSearchString: `go-version: '(1\.\d\d)'`,
},
"kubernetes-sigs/etcdadm": {
SourceOfTruthFile: "Makefile",
GoVersionSearchString: `GO_IMAGE \?= golang:(1\.\d\d)`,
},
"kubernetes-sigs/kind": {
SourceOfTruthFile: ".go-version",
GoVersionSearchString: `(1\.\d\d)`,
},
"metallb/metallb": {
SourceOfTruthFile: "controller/Dockerfile",
GoVersionSearchString: `golang:(1\.\d\d)`,
},
"nutanix-cloud-native/cluster-api-provider-nutanix": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"nutanix-cloud-native/cloud-provider-nutanix": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"opencontainers/runc": {
SourceOfTruthFile: "Dockerfile",
GoVersionSearchString: `ARG GO_VERSION=(1\.\d\d)`,
},
"prometheus/node_exporter": {
SourceOfTruthFile: ".promu.yml",
GoVersionSearchString: `version: (1\.\d\d)`,
},
"prometheus/prometheus": {
SourceOfTruthFile: ".promu.yml",
GoVersionSearchString: `version: (1\.\d\d)`,
},
"rancher/local-path-provisioner": {
SourceOfTruthFile: "Dockerfile.dapper",
GoVersionSearchString: `golang:(1\.\d\d)`,
},
"replicatedhq/troubleshoot": {
SourceOfTruthFile: ".github/workflows/build-test-deploy.yaml",
GoVersionSearchString: `go-version: "(1\.\d\d)"`,
},
"tinkerbell/boots": {
SourceOfTruthFile: "go.mod",
GoVersionSearchString: `go (1\.\d\d)`,
},
"tinkerbell/cluster-api-provider-tinkerbell": {
SourceOfTruthFile: "Makefile",
GoVersionSearchString: `GOLANG_VERSION := (1\.\d\d)`,
},
"tinkerbell/hegel": {
SourceOfTruthFile: ".github/workflows/ci.yaml",
GoVersionSearchString: `GO_VERSION: "(1\.\d\d)"`,
},
"tinkerbell/tink": {
SourceOfTruthFile: ".github/workflows/ci.yaml",
GoVersionSearchString: `GO_VERSION: "(1\.\d\d)"`,
},
"tinkerbell/rufio": {
SourceOfTruthFile: "Dockerfile",
GoVersionSearchString: `golang:(1\.\d\d)`,
},
"tinkerbell/hook": {
SourceOfTruthFile: "images/hook-bootkit/Dockerfile",
GoVersionSearchString: `golang:(1\.\d\d)`,
},
"vmware/govmomi": {
SourceOfTruthFile: ".github/workflows/govmomi-release.yaml",
GoVersionSearchString: `go-version: '(1\.\d\d)'`,
},
}
DefaultProjectUpgradePRLabels = []string{"/hold", "/area dependencies"}
PackagesProjectUpgradePRLabels = []string{"/hold", "/area dependencies", "/sig curated-packages"}
ProjectsWithUnconventionalUpgradeFlows = []string{
"kubernetes-sigs/image-builder",
}
BottlerocketImageFormats = []string{"ami", "ova", "raw"}
BottlerocketHostContainers = []string{"admin", "control"}
CiliumImageDirectories = []string{"cilium", "operator-generic", "cilium-chart"}
ADOTImageDirectories = []string{"collector"}
ProjectsSupportingPrereleaseTags = []string{"kubernetes-sigs/cluster-api-provider-cloudstack"}
// These projects will be upgraded only on main and won't be triggered on release branches.
CuratedPackagesProjects = []string{
"aquasecurity/harbor-scanner-trivy",
"aquasecurity/trivy",
"aws/rolesanywhere-credential-helper",
"aws-containers/hello-eks-anywhere",
"aws-observability/aws-otel-collector",
"distribution/distribution",
"emissary-ingress/emissary",
"goharbor/harbor",
"goharbor/harbor-scanner-trivy",
"kubernetes/autoscaler",
"kubernetes/cloud-provider-aws",
"kubernetes-sigs/metrics-server",
"metallb/metallb",
"prometheus/node_exporter",
"prometheus/prometheus",
"redis/redis",
}
ProjectsUpgradedOnlyOnMainBranch = append(
[]string{
"kubernetes-sigs/cluster-api",
},
CuratedPackagesProjects...,
)
ProjectMaximumSemvers = map[string]string{
"containerd/containerd": "v1",
"kubernetes-sigs/cluster-api": "v1.9.4",
"opencontainers/runc": "v1.1",
"prometheus/prometheus": "v2",
"helm/helm": "v3.16.4",
}
ECRImageRepositories = map[string]string{
"cilium/cilium": CiliumImageRepository,
"envoyproxy/envoy": EnvoyImageRepository,
}
)