Skip to content

Commit be11c0c

Browse files
committed
feat(justfile): add podman support
1 parent 0cb7db2 commit be11c0c

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 *args='': && _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
{{ args }}
4562
done
@@ -63,9 +80,9 @@ list:
6380
fi
6481
for tgt in {{ targets }} ; do
6582
if [ "$tgt" == "devcontainer" ]; then
66-
cmd="docker image ls {{ image }}:{{ _version }} | sed 1d"
83+
cmd="{{ docker_bin }} image ls {{ image }}:{{ _version }} | sed 1d"
6784
else
68-
cmd="docker image ls {{ image }}:{{ _version }}-$tgt | sed 1d"
85+
cmd="{{ docker_bin }} image ls {{ image }}:{{ _version }}-$tgt | sed 1d"
6986
fi
7087

7188
echo "{{ style('error') }}$cmd{{ NORMAL }}"
@@ -124,6 +141,8 @@ _target target='' *args='':
124141
version='{{ _version }}' \
125142
docker_arch='{{ docker_arch }}' \
126143
dry_run='{{ dry_run }}' \
144+
docker_bin='{{ docker_bin }}' \
145+
podman_remote='{{ podman_remote }}' \
127146
_build --target='{{ target }}' \
128147
{{ if _version == '' { '' } else { '--tag=' + image + ':' + _version + if target == 'devcontainer' { '' } else { '-' + target } } }} \
129148
{{ args }}
@@ -133,9 +152,9 @@ _build *args='':
133152
#!/usr/bin/env bash
134153
set -euo pipefail
135154

136-
cmd="docker buildx build . {{ _tag }} --pull \
155+
cmd="{{ docker_bin }} buildx build . {{ _tag }} --pull \
137156
--progress='{{ DOCKER_PROGRESS }}' \
138-
--output='{{ output }}' \
157+
{{ output }} \
139158
{{ if docker_arch != '' { '--platform=' + docker_arch } else { '' } }} \
140159
{{ args }}"
141160

0 commit comments

Comments
 (0)