Skip to content

Commit 17b67e5

Browse files
committed
chore(deps): bump dagger
1 parent 4474eb7 commit 17b67e5

7 files changed

Lines changed: 218 additions & 21 deletions

File tree

action_test.go

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
package forge_test
44

55
import (
6+
"fmt"
7+
"math/rand/v2"
68
"os"
79
"path/filepath"
810
"strings"
911
"testing"
1012

1113
"github.com/frantjc/forge"
1214
"github.com/frantjc/forge/githubactions"
15+
xos "github.com/frantjc/x/os"
1316
"github.com/stretchr/testify/require"
1417
"sigs.k8s.io/yaml"
1518
)
@@ -45,19 +48,23 @@ func TestActionRunDocker(t *testing.T) {
4548
func TestActionRunDockerNonzeroExitCode(t *testing.T) {
4649
cr := Runtime(t)
4750

51+
expected := rand.IntN(254) + 1
4852
uses := Uses(t, &githubactions.Metadata{
4953
Name: t.Name(),
5054
Runs: &githubactions.MetadataRuns{
5155
Using: githubactions.RunsUsingDocker,
5256
Image: "docker://public.ecr.aws/docker/library/alpine",
5357
Entrypoint: "/bin/sh",
54-
Args: []string{"-c", "exit 1"},
58+
Args: []string{"-c", fmt.Sprintf("exit %d", expected)},
5559
},
5660
})
5761

5862
action := &forge.Action{Uses: uses}
5963

60-
require.Error(t, action.Run(t.Context(), cr, forge.WithStreams(Streams(t))))
64+
err := action.Run(t.Context(), cr, forge.WithStreams(Streams(t)))
65+
require.Error(t, err)
66+
require.ErrorIs(t, err, forge.ErrContainerExitedWithNonzeroExitCode)
67+
require.Equal(t, expected, xos.ErrorExitCode(err))
6168
}
6269

6370
func TestActionRunDockerWithEnv(t *testing.T) {
@@ -147,78 +154,88 @@ func TestActionRunNode(t *testing.T) {
147154
func TestActionRunSaveState(t *testing.T) {
148155
cr := Runtime(t)
149156

157+
k, v := "general", "kenobi"
150158
uses := Uses(t, &githubactions.Metadata{
151159
Name: t.Name(),
152160
Runs: &githubactions.MetadataRuns{
153161
Using: githubactions.RunsUsingDocker,
154162
Image: "docker://public.ecr.aws/docker/library/alpine",
155163
Entrypoint: "/bin/sh",
156-
Args: []string{"-c", `printf 'general=kenobi\n' >> "$GITHUB_STATE"`},
164+
Args: []string{"-c", fmt.Sprintf(`printf '%s=%s\n' >> "$%s"`, k, v, githubactions.EnvVarState)},
157165
},
158166
})
159167

160168
gc := githubactions.NewGlobalContextFromEnv()
161169
action := &forge.Action{Uses: uses, GlobalContext: gc}
162170
require.NoError(t, action.Run(t.Context(), cr, forge.WithStreams(Streams(t))))
163-
require.Equal(t, "kenobi", gc.EnvContext["STATE_general"])
171+
require.Equal(t, v, gc.EnvContext[githubactions.StateEnvVar(k)])
164172
}
165173

166174
func TestActionRunSetEnv(t *testing.T) {
167175
cr := Runtime(t)
168176

177+
k, v := "GENERAL", "kenobi"
169178
uses := Uses(t, &githubactions.Metadata{
170179
Name: t.Name(),
171180
Runs: &githubactions.MetadataRuns{
172181
Using: githubactions.RunsUsingDocker,
173182
Image: "docker://public.ecr.aws/docker/library/alpine",
174183
Entrypoint: "/bin/sh",
175-
Args: []string{"-c", `printf 'GENERAL=kenobi\n' >> "$GITHUB_ENV"`},
184+
Args: []string{"-c", fmt.Sprintf(`printf '%s=%s\n' >> "$%s"`, k, v, githubactions.EnvVarEnv)},
176185
},
177186
})
178187

179188
gc := githubactions.NewGlobalContextFromEnv()
180189
action := &forge.Action{Uses: uses, GlobalContext: gc}
181190
require.NoError(t, action.Run(t.Context(), cr, forge.WithStreams(Streams(t))))
182-
require.Equal(t, "kenobi", gc.EnvContext["GENERAL"])
191+
require.Equal(t, v, gc.EnvContext[k])
183192
}
184193

185194
func TestActionRunSetOutput(t *testing.T) {
186195
cr := Runtime(t)
187196

197+
k, v := "general", "kenobi"
188198
uses := Uses(t, &githubactions.Metadata{
189199
Name: t.Name(),
190200
Runs: &githubactions.MetadataRuns{
191201
Using: githubactions.RunsUsingDocker,
192202
Image: "docker://public.ecr.aws/docker/library/alpine",
193203
Entrypoint: "/bin/sh",
194-
Args: []string{"-c", `printf 'general=kenobi\n' >> "$GITHUB_OUTPUT"`},
204+
Args: []string{"-c", fmt.Sprintf(`printf '%s=%s\n' >> "$%s"`, k, v, githubactions.EnvVarOutput)},
195205
},
196206
})
197207

198208
gc := githubactions.NewGlobalContextFromEnv()
199209
action := &forge.Action{ID: "test", Uses: uses, GlobalContext: gc}
200210
require.NoError(t, action.Run(t.Context(), cr, forge.WithStreams(Streams(t))))
201-
require.Equal(t, "kenobi", gc.StepsContext["test"].Outputs["general"])
211+
require.Equal(t, v, gc.StepsContext[action.ID].Outputs[k])
202212
}
203213

204214
func TestActionRunGlobalContext(t *testing.T) {
205215
cr := Runtime(t)
206216

217+
gc := githubactions.NewGlobalContextFromEnv()
218+
gc.GitHubContext.Actor = "octocat"
219+
gc.GitHubContext.Repository = "octocat/hello-world"
220+
gc.GitHubContext.Ref = "refs/heads/main"
207221
uses := Uses(t, &githubactions.Metadata{
208222
Name: "test-docker-global-context",
209223
Runs: &githubactions.MetadataRuns{
210224
Using: githubactions.RunsUsingDocker,
211225
Image: "docker://public.ecr.aws/docker/library/alpine",
212226
Entrypoint: "/bin/sh",
213-
Args: []string{"-c", `[ "$GITHUB_ACTOR" = "octocat" ] && [ "$GITHUB_REPOSITORY" = "octocat/hello-world" ] && [ "$GITHUB_REF" = "refs/heads/main" ]`},
227+
Args: []string{
228+
"-c",
229+
fmt.Sprintf(
230+
`[ "$%s" = "%s" ] && [ "$%s" = "%s" ] && [ "$%s" = "%s" ]`,
231+
githubactions.EnvVarActor, gc.GitHubContext.Actor,
232+
githubactions.EnvVarRepository, gc.GitHubContext.Repository,
233+
githubactions.EnvVarRef, gc.GitHubContext.Ref,
234+
),
235+
},
214236
},
215237
})
216238

217-
gc := githubactions.NewGlobalContextFromEnv()
218-
gc.GitHubContext.Actor = "octocat"
219-
gc.GitHubContext.Repository = "octocat/hello-world"
220-
gc.GitHubContext.Ref = "refs/heads/main"
221-
222239
action := &forge.Action{Uses: uses, GlobalContext: gc}
223240
require.NoError(t, action.Run(t.Context(), cr, forge.WithStreams(Streams(t))))
224241
}

dagger.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "forge-dev",
3-
"engineVersion": "v0.21.3",
3+
"engineVersion": "v0.21.7",
44
"sdk": {
55
"source": "go"
66
},
@@ -33,8 +33,8 @@
3333
},
3434
{
3535
"name": "wolfi",
36-
"source": "github.com/dagger/dagger/modules/wolfi@v0.21.3",
37-
"pin": "0ec84486003f052214339a2f8bdcd5761f23cead"
36+
"source": "github.com/dagger/dagger/modules/wolfi@v0.21.7",
37+
"pin": "054f94b2d86c0ac00bef11ac4550816973c4aeef"
3838
}
3939
],
4040
"source": ".dagger"

githubactions/env_vars.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package githubactions
22

3+
import "fmt"
4+
35
const (
46
EnvVarCI = "CI"
57
EnvVarWorkflow = "GITHUB_WORKFLOW"
@@ -48,3 +50,7 @@ const (
4850
EnvVarActionsCacheServiceV2 = "ACTIONS_CACHE_SERVICE_V2"
4951
EnvVarActionsRuntimeToken = "ACTIONS_RUNTIME_TOKEN"
5052
)
53+
54+
func StateEnvVar(key string) string {
55+
return fmt.Sprintf("STATE_%s", key)
56+
}

mise.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[tools]
2-
dagger = "0.21.3"
2+
dagger = "0.21.7"
33
go = "1.26.3"

pipe_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
//go:build shim && (docker || dockerd)
2+
3+
package forge_test
4+
5+
import (
6+
"fmt"
7+
"math/rand/v2"
8+
"strings"
9+
"testing"
10+
11+
"github.com/frantjc/forge"
12+
xos "github.com/frantjc/x/os"
13+
"github.com/stretchr/testify/require"
14+
)
15+
16+
func TestPipe(t *testing.T) {
17+
cr := Runtime(t)
18+
19+
pipe := &forge.Pipe{
20+
From: &forge.Pure{
21+
Image: "public.ecr.aws/docker/library/alpine",
22+
Entrypoint: []string{"sh", "-c"},
23+
Cmd: []string{"exit 0"},
24+
},
25+
To: &forge.Pure{
26+
Image: "public.ecr.aws/docker/library/alpine",
27+
Entrypoint: []string{"sh", "-c"},
28+
Cmd: []string{"exit 0"},
29+
},
30+
}
31+
32+
require.NoError(t, pipe.Run(t.Context(), cr, forge.WithStreams(Streams(t))))
33+
}
34+
35+
func TestPipeFromNonzeroExitCode(t *testing.T) {
36+
cr := Runtime(t)
37+
38+
expected := rand.IntN(254) + 1
39+
pipe := &forge.Pipe{
40+
From: &forge.Pure{
41+
Image: "public.ecr.aws/docker/library/alpine",
42+
Entrypoint: []string{"sh", "-c"},
43+
Cmd: []string{fmt.Sprintf("exit %d", expected)},
44+
},
45+
To: &forge.Pure{
46+
Image: "public.ecr.aws/docker/library/alpine",
47+
Entrypoint: []string{"sh", "-c"},
48+
Cmd: []string{"exit 0"},
49+
},
50+
}
51+
52+
err := pipe.Run(t.Context(), cr, forge.WithStreams(Streams(t)))
53+
require.Error(t, err)
54+
require.ErrorIs(t, err, forge.ErrContainerExitedWithNonzeroExitCode)
55+
require.Equal(t, expected, xos.ErrorExitCode(err))
56+
}
57+
58+
func TestPipeToNonzeroExitCode(t *testing.T) {
59+
cr := Runtime(t)
60+
61+
expected := rand.IntN(254) + 1
62+
pipe := &forge.Pipe{
63+
From: &forge.Pure{
64+
Image: "public.ecr.aws/docker/library/alpine",
65+
Entrypoint: []string{"sh", "-c"},
66+
Cmd: []string{"exit 0"},
67+
},
68+
To: &forge.Pure{
69+
Image: "public.ecr.aws/docker/library/alpine",
70+
Entrypoint: []string{"sh", "-c"},
71+
Cmd: []string{fmt.Sprintf("exit %d", expected)},
72+
},
73+
}
74+
75+
err := pipe.Run(t.Context(), cr, forge.WithStreams(Streams(t)))
76+
require.Error(t, err)
77+
require.ErrorIs(t, err, forge.ErrContainerExitedWithNonzeroExitCode)
78+
require.Equal(t, expected, xos.ErrorExitCode(err))
79+
}
80+
81+
func TestPipeStdout(t *testing.T) {
82+
cr := Runtime(t)
83+
84+
notExpected := "hello there"
85+
expected := "general kenobi"
86+
require.NotContains(t, expected, notExpected)
87+
pipe := &forge.Pipe{
88+
From: &forge.Pure{
89+
Image: "public.ecr.aws/docker/library/alpine",
90+
Entrypoint: []string{"sh", "-c"},
91+
Cmd: []string{
92+
fmt.Sprintf("echo %s; echo %s", notExpected, expected),
93+
},
94+
},
95+
To: &forge.Pure{
96+
Image: "public.ecr.aws/docker/library/alpine",
97+
Entrypoint: []string{"sh", "-c"},
98+
Cmd: []string{
99+
fmt.Sprintf("grep '%s'", expected),
100+
},
101+
},
102+
}
103+
104+
ctx := t.Context()
105+
streams, buf := StreamsCaptureStdout(t)
106+
require.NoError(t, pipe.Run(ctx, cr, forge.WithStreams(streams)))
107+
108+
stdout := buf.String()
109+
require.Equal(t, strings.TrimSpace(stdout), expected)
110+
require.NotContains(t, stdout, notExpected)
111+
}

pure_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//go:build shim && (docker || dockerd)
2+
3+
package forge_test
4+
5+
import (
6+
"fmt"
7+
"math/rand/v2"
8+
"strings"
9+
"testing"
10+
11+
"github.com/frantjc/forge"
12+
xos "github.com/frantjc/x/os"
13+
"github.com/stretchr/testify/require"
14+
)
15+
16+
func TestPure(t *testing.T) {
17+
cr := Runtime(t)
18+
19+
pure := &forge.Pure{
20+
Image: "public.ecr.aws/docker/library/alpine",
21+
Entrypoint: []string{"sh", "-c"},
22+
Cmd: []string{
23+
"exit 0",
24+
},
25+
}
26+
27+
require.NoError(t, pure.Run(t.Context(), cr, forge.WithStreams(Streams(t))))
28+
}
29+
30+
func TestPureNonzeroExitCode(t *testing.T) {
31+
cr := Runtime(t)
32+
33+
expected := rand.IntN(254) + 1
34+
pure := &forge.Pure{
35+
Image: "public.ecr.aws/docker/library/alpine",
36+
Entrypoint: []string{"sh", "-c"},
37+
Cmd: []string{
38+
fmt.Sprintf("exit %d", expected),
39+
},
40+
}
41+
err := pure.Run(t.Context(), cr, forge.WithStreams(Streams(t)))
42+
require.Error(t, err)
43+
require.ErrorIs(t, err, forge.ErrContainerExitedWithNonzeroExitCode)
44+
require.Equal(t, expected, xos.ErrorExitCode(err))
45+
}
46+
47+
func TestPureStdout(t *testing.T) {
48+
cr := Runtime(t)
49+
50+
expected := "hello there general kenobi"
51+
pure := &forge.Pure{
52+
Image: "public.ecr.aws/docker/library/alpine",
53+
Entrypoint: []string{"sh", "-c"},
54+
Cmd: []string{
55+
fmt.Sprintf("echo %s", expected),
56+
},
57+
}
58+
59+
streams, buf := StreamsCaptureStdout(t)
60+
require.NoError(t, pure.Run(t.Context(), cr, forge.WithStreams(streams)))
61+
62+
stdout := buf.String()
63+
require.Equal(t, strings.TrimSpace(stdout), expected)
64+
}

runtime/test_container_runtime.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func TestContainerExec(t *testing.T, cr forge.ContainerRuntime) {
9292

9393
c, err := cr.CreateContainer(ctx, img, &forge.ContainerConfig{
9494
Entrypoint: []string{"/bin/sh", "-c"},
95-
Cmd: []string{"sleep 30"},
95+
Cmd: []string{"sleep infinity"},
9696
})
9797
require.NoError(t, err)
9898

@@ -122,10 +122,9 @@ func TestContainerCopy(t *testing.T, cr forge.ContainerRuntime) {
122122
ctx := t.Context()
123123
img, err := cr.PullImage(ctx, "public.ecr.aws/docker/library/alpine")
124124
require.NoError(t, err)
125-
126125
c, err := cr.CreateContainer(ctx, img, &forge.ContainerConfig{
127126
Entrypoint: []string{"/bin/sh", "-c"},
128-
Cmd: []string{"sleep 30"},
127+
Cmd: []string{"sleep"},
129128
})
130129
require.NoError(t, err)
131130

0 commit comments

Comments
 (0)