mirror of
https://github.com/grafana/grafana.git
synced 2025-07-29 23:52:19 +08:00
62 lines
2.6 KiB
Go
62 lines
2.6 KiB
Go
package frontend
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
"dagger.io/dagger"
|
|
"github.com/grafana/grafana/pkg/build/daggerbuild/containers"
|
|
)
|
|
|
|
// NPMPackages versions and packs the npm packages into tarballs into `npm-packages` directory.
|
|
// It then returns the npm-packages directory as a dagger.Directory.
|
|
func NPMPackages(builder *dagger.Container, d *dagger.Client, log *slog.Logger, src *dagger.Directory, ersion string) (*dagger.Directory, error) {
|
|
// Check if the version of Grafana uses lerna or nx to manage package versioning.
|
|
var (
|
|
out = fmt.Sprintf("/src/npm-packages/%%s-%v.tgz", "v"+ersion)
|
|
|
|
lernaBuild = fmt.Sprintf("yarn run packages:build && yarn lerna version %s --exact --no-git-tag-version --no-push --force-publish -y", ersion)
|
|
lernaPack = fmt.Sprintf("yarn lerna exec --no-private -- yarn pack --out %s", out)
|
|
|
|
nxBuild = fmt.Sprintf("yarn run packages:build && yarn nx release version %s --no-git-commit --no-git-tag --no-stage-changes --group grafanaPackages", ersion)
|
|
nxPack = fmt.Sprintf("yarn nx exec --projects=$(cat nx.json | jq -r '.relase.groups.grafanaPackages.projects | join(\",\")') -- yarn pack --out %s", out)
|
|
)
|
|
|
|
return builder.WithExec([]string{"mkdir", "npm-packages"}).
|
|
WithEnvVariable("SHELL", "/bin/bash").
|
|
WithExec([]string{"yarn", "install", "--immutable"}).
|
|
WithExec([]string{"/bin/bash", "-c", fmt.Sprintf("if [ -f lerna.json ]; then %s; else %s; fi", lernaBuild, nxBuild)}).
|
|
WithExec([]string{"/bin/bash", "-c", fmt.Sprintf("if [ -f lerna.json ]; then %s; else %s; fi", lernaPack, nxPack)}).
|
|
Directory("./npm-packages"), nil
|
|
}
|
|
|
|
// PublishNPM publishes a npm package to the given destination.
|
|
func PublishNPM(ctx context.Context, d *dagger.Client, pkg *dagger.File, token, registry string, tags []string) (string, error) {
|
|
src := containers.ExtractedArchive(d, pkg)
|
|
|
|
version, err := containers.GetJSONValue(ctx, d, src, "package.json", "version")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
name, err := containers.GetJSONValue(ctx, d, src, "package.json", "name")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
tokenSecret := d.SetSecret("npm-token", token)
|
|
|
|
c := d.Container().From(NodeImage("lts")).
|
|
WithFile("/pkg.tgz", pkg).
|
|
WithSecretVariable("NPM_TOKEN", tokenSecret).
|
|
WithExec([]string{"/bin/sh", "-c", fmt.Sprintf("npm set //%s/:_authToken $NPM_TOKEN", registry)}).
|
|
WithExec([]string{"npm", "publish", "/pkg.tgz", fmt.Sprintf("--registry https://%s", registry), "--tag", tags[0]})
|
|
|
|
for _, tag := range tags[1:] {
|
|
c = c.WithExec([]string{"npm", "dist-tag", "add", fmt.Sprintf("%s@%s", name, version), tag})
|
|
}
|
|
|
|
return c.Stdout(ctx)
|
|
}
|