Skip to content

Commit 41647ad

Browse files
committed
skeleton
1 parent a5cd939 commit 41647ad

19 files changed

+988
-0
lines changed

.github/remove_empty_imports.sh

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/bin/bash
2+
3+
# remove all blank lines in go 'imports' statements,
4+
5+
if [ $# != 1 ] ; then
6+
echo "usage: $0 <filename>"
7+
exit 1
8+
fi
9+
10+
if [[ "$(uname -o)" == "Darwin" ]]; then
11+
sed -i '' '
12+
/^import/,/)/ {
13+
/^$/ d
14+
}
15+
' $1
16+
else
17+
sed -i'' '
18+
/^import/,/)/ {
19+
/^$/ d
20+
}
21+
' $1
22+
fi
23+

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/dist
2+
/.coverage

.golangci.yml

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
run:
2+
go: '1.23'
3+
linters:
4+
enable:
5+
- gosimple
6+
- govet
7+
- ineffassign
8+
- staticcheck
9+
- typecheck
10+
- unused
11+
- unconvert
12+
- gofmt
13+
- misspell
14+
- bodyclose
15+
- revive
16+
- gocyclo
17+
- whitespace
18+
- goimports
19+
- unparam
20+
linters-settings:
21+
gosimple:
22+
go: '1.23'
23+
staticcheck:
24+
go: '1.23'
25+
stylecheck:
26+
go: '1.23'
27+
unused:
28+
go: '1.23'
29+
revive:
30+
rules:
31+
- name: exported
32+
disabled: true
33+
issues:
34+
max-issues-per-linter: 0
35+
max-same-issues: 0
36+
exclude-use-default: false

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# `docker run`, better
2+
3+
See the [Docker RunX reference](/docs/reference/runx.md) for more information.

Taskfile.yaml

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
version: '3'
2+
3+
vars:
4+
BIN_NAME: docker-runx
5+
PKG_NAME: github.com/eunomie/docker-runx
6+
GOLANGCI_LINT_IMAGE_NAME: docker/golangci-lint:1.61.0-go1.23.1
7+
8+
tasks:
9+
go:test:
10+
cmds:
11+
- go test -race -coverpkg=./... -coverprofile=.coverage -shuffle=on ./...
12+
13+
go:cover:
14+
cmds:
15+
- go tool cover -html=.coverage
16+
17+
go:tidy:
18+
cmds:
19+
- go mod tidy -v
20+
21+
go:checkmodules:
22+
cmds:
23+
- go mod verify
24+
- go mod download
25+
26+
go:build:
27+
cmds:
28+
- task: go:bin
29+
- task: docker:scout:fs
30+
31+
go:bin:
32+
cmds:
33+
- |
34+
go build \
35+
-o dist/{{.BIN_NAME}} \
36+
-ldflags="-w -s \
37+
-X '{{.PKG_NAME}}/internal/constants.Version={{.VERSION}}'" \
38+
./cmd/{{.BIN_NAME}}
39+
env:
40+
CGO_ENABLED: 0
41+
vars:
42+
VERSION:
43+
sh: git describe --tags | cut -c 2-
44+
45+
go:fmt:
46+
cmds:
47+
- find . -type f -name "*.go" -exec .github/remove_empty_imports.sh "{}" \;
48+
- goimports -w -local github.com/docker,github.com/eunomie .
49+
- gofumpt -w .
50+
51+
go:lint:
52+
cmds:
53+
- |
54+
docker run --rm \
55+
-v $(pwd):/app \
56+
-v $(go env GOPATH)/pkg:/go/pkg \
57+
-v $(go env GOCACHE):/cache/go \
58+
-e GOFLAGS=-buildvcs=false \
59+
-e GOCACHE=/cache/go \
60+
-e GOLANGCI_LINT_CACHE=/cache/go \
61+
-w /app \
62+
{{.GOLANGCI_LINT_IMAGE_NAME}} \
63+
golangci-lint run -v --timeout 5m
64+
65+
go:gendocs:
66+
cmds:
67+
- go run ./cmd/gen-docs --formats md,yaml
68+
69+
docker:scout:fs:
70+
env:
71+
DOCKER_CLI_HINTS: false
72+
cmds:
73+
- docker scout cves --format only-packages --only-vuln-packages fs://.
74+
75+
ci:install:
76+
cmds:
77+
- go install golang.org/x/tools/cmd/goimports@latest
78+
- go install mvdan.cc/gofumpt@latest
79+
80+
precommit:
81+
deps:
82+
- go:checkmodules
83+
- go:fmt
84+
- go:lint
85+
- go:test
86+
- go:gendocs

