gitlab.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. version := response.TagName
  34. if len(version) > 0 && version[0] != 'v' {
  35. version = "v" + version
  36. }
  37. return &AppRelease{
  38. Source: ReleaseSourceGitlab,
  39. Name: request.Repository,
  40. Version: version,
  41. NotesUrl: response.Links.Self,
  42. TimeReleased: parseRFC3339Time(response.ReleasedAt),
  43. }, nil
  44. }