pf-ci lowers the vendor-neutral org.projectfile.ci signal DAG to concrete CI workflow files for Forgejo Actions and GitHub Actions, dispatching each provider leaf to its recipe in projectfile/actions. Companion binary to pf-cli for the projectfile.org tooling.
  • Go 95.2%
  • Go Template 2.5%
  • Shell 1.3%
  • Python 0.4%
  • Dockerfile 0.4%
  • Other 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Damián Búho cff311af47
Some checks failed
published / projectfile-is-valid (push) Successful in 3s
published / release-tag (push) Successful in 2s
published / runner-is-ready (push) Failing after 3s
published / source-is-compliant (push) Successful in 6s
published / source-is-tested (push) Successful in 5s
published / source-is-secure (push) Successful in 12s
published / documentation-passes-lint (push) Successful in 55s
published / source-passes-lint (push) Successful in 52s
published / gpg-is-ready (push) Successful in 4s
published / projectfile-is-ok (push) Successful in 5s
published / signing-is-ready (push) Successful in 5s
published / binaries-are-built (amd64, darwin) (push) Has been skipped
published / binaries-are-built (amd64, linux) (push) Has been skipped
published / binaries-are-built (arm64, darwin) (push) Has been skipped
published / binaries-are-built (arm64, linux) (push) Has been skipped
published / binaries-are-built (riscv64, linux) (push) Has been skipped
published / image-is-built (amd64) (push) Has been skipped
published / container-is-verified (amd64) (push) Has been skipped
published / gsa (amd64, darwin) (push) Has been skipped
published / gsa (amd64, linux) (push) Has been skipped
published / gsa (arm64, darwin) (push) Has been skipped
published / gsa (arm64, linux) (push) Has been skipped
published / gsa (riscv64, linux) (push) Has been skipped
published / image-has-sbom (amd64) (push) Has been skipped
published / image-is-secure (amd64) (push) Has been skipped
published / binaries-are-signed (push) Has been skipped
published / image-is-published (dockerhub) (push) Has been skipped
published / image-is-published (kiota) (push) Has been skipped
published / binaries-are-torrented (push) Has been skipped
published / binaries-torrent-is-verified (push) Has been skipped
published / release-is-published (push) Has been skipped
published / go-install-is-ok (push) Has been skipped
published / release-notes-are-published (push) Has been skipped
published / published (push) Failing after 0s
build(workflows): fix preflights
2026-10-21 14:42:04 -03:00
.compose chore: rename ci-resolver to ci/pf-ci 2026-08-29 22:26:19 -03:00
.container refactor: move pf-ci main to cmd/pf-ci 2026-10-16 18:33:02 -03:00
.forgejo/workflows build(workflows): fix preflights 2026-10-21 14:42:04 -03:00
.github/workflows build(workflows): fix preflights 2026-10-21 14:42:04 -03:00
.makefile chore(makefile): sync m6e submodules 2026-10-21 02:24:00 -03:00
.scripts build: take the binary version from M6E_RELEASE_TAG first 2026-10-17 00:45:12 -03:00
cmd/pf-ci test(ci): cover the pf-ci target diagnostics and the generate pipeline 2026-10-18 17:31:26 -03:00
docs docs(makefile): update help documentation 2026-10-21 02:24:04 -03:00
dogfood refactor(render): rename the action library and hoist its ref out of the slot map 2026-09-02 01:12:36 -03:00
internal fix(render): resolve Forgejo artifact actions through the instance's default actions URL 2026-10-21 00:28:06 -03:00
LICENSES chore: init 2026-08-06 20:07:28 -03:00
.claudeignore chore: sorting for claudeignore 2026-09-13 12:49:37 -03:00
.containerignore build: ignore .worktrees (oci/docker) 2026-09-29 23:59:47 -03:00
.dockerignore build: ignore .worktrees (oci/docker) 2026-09-29 23:59:47 -03:00
.gitattributes chore: clean j2 from attributes 2026-09-14 00:37:01 -03:00
.gitignore build: ignore .worktrees 2026-09-29 23:56:46 -03:00
.gitmodules build: hard .gitmodules before big refactoring of m6e 2026-09-02 18:40:24 -03:00
.yamllint chore(makefile): sync m6e submodules 2026-09-18 00:20:28 -03:00
AI_POLICY.md chore(docs): prevent user data from triggering textlint 2026-08-19 23:24:08 -03:00
CITATION.cff chore(version): 3.1.2 2026-10-21 08:00:38 -03:00
CODE_OF_CONDUCT.md docs: cleanup code of conduct 2026-08-18 02:18:08 -03:00
CODEOWNERS chore: init 2026-08-06 20:07:28 -03:00
CONTRIBUTING.md chore: regenerate contributing 2026-09-30 06:40:30 -03:00
Dockerfile refactor: move pf-ci main to cmd/pf-ci 2026-10-16 18:33:02 -03:00
go.mod chore(go): move the licence header below the module directive 2026-10-17 22:36:35 -03:00
go.sum fix(ci): restore every flag spelling and honour --offline throughout 2026-10-17 20:40:04 -03:00
go.sum.license chore: init 2026-08-06 20:07:28 -03:00
lefthook.yaml chore: regenerate lefthook.yaml 2026-09-29 22:29:13 -03:00
LICENSE chore: init 2026-08-06 20:07:28 -03:00
Makefile refactor: move pf-ci main to cmd/pf-ci 2026-10-16 18:33:02 -03:00
projectfile.yaml chore(version): 3.1.2 2026-10-21 08:00:38 -03:00
README.md fix: refactor CI workflows (new goals + preflight checks) 2026-10-18 17:18:27 -03:00
SECURITY.md docs(security): show the fingerprint of the reporting key 2026-10-15 23:28:34 -03:00
SUPPORT.md chore(docs): regen documentation (actual forges) 2026-09-18 14:55:43 -03:00

