externalrelease.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. "strings"
  7. "time"
  8. )
  9. type releaseFromExternalContent struct {
  10. getter urlGetter
  11. rawVersion string
  12. artifactConfigurations []buildArtifact
  13. }
  14. func (re releaseFromExternalContent) prepareRelease(baseArchiveUrl, whatsNewUrl string, releaseNotesUrl string) (*release, error) {
  15. version := re.rawVersion[1:]
  16. now := time.Now()
  17. isBeta := strings.Contains(version, "beta")
  18. builds := []build{}
  19. for _, ba := range re.artifactConfigurations {
  20. sha256, err := re.getter.getContents(fmt.Sprintf("%s.sha256", ba.getUrl(baseArchiveUrl, version, isBeta)))
  21. if err != nil {
  22. return nil, err
  23. }
  24. builds = append(builds, newBuild(baseArchiveUrl, ba, version, isBeta, sha256))
  25. }
  26. r := release{
  27. Version: version,
  28. ReleaseDate: time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local),
  29. Stable: !isBeta,
  30. Beta: isBeta,
  31. Nightly: false,
  32. WhatsNewUrl: whatsNewUrl,
  33. ReleaseNotesUrl: releaseNotesUrl,
  34. Builds: builds,
  35. }
  36. return &r, nil
  37. }
  38. type urlGetter interface {
  39. getContents(url string) (string, error)
  40. }
  41. type getHttpContents struct{}
  42. func (getHttpContents) getContents(url string) (string, error) {
  43. response, err := http.Get(url)
  44. if err != nil {
  45. return "", err
  46. }
  47. defer response.Body.Close()
  48. all, err := ioutil.ReadAll(response.Body)
  49. if err != nil {
  50. return "", err
  51. }
  52. return string(all), nil
  53. }