proto-grove

Automated version management for moonrepo proto tools

v1 GitHub | CI Status

Quick Start

- uses: ageha734/proto-grove@v1
  with:
    github-token: ${{ secrets.GITHUB_TOKEN }}

That's it. proto-grove will parse your .prototools, check for updates, and create PRs.

Inputs Reference

Input Default Description
prototools-path .prototools Path to .prototools file
config-path .github/proto-grove.toml Configuration file path
github-token ${{ github.token }} Token for API access
branch-prefix deps/proto PR branch prefix
automerge-label automerge Label for auto-merge
labels dependencies Base labels for all PRs
dashboard true Enable dashboard issue
dry-run false Audit only mode
log-level info Log verbosity

Outputs

Output Description
outdated-count Number of outdated tools detected
prs-created Number of PRs created
cves-found Number of CVEs found
summary Markdown summary

Configuration

Create .github/proto-grove.toml:

[general]
create-dashboard = true
commit-message-prefix = "chore(deps):"

[automerge]
patch = true
minor = true
major = false
security-fix = true

[repos]
go = "golang/go"
kubectl = "kubernetes/kubernetes"
shfmt = "mvdan/sh"

[ignore]
tools = ["npm", "gcloud"]

[security]
enabled = true
ecosystems = ["Go", "PyPI", "npm", "crates.io"]

Version Constraint Support

Format Example Update Behavior
>=x.y.z >=1.7.7 Updates floor to latest
x.y.z 1.7.7 Pins to new exact
x.y 1.25 Latest within major.minor
x 22 Latest within major
stable - Skipped
"" - Skipped

Repository Resolution

proto-grove resolves upstream repos in order:

  1. Config overrides[repos] in proto-grove.toml
  2. Plugin TOML — Fetches plugin definition, reads git-url / github-repo
  3. GitHub search — Searches by tool name, sorted by stars

Security Scanning

Queries OSV.dev for known vulnerabilities in current versions. Checks multiple ecosystems (Go, PyPI, npm, crates.io, RubyGems). CVEs are included in PR descriptions and the dashboard issue.

Dependency Dashboard

When dashboard: true, proto-grove maintains a single GitHub issue titled "Dependency Dashboard" with:

Examples

Weekly update check

on:
  schedule:
    - cron: "0 9 * * 1"
  workflow_dispatch:

jobs:
  update:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: ageha734/proto-grove@v1
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}

Dry-run on PRs (audit only)

on:
  pull_request:
    paths: ['**/.*prototools']

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ageha734/proto-grove@v1
        id: grove
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          dry-run: 'true'
      - run: echo "Outdated: ${{ steps.grove.outputs.outdated-count }}"

Custom prototools path (chezmoi)

- uses: ageha734/proto-grove@v1
  with:
    prototools-path: 'dot_proto/dot_prototools'
    github-token: ${{ secrets.GITHUB_TOKEN }}