-
Notifications
You must be signed in to change notification settings - Fork 559
/
main.go
121 lines (104 loc) · 2.65 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Everything you need to develop the Dagger Engine
// https://dagger.io
package main
import (
"context"
"github.com/dagger/dagger/ci/internal/dagger"
"github.com/dagger/dagger/ci/util"
)
// A dev environment for the Dagger Engine
type Dagger struct {
Source *Directory // +private
Version *VersionInfo
// Can be used by nested clients to forward docker credentials to avoid
// rate limits
HostDockerConfig *Secret // +private
}
func New(
ctx context.Context,
source *Directory,
// +optional
version string,
// +optional
hostDockerConfig *Secret,
) (*Dagger, error) {
versionInfo, err := newVersion(ctx, source, version)
if err != nil {
return nil, err
}
return &Dagger{
Source: source,
Version: versionInfo,
HostDockerConfig: hostDockerConfig,
}, nil
}
// Develop the Dagger CLI
func (ci *Dagger) CLI() *CLI {
return &CLI{Dagger: ci}
}
// Develop the Dagger engine container
func (ci *Dagger) Engine() *Engine {
return &Engine{Dagger: ci}
}
// Develop the Dagger documentation
func (ci *Dagger) Docs() *Docs {
return &Docs{Dagger: ci}
}
// Run all tests
func (ci *Dagger) Test() *Test {
return &Test{Dagger: ci}
}
// Develop Dagger SDKs
func (ci *Dagger) SDK() *SDK {
return &SDK{
Go: &GoSDK{Dagger: ci},
Python: &PythonSDK{Dagger: ci},
Typescript: &TypescriptSDK{Dagger: ci},
Rust: &RustSDK{Dagger: ci},
Elixir: &ElixirSDK{Dagger: ci},
PHP: &PHPSDK{Dagger: ci},
Java: &JavaSDK{Dagger: ci},
}
}
// Develop the Dagger helm chart
func (ci *Dagger) Helm() *Helm {
return &Helm{Dagger: ci}
}
// Creates a dev container that has a running CLI connected to a dagger engine
func (ci *Dagger) Dev(
ctx context.Context,
// Mount a directory into the container's workdir, for convenience
// +optional
target *Directory,
// Enable experimental GPU support
// +optional
experimentalGPUSupport bool,
) (*Container, error) {
if target == nil {
target = dag.Directory()
}
engine := ci.Engine()
if experimentalGPUSupport {
img := "ubuntu"
engine = engine.WithBase(&img, &experimentalGPUSupport)
}
svc, err := engine.Service(ctx, "dev")
if err != nil {
return nil, err
}
endpoint, err := svc.Endpoint(ctx, dagger.ServiceEndpointOpts{Scheme: "tcp"})
if err != nil {
return nil, err
}
client, err := ci.CLI().File(ctx, "")
if err != nil {
return nil, err
}
return util.GoBase(ci.Source).
WithMountedDirectory("/mnt", target).
WithMountedFile("/usr/bin/dagger", client).
WithEnvVariable("_EXPERIMENTAL_DAGGER_CLI_BIN", "/usr/bin/dagger").
WithServiceBinding("dagger-engine", svc).
WithEnvVariable("_EXPERIMENTAL_DAGGER_RUNNER_HOST", endpoint).
WithWorkdir("/mnt"), nil
}