Skip to content

2.1.3 (#437)

2.1.3 (#437) #1210

Workflow file for this run

name: ci
on:
# Run on any push to main or any tag
push:
branches:
- main
tags:
- '*'
# Run on any pull request
pull_request:
branches:
- main
jobs:
build-bin:
name: bin
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Cache docker registry
uses: actions/cache@v3
with:
key: registry-${{ github.sha }}
path: ${{ runner.temp }}/registry
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
# Key is named differently to avoid collision
key: ${{ runner.os }}-multi-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-multi-buildx
- name: Start local Docker registry
run: |
# Docker save / load does not support multi-arch images.
# This sets up a local registry that I can push the images to.
docker run -d -p 5000:5000 -e 'REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry' -v '${{ runner.temp }}/registry:/var/lib/registry' registry:2
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: network=host
- name: Build image
run: |
docker buildx build -f bin.dockerfile --provenance=false --platform=linux/amd64,linux/arm64 -t localhost:5000/bin --push .
build:
needs: build-bin
name: ${{ matrix.kind }}
runs-on: ubuntu-latest
strategy:
matrix:
kind: ["alpine", "debian", "distroless", "ubuntu"]
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Cache docker registry
uses: actions/cache@v3
with:
key: registry-${{ github.sha }}
fail-on-cache-miss: true
path: ${{ runner.temp }}/registry
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
# Key is named differently to avoid collision
key: ${{ runner.os }}-multi-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-multi-buildx
- name: Start local Docker registry
run: |
# Docker save / load does not support multi-arch images.
# This sets up a local registry that I can push the images to.
docker run -d -p 5000:5000 -e 'REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry' -v '${{ runner.temp }}/registry:/var/lib/registry' registry:2
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: network=host
- name: Build image
run: |
docker buildx build -f ${{ matrix.kind }}.dockerfile --provenance=false --platform=linux/amd64,linux/arm64 --build-arg BIN_IMAGE=localhost:5000/bin -t localhost:5000/${{ matrix.kind }} --push .
- name: Test default CMD
run: |
docker run -t localhost:5000/${{ matrix.kind }}
- name: Test if entry script forwards to deno binary
run: |
docker run -t --platform linux/arm64 localhost:5000/${{ matrix.kind }} eval 'console.log(`Welcome to Deno ${Deno.build.arch}!`)'
docker run -t --platform linux/amd64 localhost:5000/${{ matrix.kind }} eval 'console.log(`Welcome to Deno ${Deno.build.arch}!`)'
# if typescript is present in the output, then probably deno --version worked
docker run -t localhost:5000/${{ matrix.kind }} --version | grep typescript
- name: Test if entry script forwards to other binaries
if: ${{ matrix.kind != 'distroless' }}
run: |
docker run -t localhost:5000/${{ matrix.kind }} deno eval 'console.log(`Welcome to Deno ${Deno.build.arch}!`)'
docker run -t localhost:5000/${{ matrix.kind }} echo 'test entry script'
- name: Login to Docker Hub
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Push named images
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag'
run: |
docker buildx imagetools create localhost:5000/${{ matrix.kind }} -t denoland/deno:${{ matrix.kind }}-${{ github.ref_name }} -t denoland/deno:${{ matrix.kind }}
docker pull --platform linux/amd64 denoland/deno:${{ matrix.kind }}-${{ github.ref_name }}
docker pull --platform linux/amd64 denoland/deno:${{ matrix.kind }}
docker pull --platform linux/arm64 denoland/deno:${{ matrix.kind }}-${{ github.ref_name }}
docker pull --platform linux/arm64 denoland/deno:${{ matrix.kind }}
- name: Push bin image
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag' && matrix.kind == 'debian'
run: |
docker buildx imagetools create localhost:5000/bin -t denoland/deno:bin-${{ github.ref_name }} -t denoland/deno:bin
docker pull --platform linux/amd64 denoland/deno:bin-${{ github.ref_name }}
docker pull --platform linux/amd64 denoland/deno:bin
docker pull --platform linux/arm64 denoland/deno:bin-${{ github.ref_name }}
docker pull --platform linux/arm64 denoland/deno:bin
- name: Push default images
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag' && matrix.kind == 'debian'
run: |
docker buildx imagetools create localhost:5000/${{ matrix.kind }} -t denoland/deno:${{ github.ref_name }} -t denoland/deno:latest
docker pull --platform linux/amd64 denoland/deno:${{ github.ref_name }}
docker pull --platform linux/amd64 denoland/deno:latest
docker pull --platform linux/arm64 denoland/deno:${{ github.ref_name }}
docker pull --platform linux/arm64 denoland/deno:latest
- name: Update Docker Hub Description
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag' && matrix.kind == 'debian' # Only on a tag and once per run (on debian run)
uses: peter-evans/dockerhub-description@e98e4d1628a5f3be2be7c231e50981aee98723ae # v4.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
repository: denoland/deno
short-description: ${{ github.event.repository.description }}