Compare commits
1 Commits
burn/1500-
...
fix/1413
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3fbcdd606a |
@@ -1,89 +0,0 @@
|
||||
# Duplicate PR Prevention System
|
||||
|
||||
## Overview
|
||||
|
||||
The Nexus uses a multi-layer system to prevent duplicate PRs for the same issue.
|
||||
|
||||
## Components
|
||||
|
||||
### 1. Pre-flight Check (CI)
|
||||
|
||||
The `.github/workflows/pr-duplicate-check.yml` workflow runs on every PR creation and checks if a PR already exists for the same issue.
|
||||
|
||||
**How it works:**
|
||||
1. Extracts issue numbers from PR title and body
|
||||
2. Queries Gitea API for existing PRs referencing those issues
|
||||
3. Fails the check if duplicates are found
|
||||
4. Provides links to existing PRs for review
|
||||
|
||||
### 2. Cleanup Script
|
||||
|
||||
The `scripts/cleanup-duplicate-prs.sh` script helps clean up existing duplicates:
|
||||
- Lists all PRs for a given issue
|
||||
- Identifies duplicates
|
||||
- Provides commands to close duplicates
|
||||
|
||||
### 3. Milestone Checker
|
||||
|
||||
The `bin/check_duplicate_milestones.py` script prevents duplicate milestones:
|
||||
- Scans all milestones in the repo
|
||||
- Identifies duplicates by title
|
||||
- Reports for manual cleanup
|
||||
|
||||
## Usage
|
||||
|
||||
### Check for Duplicates Before Creating PR
|
||||
|
||||
```bash
|
||||
# Check if issue already has PRs
|
||||
curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"https://forge.alexanderwhitestone.com/api/v1/repos/Timmy_Foundation/the-nexus/pulls?state=open" \
|
||||
| jq '.[] | select(.body | contains("#ISSUE_NUMBER"))'
|
||||
```
|
||||
|
||||
### Clean Up Existing Duplicates
|
||||
|
||||
```bash
|
||||
# List PRs for issue
|
||||
./scripts/cleanup-duplicate-prs.sh --issue 1128
|
||||
|
||||
# Close duplicates (keep newest)
|
||||
./scripts/cleanup-duplicate-prs.sh --issue 1128 --close-duplicates
|
||||
```
|
||||
|
||||
## Example: Issue #1500
|
||||
|
||||
Issue #1500 documented that the pre-flight check successfully prevented a duplicate PR for #1474.
|
||||
|
||||
**What happened:**
|
||||
1. Dispatch attempted to work on #1474
|
||||
2. Pre-flight check found 2 existing PRs (#1495, #1493)
|
||||
3. System prevented creating a 3rd duplicate
|
||||
4. Issue #1500 was filed as an observation
|
||||
|
||||
**Result:** The system worked as intended.
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Always check before creating PRs** — use the pre-flight check
|
||||
2. **Close duplicates promptly** — don't let them accumulate
|
||||
3. **Reference issues in PRs** — makes duplicate detection possible
|
||||
4. **Use descriptive branch names** — helps identify purpose
|
||||
5. **Review existing PRs first** — don't assume you're the first
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "Duplicate PR detected" error
|
||||
|
||||
This means a PR already exists for the issue. Options:
|
||||
1. Review the existing PR and contribute to it
|
||||
2. Close your PR if it's truly a duplicate
|
||||
3. Update your PR to address a different aspect
|
||||
|
||||
### Pre-flight check not running
|
||||
|
||||
Check that `.github/workflows/pr-duplicate-check.yml` exists and is enabled.
|
||||
|
||||
### False positives
|
||||
|
||||
The check looks for issue numbers in PR body. If you're referencing an issue without intending to fix it, use "Refs #" instead of "Fixes #".
|
||||
31
docs/issue-1413-verification.md
Normal file
31
docs/issue-1413-verification.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Issue #1413 Verification
|
||||
|
||||
Status: already implemented on `main`
|
||||
|
||||
## Acceptance criteria check
|
||||
|
||||
1. ✅ `deploy.sh` comment for `nexus-main` uses port `8765`
|
||||
- Evidence: `deploy.sh:3`
|
||||
2. ✅ `deploy.sh` comment for `nexus-staging` uses port `8766`
|
||||
- Evidence: `deploy.sh:4`
|
||||
3. ✅ `docker-compose.yml` confirms those bindings
|
||||
- Evidence: `docker-compose.yml:9` is `"8765:8765"`
|
||||
- Evidence: `docker-compose.yml:15` is `"8766:8765"`
|
||||
|
||||
## Why no code fix was needed
|
||||
|
||||
The issue describes stale comments (`4200` / `4201`), but the current `main` branch already contains the corrected comments:
|
||||
|
||||
```text
|
||||
# Usage: ./deploy.sh — rebuild and restart nexus-main (port 8765)
|
||||
# ./deploy.sh staging — rebuild and restart nexus-staging (port 8766)
|
||||
```
|
||||
|
||||
## Value added in this PR
|
||||
|
||||
- adds `tests/test_deploy_script_ports.py` so future drift between `deploy.sh` comments and `docker-compose.yml` is caught automatically
|
||||
- documents the verification outcome here so the issue can be closed without reimplementing an already-merged fix
|
||||
|
||||
## Recommendation
|
||||
|
||||
Close issue #1413 as already implemented.
|
||||
25
tests/test_deploy_script_ports.py
Normal file
25
tests/test_deploy_script_ports.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
NEXUS_ROOT = Path(__file__).resolve().parent.parent
|
||||
|
||||
|
||||
def test_deploy_sh_header_comments_match_live_ports():
|
||||
deploy_sh = (NEXUS_ROOT / "deploy.sh").read_text()
|
||||
assert "(port 8765)" in deploy_sh, "deploy.sh should document nexus-main on port 8765"
|
||||
assert "(port 8766)" in deploy_sh, "deploy.sh should document nexus-staging on port 8766"
|
||||
assert "4200" not in deploy_sh, "stale 4200 comment should not remain in deploy.sh"
|
||||
assert "4201" not in deploy_sh, "stale 4201 comment should not remain in deploy.sh"
|
||||
|
||||
|
||||
def test_deploy_sh_comments_match_docker_compose_bindings():
|
||||
deploy_sh = (NEXUS_ROOT / "deploy.sh").read_text().splitlines()
|
||||
compose = (NEXUS_ROOT / "docker-compose.yml").read_text()
|
||||
|
||||
main_comment = next(line for line in deploy_sh if "nexus-main" in line and "port" in line)
|
||||
staging_comment = next(line for line in deploy_sh if "nexus-staging" in line and "port" in line)
|
||||
|
||||
assert '"8765:8765"' in compose, "docker-compose should expose nexus-main on 8765"
|
||||
assert '"8766:8765"' in compose, "docker-compose should expose nexus-staging via host port 8766"
|
||||
assert "8765" in main_comment, "nexus-main deploy comment should cite 8765"
|
||||
assert "8766" in staging_comment, "nexus-staging deploy comment should cite 8766"
|
||||
Reference in New Issue
Block a user