Skip to content

Commit 081947f

Browse files
committed
feat(justfile): add podman support
1 parent 7dec043 commit 081947f

1 file changed

Lines changed: 30 additions & 11 deletions

File tree

justfile

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,32 @@ k3s-image := 'docker.io/rancher/k3s'
1515
dry_run := 'false'
1616
docker_arch := ''
1717

18+
# Detect docker_bin if not specified: try docker first, then podman
19+
docker_bin := shell('which docker 2> /dev/null || which podman 2> /dev/null || (echo >&2 "$1error$2: neither docker nor podman found" && exit 1)', style('error'), NORMAL)
20+
# Extract basename of docker_bin to identify implementation
21+
_docker_bin_name := file_name(docker_bin)
22+
# Auto-detect if podman is in remote mode (unless explicitly overridden)
23+
podman_remote := if _docker_bin_name == 'podman' {
24+
shell('if $1 info 2>/dev/null | grep -q "remoteSocket"; then echo "true"; else echo "false"; fi', docker_bin)
25+
} else {
26+
'false'
27+
}
28+
1829
targets := 'go rust rust-musl tools devcontainer'
1930

2031
load := 'false'
2132
push := 'false'
22-
output := if push == 'true' {
23-
'type=registry'
24-
} else if load == 'true' {
25-
'type=docker'
26-
} else {
27-
'type=image'
28-
}
33+
34+
# Remote mode cannot use the --output flag
35+
output := if podman_remote == 'true' {
36+
''
37+
} else if push == 'true' {
38+
'--output=type=registry'
39+
} else if load == 'true' {
40+
'--output=type=docker'
41+
} else {
42+
'--output=type=image'
43+
}
2944

3045
export DOCKER_PROGRESS := env_var_or_default('DOCKER_PROGRESS', 'auto')
3146

@@ -40,6 +55,8 @@ build: && _list-if-load
4055
version='{{ _version }}' \
4156
docker_arch='{{ docker_arch }}' \
4257
dry_run='{{ dry_run }}' \
58+
docker_bin='{{ docker_bin }}' \
59+
podman_remote='{{ podman_remote }}' \
4360
_target "$tgt"
4461
done
4562

@@ -62,9 +79,9 @@ list:
6279
fi
6380
for tgt in {{ targets }} ; do
6481
if [ "$tgt" == "devcontainer" ]; then
65-
cmd="docker image ls {{ image }}:{{ _version }} | sed 1d"
82+
cmd="{{ docker_bin }} image ls {{ image }}:{{ _version }} | sed 1d"
6683
else
67-
cmd="docker image ls {{ image }}:{{ _version }}-$tgt | sed 1d"
84+
cmd="{{ docker_bin }} image ls {{ image }}:{{ _version }}-$tgt | sed 1d"
6885
fi
6986

7087
echo "{{ style('error') }}$cmd{{ NORMAL }}"
@@ -123,6 +140,8 @@ _target target='':
123140
version='{{ _version }}' \
124141
docker_arch='{{ docker_arch }}' \
125142
dry_run='{{ dry_run }}' \
143+
docker_bin='{{ docker_bin }}' \
144+
podman_remote='{{ podman_remote }}' \
126145
_build --target='{{ target }}' \
127146
{{ if _version == '' { '' } else { '--tag=' + image + ':' + _version + if target == 'devcontainer' { '' } else { '-' + target } } }}
128147

@@ -131,9 +150,9 @@ _build *args='':
131150
#!/usr/bin/env bash
132151
set -euo pipefail
133152

134-
cmd="docker buildx build . {{ _tag }} --pull \
153+
cmd="{{ docker_bin }} buildx build . {{ _tag }} --pull \
135154
--progress='{{ DOCKER_PROGRESS }}' \
136-
--output='{{ output }}' \
155+
{{ output }} \
137156
{{ if docker_arch != '' { '--platform=' + docker_arch } else { '' } }} \
138157
{{ args }}"
139158

0 commit comments

Comments
 (0)