Files
Test-IP/.github/workflows/ci.yml
T

91 lines
3.0 KiB
YAML

name: CI
on:
push:
branches: ["main"]
tags: ["v*.*.*"]
pull_request:
branches: ["main"]
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
bun-version: ["latest", "1.2"]
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
with:
bun-version: ${{ matrix.bun-version }}
- run: bun install --frozen-lockfile
- name: Typecheck
run: bun run typecheck
- name: Lint
run: bun run lint
- name: Format check
run: bunx biome format .
- name: Unit tests
run: bun test
docker:
runs-on: ubuntu-latest
needs: test
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Set lowercase owner
id: owner
run: echo "owner=$(echo '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"
- name: Compute image tags
id: meta
run: |
TAGS="ghcr.io/${{ steps.owner.outputs.owner }}/test-ip:latest"
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
VERSION="${{ github.ref_name }}"
TAGS="ghcr.io/${{ steps.owner.outputs.owner }}/test-ip:${VERSION},ghcr.io/${{ steps.owner.outputs.owner }}/test-ip:latest"
fi
echo "tags=$TAGS" >> "$GITHUB_OUTPUT"
- name: Build image (local, for smoke test)
uses: docker/build-push-action@v6
with:
context: .
load: true
tags: test-ip:ci
- name: Smoke test image
run: |
docker run -d --name test-ip -p 3000:3000 test-ip:ci
for i in $(seq 1 20); do
if curl -fsS -H "Accept: application/json" http://localhost:3000/ > response.json; then
break
fi
sleep 1
done
cat response.json
grep -q '"ip"' response.json
grep -q '"headers"' response.json
docker logs test-ip
docker stop test-ip
- name: Log in to Container Registry
if: github.event_name == 'push'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ steps.owner.outputs.owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push image
if: github.event_name == 'push'
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}