feat: reusable ci.yml — estate CI standard (Phase 0, step 1) #19

Merged
peptiderepo merged 11 commits from claude/reusable-ci-20260616 into main 2026-06-16 12:12:07 +00:00
7 changed files with 18 additions and 81 deletions
Showing only changes of commit d0f8c1d65c - Show all commits

View File

@@ -1,15 +0,0 @@
name: CI Bisect Caller v3
on:
push:
branches: ['claude/**']
permissions:
contents: write # needed for called reusable workflow's phpcs job
jobs:
ci:
uses: ./.github/workflows/ci-bisect.yml
with:
tests: none
secrets: inherit

View File

@@ -1,27 +0,0 @@
name: CI Bisect Test v3
on:
workflow_call:
inputs:
tests:
type: string
required: false
default: stubs
# No top-level permissions — only job-level where needed
jobs:
phpcs:
name: PHPCS
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- run: echo "phpcs with write"
phpunit:
name: PHPUnit
runs-on: ubuntu-latest
if: ${{ inputs.tests != 'none' }}
steps:
- run: echo "phpunit ${{ inputs.tests }}"

View File

@@ -1,12 +0,0 @@
name: Minimal Reusable Test
on:
push:
branches: ['claude/**']
jobs:
test:
uses: ./.github/workflows/ci-minimal.yml
with:
test_input: hello
secrets: inherit

View File

@@ -1,18 +0,0 @@
name: Minimal Reusable
on:
workflow_call:
inputs:
test_input:
type: string
required: false
default: world
permissions:
contents: read
jobs:
hello:
runs-on: ubuntu-latest
steps:
- run: echo "Hello ${{ inputs.test_input }}"

View File

@@ -1,8 +1,9 @@
# Self-test: exercises the reusable ci.yml on this repo itself.
# Uses tests: none (peptide-e2e is a Playwright/Node repo, no PHP suite).
# phpcs_autofix: false avoids needing contents: write at the caller level
# (the phpcs job in ci.yml has its own job-level write permission for phpcbf).
# Purpose: smoke-check that the reusable workflow skeleton runs without errors.
# permissions: contents: write is required at the caller level — any caller of
# ci.yml must declare this so the phpcs job can commit phpcbf fixes back to the
# PR branch. Even with phpcs_autofix: false here, the permission must be declared
# for the reusable workflow to pass GH's startup permission-escalation check.
name: CI Self-Test (reusable ci.yml)
@@ -12,6 +13,9 @@ on:
pull_request:
branches: [main]
permissions:
contents: write # required: called ci.yml phpcs job declares job-level write for phpcbf
jobs:
ci:
uses: ./.github/workflows/ci.yml

View File

@@ -50,9 +50,11 @@
# and concatenated verbatim — missing slash produces wrong path).
# - Every repo calls `composer test` regardless of the `tests` input; the
# input only controls environment provisioning, not the command.
# - permissions: contents: read at workflow level; the phpcs job sets
# contents: write for phpcbf commit-back only. Calling workflows do NOT
# need to declare contents: write — job-level override is sufficient.
# - permissions: the phpcs job declares `contents: write` at job level for
# phpcbf commit-back. GitHub requires the CALLING WORKFLOW to also declare
# `permissions: contents: write` at the caller's workflow level — GH enforces
# that callers cannot be escalated beyond their declared scope, even by job-level
# overrides in the reusable workflow. All caller repos must include this.
##
name: CI — Reusable
@@ -100,9 +102,6 @@ on:
default: true
type: boolean
permissions:
contents: read # jobs that need write declare it explicitly (phpcs)
jobs:
# ---------------------------------------------------------------------------

View File

@@ -28,6 +28,12 @@ on:
pull_request:
branches: [main]
# Required: the called ci.yml phpcs job declares contents: write for phpcbf
# commit-back. GitHub enforces that callers must grant at least the permission
# level the reusable workflow's jobs request.
permissions:
contents: write
jobs:
ci:
uses: peptiderepo/peptide-e2e/.github/workflows/ci.yml@main