CI: move grafana-build into pkg/build (#105640)
* move grafana-build into pkg/build
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
package gcom
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
|
||||
"github.com/grafana/grafana/pkg/build/daggerbuild/cliutil"
|
||||
)
|
||||
|
||||
// GCOMOpts are options used when making requests to grafana.com.
|
||||
type GCOMOpts struct {
|
||||
URL *url.URL
|
||||
DownloadURL *url.URL
|
||||
ApiKey string
|
||||
Beta bool
|
||||
Nightly bool
|
||||
}
|
||||
|
||||
func GCOMOptsFromFlags(c cliutil.CLIContext) (*GCOMOpts, error) {
|
||||
apiUrl, err := url.Parse(c.String("api-url"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
downloadUrl, err := url.Parse(c.String("download-url"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &GCOMOpts{
|
||||
URL: apiUrl,
|
||||
DownloadURL: downloadUrl,
|
||||
ApiKey: c.String("api-key"),
|
||||
Beta: c.Bool("beta"),
|
||||
Nightly: c.Bool("nightly"),
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package gcom
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"dagger.io/dagger"
|
||||
)
|
||||
|
||||
type GCOMVersionPayload struct {
|
||||
Version string `json:"version"`
|
||||
ReleaseDate string `json:"releaseDate"`
|
||||
Stable bool `json:"stable"`
|
||||
Beta bool `json:"beta"`
|
||||
Nightly bool `json:"nightly"`
|
||||
WhatsNewURL string `json:"whatsNewUrl"`
|
||||
ReleaseNotesURL string `json:"releaseNotesUrl"`
|
||||
}
|
||||
|
||||
type GCOMPackagePayload struct {
|
||||
OS string `json:"os"`
|
||||
URL string `json:"url"`
|
||||
Sha256 string `json:"sha256"`
|
||||
Arch string `json:"arch"`
|
||||
}
|
||||
|
||||
// PublishGCOMVersion publishes a version to grafana.com.
|
||||
func PublishGCOMVersion(ctx context.Context, d *dagger.Client, versionPayload *GCOMVersionPayload, opts *GCOMOpts) (string, error) {
|
||||
versionApiUrl := opts.URL.JoinPath("/versions")
|
||||
|
||||
jsonVersionPayload, err := json.Marshal(versionPayload)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
apiKeySecret := d.SetSecret("gcom-api-key", opts.ApiKey)
|
||||
|
||||
return d.Container().From("alpine/curl").
|
||||
WithSecretVariable("GCOM_API_KEY", apiKeySecret).
|
||||
WithExec([]string{"/bin/sh", "-c", fmt.Sprintf(`curl -H "Content-Type: application/json" -H "Authorization: Bearer $GCOM_API_KEY" -d '%s' %s`, string(jsonVersionPayload), versionApiUrl.String())}).
|
||||
Stdout(ctx)
|
||||
}
|
||||
|
||||
// PublishGCOMPackage publishes a package to grafana.com.
|
||||
func PublishGCOMPackage(ctx context.Context, d *dagger.Client, packagePayload *GCOMPackagePayload, opts *GCOMOpts, version string) (string, error) {
|
||||
packagesApiUrl := opts.URL.JoinPath("/versions/", version, "/packages")
|
||||
|
||||
jsonPackagePayload, err := json.Marshal(packagePayload)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
apiKeySecret := d.SetSecret("gcom-api-key", opts.ApiKey)
|
||||
|
||||
return d.Container().From("alpine/curl").
|
||||
WithSecretVariable("GCOM_API_KEY", apiKeySecret).
|
||||
WithExec([]string{"/bin/sh", "-c", fmt.Sprintf(`curl -H "Content-Type: application/json" -H "Authorization: Bearer $GCOM_API_KEY" -d '%s' %s`, string(jsonPackagePayload), packagesApiUrl.String())}).
|
||||
Stdout(ctx)
|
||||
}
|
||||
Reference in New Issue
Block a user