Skip to content

Project board

Project board #1339

Workflow file for this run

name: Project board
# Keeps the ChainSafe org project's Status lanes in sync with PR state.
# Spec: .github/scripts/project-board/README.md
# Safe with pull_request_target: this workflow never checks out or executes PR code —
# it only checks out ChainSafe/lodestar@unstable for the reconciler script.
on:
pull_request_target:
types:
- opened
- ready_for_review
- converted_to_draft
- review_requested
- review_request_removed
- reopened
# No Actions secrets on external-fork reviews; main.ts verifies the payload before skipping.
pull_request_review:
types:
- submitted
- dismissed
schedule:
- cron: "*/15 * * * *"
workflow_dispatch:
inputs:
pr:
description: "owner/repo#number to reconcile (empty = sweep the whole board)"
required: false
type: string
# Entry point for accessory repos (thin callers; see .github/scripts/project-board/project-board-caller.yml)
workflow_call:
secrets:
# Optional because GitHub withholds Actions secrets from external-fork review events.
# main.ts validates every other missing-token context.
PROJECT_BOARD_TOKEN:
required: false
permissions: {}
concurrency:
group: project-board-${{ github.event.pull_request.number || github.event_name }}
cancel-in-progress: false
jobs:
reconcile:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout reconciler (lodestar@unstable, never PR code)
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: ChainSafe/lodestar
ref: unstable
sparse-checkout: .github/scripts/project-board
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 24
- name: Reconcile
run: node .github/scripts/project-board/src/main.ts ${PR:+--pr "$PR"}
env:
PR: ${{ inputs.pr }}
PROJECT_BOARD_TOKEN: ${{ secrets.PROJECT_BOARD_TOKEN }}
DRY_RUN: ${{ vars.PROJECT_BOARD_DRY_RUN }}