Skip to content

ci: add pre-commit hooks #271

ci: add pre-commit hooks

ci: add pre-commit hooks #271

Workflow file for this run

name: ci
on:
push:
branches:
- main
tags:
- "**"
pull_request:
branches:
- main
merge_group:
branches:
- main
jobs:
context:
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Dump GitHub script context
uses: actions/github-script@v7
with:
script: console.log(context)
- name: Dump GitHub context
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo ${GITHUB_CONTEXT}
- name: Dump job context
env:
JOB_CONTEXT: ${{ toJson(job) }}
run: echo ${JOB_CONTEXT}
- name: Dump steps context
env:
STEPS_CONTEXT: ${{ toJson(steps) }}
run: echo ${STEPS_CONTEXT}
- name: Dump runner context
env:
RUNNER_CONTEXT: ${{ toJson(runner) }}
run: echo ${RUNNER_CONTEXT}
- name: Dump strategy context
env:
STRATEGY_CONTEXT: ${{ toJson(strategy) }}
run: echo ${STRATEGY_CONTEXT}
- name: Dump matrix context
env:
MATRIX_CONTEXT: ${{ toJson(matrix) }}
run: echo ${MATRIX_CONTEXT}
- name: Dump environment variables
run: ${{ (runner.os == 'Windows') && 'gci env:' || 'env | sort' }}
python:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python: [3.12]
name: python
runs-on: ${{ matrix.os }}
env:
ENVIRONMENT: ci
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up UV
uses: astral-sh/setup-uv@v5
- name: Set up Python
id: setup-python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Set up environment
if: ${{ runner.os != 'Windows' }}
run: |
mkdir -p .venv
echo "$(realpath .venv)/bin" >> ${GITHUB_PATH}
- name: Set up environment (Windows)
if: ${{ runner.os == 'Windows' }}
run: |
New-Item -Type Directory -Force .venv
"$(Resolve-Path .venv)/Scripts" | Out-File -FilePath ${env:GITHUB_PATH} -Append
- name: Install dependencies
run: uv sync
- name: Lint and test
run: make lint test
docker:
name: docker
permissions:
contents: read
packages: write
runs-on: ubuntu-latest
env:
GHCR_IMAGE_NAME: ghcr.io/${{ github.repository }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
sparse-checkout: |
Dockerfile
uv.lock
- name: Cache buildkit mounts
uses: actions/cache@v4
with:
path: |
var-cache-apt
root-cache-pip
root-cache-uv
key: buildkit-mounts-${{ runner.os }}-${{ hashFiles('**/Dockerfile', '**/*.lock') }}
restore-keys: |
buildkit-mounts-${{ runner.os }}
buildkit-mounts-${{ runner.os }}
- name: Inject var-cache-apt into docker
uses: reproducible-containers/buildkit-cache-dance@v3
with:
cache-source: var-cache-apt
cache-target: /var/cache/apt
- name: Inject root-cache-pip into docker
uses: reproducible-containers/buildkit-cache-dance@v3
with:
cache-source: root-cache-pip
cache-target: /root/.cache/pip
- name: Inject root-cache-uv into docker
uses: reproducible-containers/buildkit-cache-dance@v3
with:
cache-source: root-cache-uv
cache-target: /root/.cache/uv
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build CI image
id: build-ci
env:
ENVIRONMENT: ci
uses: docker/build-push-action@v6
with:
target: ${{ env.ENVIRONMENT }}
cache-from: |
${{ env.GHCR_IMAGE_NAME }}:dev
${{ env.GHCR_IMAGE_NAME }}:cache
load: true
- name: Run CI image
run: docker run --rm ${{ steps.build-ci.outputs.imageid }}
- name: Docker metadata
id: docker_metadata
uses: docker/metadata-action@v5
with:
images: ${{ env.GHCR_IMAGE_NAME }}
- name: Login to GHCR
if: ${{ github.event_name != 'pull_request' }}
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push dev image
if: ${{ github.event_name != 'pull_request' }}
env:
ENVIRONMENT: dev
uses: docker/build-push-action@v6
with:
target: ${{ env.ENVIRONMENT }}
cache-from: |
${{ env.GHCR_IMAGE_NAME }}:dev
${{ env.GHCR_IMAGE_NAME }}:cache
cache-to: type=inline
tags: ${{ env.GHCR_IMAGE_NAME }}:dev
push: ${{ github.event_name != 'pull_request' }}
- name: Build and push prod image
if: ${{ github.event_name != 'pull_request' }}
env:
ENVIRONMENT: prod
uses: docker/build-push-action@v6
with:
cache-from: |
${{ env.GHCR_IMAGE_NAME }}:dev
${{ env.GHCR_IMAGE_NAME }}:cache
cache-to: type=registry,ref=${{ env.GHCR_IMAGE_NAME }}:cache,mode=max
tags: ${{ steps.docker_metadata.outputs.tags }}
labels: ${{ steps.docker_metadata.outputs.labels }}
annotations: ${{ steps.docker_metadata.outputs.annotations }}
push: ${{ github.event_name != 'pull_request' }}