Español · Українська

Projectfile CI Resolver

pf-ci lowers the vendor-neutral org.projectfile.ci signal DAG to concrete CI workflow files for Forgejo Actions and GitHub Actions, dispatching each provider leaf to its recipe in projectfile/actions. Companion binary to pf-cli for the projectfile.org tooling.

Stand with Ukraine Projectfile inside License Cosign PRs welcome REUSE compliance

Last commit on kiota.ch Last commit on Codeberg Last commit on GitHub

Publish pipeline on GitHub Vulnerability audit on GitHub Dependency freshness on GitHub Analysis sweep on GitHub

Publish pipeline on kiota.ch Vulnerability audit on kiota.ch Dependency freshness on kiota.ch Analysis sweep on kiota.ch

Features

  • CI DAG to workflow lowering

See Features for the full list.

What this provides

  • Executable pf-ci — command pf-ci
  • Container image ghcr.io/projectfile-org/ci:latest
  • Container image damianbuho/projectfile-ci:latest

Installation

Container image

Pull the published container image:

Pull from GHCR — linux/amd64, linux/arm64, linux/riscv64

docker pull ghcr.io/projectfile-org/ci:latest

Pull from DockerHub — linux/amd64

docker pull damianbuho/projectfile-ci:latest

Stable releases also publish X.Y.Z, X.Y and X tags — pull the precision you want to pin.

If the registries above are unreachable, pull from the origin instead:

Pull from Kiota — linux/amd64

docker pull kiota.ch/projectfile/ci:latest

Go toolchain

Install with the Go toolchain:

go install projectfile.org/projectfile/ci/v3/cmd/pf-ci@latest

Then run pf-ci --help.

Prebuilt binary

Download the prebuilt binary for your platform from GitHub Releases:

mkdir -p ~/.local/bin
curl --fail --location --output ~/.local/bin/pf-ci https://github.com/projectfile-org/ci/releases/latest/download/pf-ci-$(uname -s | tr A-Z a-z)-$(uname -m)
chmod +x ~/.local/bin/pf-ci
~/.local/bin/pf-ci --help

Published for: linux/amd64, linux/arm64, linux/riscv64, darwin/amd64, darwin/arm64

To uninstall, delete that one file: rm ~/.local/bin/pf-ci.

Usage

Lower the CI DAG to a forge’s workflow files:

pf-ci resolve
pf-ci generate -target forgejo
pf-ci generate -target gha -check

Building

Clone the repository with its submodules:

git clone --recurse-submodules https://codeberg.org/projectfile/ci ci && cd ci

Build the container image locally:

make container-build

Run make with no arguments for the default target; run make help to list every target.

For the local dev loop, make dev-container brings up the dev-container.

Pipeline entry points:

  • make analyzed — Run the heavy analysis sweep (mutation testing, benchmarks)
  • make audited — Re-scan the pinned dependencies and published artifacts for new vulnerabilities
  • make check-outdated — Report every pinned dependency that lags upstream
  • make release-is-ready — Run the pseudo-CI pipeline locally — build, test and scan, without publishing

Documentation

Policies

License

This project is licensed under MIT — see the LICENSE file for details.