main.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "os"
  7. )
  8. func main() {
  9. var version string
  10. var whatsNewURL string
  11. var releaseNotesURL string
  12. var dryRun bool
  13. var enterprise bool
  14. var nightly bool
  15. var apiKey string
  16. flag.StringVar(&version, "version", "", "Grafana version (ex: --version v5.2.0-beta1)")
  17. flag.StringVar(&whatsNewURL, "wn", "", "What's new url (ex: --wn http://docs.grafana.org/guides/whats-new-in-v5-2/)")
  18. flag.StringVar(&releaseNotesURL, "rn", "", "Grafana version (ex: --rn https://community.grafana.com/t/release-notes-v5-2-x/7894)")
  19. flag.StringVar(&apiKey, "apikey", "", "Grafana.com API key (ex: --apikey ABCDEF)")
  20. flag.BoolVar(&dryRun, "dry-run", false, "--dry-run")
  21. flag.BoolVar(&enterprise, "enterprise", false, "--enterprise")
  22. flag.BoolVar(&nightly, "nightly", false, "--nightly (default: false)")
  23. flag.Parse()
  24. if len(os.Args) == 1 {
  25. fmt.Println("Usage: go run publisher.go main.go --version <v> --wn <what's new url> --rn <release notes url> --apikey <api key> --dry-run false --enterprise false --nightly false")
  26. fmt.Println("example: go run publisher.go main.go --version v5.2.0-beta2 --wn http://docs.grafana.org/guides/whats-new-in-v5-2/ --rn https://community.grafana.com/t/release-notes-v5-2-x/7894 --apikey ASDF123 --dry-run --enterprise")
  27. os.Exit(1)
  28. }
  29. if dryRun {
  30. log.Println("Dry-run has been enabled.")
  31. }
  32. var baseURL string
  33. var builder releaseBuilder
  34. var product string
  35. archiveProviderRoot := "https://dl.grafana.com"
  36. buildArtifacts := completeBuildArtifactConfigurations
  37. if enterprise {
  38. product = "grafana-enterprise"
  39. baseURL = createBaseURL(archiveProviderRoot, "enterprise", product, nightly)
  40. var err error
  41. buildArtifacts, err = filterBuildArtifacts([]artifactFilter{
  42. {os: "deb", arch: "amd64"},
  43. {os: "rhel", arch: "amd64"},
  44. {os: "linux", arch: "amd64"},
  45. {os: "win", arch: "amd64"},
  46. })
  47. if err != nil {
  48. log.Fatalf("Could not filter to the selected build artifacts, err=%v", err)
  49. }
  50. } else {
  51. product = "grafana"
  52. baseURL = createBaseURL(archiveProviderRoot, "oss", product, nightly)
  53. }
  54. builder = releaseFromExternalContent{
  55. getter: getHTTPContents{},
  56. rawVersion: version,
  57. artifactConfigurations: buildArtifacts,
  58. }
  59. p := publisher{
  60. apiKey: apiKey,
  61. apiURI: "https://grafana.com/api",
  62. product: product,
  63. dryRun: dryRun,
  64. enterprise: enterprise,
  65. baseArchiveURL: baseURL,
  66. builder: builder,
  67. }
  68. if err := p.doRelease(whatsNewURL, releaseNotesURL, nightly); err != nil {
  69. log.Fatalf("error: %v", err)
  70. }
  71. }
  72. func createBaseURL(root string, bucketName string, product string, nightly bool) string {
  73. var subPath string
  74. if nightly {
  75. subPath = "master"
  76. } else {
  77. subPath = "release"
  78. }
  79. return fmt.Sprintf("%s/%s/%s/%s", root, bucketName, subPath, product)
  80. }