@@ -51,6 +51,90 @@ tasks:
5151 - docker buildx create --use
5252 - ' {{.DOCKER_BUILD_START}} {{.DOCKER_BUILD_FINISH}}'
5353
54+ docker:build:local :
55+ desc : Build local runnable Docker image for current architecture
56+ cmds :
57+ - |
58+ set -eu
59+ arch="$(uname -m)"
60+ case "${arch}" in
61+ x86_64|amd64) target_arch="amd64" ;;
62+ aarch64|arm64) target_arch="arm64" ;;
63+ *)
64+ echo "❌ Unsupported local architecture: ${arch}"
65+ exit 1
66+ ;;
67+ esac
68+
69+ docker build \
70+ --build-arg TARGETARCH="${target_arch}" \
71+ --tag "{{.DOCKER_NAME}}:{{.VERSION_FULL}}{{.VERSION_SUFFIX}}" \
72+ --file Dockerfile \
73+ .
74+
75+ docker:test:local :
76+ desc : Run container-structure-test action locally (requires local build)
77+ deps :
78+ - task : docker:build:local
79+ requires :
80+ vars : [CONFIG]
81+ cmds :
82+ - |
83+ set -eu
84+ image='{{default "" .IMAGE}}'
85+ image_from_oci_layout='{{default "" .IMAGE_FROM_OCI_LAYOUT}}'
86+ config='{{.CONFIG}}'
87+
88+ if [ -z "${image}" ] && [ -z "${image_from_oci_layout}" ]; then
89+ echo "❌ Provide IMAGE=<image-ref> or IMAGE_FROM_OCI_LAYOUT=<path>"
90+ exit 1
91+ fi
92+ if [ -n "${image}" ] && [ -n "${image_from_oci_layout}" ]; then
93+ echo "❌ IMAGE and IMAGE_FROM_OCI_LAYOUT are mutually exclusive"
94+ exit 1
95+ fi
96+ if [ ! -S /var/run/docker.sock ] && [ '{{default "docker" .DRIVER}}' = 'docker' ]; then
97+ echo "❌ Docker socket not available at /var/run/docker.sock (required for DRIVER=docker)"
98+ exit 1
99+ fi
100+
101+ docker run --rm \
102+ -v "$PWD:/github/workspace" \
103+ -w /github/workspace \
104+ -v /var/run/docker.sock:/var/run/docker.sock \
105+ -e INPUT_IMAGE="${image}" \
106+ -e INPUT_IMAGE_FROM_OCI_LAYOUT="${image_from_oci_layout}" \
107+ -e INPUT_CONFIG="${config}" \
108+ -e INPUT_DRIVER='{{default "docker" .DRIVER}}' \
109+ -e INPUT_PLATFORM='{{default "" .PLATFORM}}' \
110+ -e INPUT_PULL='{{default "false" .PULL}}' \
111+ -e INPUT_SAVE='{{default "false" .SAVE}}' \
112+ -e INPUT_QUIET='{{default "false" .QUIET}}' \
113+ -e INPUT_NO_COLOR='{{default "false" .NO_COLOR}}' \
114+ -e INPUT_OUTPUT='{{default "text" .OUTPUT}}' \
115+ -e INPUT_TEST_REPORT='{{default "" .TEST_REPORT}}' \
116+ -e INPUT_JUNIT_SUITE_NAME='{{default "" .JUNIT_SUITE_NAME}}' \
117+ -e INPUT_METADATA='{{default "" .METADATA}}' \
118+ -e INPUT_RUNTIME='{{default "" .RUNTIME}}' \
119+ -e INPUT_FORCE='{{default "false" .FORCE}}' \
120+ -e INPUT_DEFAULT_IMAGE_TAG='{{default "" .DEFAULT_IMAGE_TAG}}' \
121+ -e INPUT_IGNORE_REF_ANNOTATION='{{default "false" .IGNORE_REF_ANNOTATION}}' \
122+ -e INPUT_DEBUG='{{default "false" .DEBUG}}' \
123+ devopsinfra/action-container-structure-test:v1
124+
125+ docker:test:smoke :
126+ desc : Smoke test local action image with container-structure-test
127+ deps :
128+ - task : docker:build:local
129+ cmds :
130+ - |
131+ set -eu
132+ task docker:test:local \
133+ IMAGE="{{.DOCKER_NAME}}:{{.VERSION_FULL}}{{.VERSION_SUFFIX}}" \
134+ CONFIG="tests/docker/local-image.yml" \
135+ DRIVER=docker \
136+ OUTPUT=text
137+
54138 docker:build:inspect :
55139 desc : Inspect built Docker image
56140 cmds :
0 commit comments