Skip to content

Commit

Permalink
Instanced Pipelines support Alert types fixed and broke (#96)
Browse files Browse the repository at this point in the history
  • Loading branch information
smoke authored Oct 17, 2022
1 parent 07fb354 commit 84492c7
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 14 deletions.
19 changes: 10 additions & 9 deletions concourse/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,16 @@ import (

// A Build is a build's data from the undocumented Concourse API.
type Build struct {
ID int `json:"id"`
Team string `json:"team_name"`
Name string `json:"name"`
Status string `json:"status"`
Job string `json:"job_name"`
APIURL string `json:"api_url"`
Pipeline string `json:"pipeline_name"`
StartTime int `json:"start_time"`
EndTime int `json:"end_time"`
ID int `json:"id"`
Team string `json:"team_name"`
Name string `json:"name"`
Status string `json:"status"`
Job string `json:"job_name"`
APIURL string `json:"api_url"`
Pipeline string `json:"pipeline_name"`
InstanceVars map[string]string `json:"pipeline_instance_vars,omitempty"`
StartTime int `json:"start_time"`
EndTime int `json:"end_time"`
}

// BuildMetadata is the current build's metadata exposed via the environment.
Expand Down
5 changes: 3 additions & 2 deletions concourse/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,14 +226,15 @@ func (c *Client) loginLegacy(url, username, password string) error {

// JobBuild finds and returns a Build from the Concourse API by its
// pipeline name, job name and build name.
func (c *Client) JobBuild(pipeline, job, name string) (*Build, error) {
func (c *Client) JobBuild(pipeline, job, name, instanceVars string) (*Build, error) {
u := fmt.Sprintf(
"%s/api/v1/teams/%s/pipelines/%s/jobs/%s/builds/%s",
"%s/api/v1/teams/%s/pipelines/%s/jobs/%s/builds/%s%s",
c.atcurl,
c.team,
pipeline,
job,
name,
instanceVars,
)

r, err := c.conn.Get(u)
Expand Down
28 changes: 26 additions & 2 deletions concourse/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package concourse

import (
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"net/url"
Expand Down Expand Up @@ -147,7 +148,7 @@ func TestJobBuild(t *testing.T) {
build *Build
err bool
}{
"ok": {build: &Build{
"okWithoutInstanceVars": {build: &Build{
ID: 1,
Team: "main",
Name: "1",
Expand All @@ -156,6 +157,19 @@ func TestJobBuild(t *testing.T) {
APIURL: "/api/v1/builds/1",
Pipeline: "demo",
}},
"okWithInstanceVars": {build: &Build{
ID: 1,
Team: "main",
Name: "1",
Status: "succeeded",
Job: "test",
APIURL: "/api/v1/builds/1",
Pipeline: "demo",
InstanceVars: map[string]string{
"image_name": "my-image",
"pr_number": "1234",
},
}},
"unauthorized": {
build: &Build{},
err: true,
Expand All @@ -174,7 +188,17 @@ func TestJobBuild(t *testing.T) {

t.Run(name, func(t *testing.T) {
client := &Client{atcurl: u, team: c.build.Team, conn: &http.Client{}}
build, err := client.JobBuild(c.build.Pipeline, c.build.Job, c.build.Name)
instanceVars := ""
if c.build.InstanceVars != nil {
query := &url.Values{}
for key, value := range c.build.InstanceVars {
key = fmt.Sprintf("vars.%s", key)
value = fmt.Sprintf(`"%s"`, value)
query.Set(key, value)
}
instanceVars = fmt.Sprintf("?%s", query.Encode())
}
build, err := client.JobBuild(c.build.Pipeline, c.build.Job, c.build.Name, instanceVars)

if err != nil && !c.err {
t.Fatalf("unexpected error from JobBuild:\n\t(ERR): %s", err)
Expand Down
8 changes: 7 additions & 1 deletion out/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,13 @@ func previousBuildStatus(input *concourse.OutRequest, m concourse.BuildMetadata)
return "", fmt.Errorf("error parsing build name: %s", err)
}

previous, err := c.JobBuild(m.PipelineName, m.JobName, p)
instanceVars := ""
instanceVarsIndex := strings.Index(m.URL, "?")
if instanceVarsIndex > -1 {
instanceVars = m.URL[instanceVarsIndex:]
}

previous, err := c.JobBuild(m.PipelineName, m.JobName, p, instanceVars)
if err != nil {
return "", fmt.Errorf("error requesting Concourse build status: %s", err)
}
Expand Down

0 comments on commit 84492c7

Please sign in to comment.