diff --git a/in_command.go b/in_command.go index 2e19dfe..ec5bb59 100644 --- a/in_command.go +++ b/in_command.go @@ -32,6 +32,7 @@ func (c *InCommand) Run(destDir string, request InRequest) (InResponse, error) { } var foundRelease *github.RepositoryRelease + var commitSHA string if request.Version.Tag != "" { foundRelease, err = c.github.GetReleaseByTag(request.Version.Tag) @@ -61,6 +62,13 @@ func (c *InCommand) Run(destDir string, request InRequest) (InResponse, error) { return InResponse{}, err } + commitPath := filepath.Join(destDir, "target_commit") + commitSHA = c.resolveTagToCommitSHA(*foundRelease.TagName) + err = ioutil.WriteFile(commitPath, []byte(commitSHA), 0644) + if err != nil { + return InResponse{}, err + } + if foundRelease.Body != nil && *foundRelease.Body != "" { body := *foundRelease.Body bodyPath := filepath.Join(destDir, "body") @@ -133,7 +141,7 @@ func (c *InCommand) Run(destDir string, request InRequest) (InResponse, error) { return InResponse{ Version: versionFromRelease(foundRelease), - Metadata: metadataFromRelease(foundRelease), + Metadata: metadataFromRelease(foundRelease, commitSHA), }, nil } @@ -182,3 +190,19 @@ func (c *InCommand) downloadFile(url, destPath string) error { return nil } + +func (c *InCommand) resolveTagToCommitSHA(tag string) string { + reference, err := c.github.GetRef(tag) + + if err != nil { + fmt.Fprintln(c.writer, "could not resolve tag '%s' to commit: %v", tag, err) + return "" + } + + if *reference.Object.Type != "commit" { + fmt.Fprintln(c.writer, "could not resolve tag '%s' to commit: returned type is not 'commit' - only lightweight tags are supported", tag) + return "" + } + + return *reference.Object.SHA +} diff --git a/in_command_test.go b/in_command_test.go index e1b0760..6e638e3 100644 --- a/in_command_test.go +++ b/in_command_test.go @@ -142,7 +142,7 @@ var _ = Describe("In Command", func() { resource.MetadataPair{Name: "name", Value: "release-name", URL: "http://google.com"}, resource.MetadataPair{Name: "body", Value: "*markdown*", Markdown: true}, resource.MetadataPair{Name: "tag", Value: "v0.35.0"}, - resource.MetadataPair{Name: "commit_sha", Value: "f28085a4a8f744da83411f5e09fd7b1709149eee"}, + resource.MetadataPair{Name: "target_commit", Value: "f28085a4a8f744da83411f5e09fd7b1709149eee"}, )) }) @@ -171,7 +171,7 @@ var _ = Describe("In Command", func() { Ω(err).ShouldNot(HaveOccurred()) Ω(string(contents)).Should(Equal("0.35.0")) - contents, err = ioutil.ReadFile(path.Join(destDir, "commit_sha")) + contents, err = ioutil.ReadFile(path.Join(destDir, "target_commit")) Ω(err).ShouldNot(HaveOccurred()) Ω(string(contents)).Should(Equal("f28085a4a8f744da83411f5e09fd7b1709149eee")) @@ -361,7 +361,7 @@ var _ = Describe("In Command", func() { resource.MetadataPair{Name: "name", Value: "release-name", URL: "http://google.com"}, resource.MetadataPair{Name: "body", Value: "*markdown*", Markdown: true}, resource.MetadataPair{Name: "tag", Value: "v0.35.0"}, - resource.MetadataPair{Name: "commit_sha", Value: "f28085a4a8f744da83411f5e09fd7b1709149eee"}, + resource.MetadataPair{Name: "target_commit", Value: "f28085a4a8f744da83411f5e09fd7b1709149eee"}, )) }) @@ -455,7 +455,7 @@ var _ = Describe("In Command", func() { resource.MetadataPair{Name: "name", Value: "release-name", URL: "http://google.com"}, resource.MetadataPair{Name: "body", Value: "*markdown*", Markdown: true}, resource.MetadataPair{Name: "tag", Value: "v0.35.0"}, - resource.MetadataPair{Name: "commit_sha", Value: "f28085a4a8f744da83411f5e09fd7b1709149eee"}, + resource.MetadataPair{Name: "target_commit", Value: "f28085a4a8f744da83411f5e09fd7b1709149eee"}, resource.MetadataPair{Name: "draft", Value: "true"}, )) }) @@ -500,7 +500,7 @@ var _ = Describe("In Command", func() { It("does not create the tag and version files", func() { Ω(path.Join(destDir, "tag")).ShouldNot(BeAnExistingFile()) Ω(path.Join(destDir, "version")).ShouldNot(BeAnExistingFile()) - Ω(path.Join(destDir, "commit_sha")).ShouldNot(BeAnExistingFile()) + Ω(path.Join(destDir, "target_commit")).ShouldNot(BeAnExistingFile()) }) }) diff --git a/metadata.go b/metadata.go index 1f8fb2f..de0ee5e 100644 --- a/metadata.go +++ b/metadata.go @@ -2,7 +2,7 @@ package resource import "github.com/google/go-github/github" -func metadataFromRelease(release *github.RepositoryRelease) []MetadataPair { +func metadataFromRelease(release *github.RepositoryRelease, commitSHA string) []MetadataPair { metadata := []MetadataPair{} if release.Name != nil { @@ -40,6 +40,13 @@ func metadataFromRelease(release *github.RepositoryRelease) []MetadataPair { }) } + if commitSHA != "" { + metadata = append(metadata, MetadataPair{ + Name: "target_commit", + Value: commitSHA, + }) + } + if *release.Draft { metadata = append(metadata, MetadataPair{ Name: "draft", diff --git a/out_command.go b/out_command.go index 5d877d6..c5fb5eb 100644 --- a/out_command.go +++ b/out_command.go @@ -145,7 +145,7 @@ func (c *OutCommand) Run(sourceDir string, request OutRequest) (OutResponse, err return OutResponse{ Version: versionFromRelease(release), - Metadata: metadataFromRelease(release), + Metadata: metadataFromRelease(release, ""), }, nil }