Skip to content

add todo

add todo #1027

Workflow file for this run

name: CI
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
env:
docker-engine-connection-variants: "['ssh', 'http', 'https', 'socket']"
platform-variants: "['node-18.x', 'node-20.x', 'node-22.x', 'bun', 'deno', 'node-18.x-undici', 'node-20.x-undici', 'node-22.x-undici', 'bun-undici', 'deno-undici']"
docker-engine-versions: "['docker.io/library/docker:23-dind-rootless', 'docker.io/library/docker:24-dind-rootless', 'docker.io/library/docker:25-dind-rootless', 'docker.io/library/docker:26-dind-rootless', 'docker.io/library/docker:27-dind-rootless']"
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# Yes this job is really needed as you can't access the global env var outside of a job step
# and I want to use those global env vars to setup things like the matricies for other jobs.
compute-matricies:
runs-on: ubuntu-latest
timeout-minutes: 1
outputs:
platform-variants: ${{ steps.compute-matricies.outputs.platform-variants }}
docker-engine-versions: ${{ steps.compute-matricies.outputs.docker-engine-versions }}
docker-engine-connection-variants: ${{ steps.compute-matricies.outputs.docker-engine-connection-variants }}
steps:
- id: compute-matricies
run: |
echo "platform-variants=${{ env.platform-variants }}" >> $GITHUB_OUTPUT
echo "docker-engine-versions=${{ env.docker-engine-versions }}" >> $GITHUB_OUTPUT
echo "docker-engine-connection-variants=${{ env.docker-engine-connection-variants }}" >> $GITHUB_OUTPUT
typescript-build:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18.x
- uses: pnpm/action-setup@v4
- run: pnpm install
- run: pnpm check
- run: pnpm build
- run: pnpm lint
- run: pnpm circular
# Checks that the docker images build and publishes them to ghcr.io
docker-build:
runs-on: ubuntu-latest
needs: [compute-matricies]
timeout-minutes: 10
strategy:
matrix:
dockerfile: ${{ fromJSON(needs.compute-matricies.outputs.docker-engine-connection-variants) }}
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/metadata-action@v5
id: meta
with:
images: ghcr.io/${{ github.repository }}/${{ matrix.dockerfile }}-dind
- uses: docker/build-push-action@v6
with:
context: .
push: true
cache-from: type=gha
cache-to: type=gha,mode=max
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
file: docker/dind-${{ matrix.dockerfile }}.dockerfile
build-args: DIND_BASE_IMAGE=docker.io/library/docker:dind
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
docker-engine-tests:
needs: [compute-matricies, typescript-build, docker-build]
runs-on: ubuntu-latest
timeout-minutes: 10
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
platform-variant: ${{ fromJSON(needs.compute-matricies.outputs.platform-variants) }}
docker-engine-version: ${{ fromJSON(needs.compute-matricies.outputs.docker-engine-versions) }}
docker-engine-connection-variant: ${{ fromJSON(needs.compute-matricies.outputs.docker-engine-connection-variants) }}
env:
__PLATFORM_VARIANT: ${{ matrix.platform-variant }}
__DOCKER_ENGINE_VERSION: ${{ matrix.docker-engine-version }}
__CONNECTION_VARIANT: ${{ matrix.docker-engine-connection-variant }}
steps:
- uses: actions/checkout@v4
- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- run: docker pull ${{ matrix.docker-engine-version }}
- if: startsWith(matrix.platform-variant, 'node')
uses: ./.github/actions/setup-node
- if: startsWith(matrix.platform-variant, 'node')
run: pnpm test
- if: startsWith(matrix.platform-variant, 'bun')
uses: ./.github/actions/setup-bun
- if: startsWith(matrix.platform-variant, 'bun')
run: bun run test
- if: startsWith(matrix.platform-variant, 'deno')
uses: ./.github/actions/setup-deno
- if: startsWith(matrix.platform-variant, 'deno')
run: deno task test --watch=false
# https://github.com/orgs/community/discussions/26822
pr-can-merge:
if: ${{ always() }}
runs-on: ubuntu-latest
needs: [docker-engine-tests]
steps:
- run: exit 1
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') || contains(needs.*.result, 'skipped') }}