Sprint rollover
When an iteration ends, unfinished cards move into the next sprint automatically — nothing stranded in a closed iteration.
Boardly is a free, open-source GitHub Action that automates GitHub Projects (v2) — sprint rollover, stale-card nudges, sub-issue gating, digests, standups, priority sorting, and Slack/email notifications — all from one YAML file.
project:
owner: my-org
number: 5
features:
rollover: { enabled: true }
staleNudge:
enabled: true
rules:
- { status: "In Progress", days: 3 }
digest: { enabled: true, postTo: { issue: 42 } }
# ...and it just runs on a schedule 🎉
Everything your board needs
Turn each feature on or off in YAML. Boardly reads your board once, applies your rules, and records every action.
When an iteration ends, unfinished cards move into the next sprint automatically — nothing stranded in a closed iteration.
@-mention owners when a card sits in a column too long. De-duped, so it never spams the same card twice.
Block a card from staying Done while sub-issues are open, and write live completion % into a progress field.
At iteration end, post completed-vs-carried-over counts and velocity to an issue, Slack, or email.
A summary of what moved in the last N hours, grouped by assignee — async standup without the meeting.
Keep the board ordered by your Priority field so the most important work always floats to the top.
Deliver digests, standups, and alerts to a Slack channel and inboxes — not just GitHub comments.
Every action lands in the job summary. Preview everything with dry-run before it touches your board.
Live in minutes
No app to host, no database, no dashboard to babysit. It runs as a scheduled GitHub Action inside your own repo.
A fine-grained PAT or App token with Projects + Issues access, stored as an encrypted secret.
Describe your rules in .github/project-automation.yml — start from the example and tweak.
One uses: cdrrazan/Boardly@v1 step on a cron. Run with dry-run first to preview.
Flip dry-run off. Boardly keeps your board honest on every schedule, and logs what it did.
Copy, paste, done
project: { owner: my-org, type: org, number: 5 }
doneStatuses: ["Done", "Released"]
features:
staleNudge:
enabled: true
rules:
- { status: "In Review", days: 2 }
prioritySort: { enabled: true, order: ["High", "Low"] }
notifications:
slack: { enabled: true, webhookEnv: SLACK_WEBHOOK_URL }
on:
schedule: [{ cron: "0 8 * * 1-5" }]
permissions: { contents: read, issues: write }
jobs:
automate:
runs-on: ubuntu-latest
steps:
- uses: cdrrazan/Boardly@v1
with:
token: ${{ secrets.PROJECT_AUTOMATION_TOKEN }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
Real-world recipes
Thirteen copy-pasteable recipes in the docs — here are a few favorites.
Never hand-move unfinished tickets on Monday again.
What moved yesterday, grouped by assignee — across time zones.
Deliver sprint reports where your team already lives.
See exactly what it would do before it does anything.
Gate epics until every sub-issue is closed.
The full cookbook in the repo docs.
Free & open, forever
Boardly is MIT-licensed and runs entirely inside your GitHub. It only ever uses the token you provide, with the scopes you grant — and every action is auditable.
Point Boardly at a project, add a YAML file, and let it keep things tidy while you ship.