Releases¶
The release package provides functions for listing releases and downloading release assets. All
functions take a clientv1.Client and return stable gogithub.* types.
Listing Releases¶
List All Releases¶
import "github.com/grokify/gogithub/release"
releases, err := release.ListReleases(ctx, client, "owner", "repo")
for _, r := range releases {
fmt.Printf("%s: %s\n", r.TagName, r.Name)
}
List Releases Since an ID¶
Get Latest Release¶
latest, err := release.GetLatestRelease(ctx, client, "owner", "repo")
fmt.Printf("Latest version: %s\n", latest.TagName)
if latest.PublishedAt != nil {
fmt.Printf("Published: %s\n", latest.PublishedAt.Format("2006-01-02"))
}
Release Assets¶
List Assets for a Release¶
// First get the release
latest, _ := release.GetLatestRelease(ctx, client, "owner", "repo")
// List its assets
assets, err := release.ListReleaseAssets(ctx, client, "owner", "repo", latest.ID)
for _, asset := range assets {
fmt.Printf(" %s (%d bytes)\n", asset.Name, asset.Size)
}
Download an Asset¶
Assets can be downloaded via their browser download URL:
for _, asset := range assets {
if asset.Name == "myapp-linux-amd64.tar.gz" {
fmt.Printf("Download URL: %s\n", asset.BrowserDownloadURL)
}
}
Complete Example¶
List all releases with their assets:
package main
import (
"context"
"fmt"
"github.com/grokify/gogithub/clientv1"
"github.com/grokify/gogithub/release"
)
func main() {
ctx := context.Background()
client, err := clientv1.NewClient(ctx, "your-token")
if err != nil {
panic(err)
}
releases, err := release.ListReleases(ctx, client, "cli", "cli")
if err != nil {
panic(err)
}
for _, r := range releases {
fmt.Printf("\n%s - %s\n", r.TagName, r.Name)
if r.PublishedAt != nil {
fmt.Printf(" Published: %s\n", r.PublishedAt.Format("2006-01-02"))
}
if r.Prerelease {
fmt.Println(" (prerelease)")
}
assets, _ := release.ListReleaseAssets(ctx, client, "cli", "cli", r.ID)
for _, asset := range assets {
fmt.Printf(" - %s (%d KB)\n", asset.Name, asset.Size/1024)
}
}
}
API Reference¶
See pkg.go.dev/github.com/grokify/gogithub/release for complete API documentation.