gitlab.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package feed
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/url"
  6. )
  7. type gitlabReleaseResponseJson struct {
  8. TagName string `json:"tag_name"`
  9. ReleasedAt string `json:"released_at"`
  10. Links struct {
  11. Self string `json:"self"`
  12. } `json:"_links"`
  13. }
  14. func fetchLatestGitLabRelease(request *ReleaseRequest) (*AppRelease, error) {
  15. httpRequest, err := http.NewRequest(
  16. "GET",
  17. fmt.Sprintf(
  18. "https://gitlab.com/api/v4/projects/%s/releases/permalink/latest",
  19. url.QueryEscape(request.Repository),
  20. ),
  21. nil,
  22. )
  23. if err != nil {
  24. return nil, err
  25. }
  26. if request.Token != nil {
  27. httpRequest.Header.Add("PRIVATE-TOKEN", *request.Token)
  28. }
  29. response, err := decodeJsonFromRequest[gitlabReleaseResponseJson](defaultClient, httpRequest)
  30. if err != nil {
  31. return nil, err
  32. }
  33. return &AppRelease{
  34. Source: ReleaseSourceGitlab,
  35. Name: request.Repository,
  36. Version: normalizeVersionFormat(response.TagName),
  37. NotesUrl: response.Links.Self,
  38. TimeReleased: parseRFC3339Time(response.ReleasedAt),
  39. }, nil
  40. }