Skip to content

Commit e0e39a9

Browse files
authored
Merge pull request #2700 from vdice/feat/spin-docker-image
feat(docker): add spin cli Dockerfiles; add build/push to release.yml
2 parents 4b33730 + e34325a commit e0e39a9

File tree

3 files changed

+95
-0
lines changed

3 files changed

+95
-0
lines changed

.github/Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM debian:bookworm-slim
2+
3+
RUN apt-get update && apt-get install -y --no-install-recommends \
4+
ca-certificates \
5+
git
6+
7+
ARG TARGETARCH
8+
ARG TARGETOS
9+
COPY spin-${TARGETOS}-${TARGETARCH} /usr/local/bin/spin
10+
11+
ENTRYPOINT [ "/usr/local/bin/spin" ]

.github/distroless.Dockerfile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM gcr.io/distroless/static-debian12
2+
3+
ARG TARGETARCH
4+
ARG TARGETOS
5+
COPY spin-static-${TARGETOS}-${TARGETARCH} /usr/local/bin/spin
6+
7+
ENTRYPOINT [ "/usr/local/bin/spin" ]

.github/workflows/release.yml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,3 +380,80 @@ jobs:
380380
repository: fermyon/homebrew-tap
381381
event-type: spin-release
382382
client-payload: '{"version": "${{ github.ref_name }}"}'
383+
384+
docker:
385+
runs-on: "ubuntu-20.04"
386+
needs: [build-and-sign, build-spin-static]
387+
permissions:
388+
contents: read
389+
packages: write
390+
env:
391+
REGISTRY: ghcr.io
392+
IMAGE_NAME: ${{ github.repository }}
393+
strategy:
394+
matrix:
395+
config:
396+
- { dockerfile: "Dockerfile", tag-suffix: "" }
397+
- { dockerfile: "distroless.Dockerfile", tag-suffix: "-distroless" }
398+
steps:
399+
- name: Checkout
400+
uses: actions/checkout@v4
401+
402+
- name: Setup version info
403+
id: version
404+
run: |
405+
if [[ "${{ startsWith(github.ref, 'refs/tags/v') }}" == "true" ]]; then
406+
echo "version=${{ github.ref_name }}" >> $GITHUB_OUTPUT
407+
else
408+
echo "version=canary" >> $GITHUB_OUTPUT
409+
fi
410+
411+
- name: download release assets
412+
uses: actions/download-artifact@v3
413+
with:
414+
name: spin
415+
416+
- name: extract binaries
417+
shell: bash
418+
run: |
419+
if [[ "${{ matrix.config.tag-suffix }}" == "-distroless" ]]; then
420+
static="-static"
421+
fi
422+
tar xvf spin-${{ steps.version.outputs.version }}${static}-linux-amd64.tar.gz
423+
mv spin spin${static}-linux-amd64
424+
tar xvf spin-${{ steps.version.outputs.version }}${static}-linux-aarch64.tar.gz
425+
# Note: here we s/aarch64/arm64 to conform to Docker's TARGETARCH standards
426+
mv spin spin${static}-linux-arm64
427+
428+
- name: Set up QEMU
429+
uses: docker/setup-qemu-action@v3
430+
431+
- name: Set up Docker Buildx
432+
uses: docker/setup-buildx-action@v3
433+
434+
- name: Log into registry ${{ env.REGISTRY }}
435+
uses: docker/login-action@v3
436+
with:
437+
registry: ${{ env.REGISTRY }}
438+
username: ${{ github.actor }}
439+
password: ${{ secrets.GITHUB_TOKEN }}
440+
441+
- name: Extract Docker metadata
442+
id: meta
443+
uses: docker/metadata-action@v5
444+
with:
445+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
446+
447+
- name: Build and Push
448+
uses: docker/build-push-action@v6
449+
with:
450+
context: .
451+
file: .github/${{ matrix.config.dockerfile }}
452+
push: true
453+
labels: ${{ steps.meta.outputs.labels }}
454+
annotations: ${{ steps.meta.outputs.annotations }}
455+
platforms: linux/amd64,linux/arm64
456+
cache-from: type=gha
457+
cache-to: type=gha,mode=max
458+
tags: |
459+
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}${{ matrix.config.tag-suffix }}

0 commit comments

Comments
 (0)