Shared CI workflow files and conventions for all projects
Find a file
2026-04-13 20:45:43 +02:00
.forgejo/workflows fix(ci): pin ci-base image to v1 tag 2026-04-13 20:45:43 +02:00
README.md feat: make cache optional, remove Cargo-specific assumptions 2026-04-13 17:46:49 +02:00

ci-workflows

Shared CI workflow files for all projects on forge.jacquin.app.

Convention

Workflows are project-agnostic. All project-specific logic lives in the project's justfile under standard recipe names.

Required justfile recipes

Recipe Used by Purpose
ci-setup qa, release Install toolchain + project deps. Reads ARCH env var (x86_64, aarch64).
fmt-check qa Check formatting (fail if unformatted).
lint qa Run all linters.
test qa Run all tests.
ci-build release Build release artifacts. Reads ARCH env var.
ci-package release Package artifacts into dist/. Reads VERSION, ARCH env vars.

Workflows validate these recipes exist before running. Missing recipe = immediate failure with a clear error.

Usage

QA (on push to main + PRs)

# .forgejo/workflows/qa.yml
name: qa

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  qa:
    uses: forge_admin/ci-workflows/.forgejo/workflows/qa.yml@main
    # with:
    #   container: "debian:trixie"  # optional, default: debian:trixie

Release (on tag push)

# .forgejo/workflows/release.yml
name: release

on:
  push:
    tags: ["v*"]

jobs:
  release:
    uses: forge_admin/ci-workflows/.forgejo/workflows/release.yml@main
    with:
      release-notes: |
        ## My Project ${{ github.ref_name }}

        ### Downloads
        ...

Inputs

Workflow Input Default Description
both container debian:trixie Container image
both cache-path "" Paths to cache (skip if empty)
both cache-key "" Cache key suffix
release release-notes "" Release notes markdown