58 lines
2.1 KiB
YAML
58 lines
2.1 KiB
YAML
name: labels
|
|
# Reusable half of the labels automation. Triggers and permissions live in
|
|
# the caller; docs/CONSUMERS.md carries the complete caller stub.
|
|
on:
|
|
workflow_call:
|
|
|
|
env:
|
|
# A called workflow arrives without its repository. Keep this literal pin
|
|
# aligned with the ceremony release consumed by callers (issue #9 D3).
|
|
CEREMONY_SELF_REF: "0.1.0"
|
|
|
|
jobs:
|
|
scope:
|
|
# Not on labeled/unlabeled: those events change no paths, so labeler has
|
|
# nothing new to derive — and label churn is precisely what they are.
|
|
if: >-
|
|
github.event_name == 'pull_request_target' &&
|
|
github.event.action != 'labeled' &&
|
|
github.event.action != 'unlabeled'
|
|
runs-on: ubuntu-latest
|
|
concurrency:
|
|
group: labels-scope-${{ github.event.pull_request.number }}
|
|
cancel-in-progress: true
|
|
steps:
|
|
- uses: actions/labeler@v5
|
|
with:
|
|
# additive only — a hand-applied scope must survive the machine
|
|
sync-labels: false
|
|
|
|
reconcile:
|
|
runs-on: ubuntu-latest
|
|
# ONE shared group: every reconcile sweeps every open PR, so cron and
|
|
# PR-event runs must serialize or two sweeps race the same PR's labels
|
|
# and both pass the request-the-human-once guard.
|
|
concurrency:
|
|
group: labels-reconcile
|
|
cancel-in-progress: false
|
|
steps:
|
|
# pull_request_target is required for fork PR write permission. It is
|
|
# safe here because no PR code is ever checked out or executed: labeler
|
|
# reads paths via the API, and reconcile checks out the BASE branch only.
|
|
# Keep it that way.
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
repository: ${{ github.repository }}
|
|
ref: ${{ github.event.repository.default_branch }}
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
repository: heavy-duty/ceremony
|
|
ref: ${{ env.CEREMONY_SELF_REF }}
|
|
path: .ceremony-src
|
|
- name: reconcile state + stale
|
|
uses: ./.ceremony-src/actions/labels-reconcile
|
|
with:
|
|
bootstrap: ${{ github.event_name == 'workflow_dispatch' && 'yes' || 'no' }}
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
REPO: ${{ github.repository }}
|