@@ -15,17 +15,32 @@ k3s-image := 'docker.io/rancher/k3s'
1515dry_run := ' false'
1616docker_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+
1829targets := ' go rust rust-musl tools devcontainer'
1930
2031load := ' false'
2132push := ' 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
3045export 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
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