Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 34 additions & 13 deletions server/e2e_tests.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,34 @@ type E2EInstance struct {
ServerVersion string `json:"server_version"`
}

// e2eUniqueSuffix returns an 8-character hex timestamp for instance name uniqueness.
func e2eUniqueSuffix() string {
return fmt.Sprintf("%08x", time.Now().Unix())
}

// sanitizeForDNS lowercases and replaces non-DNS characters with hyphens.
func sanitizeForDNS(s string) string {
s = strings.ToLower(s)
s = strings.ReplaceAll(s, "_", "-")
s = strings.ReplaceAll(s, ".", "-")
s = strings.ReplaceAll(s, "/", "-")
return s
}

// e2eInstanceName builds a DNS-safe instance name and truncates if needed.
// parts are joined with "-". The total name + dnsSuffix must be <= 62.
func e2eInstanceName(dnsSuffix string, parts ...string) string {
name := strings.Join(parts, "-")
maxLen := 62 - len(dnsSuffix)
if maxLen < 1 {
maxLen = 1
}
if len(name) > maxLen {
name = strings.TrimRight(name[:maxLen], "-")
}
return name
}

// handleE2ETestRequest is the main orchestrator for E2E test requests
func (s *Server) handleE2ETestRequest(pr *model.PullRequest, label string) {
logger := s.Logger.WithFields(logrus.Fields{
Expand Down Expand Up @@ -149,21 +177,14 @@ func (s *Server) createMultipleE2EInstances(pr *model.PullRequest, instanceType
// Get password from environment or generate one
password = s.getE2EPassword(instanceType)

sanitizedRepo := strings.ToLower(pr.RepoName)
sanitizedRepo = strings.ReplaceAll(sanitizedRepo, "_", "-")
sanitizedRepo = strings.ReplaceAll(sanitizedRepo, ".", "-")
// Name format: {type}-pr-{pr}-{platform}-{hex6}
uid := e2eUniqueSuffix()

for _, platform := range platforms {
suffix := fmt.Sprintf("-e2e-%d-%s", pr.Number, platform)
maxRepoLen := 63 - len(s.Config.DNSNameTestServer) - len(suffix)
if maxRepoLen < 1 {
maxRepoLen = 1
}
repo := sanitizedRepo
if len(repo) > maxRepoLen {
repo = strings.TrimRight(repo[:maxRepoLen], "-")
}
instanceName := repo + suffix
instanceName := e2eInstanceName(
s.Config.DNSNameTestServer,
instanceType, fmt.Sprintf("pr-%d", pr.Number), platform, uid,
)

logger.WithField("instance", instanceName).Info("Creating E2E instance")

Expand Down
40 changes: 13 additions & 27 deletions server/push_events.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,36 +153,22 @@ func (s *Server) createMultipleE2EInstancesForPushEvent(repoName, instanceType,
"platformCount": len(platforms),
})

sanitizedRepoName := strings.ToLower(repoName)
sanitizedRepoName = strings.ReplaceAll(sanitizedRepoName, "_", "-")
sanitizedRepoName = strings.ReplaceAll(sanitizedRepoName, ".", "-")
// Name format: {type}-{version}-{platform}-{hex6}
serverVersion := s.Config.E2EServerVersion
if version != "" {
serverVersion = version
}
sanitizedVersion := sanitizeForDNS(serverVersion)
uid := e2eUniqueSuffix()

sanitizedBranch := strings.ToLower(branch)
sanitizedBranch = strings.ReplaceAll(sanitizedBranch, "/", "-")
sanitizedBranch = strings.ReplaceAll(sanitizedBranch, "_", "-")
sanitizedBranch = strings.ReplaceAll(sanitizedBranch, ".", "-")
username := s.Config.E2EUsername
password := s.getE2EPassword(instanceType)

for _, platform := range platforms {
suffix := fmt.Sprintf("-e2e-%s-%s", sanitizedBranch, platform)
repoPrefix := sanitizedRepoName
if maxLen := 63 - len(s.Config.DNSNameTestServer) - len(suffix); len(repoPrefix) > maxLen {
if maxLen < 1 {
maxLen = 1
}
repoPrefix = strings.TrimRight(repoPrefix[:maxLen], "-")
}
name := repoPrefix + suffix

// Use version if provided, otherwise use server version from config
serverVersion := s.Config.E2EServerVersion
if version != "" {
serverVersion = version
}

username := s.Config.E2EUsername

// Get password from config or org-level secrets
password := s.getE2EPassword(instanceType)
name := e2eInstanceName(
s.Config.DNSNameTestServer,
instanceType, sanitizedVersion, platform, uid,
)

instance, err := s.createCloudInstallation(name, serverVersion, username, password, instanceType, logger)
if err != nil {
Expand Down
42 changes: 11 additions & 31 deletions server/workflow_run.go
Original file line number Diff line number Diff line change
Expand Up @@ -353,22 +353,10 @@ func (s *Server) handleCMTWithServerVersions(repoOwner, repoName, instanceType,
// Unlike createCMTInstancesForVersion (which creates 3 platform-specific instances for
// nightly runs), CMT only needs one server — the matrix handles parallelism.
func (s *Server) createSingleCMTInstance(repoName, instanceType, version string, logger logrus.FieldLogger) (*E2EInstance, error) {
sanitizedRepoName := strings.ToLower(repoName)
sanitizedRepoName = strings.ReplaceAll(sanitizedRepoName, "_", "-")
sanitizedRepoName = strings.ReplaceAll(sanitizedRepoName, ".", "-")

sanitizedVersion := strings.ToLower(version)
sanitizedVersion = strings.ReplaceAll(sanitizedVersion, ".", "-")

suffix := fmt.Sprintf("-cmt-%s", sanitizedVersion)
repoPrefix := sanitizedRepoName
if maxLen := 63 - len(s.Config.DNSNameTestServer) - len(suffix); len(repoPrefix) > maxLen {
if maxLen < 1 {
maxLen = 1
}
repoPrefix = strings.TrimRight(repoPrefix[:maxLen], "-")
}
name := repoPrefix + suffix
// Name format: {type}-{version}-{hex6}
sanitizedVersion := sanitizeForDNS(version)
uid := e2eUniqueSuffix()
name := e2eInstanceName(s.Config.DNSNameTestServer, instanceType, sanitizedVersion, uid)

username := s.Config.E2EUsername
password := s.getE2EPassword(instanceType)
Expand Down Expand Up @@ -517,32 +505,24 @@ func (s *Server) createCMTInstancesForVersion(repoName, instanceType, version, p
platforms = []string{"site-1", "site-2", "site-3"}
}

sanitizedRepoName := strings.ToLower(repoName)
sanitizedRepoName = strings.ReplaceAll(sanitizedRepoName, "_", "-")
sanitizedRepoName = strings.ReplaceAll(sanitizedRepoName, ".", "-")

sanitizedVersion := strings.ReplaceAll(version, ".", "-")
// Name format: {type}-{version}-{platform}-{hex6}
sanitizedVersion := sanitizeForDNS(version)
uid := e2eUniqueSuffix()

logger := s.Logger.WithFields(logrus.Fields{
"repo": repoName,
"type": instanceType,
"version": version,
})

// Get credentials
username := s.Config.E2EUsername
password := s.getE2EPassword(instanceType)

for _, platform := range platforms {
suffix := fmt.Sprintf("-%s-%s-%s", purpose, sanitizedVersion, platform)
repoPrefix := sanitizedRepoName
if maxLen := 63 - len(s.Config.DNSNameTestServer) - len(suffix); len(repoPrefix) > maxLen {
if maxLen < 1 {
maxLen = 1
}
repoPrefix = strings.TrimRight(repoPrefix[:maxLen], "-")
}
name := repoPrefix + suffix
name := e2eInstanceName(
s.Config.DNSNameTestServer,
instanceType, sanitizedVersion, platform, uid,
)

instance, err := s.createCloudInstallation(name, version, username, password, instanceType, logger)
if err != nil {
Expand Down
Loading