externalrelease.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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, nightly bool) (*release, error) {
  15. version := re.rawVersion[1:]
  16. isBeta := strings.Contains(version, "beta")
  17. builds := []build{}
  18. for _, ba := range re.artifactConfigurations {
  19. sha256, err := re.getter.getContents(fmt.Sprintf("%s.sha256", ba.getUrl(baseArchiveUrl, version, isBeta)))
  20. if err != nil {
  21. return nil, err
  22. }
  23. builds = append(builds, newBuild(baseArchiveUrl, ba, version, isBeta, sha256))
  24. }
  25. r := release{
  26. Version: version,
  27. ReleaseDate: time.Now().UTC(),
  28. Stable: !isBeta && !nightly,
  29. Beta: isBeta,
  30. Nightly: nightly,
  31. WhatsNewUrl: whatsNewUrl,
  32. ReleaseNotesUrl: releaseNotesUrl,
  33. Builds: builds,
  34. }
  35. return &r, nil
  36. }
  37. type urlGetter interface {
  38. getContents(url string) (string, error)
  39. }
  40. type getHttpContents struct{}
  41. func (getHttpContents) getContents(url string) (string, error) {
  42. response, err := http.Get(url)
  43. if err != nil {
  44. return "", err
  45. }
  46. defer response.Body.Close()
  47. all, err := ioutil.ReadAll(response.Body)
  48. if err != nil {
  49. return "", err
  50. }
  51. return string(all), nil
  52. }