Skip to content

Commit 42efe9f

Browse files
committed
fix: shorten git traffic tags
1 parent 3d41b56 commit 42efe9f

1 file changed

Lines changed: 39 additions & 8 deletions

File tree

main.go

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ type config struct {
2929
}
3030

3131
const gitTrafficTagPrefix = "git-"
32+
const cloudRunServiceAndTagMaxLength = 46
33+
const minGitTrafficTagSHALength = 7
3234

3335
func main() {
3436
cfg, err := parseConfig()
@@ -255,6 +257,26 @@ func resolveGitSHA(dir string) (string, error) {
255257
return sha, nil
256258
}
257259

260+
func buildGitTrafficTag(service, gitSHA string) (string, bool) {
261+
serviceName := strings.TrimSpace(service)
262+
sha := strings.TrimSpace(strings.ToLower(gitSHA))
263+
if serviceName == "" || sha == "" {
264+
return "", false
265+
}
266+
267+
maxTagLength := cloudRunServiceAndTagMaxLength - len(serviceName)
268+
minTagLength := len(gitTrafficTagPrefix) + minGitTrafficTagSHALength
269+
if maxTagLength < minTagLength {
270+
return "", false
271+
}
272+
273+
maxSHALength := maxTagLength - len(gitTrafficTagPrefix)
274+
if maxSHALength > len(sha) {
275+
maxSHALength = len(sha)
276+
}
277+
return gitTrafficTagPrefix + sha[:maxSHALength], true
278+
}
279+
258280
func deployServices(cfg *config, image string) error {
259281
var wg sync.WaitGroup
260282
errs := make(chan error, len(cfg.services))
@@ -311,15 +333,24 @@ func deployService(cfg *config, service, image string) error {
311333
"--project=" + cfg.project,
312334
}
313335
if cfg.gitSHA != "" {
314-
gitTrafficTag := gitTrafficTagPrefix + cfg.gitSHA
315-
oldGitTags, err := listServiceGitTags(cfg, service)
316-
if err != nil {
317-
return fmt.Errorf("list git tags for %s: %w", service, err)
318-
}
319-
if len(oldGitTags) > 0 {
320-
updateTrafficArgs = append(updateTrafficArgs, "--remove-tags="+strings.Join(oldGitTags, ","))
336+
gitTrafficTag, ok := buildGitTrafficTag(service, cfg.gitSHA)
337+
if !ok {
338+
fmt.Fprintf(
339+
os.Stderr,
340+
"warn: service %q is too long to fit a git traffic tag within %d characters, skipping git tag\n",
341+
service,
342+
cloudRunServiceAndTagMaxLength,
343+
)
344+
} else {
345+
oldGitTags, err := listServiceGitTags(cfg, service)
346+
if err != nil {
347+
return fmt.Errorf("list git tags for %s: %w", service, err)
348+
}
349+
if len(oldGitTags) > 0 {
350+
updateTrafficArgs = append(updateTrafficArgs, "--remove-tags="+strings.Join(oldGitTags, ","))
351+
}
352+
updateTrafficArgs = append(updateTrafficArgs, "--update-tags="+gitTrafficTag+"=LATEST")
321353
}
322-
updateTrafficArgs = append(updateTrafficArgs, "--update-tags="+gitTrafficTag+"=LATEST")
323354
}
324355
if err := runCommandStreaming(cfg.workdir, "gcloud", updateTrafficArgs...); err != nil {
325356
return fmt.Errorf("update traffic for %s: %w", service, err)

0 commit comments

Comments
 (0)