Files
Kevin Minehart 13f4cf162e CI: move grafana-build into pkg/build (#105640)
* move grafana-build into pkg/build
2025-05-20 10:48:00 -05:00

70 lines
1.8 KiB
Go

package pipelines
import (
"context"
"fmt"
"log"
"dagger.io/dagger"
"github.com/grafana/grafana/pkg/build/daggerbuild/containers"
"github.com/grafana/grafana/pkg/build/daggerbuild/frontend"
"golang.org/x/sync/errgroup"
"golang.org/x/sync/semaphore"
)
func PublishNPM(ctx context.Context, d *dagger.Client, args PipelineArgs) error {
var (
wg = &errgroup.Group{}
sm = semaphore.NewWeighted(args.ConcurrencyOpts.Parallel)
)
packages, err := containers.GetPackages(ctx, d, args.PackageInputOpts, args.GCPOpts)
if err != nil {
return err
}
// Extract the package(s)
for i := range args.PackageInputOpts.Packages {
var (
// name = ReplaceExt(v, "")
targz = packages[i]
)
artifacts := containers.ExtractedArchive(d, targz).Directory("npm-artifacts")
entries, err := artifacts.Entries(ctx)
if err != nil {
return err
}
for _, path := range entries {
wg.Go(PublishNPMFunc(ctx, sm, d, artifacts.File(path), path, args.NpmToken, args.NpmRegistry, args.NpmTags))
}
}
return wg.Wait()
}
func PublishNPMFunc(ctx context.Context, sm *semaphore.Weighted, d *dagger.Client, pkg *dagger.File, path, token, registry string, tags []string) func() error {
return func() error {
log.Printf("[%s] Attempting to publish package", path)
log.Printf("[%s] Acquiring semaphore", path)
if err := sm.Acquire(ctx, 1); err != nil {
return fmt.Errorf("failed to acquire semaphore: %w", err)
}
defer sm.Release(1)
log.Printf("[%s] Acquired semaphore", path)
log.Printf("[%s] Publishing package", path)
out, err := frontend.PublishNPM(ctx, d, pkg, token, registry, tags)
if err != nil {
return fmt.Errorf("[%s] error: %w", path, err)
}
log.Printf("[%s] Done publishing package", path)
if _, err := fmt.Fprintln(Stdout, out); err != nil {
return fmt.Errorf("error writing to stdout: %w", err)
}
return nil
}
}