A comprehensive GitHub Action that automates issue and pull request workflows including:
- 📋 Project Board Integration - Automatically add issues to GitHub Projects V2 and update status based on PR lifecycle
- 🏷️ Label & Milestone Sync - Keep labels and milestones synchronized between linked issues and PRs
- 🔒 ZAP Security Scan Auto-labeling - Automatically label ZAP security scan report issues
- uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}We recommend pinning to a specific version for stability:
@v1- Latest v1.x.x release (recommended for most users)@v1.0.0- Specific release version (maximum stability)@main- Latest development version (not recommended for production)
- New Issues: Automatically adds opened issues to your GitHub Projects V2 board in "Backlog" status
- PR Status Updates: Updates linked issue status based on PR lifecycle:
- PR opened/converted to draft → Issue moves to "In Progress"
- PR ready for review → Issue moves to "In Review"
- PR merged → Issue moves to "In Review" (customizable)
- PR closed without merge → Issue status unchanged
- Bidirectional Label Sync: Labels are automatically synchronized between issues and their linked PRs
- When issue labels change → Updates all linked open PRs
- When PR opens → Inherits labels from all linked issues
- Smart Milestone Sync: Milestones are intelligently synchronized
- Issue has milestone, PR doesn't → Apply issue milestone to PR
- PR has milestone, issue doesn't → Apply PR milestone to issue
- Automatically detects issues with "ZAP Scan Baseline Report" in the title
- Applies configurable labels (default:
Meta,Stylistic,javascript,meta:seq,ZAP!) - Triggers on issue creation and edits
Create a workflow file (e.g., .github/workflows/automation.yml) in your repository:
name: Issue & PR Automation
on:
issues:
types: [opened, closed, reopened, labeled, unlabeled, milestoned, demilestoned, edited]
pull_request:
types: [opened, closed, reopened, ready_for_review, converted_to_draft, synchronize, edited]
pull_request_target:
types: [opened, synchronize]
permissions:
issues: write
pull-requests: write
repository-projects: write
contents: read
jobs:
automation:
runs-on: ubuntu-latest
steps:
- name: Run Automation Suite
uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
project-name: "My Project"Customize the behavior with input parameters:
- name: Run Automation Suite
uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
project-name: "Portfolio Devmt"
enable-project-automation: "true"
enable-label-sync: "true"
enable-zap-labeling: "true"
zap-labels: "security,automated,zap-scan,needs-review"Enable only specific features:
- name: Project Board Automation
uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
project-name: "Sprint Board"
enable-project-automation: "true"
enable-label-sync: "false"
enable-zap-labeling: "false"- name: Label & Milestone Sync
uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
enable-project-automation: "false"
enable-label-sync: "true"
enable-zap-labeling: "false"- name: ZAP Security Issue Labeling
uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
enable-project-automation: "false"
enable-label-sync: "false"
enable-zap-labeling: "true"
zap-labels: "security,zap,needs-triage"| Input | Description | Required | Default |
|---|---|---|---|
github-token |
GitHub token for API access | Yes | ${{ github.token }} |
project-name |
Name of GitHub Projects V2 project | No | Portfolio Devmt |
enable-project-automation |
Enable project board automation | No | true |
enable-label-sync |
Enable label/milestone sync | No | true |
enable-zap-labeling |
Enable ZAP issue auto-labeling | No | true |
zap-labels |
Comma-separated labels for ZAP issues | No | Meta,Stylistic,javascript,meta:seq,ZAP! |
The action detects linked issues in PRs using multiple patterns:
- Direct reference:
#123 - Closing keywords:
closes #123,fixes #456,resolves #789 - Full URLs:
https://github.com/owner/repo/issues/123
graph LR
A[Issue Created] -->|Opened| B[Backlog]
B -->|PR Opened| C[In Progress]
C -->|Ready for Review| D[In Review]
D -->|PR Merged| D
C -->|Converted to Draft| C
- Issue labeled → All linked open PRs receive the same labels
- Issue unlabeled → Labels removed from all linked open PRs
- PR opened → Inherits all labels from linked issues
- Bidirectional → Changes propagate in both directions
name: Complete Automation Suite
on:
issues:
types: [opened, closed, reopened, labeled, unlabeled, milestoned, demilestoned, edited]
pull_request:
types: [opened, closed, reopened, ready_for_review, converted_to_draft, synchronize, edited]
permissions:
issues: write
pull-requests: write
repository-projects: write
contents: read
jobs:
automation:
runs-on: ubuntu-latest
steps:
- name: Run Full Automation
uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
project-name: "Development Board"
zap-labels: "security,scan,automated,needs-review"name: Modular Automation
on:
issues:
types: [opened, closed, reopened, labeled, unlabeled, milestoned, demilestoned, edited]
pull_request:
types: [opened, closed, reopened, ready_for_review, converted_to_draft, synchronize, edited]
permissions:
issues: write
pull-requests: write
repository-projects: write
contents: read
jobs:
project-management:
name: Project Board Sync
runs-on: ubuntu-latest
if: github.event_name == 'issues' || github.event_name == 'pull_request'
steps:
- uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
project-name: "Sprint Planning"
enable-label-sync: "false"
enable-zap-labeling: "false"
label-sync:
name: Label & Milestone Sync
runs-on: ubuntu-latest
steps:
- uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
enable-project-automation: "false"
enable-zap-labeling: "false"
security-labeling:
name: Security Scan Labeling
runs-on: ubuntu-latest
if: github.event_name == 'issues'
steps:
- uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
enable-project-automation: "false"
enable-label-sync: "false"
zap-labels: "security,vulnerability,zap-baseline"name: Security Automation
on:
issues:
types: [opened, edited]
permissions:
issues: write
jobs:
security-triage:
runs-on: ubuntu-latest
steps:
- name: Auto-label Security Scans
uses: SillyLittleTech/AutomationSuite@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
enable-project-automation: "false"
enable-label-sync: "false"
enable-zap-labeling: "true"
zap-labels: "security,automated-scan,needs-triage,zap-report"For project board automation to work:
- Create a GitHub Projects V2 board (user or organization level)
- Ensure the board has a "Status" field with the following options:
Backlog(for new issues)In Progress(for issues with open PRs)In Review(for issues with PRs ready for review)
- Set the
project-nameinput to match your project's exact name
The workflow requires the following permissions:
permissions:
issues: write # For updating issue labels and milestones
pull-requests: write # For updating PR labels and milestones
repository-projects: write # For managing project board items
contents: read # For reading repository contentIf you see "Project not found" errors:
- Verify the project name matches exactly (case-sensitive)
- Ensure the project is at the user/organization level (not repository-level)
- Check that the token has access to the project
- Ensure both issues and PRs have write permissions
- Check that the PR body or title contains valid issue references
- Verify labels exist in the repository
- Confirm the issue title contains "ZAP Scan Baseline Report" (case-insensitive)
- Verify labels specified in
zap-labelsexist in your repository - Check workflow permissions include
issues: write
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
See CHANGELOG.md for a list of changes and version history.
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions:
- Open an issue in this repository
- Check existing issues for solutions
- Review the workflow run logs for detailed error messages
Built with ❤️ using GitHub Actions and the GitHub GraphQL API.