ghup is a command-line tool for managing GitHub repository content and refs (branches and tags) directly via the GitHub API, with a focus on enabling verified commits from build systems such as GitHub Actions or Jenkins.
- Create, update, and delete repository content with verified commits via GitHub API
- Create and update both lightweight and annotated tags
- Synchronise arbitrary git refs, including fast-forward merges
- Resolve commit references to full SHAs
- Open pull requests for changes
- Smart context detection for repository and branch information
- 12-Factor app style configuration via flags, environment variables, or files
- No external dependencies required
- A GitHub token with
contents=writeandmetadata=readpermissions (plusworkflows=writeif managing GitHub workflows) - For verified commits, use a token derived from GitHub App credentials
Download binaries for all platforms from GitHub Releases.
go install github.com/nexthink-oss/ghup@latestbrew install isometry/tap/ghup- uses: nexthink-oss/ghup/actions/setup@v1ghup can be configured through:
- Command-line flags
- Environment variables (
GHUP_*, with various fallbacks for CI tools) - Configuration files (various formats supported)
When run from a git repository, ghup automatically detects:
- Repository owner and name from the GitHub remote
- Current branch
- Git user information for commit trailers
See full documentation for details on configuration options.
# Update a file
ghup content -b feature-branch -u local/file.txt:remote/path.txt
# Create a pull request with changes
ghup content -b new-feature -u config.json --pr-title "Update configuration"
# Create a pull request with auto-merge using merge method
ghup content -b feature-branch -u config.json --pr-title "Auto-merge update" --pr-auto-merge merge
# Create a pull request with squash auto-merge
ghup content -b feature-branch -u config.json --pr-title "Squash merge update" --pr-auto-merge squash
# Update existing PR title with new commits
ghup content -b feature-branch -u config.json --pr-title "Updated configuration" --pr-update
# Add, update, and delete files in one commit
ghup content -b updates \
-u local/new-file.txt:new-file.txt \
-d old-file.txt \
-c main:existing-file.txt:new-location.txtSee content command documentation for more examples.
# Create an annotated tag
ghup tag v1.0.0 --commitish main
# Create a lightweight tag
ghup tag v1.0.0 --lightweightSee tag command documentation for more examples.
# Fast-forward a branch to match another
ghup update-ref -s main refs/heads/production
# Update GitHub Actions-style tags after a release
ghup update-ref -s tags/v1.2.3 tags/v1.2 tags/v1See update-ref command documentation for more examples.
# Resolve a branch to its SHA
ghup resolve main
# Find all tags pointing to a specific commit
ghup resolve abc123 --tagsSee resolve command documentation for more examples.
# Mark dev deployment as pending
ghup deployment -c main --environment=dev/us-east-1 --state=pending
# Mark production deployment as as succesful
ghup deployment -c main --environment=prod/us-east-2 --state=success --production# View configuration and environment information
ghup debugSee debug command documentation for more details.
ghup offers ready-to-use GitHub Actions to simplify integration within your workflows:
The nexthink-oss/ghup/actions/setup action installs ghup and makes it available in your workflow:
- uses: nexthink-oss/ghup/actions/setup@main
with:
version: v0.12.0 # optional, defaults to 'latest'The nexthink-oss/ghup/actions/fast-forward action updates refs to match a source commit:
- uses: nexthink-oss/ghup/actions/fast-forward@main
with:
source: main
target: refs/heads/production
# force: false # optional, defaults to false
env:
GITHUB_TOKEN: ${{ github.token }}Use this action to implement true fast-forward merges or to create/update tags from specific commits.
See individual action READMEs for detailed usage examples and parameters.
Detailed documentation for all commands is available in the docs/cmd directory:
ghup: General command usage and configurationghup content: Managing repository contentghup deployment: Creating deployments and deployment statusesghup tag: Creating and managing tagsghup update-ref: Updating git refsghup resolve: Resolving commit-ish referencesghup debug: Debugging configuration and environment
All contributions in the spirit of the project are welcome! Open an issue or pull request to get started.