| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package main
- import (
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "path/filepath"
- "regexp"
- "strings"
- "time"
- "github.com/pkg/errors"
- )
- type releaseLocalSources struct {
- path string
- artifactConfigurations []buildArtifact
- }
- func (r releaseLocalSources) prepareRelease(baseArchiveURL, whatsNewURL string, releaseNotesURL string, nightly bool) (*release, error) {
- if !nightly {
- return nil, errors.New("Local releases only supported for nightly builds")
- }
- buildData := r.findBuilds(baseArchiveURL)
- rel := release{
- Version: buildData.version,
- ReleaseDate: time.Now().UTC(),
- Stable: false,
- Beta: false,
- Nightly: nightly,
- WhatsNewURL: whatsNewURL,
- ReleaseNotesURL: releaseNotesURL,
- Builds: buildData.builds,
- }
- return &rel, nil
- }
- type buildData struct {
- version string
- builds []build
- }
- func (r releaseLocalSources) findBuilds(baseArchiveURL string) buildData {
- data := buildData{}
- filepath.Walk(r.path, createBuildWalker(r.path, &data, r.artifactConfigurations, baseArchiveURL))
- return data
- }
- func createBuildWalker(path string, data *buildData, archiveTypes []buildArtifact, baseArchiveURL string) func(path string, f os.FileInfo, err error) error {
- return func(path string, f os.FileInfo, err error) error {
- if err != nil {
- log.Printf("error: %v", err)
- }
- if f.Name() == path || strings.HasSuffix(f.Name(), ".sha256") {
- return nil
- }
- for _, archive := range archiveTypes {
- if strings.HasSuffix(f.Name(), archive.urlPostfix) {
- shaBytes, err := ioutil.ReadFile(path + ".sha256")
- if err != nil {
- log.Fatalf("Failed to read sha256 file %v", err)
- }
- version, err := grabVersion(f.Name(), archive.urlPostfix)
- if err != nil {
- log.Println(err)
- continue
- }
- data.version = version
- data.builds = append(data.builds, build{
- Os: archive.os,
- URL: archive.getURL(baseArchiveURL, version, NIGHTLY),
- Sha256: string(shaBytes),
- Arch: archive.arch,
- })
- return nil
- }
- }
- return nil
- }
- }
- func grabVersion(name string, suffix string) (string, error) {
- match := regexp.MustCompile(fmt.Sprintf(`grafana(-enterprise)?[-_](.*)%s`, suffix)).FindSubmatch([]byte(name))
- if len(match) > 0 {
- return string(match[2]), nil
- }
- return "", errors.New("No version found")
- }
|