[CT] Fix "Schedule more runs here" link broken in completion emails

Change-Id: I14cc8a479fbd7801f1cdb09d9bc6ca14a737c9e1
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/250439
Reviewed-by: Ben Wagner aka dogben <benjaminwagner@google.com>
Commit-Queue: Ravi Mistry <rmistry@google.com>
diff --git a/ct/go/ctfe/admin_tasks/admin_tasks.go b/ct/go/ctfe/admin_tasks/admin_tasks.go
index c0c1d8a..77979c2 100644
--- a/ct/go/ctfe/admin_tasks/admin_tasks.go
+++ b/ct/go/ctfe/admin_tasks/admin_tasks.go
@@ -9,6 +9,7 @@
 	"context"
 	"fmt"
 	"net/http"
+	"path"
 	"path/filepath"
 	"strconv"
 	"text/template"
@@ -147,7 +148,7 @@
 	You can schedule more runs <a href="%s">here</a>.<br/><br/>
 	Thanks!
 	`
-	emailBody := fmt.Sprintf(bodyTemplate, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), failureHtml, task_common.WebappURL+ctfeutil.ADMIN_TASK_URI)
+	emailBody := fmt.Sprintf(bodyTemplate, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), failureHtml, path.Join(task_common.WebappURL, ctfeutil.ADMIN_TASK_URI))
 	if err := ctfeutil.SendEmail(emails, emailSubject, emailBody); err != nil {
 		return fmt.Errorf("Error while sending email: %s", err)
 	}
@@ -267,7 +268,7 @@
 	You can schedule more runs <a href="%s">here</a>.<br/><br/>
 	Thanks!
 	`
-	emailBody := fmt.Sprintf(bodyTemplate, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), failureHtml, task_common.WebappURL+ctfeutil.ADMIN_TASK_URI)
+	emailBody := fmt.Sprintf(bodyTemplate, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), failureHtml, path.Join(task_common.WebappURL, ctfeutil.ADMIN_TASK_URI))
 	if err := ctfeutil.SendEmail(emails, emailSubject, emailBody); err != nil {
 		return fmt.Errorf("Error while sending email: %s", err)
 	}
diff --git a/ct/go/ctfe/capture_skps/capture_skps.go b/ct/go/ctfe/capture_skps/capture_skps.go
index b5f5bdf..3184839 100644
--- a/ct/go/ctfe/capture_skps/capture_skps.go
+++ b/ct/go/ctfe/capture_skps/capture_skps.go
@@ -8,6 +8,7 @@
 	"context"
 	"fmt"
 	"net/http"
+	"path"
 	"path/filepath"
 	"strconv"
 	"text/template"
@@ -149,7 +150,7 @@
 	You can schedule more runs <a href="%s">here</a>.<br/><br/>
 	Thanks!
 	`
-	emailBody := fmt.Sprintf(bodyTemplate, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, task_common.WebappURL+ctfeutil.CAPTURE_SKPS_URI)
+	emailBody := fmt.Sprintf(bodyTemplate, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, path.Join(task_common.WebappURL, ctfeutil.CAPTURE_SKPS_URI))
 	if err := ctfeutil.SendEmail(emails, emailSubject, emailBody); err != nil {
 		return fmt.Errorf("Error while sending email: %s", err)
 	}
diff --git a/ct/go/ctfe/chromium_analysis/chromium_analysis.go b/ct/go/ctfe/chromium_analysis/chromium_analysis.go
index db2d8c3..7f41c9f 100644
--- a/ct/go/ctfe/chromium_analysis/chromium_analysis.go
+++ b/ct/go/ctfe/chromium_analysis/chromium_analysis.go
@@ -258,7 +258,7 @@
 	v8PatchLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.V8PatchGSPath)
 	catapultPatchLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.CatapultPatchGSPath)
 	customWebpagesLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.CustomWebpagesGSPath)
-	emailBody := fmt.Sprintf(bodyTemplate, task.Benchmark, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, ctPerfHtml, task.RawOutput, archivedWebpagesText, chromiumPatchLink, skiaPatchLink, v8PatchLink, catapultPatchLink, customWebpagesLink, task_common.WebappURL+ctfeutil.CHROMIUM_ANALYSIS_URI)
+	emailBody := fmt.Sprintf(bodyTemplate, task.Benchmark, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, ctPerfHtml, task.RawOutput, archivedWebpagesText, chromiumPatchLink, skiaPatchLink, v8PatchLink, catapultPatchLink, customWebpagesLink, path.Join(task_common.WebappURL, ctfeutil.CHROMIUM_ANALYSIS_URI))
 	if err := ctfeutil.SendEmailWithMarkup(emails, emailSubject, emailBody, viewActionMarkup); err != nil {
 		return fmt.Errorf("Error while sending email: %s", err)
 	}
diff --git a/ct/go/ctfe/chromium_builds/chromium_builds.go b/ct/go/ctfe/chromium_builds/chromium_builds.go
index 1b4e47f..66857c2 100644
--- a/ct/go/ctfe/chromium_builds/chromium_builds.go
+++ b/ct/go/ctfe/chromium_builds/chromium_builds.go
@@ -13,6 +13,7 @@
 	"io"
 	"io/ioutil"
 	"net/http"
+	"path"
 	"path/filepath"
 	"regexp"
 	"strconv"
@@ -168,7 +169,7 @@
 	You can schedule more runs <a href="%s">here</a>.<br/><br/>
 	Thanks!
 	`
