Skip to content

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Release Action

Release

Automated release workflow for multi-package repositories.

Overview

This action analyzes commits since the last release tag, automatically determines the version bump type (major/minor/patch), and:

  • PR mode: Creates a release PR
  • Direct mode: Commits and creates tags immediately
  • Merge mode: Creates tags + GitHub releases (after PR merge)

Features

  • Analyzes commits since last release tag
  • Auto-detects bump type from commit messages ([feat], [fix], breaking changes)
  • Supports manual version bump override
  • Three release modes: PR, direct, or merge
  • Skips release if no new commits since last release
  • Creates git tags with configurable prefix
  • Syncs Cargo.lock when Rust package versions are bumped

Usage

jobs:
release:
runs-on: ubuntu-lateststeps:
- uses: libnudget/release@v1.0.0with:
token: ${{ secrets.GITHUB_TOKEN }}packages: '[{"path": "lib/pkg1", "name": "pkg1"}, {"path": "lib/pkg2", "name": "pkg2"}]'

Inputs

InputDescriptionRequiredDefault
tokenGitHub token for API accessYes-
release_tokenSeparate token for PR creationNotoken
packagesJSON array of packages to releaseYes-
version_bumpManual version bump overrideNopatch
tag_prefixPrefix for git tagsNo``
release_modepr, direct, or mergeNopr

Outputs

OutputDescription
releasedWhether a release was created (true/false)
versionsJSON object with package versions

Package Format

[
{"path": "lib/pkg1", "name": "pkg1"},
{"path": "lib/pkg2", "name": "pkg2"}
]

Mode: PR

Creates a PR with version bumps. When a Rust package is bumped, the action also runs cargo metadata against the first changed package manifest so Cargo.lock is included in the same PR. Tag creation happens when PR is merged (via webhook or manual trigger).

- uses: libnudget/release@v1.0.0with:
token: ${{ secrets.GITHUB_TOKEN }}release_mode: pr

Mode: Direct

Commits version bumps to main, syncs Cargo.lock for Rust packages, and creates git tags immediately.

- uses: libnudget/release@v1.0.0with:
token: ${{ secrets.GITHUB_TOKEN }}release_mode: direct

Mode: Merge

Creates git tags and GitHub releases from merged PR versions. Use after PR merge to create tags and releases.

- uses: libnudget/release@v1.0.0with:
token: ${{ secrets.GITHUB_TOKEN }}release_mode: merge

Trigger Commands

Each mode can be triggered via GitHub CLI or workflow_dispatch:

PR Mode (create release PR)

gh workflow run release.yml -f version_bump=patch -f release_mode=pr
gh workflow run release.yml -f version_bump=minor -f release_mode=pr
gh workflow run release.yml -f version_bump=major -f release_mode=pr

Direct Mode (commit + tag immediately)

gh workflow run release.yml -f release_mode=direct

Merge Mode (create tags + releases after PR merge)

gh workflow run release.yml -f release_mode=merge

Full Example

name: Releaseon:
push:
branches: [main]paths: ['lib/**']pull_request:
types: [closed]branches: [main]workflow_dispatch:
inputs:
version_bump:
type: choiceoptions: [patch, minor, major]release_mode:
type: choiceoptions: [pr, direct, merge]jobs:
release-pr:
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'runs-on: ubuntu-lateststeps:
- uses: libnudget/release@v1.0.0with:
token: ${{ secrets.GITHUB_TOKEN }}packages: '[{"path": "lib/harper-core", "name": "harper-core"}, {"path": "lib/harper-ui", "name": "harper-ui"}]'version_bump: ${{ github.event.inputs.version_bump || 'patch' }}release_mode: ${{ github.event.inputs.release_mode || 'pr' }}create-tags:
if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == trueruns-on: ubuntu-lateststeps:
- uses: libnudget/release@v1.0.0with:
token: ${{ secrets.GITHUB_TOKEN }}packages: '[{"path": "lib/harper-core", "name": "harper-core"}, {"path": "lib/harper-ui", "name": "harper-ui"}]'release_mode: merge

Version Bump Logic

  1. Major: If any commit contains !: or BREAKING
  2. Minor: If any commit contains [feat] or feat:
  3. Patch: Default (or manual override)

License

MIT

About

Runs release automation.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors