Automated dependency PR management and maintenance releases for GitHub repositories.
Part of the DevOpsOrchestra suite alongside PipelineConductor.
- 🔍 Scan - Find Renovate/Dependabot PRs across organizations
- ✅ Review - Auto-approve dependency PRs based on Cedar policies
- 🔀 Merge - Auto-merge approved PRs with configurable strategies
- 🚀 Release - Create maintenance releases when dependencies are updated
- 📊 Graph - Analyze dependency relationships across repositories
- ⚡ GitHub Action - Automate everything with a reusable workflow
go install github.com/plexusone/versionconductor/cmd/versionconductor@latest# Set token
export GITHUB_TOKEN=ghp_your_token
# Scan for dependency PRs
versionconductor scan --orgs myorg
# Review with 5-day quarantine policy
versionconductor review --orgs myorg --profile quarantine --execute
# Merge approved PRs
versionconductor merge --orgs myorg --executeAdd automated dependency management to any repo:
# .github/workflows/go-dependency-automerge.yaml
name: Go Dependency Auto-Merge
on:
schedule:
- cron: "7,22,37,52 * * * *" # Every 15 minutes
workflow_dispatch:
inputs:
pr:
description: 'PR number to evaluate'
required: false
type: string
permissions:
contents: read
pull-requests: write
checks: read
statuses: read
jobs:
auto-merge:
uses: plexusone/.github/.github/workflows/go-dependency-automerge.yaml@main
with:
profile: 'quarantine'
min-age-days: 5
secrets: inheritSee GitHub Action Setup for details.
VersionConductor uses Cedar for policy-driven automation.
The default Go dependency policy enforces:
| Gate | Description |
|---|---|
| Author | Only dependabot[bot] or renovate[bot] |
| Files | Only go.mod and go.sum changed |
| Directives | No replace/exclude/toolchain changes |
| Version | Patch or minor updates only (no major) |
| Age | 5-day quarantine period |
| CI | All checks must pass |
Example Cedar policy:
@id("allow-patch-updates")
@action("AUTO_MERGE")
permit(
principal,
action == Action::"merge",
resource
)
when {
context.pr.author == "dependabot[bot]" &&
context.pr.onlyGoModFiles == true &&
context.goMod.hasDirectiveChanges == false &&
context.dependency.isPatch == true &&
context.pr.ageDays >= 5 &&
context.ci.allPassed == true
};
The @action annotation specifies the decision outcome when the policy matches.
See Cedar Policies for full documentation.
| Profile | Min Age | Patch | Minor | Major |
|---|---|---|---|---|
aggressive |
0 | Auto | Auto | Auto |
balanced |
24h | Auto | Auto | Manual |
conservative |
48h | Auto | Manual | Manual |
quarantine |
5 days | Auto | Auto | Manual |
versionconductor review --orgs myorg --profile quarantine --execute| Command | Description |
|---|---|
scan |
List open dependency PRs |
review |
Auto-approve PRs based on policy |
merge |
Merge approved PRs |
release |
Create maintenance releases |
graph |
Dependency graph analysis |
policy evaluate |
Evaluate policies against a PR |
All write commands are dry-run by default. Use --execute to perform actions.
Test policy evaluation locally or in CI:
# Evaluate a PR against policies
versionconductor policy evaluate --repo owner/repo --pr 123 --profile quarantine
# Post decision as PR comment
versionconductor policy evaluate --repo owner/repo --pr 123 --commentDecisions include outcomes like AUTO_MERGE, QUEUE_FOR_MERGE, MANUAL_REVIEW, or SECURITY_TEAM_REVIEW.
Full documentation available at plexusone.github.io/versionconductor
# Clone
git clone https://github.com/plexusone/versionconductor
cd versionconductor
# Build
go build ./cmd/versionconductor
# Test
go test -v ./...
# Lint
golangci-lint runMIT License - see LICENSE for details.