// Copyright 2017 HootSuite Media Inc. // // Licensed under the Apache License, Version 2.0 (the License); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an AS IS BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Modified hereafter by contributors to runatlantis/atlantis. package templates import ( "html/template" "io" "time" ) //go:generate pegomock generate -m --use-experimental-model-gen --package mocks -o mocks/mock_template_writer.go TemplateWriter // TemplateWriter is an interface over html/template that's used to enable // mocking. type TemplateWriter interface { // Execute applies a parsed template to the specified data object, // writing the output to wr. Execute(wr io.Writer, data interface{}) error } // LockIndexData holds the fields needed to display the index view for locks. type LockIndexData struct { LockPath string RepoFullName string PullNum int Path string Workspace string Time time.Time TimeFormatted string } // ApplyLockData holds the fields to display in the index view type ApplyLockData struct { Locked bool Time time.Time TimeFormatted string } // IndexData holds the data for rendering the index page type IndexData struct { Locks []LockIndexData ApplyLock ApplyLockData AtlantisVersion string // CleanedBasePath is the path Atlantis is accessible at externally. If // not using a path-based proxy, this will be an empty string. Never ends // in a '/' (hence "cleaned"). CleanedBasePath string } var IndexTemplate = template.Must(template.New("index.html.tmpl").Parse(` atlantis

atlantis

Plan discarded and unlocked!

{{ if .ApplyLock.Locked }}
Apply commands are disabled globally
Lock Status: Active
Active Since: {{ .ApplyLock.TimeFormatted }}
Enable Apply Commands
{{ else }}
Apply commands are enabled
Disable Apply Commands
{{ end }}



Locks

{{ if .Locks }} {{ $basePath := .CleanedBasePath }} {{ range .Locks }}
{{.RepoFullName}} #{{.PullNum}} {{.Path}} {{.Workspace}}
Locked
{{.TimeFormatted}}
{{ end }} {{ else }}

No locks found.

{{ end }}
`)) // LockDetailData holds the fields needed to display the lock detail view. type LockDetailData struct { LockKeyEncoded string LockKey string RepoOwner string RepoName string PullRequestLink string LockedBy string Workspace string Time time.Time AtlantisVersion string // CleanedBasePath is the path Atlantis is accessible at externally. If // not using a path-based proxy, this will be an empty string. Never ends // in a '/' (hence "cleaned"). CleanedBasePath string } var LockTemplate = template.Must(template.New("lock.html.tmpl").Parse(` atlantis

atlantis

{{.LockKey}} Locked


Repo Owner: {{.RepoOwner}}
Repo Name: {{.RepoName}}
Pull Request Link: {{.PullRequestLink}}
Locked By: {{.LockedBy}}
Workspace: {{.Workspace}}

`)) // ProjectJobData holds the data needed to stream the current PR information type ProjectJobData struct { AtlantisVersion string ProjectPath string CleanedBasePath string } var ProjectJobsTemplate = template.Must(template.New("blank.html.tmpl").Parse(` atlantis

atlantis


`)) type ProjectJobsError struct { AtlantisVersion string ProjectPath string CleanedBasePath string } var ProjectJobsErrorTemplate = template.Must(template.New("blank.html.tmpl").Parse(` atlantis

atlantis


`)) // GithubSetupData holds the data for rendering the github app setup page type GithubSetupData struct { Target string Manifest string ID int64 Key string WebhookSecret string URL string CleanedBasePath string } var GithubAppSetupTemplate = template.Must(template.New("github-app.html.tmpl").Parse(` atlantis

atlantis

{{ if .Target }} Create a github app {{ else }} Github app created successfully! {{ end }}

{{ if .Target }}
{{ else }}

Visit {{ .URL }}/installations/new to install the app for your user or organization, then update the following values in your config and restart Atlantis:

  • gh-app-id:
    {{ .ID }}
  • gh-app-key-file:
    {{ .Key }}
  • gh-webhook-secret:
    {{ .WebhookSecret }}
{{ end }}
`))