forked from grafana/grafana
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
77 lines (68 loc) · 2.1 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package main
import (
"context"
"flag"
"fmt"
"log"
"path/filepath"
"strings"
"dagger.io/dagger"
)
func main() {
var (
dir = flag.String("dir", ".", "The grafana directory")
version = flag.String("version", "", "Use the '-version' flag to manually set the version")
ctx = context.Background()
)
flag.Parse()
if *version == "" {
log.Fatalln("-version must be set")
}
d, err := dagger.Connect(ctx)
if err != nil {
panic(err)
}
src := d.Host().Directory(filepath.Clean(*dir), dagger.HostDirectoryOpts{
Include: []string{
".nvmrc",
".yarn",
".yarnrc.yml",
"nx.json",
"project.json",
"lerna.json",
"**/package.json",
"**/yarn.lock",
},
})
nodeVersion, err := NodeVersion(d, src).Stdout(ctx)
if err != nil {
log.Fatalln("error getting node version from '.nvmrc':", err)
}
// Update version(s)
updated := WithUpdatedVersion(d, src, nodeVersion, *version)
log.Println("Exporting directory")
if _, err := updated.Export(ctx, filepath.Clean(*dir)); err != nil {
log.Fatalln("error exporting directory", err)
}
log.Println("Done exporting directory")
}
// NodeVersion a container whose `stdout` will return the node version from the '.nvmrc' file in the directory 'src'.
func NodeVersion(d *dagger.Client, src *dagger.Directory) *dagger.Container {
return d.Container().From("alpine").
WithMountedFile("/src/.nvmrc", src.File(".nvmrc")).
WithWorkdir("/src").
WithExec([]string{"cat", ".nvmrc"})
}
func WithUpdatedVersion(d *dagger.Client, src *dagger.Directory, nodeVersion, version string) *dagger.Directory {
nodeVersion = strings.TrimPrefix(strings.TrimSpace(nodeVersion), "v")
image := fmt.Sprintf("node:%s", nodeVersion)
return d.Container().From(image).
WithDirectory("/src", src).
WithWorkdir("/src").
WithExec([]string{"yarn", "install"}).
WithExec([]string{"npm", "version", version, "--no-git-tag-version"}).
WithExec([]string{"yarn", "run", "lerna", "version", version, "--no-push", "--no-git-tag-version", "--force-publish", "--exact", "--yes"}).
WithExec([]string{"yarn", "install"}).
Directory("/src").
WithoutDirectory("node_modules")
}