Skip to content

Commit

Permalink
integrationsGH-144 - Added handling for retrieving releases by variou…
Browse files Browse the repository at this point in the history
…s methods
  • Loading branch information
benj-fletch authored and Jeremy Udit committed Feb 20, 2020
1 parent 762dece commit 9ac7786
Showing 1 changed file with 39 additions and 4 deletions.
43 changes: 39 additions & 4 deletions github/data_source_github_release.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ package github

import (
"context"
"errors"
"log"
"strconv"
"strings"

"github.com/google/go-github/v28/github"
"github.com/hashicorp/terraform/helper/schema"
)

Expand All @@ -21,9 +24,17 @@ func dataSourceGithubRelease() *schema.Resource {
Type: schema.TypeString,
Required: true,
},
"retrieve_by": {
Type: schema.TypeString,
Required: true,
},
"release_tag": {
Type: schema.TypeString,
Optional: true,
},
"release_id": {
Type: schema.TypeInt,
Required: true,
Optional: true,
},
"url": {
Type: schema.TypeString,
Expand All @@ -36,13 +47,37 @@ func dataSourceGithubRelease() *schema.Resource {
func dataSourceGithubReleaseRead(d *schema.ResourceData, meta interface{}) error {
repository := d.Get("repository").(string)
owner := d.Get("owner").(string)
releaseID := int64(d.Get("release_id").(int))
log.Printf("[INFO] Refreshing GitHub release %s from repository %s", releaseID, repository)

client := meta.(*Organization).client
ctx := context.Background()

release, _, err := client.Repositories.GetRelease(ctx, owner, repository, releaseID)
var err error
var release *github.RepositoryRelease

switch retrieveBy := strings.ToLower(d.Get("retrieve_by").(string)); retrieveBy {
case "latest":
log.Printf("[INFO] Refreshing GitHub latest release from repository %s", repository)
release, _, err = client.Repositories.GetLatestRelease(ctx, owner, repository)
case "id":
releaseID := int64(d.Get("release_id").(int))
if releaseID == 0 {
return errors.New("'release_id' must be set when 'retrieve_by' = 'id'")
}

log.Printf("[INFO] Refreshing GitHub release by id %s from repository %s", releaseID, repository)
release, _, err = client.Repositories.GetRelease(ctx, owner, repository, releaseID)
case "tag":
tag := d.Get("release_tag").(string)
if tag == "" {
return errors.New("'release_tag' must be set when 'retrieve_by' = 'tag'")
}

log.Printf("[INFO] Refreshing GitHub release by tag %s from repository %s", tag, repository)
release, _, err = client.Repositories.GetReleaseByTag(ctx, owner, repository, tag)
default:
return errors.New("One of: 'latest', 'id', 'tag' must be set for 'retrieve_by'")
}

if err != nil {
return err
}
Expand Down

0 comments on commit 9ac7786

Please sign in to comment.