cmd/docker-runx/main.go

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
7+
"github.com/spf13/cobra"
8+
9+
"github.com/docker/cli/cli-plugins/manager"
10+
"github.com/docker/cli/cli-plugins/plugin"
11+
"github.com/docker/cli/cli/command"
12+
"github.com/docker/cli/cli/flags"
13+
"github.com/eunomie/docker-runx/internal/commands/root"
14+
"github.com/eunomie/docker-runx/internal/constants"
15+
)
16+
17+
func main() {
18+
cmd, err := command.NewDockerCli()
19+
if err != nil {
20+
_, _ = fmt.Fprintln(os.Stderr, err)
21+
os.Exit(1)
22+
}
23+
24+
if plugin.RunningStandalone() {
25+
err = runStandalone(cmd)
26+
} else {
27+
err = runPlugin(cmd)
28+
}
29+
30+
if err != nil {
31+
_, _ = fmt.Fprintln(os.Stderr, err)
32+
os.Exit(1)
33+
}
34+
}
35+
36+
func runStandalone(cmd *command.DockerCli) error {
37+
if err := cmd.Initialize(flags.NewClientOptions()); err != nil {
38+
return err
39+
}
40+
rootCmd := newRootCmd(false, cmd)
41+
return rootCmd.Execute()
42+
}
43+
44+
func runPlugin(cmd *command.DockerCli) error {
45+
rootCmd := newRootCmd(true, cmd)
46+
return plugin.RunPlugin(cmd, rootCmd, manager.Metadata{
47+
SchemaVersion: "0.1.0",
48+
Vendor: "Docker Inc.",
49+
Version: constants.Version,
50+
ShortDescription: constants.FullProductName,
51+
})
52+
}
53+
54+
func newRootCmd(isPlugin bool, dockerCli command.Cli) *cobra.Command {
55+
return root.NewCmd(dockerCli, isPlugin)
56+
}

cmd/gen-docs/main.go

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
7+
"github.com/spf13/cobra"
8+
"github.com/spf13/pflag"
9+
10+
clidocstool "github.com/docker/cli-docs-tool"
11+
"github.com/docker/cli/cli/command"
12+
"github.com/eunomie/docker-runx/internal/commands/root"
13+
)
14+
15+
const defaultSourcePath = "docs/reference/"
16+
17+
type options struct {
18+
source string
19+
formats []string
20+
}
21+
22+
func gen(opts *options) error {
23+
dockerCLI, err := command.NewDockerCli()
24+
if err != nil {
25+
return err
26+
}
27+
cmd := &cobra.Command{
28+
Use: "docker [OPTIONS] COMMAND [ARG...]",
29+
Short: "The base command for the Docker CLI.",
30+
DisableAutoGenTag: true,
31+
}
32+
33+
cmd.AddCommand(root.NewCmd(dockerCLI, true))
34+
35+
c, err := clidocstool.New(clidocstool.Options{
36+
Root: cmd,
37+
SourceDir: opts.source,
38+
Plugin: true,
39+
})
40+
if err != nil {
41+
return err
42+
}
43+
44+
for _, format := range opts.formats {
45+
switch format {
46+
case "md":
47+
if err = c.GenMarkdownTree(cmd); err != nil {
48+
return err
49+
}
50+
case "yaml":
51+
if err = c.GenYamlTree(cmd); err != nil {
52+
return err
53+
}
54+
default:
55+
return fmt.Errorf("unknown format %q", format)
56+
}
57+
}
58+
59+
return nil
60+
}
61+
62+
func run() error {
63+
opts := &options{}
64+
flags := pflag.NewFlagSet(os.Args[0], pflag.ContinueOnError)
65+
flags.StringVar(&opts.source, "source", defaultSourcePath, "Docs source folder")
66+
flags.StringSliceVar(&opts.formats, "formats", []string{}, "Format (md, yaml)")
67+
if err := flags.Parse(os.Args[1:]); err != nil {
68+
return err
69+
}
70+
if len(opts.formats) == 0 {
71+
return fmt.Errorf("docs format required")
72+
}
73+
return gen(opts)
74+
}
75+
76+
func main() {
77+
if err := run(); err != nil {
78+
_, _ = fmt.Fprintln(os.Stderr, err)
79+
os.Exit(1)
80+
}
81+
}

docs/reference/docker_runx.yaml

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
command: docker runx
2+
short: Docker Run, better
3+
long: Docker Run, better
4+
usage: docker runx [command]
5+
pname: docker
6+
plink: docker.yaml
7+
cname:
8+
- docker runx help
9+
- docker runx version
10+
clink:
11+
- docker_runx_help.yaml
12+
- docker_runx_version.yaml
13+
deprecated: false
14+
hidden: false
15+
experimental: false
16+
experimentalcli: false
17+
kubernetes: false
18+
swarm: false
19+

docs/reference/docker_runx_help.yaml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
command: docker runx help
2+
short: Display information about the available commands
3+
long: Display information about the available commands
4+
usage: docker runx help
5+
pname: docker runx
6+
plink: docker_runx.yaml
7+
deprecated: false
8+
hidden: false
9+
experimental: false
10+
experimentalcli: false
11+
kubernetes: false
12+
swarm: false
13+
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
command: docker runx version
2+
short: Show Docker RunX version information
3+
long: Show Docker RunX version information
4+
usage: docker runx version
5+
pname: docker runx
6+
plink: docker_runx.yaml
7+
deprecated: false
8+
hidden: false
9+
experimental: false
10+
experimentalcli: false
11+
kubernetes: false
12+
swarm: false
13+

docs/reference/runx.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# docker runx
2+
3+
<!---MARKER_GEN_START-->
4+
Docker Run, better
5+
6+
### Subcommands
7+
8+
| Name | Description |
9+
|:-----------------------------|:-------------------------------------------------|
10+
| [`help`](runx_help.md) | Display information about the available commands |
11+
| [`version`](runx_version.md) | Show Docker RunX version information |
12+
13+
14+
15+
<!---MARKER_GEN_END-->
16+

docs/reference/runx_help.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# docker runx help
2+
3+
<!---MARKER_GEN_START-->
4+
Display information about the available commands
5+
6+
7+
<!---MARKER_GEN_END-->
8+

docs/reference/runx_version.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# docker runx version
2+
3+
<!---MARKER_GEN_START-->
4+
Show Docker RunX version information
5+
6+
7+
<!---MARKER_GEN_END-->
8+

0 commit comments

Comments
 (0)