123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package feed
- import (
- "fmt"
- "net/http"
- "net/url"
- )
- type gitlabReleaseResponseJson struct {
- TagName string `json:"tag_name"`
- ReleasedAt string `json:"released_at"`
- Links struct {
- Self string `json:"self"`
- } `json:"_links"`
- }
- func fetchLatestGitLabRelease(request *ReleaseRequest) (*AppRelease, error) {
- httpRequest, err := http.NewRequest(
- "GET",
- fmt.Sprintf(
- "https://gitlab.com/api/v4/projects/%s/releases/permalink/latest",
- url.QueryEscape(request.Repository),
- ),
- nil,
- )
- if err != nil {
- return nil, err
- }
- if request.Token != nil {
- httpRequest.Header.Add("PRIVATE-TOKEN", *request.Token)
- }
- response, err := decodeJsonFromRequest[gitlabReleaseResponseJson](defaultClient, httpRequest)
- if err != nil {
- return nil, err
- }
- version := response.TagName
- if len(version) > 0 && version[0] != 'v' {
- version = "v" + version
- }
- return &AppRelease{
- Source: ReleaseSourceGitlab,
- Name: request.Repository,
- Version: version,
- NotesUrl: response.Links.Self,
- TimeReleased: parseRFC3339Time(response.ReleasedAt),
- }, nil
- }
|