feat: implement fork-friendly CI/CD with opt-in mechanism (#476)
- CI/CD disabled by default in forks to conserve resources - Users can enable via ENABLE_CI_IN_FORK repository variable - Added comprehensive Fork Guide documentation - Updated README with Contributing section - Created automation script for future implementations Benefits: - Saves GitHub Actions minutes across 1,600+ forks - Cleaner fork experience for contributors - Full control for fork owners - PR validation still runs automatically BREAKING CHANGE: CI/CD no longer runs automatically in forks. Fork owners must set ENABLE_CI_IN_FORK=true to enable workflows. Co-authored-by: Brian <bmadcode@gmail.com> Co-authored-by: PinkyD <paulbeanjr@gmail.com>
This commit is contained in:
104
.github/FORK_GUIDE.md
vendored
Normal file
104
.github/FORK_GUIDE.md
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
# Fork Guide - CI/CD Configuration
|
||||
|
||||
## CI/CD in Forks
|
||||
|
||||
By default, CI/CD workflows are **disabled in forks** to conserve GitHub Actions resources and provide a cleaner fork experience.
|
||||
|
||||
### Why This Approach?
|
||||
|
||||
- **Resource efficiency**: Prevents unnecessary GitHub Actions usage across 1,600+ forks
|
||||
- **Clean fork experience**: No failed workflow notifications in your fork
|
||||
- **Full control**: Enable CI/CD only when you actually need it
|
||||
- **PR validation**: Your changes are still fully tested when submitting PRs to the main repository
|
||||
|
||||
## Enabling CI/CD in Your Fork
|
||||
|
||||
If you need to run CI/CD workflows in your fork, follow these steps:
|
||||
|
||||
1. Navigate to your fork's **Settings** tab
|
||||
2. Go to **Secrets and variables** → **Actions** → **Variables**
|
||||
3. Click **New repository variable**
|
||||
4. Create a new variable:
|
||||
- **Name**: `ENABLE_CI_IN_FORK`
|
||||
- **Value**: `true`
|
||||
5. Click **Add variable**
|
||||
|
||||
That's it! CI/CD workflows will now run in your fork.
|
||||
|
||||
## Disabling CI/CD Again
|
||||
|
||||
To disable CI/CD workflows in your fork, you can either:
|
||||
|
||||
- **Delete the variable**: Remove the `ENABLE_CI_IN_FORK` variable entirely, or
|
||||
- **Set to false**: Change the `ENABLE_CI_IN_FORK` value to `false`
|
||||
|
||||
## Alternative Testing Options
|
||||
|
||||
You don't always need to enable CI/CD in your fork. Here are alternatives:
|
||||
|
||||
### Local Testing
|
||||
|
||||
Run tests locally before pushing:
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
npm ci
|
||||
|
||||
# Run linting
|
||||
npm run lint
|
||||
|
||||
# Run format check
|
||||
npm run format:check
|
||||
|
||||
# Run validation
|
||||
npm run validate
|
||||
|
||||
# Build the project
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Pull Request CI
|
||||
|
||||
When you open a Pull Request to the main repository:
|
||||
- All CI/CD workflows automatically run
|
||||
- You get full validation of your changes
|
||||
- No configuration needed
|
||||
|
||||
### GitHub Codespaces
|
||||
|
||||
Use GitHub Codespaces for a full development environment:
|
||||
- All tools pre-configured
|
||||
- Same environment as CI/CD
|
||||
- No local setup required
|
||||
|
||||
## Frequently Asked Questions
|
||||
|
||||
### Q: Will my PR be tested even if CI is disabled in my fork?
|
||||
|
||||
**A:** Yes! When you open a PR to the main repository, all CI/CD workflows run automatically, regardless of your fork's settings.
|
||||
|
||||
### Q: Can I selectively enable specific workflows?
|
||||
|
||||
**A:** The `ENABLE_CI_IN_FORK` variable enables all workflows. For selective control, you'd need to modify individual workflow files.
|
||||
|
||||
### Q: Do I need to enable CI in my fork to contribute?
|
||||
|
||||
**A:** No! Most contributors never need to enable CI in their forks. Local testing and PR validation are sufficient for most contributions.
|
||||
|
||||
### Q: Will disabling CI affect my ability to merge PRs?
|
||||
|
||||
**A:** No! PR merge requirements are based on CI runs in the main repository, not your fork.
|
||||
|
||||
### Q: Why was this implemented?
|
||||
|
||||
**A:** With over 1,600 forks of BMAD-METHOD, this saves thousands of GitHub Actions minutes monthly while maintaining code quality standards.
|
||||
|
||||
## Need Help?
|
||||
|
||||
- Join our [Discord Community](https://discord.gg/gk8jAdXWmj) for support
|
||||
- Check the [Contributing Guide](../README.md#contributing) for more information
|
||||
- Open an issue if you encounter any problems
|
||||
|
||||
---
|
||||
|
||||
> 💡 **Pro Tip**: This fork-friendly approach is particularly valuable for projects using AI/LLM tools that create many experimental commits, as it prevents unnecessary CI runs while maintaining code quality standards.
|
||||
1
.github/workflows/discord.yaml
vendored
1
.github/workflows/discord.yaml
vendored
@@ -14,6 +14,7 @@ name: Discord Notification
|
||||
jobs:
|
||||
notify:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.repository.fork != true || vars.ENABLE_CI_IN_FORK == 'true'
|
||||
steps:
|
||||
- name: Notify Discord
|
||||
uses: sarisia/actions-status-discord@v1
|
||||
|
||||
2
.github/workflows/format-check.yaml
vendored
2
.github/workflows/format-check.yaml
vendored
@@ -7,6 +7,7 @@ name: format-check
|
||||
jobs:
|
||||
prettier:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.repository.fork != true || vars.ENABLE_CI_IN_FORK == 'true'
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -25,6 +26,7 @@ jobs:
|
||||
|
||||
eslint:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.repository.fork != true || vars.ENABLE_CI_IN_FORK == 'true'
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
1
.github/workflows/manual-release.yaml
vendored
1
.github/workflows/manual-release.yaml
vendored
@@ -20,6 +20,7 @@ permissions:
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event.repository.fork != true || vars.ENABLE_CI_IN_FORK == 'true'
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
Reference in New Issue
Block a user