-	emailBody := fmt.Sprintf(bodyTemplate, ctfeutil.GetSwarmingLogsLink(runID), failureHtml, task_common.WebappURL+ctfeutil.CHROMIUM_BUILD_URI)
+	emailBody := fmt.Sprintf(bodyTemplate, ctfeutil.GetSwarmingLogsLink(runID), failureHtml, path.Join(task_common.WebappURL, ctfeutil.CHROMIUM_BUILD_URI))
 	if err := ctfeutil.SendEmail(emails, emailSubject, emailBody); err != nil {
 		return fmt.Errorf("Error while sending email: %s", err)
 	}
diff --git a/ct/go/ctfe/chromium_perf/chromium_perf.go b/ct/go/ctfe/chromium_perf/chromium_perf.go
index 9a18c13..43855f8 100644
--- a/ct/go/ctfe/chromium_perf/chromium_perf.go
+++ b/ct/go/ctfe/chromium_perf/chromium_perf.go
@@ -259,7 +259,7 @@
 	catapultPatchLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.CatapultPatchGSPath)
 	chromiumPatchBaseBuildLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.ChromiumPatchBaseBuildGSPath)
 	customWebpagesLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.CustomWebpagesGSPath)
-	emailBody := fmt.Sprintf(bodyTemplate, task.Benchmark, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, ctPerfHtml, task.Results, chromiumPatchLink, skiaPatchLink, v8PatchLink, catapultPatchLink, chromiumPatchBaseBuildLink, customWebpagesLink, task_common.WebappURL+ctfeutil.CHROMIUM_PERF_URI)
+	emailBody := fmt.Sprintf(bodyTemplate, task.Benchmark, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, ctPerfHtml, task.Results, chromiumPatchLink, skiaPatchLink, v8PatchLink, catapultPatchLink, chromiumPatchBaseBuildLink, customWebpagesLink, path.Join(task_common.WebappURL, ctfeutil.CHROMIUM_PERF_URI))
 	if err := ctfeutil.SendEmailWithMarkup(emails, emailSubject, emailBody, viewActionMarkup); err != nil {
 		return fmt.Errorf("Error while sending email: %s", err)
 	}
diff --git a/ct/go/ctfe/lua_scripts/lua_scripts.go b/ct/go/ctfe/lua_scripts/lua_scripts.go
index 726ae32..197b71a 100644
--- a/ct/go/ctfe/lua_scripts/lua_scripts.go
+++ b/ct/go/ctfe/lua_scripts/lua_scripts.go
@@ -8,6 +8,7 @@
 	"context"
 	"fmt"
 	"net/http"
+	"path"
 	"path/filepath"
 	"strconv"
 	"text/template"
@@ -194,7 +195,7 @@
 	You can schedule more runs <a href="%s">here</a>.<br/><br/>
 	Thanks!
 	`
-	emailBody := fmt.Sprintf(bodyTemplate, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, scriptOutputHtml, aggregatorOutputHtml, task_common.WebappURL+ctfeutil.LUA_SCRIPT_URI)
+	emailBody := fmt.Sprintf(bodyTemplate, task.PageSets, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, scriptOutputHtml, aggregatorOutputHtml, path.Join(task_common.WebappURL, ctfeutil.LUA_SCRIPT_URI))
 	if err := ctfeutil.SendEmailWithMarkup(emails, emailSubject, emailBody, viewActionMarkup); err != nil {
 		return fmt.Errorf("Error while sending email: %s", err)
 	}
diff --git a/ct/go/ctfe/metrics_analysis/metrics_analysis.go b/ct/go/ctfe/metrics_analysis/metrics_analysis.go
index 82a8b44..d8551a4 100644
--- a/ct/go/ctfe/metrics_analysis/metrics_analysis.go
+++ b/ct/go/ctfe/metrics_analysis/metrics_analysis.go
@@ -203,7 +203,7 @@
 	chromiumPatchLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.ChromiumPatchGSPath)
 	catapultPatchLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.CatapultPatchGSPath)
 	tracesLink := ctutil.GCS_HTTP_LINK + path.Join(ctutil.GCSBucketName, task.CustomTracesGSPath)
-	emailBody := fmt.Sprintf(bodyTemplate, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, task.RawOutput, chromiumPatchLink, catapultPatchLink, tracesLink, task_common.WebappURL+ctfeutil.METRICS_ANALYSIS_URI)
+	emailBody := fmt.Sprintf(bodyTemplate, ctfeutil.GetSwarmingLogsLink(runID), task.Description, failureHtml, task.RawOutput, chromiumPatchLink, catapultPatchLink, tracesLink, path.Join(task_common.WebappURL, ctfeutil.METRICS_ANALYSIS_URI))
 	if err := ctfeutil.SendEmailWithMarkup(emails, emailSubject, emailBody, viewActionMarkup); err != nil {
 		return fmt.Errorf("Error while sending email: %s", err)
 	}