0.1.9 85724f1

client.go RawHistoryFolder

1package docker
2
3import (
4	"context"
5	"fmt"
6	"os"
7	"time"
8
9	"github.com/docker/docker/api/types"
10	"github.com/docker/docker/api/types/container"
11	"github.com/docker/docker/client"
12)
13
14type Config struct {
15	Sock         string
16	PodmanEnable bool
17}
18
19var (
20	dockerCli     *client.Client
21	currentConfig *Config
22)
23
24func InitializeClient(config *Config) error {
25	if config.Sock == "" {
26		return fmt.Errorf("sock field in Config is empty")
27	}
28
29	if _, err := os.Stat(config.Sock); os.IsNotExist(err) {
30		return err
31	}
32
33	cli, err := client.NewClientWithOpts(
34		client.WithAPIVersionNegotiation(),
35		client.WithHost("unix://"+config.Sock),
36	)
37	if err != nil {
38		return fmt.Errorf("error initializing Docker client: %s", err)
39	}
40	dockerCli = cli
41	currentConfig = config
42	return nil
43}
44
45func CheckIfInitialized() error {
46	if currentConfig == nil || currentConfig.Sock == "" {
47		return fmt.Errorf("docker client is not initialized or configuration is missing")
48	}
49
50	socketPath := currentConfig.Sock
51	if _, err := os.Stat(socketPath); os.IsNotExist(err) {
52		return fmt.Errorf("sock file does not exist: %s", socketPath)
53	}
54
55	if dockerCli == nil {
56		return fmt.Errorf("docker client is not initialized")
57	}
58
59	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
60	defer cancel()
61
62	_, err := dockerCli.ContainerList(ctx, container.ListOptions{})
63	if err != nil {
64		return fmt.Errorf("cannot connect to Docker daemon: %s", err)
65	}
66
67	return nil
68}
69
70func ListContainers(ctx context.Context) ([]types.Container, error) {
71	if dockerCli == nil {
72		return nil, fmt.Errorf("Docker client is not initialized")
73	}
74
75	containers, err := dockerCli.ContainerList(ctx, container.ListOptions{})
76	if err != nil {
77		return nil, fmt.Errorf("error listing containers: %w", err)
78	}
79
80	return containers, nil
81}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close