Skip to content

Commit 00d5f00

Browse files
committed
feat(context): add podman support
feat(CI): add setup podman Signed-off-by: taylorhere <[email protected]>
1 parent 3233cd6 commit 00d5f00

File tree

6 files changed

+74
-5
lines changed

6 files changed

+74
-5
lines changed

.github/workflows/CI.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ jobs:
112112
${{ runner.OS }}-
113113
- uses: actions-ecosystem/action-get-latest-tag@v1
114114
id: get-latest-tag
115+
- name: setup podman
116+
run: sudo apt install podman && systemctl --user start podman.socket && systemctl --user status podman.socket
115117
- name: e2e test
116118
run: make e2e-cli-test
117119
env:

e2e/cli/context_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package cli
1616

1717
import (
18+
"os"
1819
"os/exec"
1920

2021
. "github.com/onsi/ginkgo/v2"
@@ -108,4 +109,57 @@ var _ = Describe("home context", func() {
108109
Expect(contexts.Current).To(Equal(defaultContext))
109110
})
110111
})
112+
113+
Describe("add a podman context", Ordered, func() {
114+
testContext := "envd_home_test"
115+
testBuilder := types.BuilderTypePodman
116+
testBuilderAddress := "envd_buildkitd"
117+
testRunner := types.RunnerTypePodman
118+
c := types.Context{
119+
Name: testContext,
120+
Builder: testBuilder,
121+
BuilderAddress: testBuilderAddress,
122+
Runner: testRunner,
123+
}
124+
originalEnv := os.Getenv("DOCKER_HOST")
125+
BeforeAll(func() {
126+
os.Setenv("DOCKER_HOST", "unix://"+os.Getenv("XDG_RUNTIME_DIR")+"/podman/podman.sock")
127+
err := home.GetManager().ContextCreate(c, true)
128+
Expect(err).NotTo(HaveOccurred())
129+
})
130+
131+
It("should find a new context", func() {
132+
contexts, err := home.GetManager().ContextList()
133+
Expect(err).NotTo(HaveOccurred())
134+
Expect(contexts.Current).To(Equal(testContext))
135+
})
136+
137+
Describe("connect buildkit through podman-container", Ordered, func() {
138+
buildContext := "testdata/build-test"
139+
140+
It("should be able to build image with podman context", func() {
141+
args := []string{"envd.test", "--debug", "build", "--path", buildContext}
142+
envdApp := app.New()
143+
e2e.ResetEnvdApp()
144+
err := envdApp.Run(args)
145+
Expect(err).NotTo(HaveOccurred())
146+
})
147+
})
148+
149+
It("fail to delete the current context", func() {
150+
err := home.GetManager().ContextRemove(testContext)
151+
Expect(err).To(HaveOccurred())
152+
})
153+
154+
AfterAll(func() {
155+
os.Setenv("DOCKER_HOST", originalEnv)
156+
err := home.GetManager().ContextUse(defaultContext)
157+
Expect(err).NotTo(HaveOccurred())
158+
err = home.GetManager().ContextRemove(testContext)
159+
Expect(err).NotTo(HaveOccurred())
160+
contexts, err := home.GetManager().ContextList()
161+
Expect(err).NotTo(HaveOccurred())
162+
Expect(contexts.Current).To(Equal(defaultContext))
163+
})
164+
})
111165
})

pkg/app/context_create.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ var CommandContextCreate = &cli.Command{
3535
},
3636
&cli.StringFlag{
3737
Name: "builder",
38-
Usage: "Builder to use (docker-container, kube-pod, tcp, unix)",
38+
Usage: "Builder to use (docker-container, podman-container, kube-pod, tcp, unix)",
3939
Value: string(types.BuilderTypeDocker),
4040
},
4141
&cli.StringFlag{
@@ -45,7 +45,7 @@ var CommandContextCreate = &cli.Command{
4545
},
4646
&cli.StringFlag{
4747
Name: "runner",
48-
Usage: "Runner to use(docker, envd-server)",
48+
Usage: "Runner to use(docker, podman, envd-server)",
4949
Value: string(types.RunnerTypeDocker),
5050
},
5151
&cli.StringFlag{

pkg/buildkitd/buildkitd.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,26 @@ func (c generalClient) Close() error {
113113
// that can be used to connect to it.
114114
func (c *generalClient) maybeStart(ctx context.Context,
115115
runningTimeout, connectingTimeout time.Duration) (string, error) {
116-
if c.driver == types.BuilderTypeDocker {
116+
if c.driver == types.BuilderTypeDocker || c.driver == types.BuilderTypePodman {
117117
dockerClient, err := docker.NewClient(ctx)
118118
if err != nil {
119119
return "", err
120120
}
121+
121122
opt := envd.Options{
122123
Context: &types.Context{
123124
Runner: types.RunnerTypeDocker,
124125
},
125126
}
127+
128+
if c.driver == types.BuilderTypePodman {
129+
opt = envd.Options{
130+
Context: &types.Context{
131+
Runner: types.RunnerTypePodman,
132+
},
133+
}
134+
}
135+
126136
engine, err := envd.New(ctx, opt)
127137
if err != nil {
128138
return "", err

pkg/home/context.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,14 @@ func (m *generalManager) ContextCreate(ctx types.Context, use bool) error {
9696
}
9797
switch ctx.Builder {
9898
case types.BuilderTypeDocker, types.BuilderTypeKubernetes,
99-
types.BuilderTypeUNIXDomainSocket, types.BuilderTypeTCP:
99+
types.BuilderTypeUNIXDomainSocket, types.BuilderTypeTCP,
100+
types.BuilderTypePodman:
100101
break
101102
default:
102103
return errors.New("unknown builder type")
103104
}
104105
switch ctx.Runner {
105-
case types.RunnerTypeDocker, types.RunnerTypeEnvdServer:
106+
case types.RunnerTypeDocker, types.RunnerTypeEnvdServer, types.RunnerTypePodman:
106107
break
107108
default:
108109
return errors.New("unknown runner type")

pkg/types/envd.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ type BuilderType string
129129

130130
const (
131131
BuilderTypeDocker BuilderType = "docker-container"
132+
BuilderTypePodman BuilderType = "podman-container"
132133
BuilderTypeKubernetes BuilderType = "kube-pod"
133134
BuilderTypeTCP BuilderType = "tcp"
134135
BuilderTypeUNIXDomainSocket BuilderType = "unix"
@@ -138,6 +139,7 @@ type RunnerType string
138139

139140
const (
140141
RunnerTypeDocker RunnerType = "docker"
142+
RunnerTypePodman RunnerType = "podman"
141143
RunnerTypeEnvdServer RunnerType = "envd-server"
142144
)
143145

0 commit comments

Comments
 (0)