lfreleng-actions/🏷️ Unified Tag Validation

Validates tags for versioning compliance (SemVer/CalVer) and cryptographic signatures (SSH/GPG)

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jul 10, 2026
License
None

Pinned Snippet

workflow.ymlSHA-pinned
uses: lfreleng-actions/tag-validate-action@bc8043ec074495cc8cdf351623ebab3675d563cf # v1.0.4

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
tag_locationPath to tag - supports two formats: 1. Remote: ORG/REPO/TAG (e.g., lfreleng-actions/tag-validate-action/v0.1.0) 2. Local: PATH/TO/REPO/TAG (e.g., ./my-repo/v1.0.0) Local paths must contain a .git directoryno""
tag_stringTag string to validate (version format only, no signature check)no""
require_typeRequired tag type: semver, calver, both, none (comma-separated for multiple). When omitted or set to 'none', any format is accepted (including customtags). Examples: 'semver', 'semver,calver', 'none'.no""
require_signedSignature requirement (comma-separated for multiple, e.g., 'gpg,ssh'): - gpg: Require verified GPG signature - ssh: Require verified SSH signature - gpg-unverifiable: Accept GPG signature without verification - unsigned: Must be unsigned Omit for no signature requirement.no""
require_githubRequires that the signing key is registered to a GitHub account. Requires a GitHub token.nofalse
require_gerritRequires that the signing key is registered to a Gerrit account. Set to 'true' to auto-detect Gerrit server from GitHub org (pattern: gerrit.[org].org), or provide a specific Gerrit server hostname/URL (e.g., 'gerrit.onap.org').nofalse
require_ownerGitHub username(s) or email address(es) that must own the signing key (comma or space-separated for multiple, e.g., 'octocat,monalisa' or 'user@example.com'). Requires a GitHub token. When specified, require_github is implied.no""
gerrit_usernameGerrit username for HTTP authentication. Required for Gerrit servers that restrict public access to user key information. Can also be set via GERRIT_USERNAME environment variable. WARNING: Do NOT store this as a GitHub secret. GitHub Actions masks secret values in all outputs, which will cause the username to appear as '***' in the step summary if it matches the key owner's username. Only the password is sensitive.no""
gerrit_passwordGerrit HTTP password for authentication. This must be an HTTP password generated from your Gerrit account settings (Settings > HTTP Credentials), NOT your SSO/LDAP password. Required when gerrit_username is provided. Can also be set via GERRIT_PASSWORD environment variable.no""
reject_developmentReject development/pre-release tags (tags containing alpha, beta, rc, dev, pre, snapshot, nightly, canary, or preview). When enabled, validation will fail for any tag identified as a development version.nofalse
enforce_incrementRequire the tag to be strictly greater than the highest existing comparable tag in the repository (SemVer/CalVer aware). Prevents accidental re-release of older versions, e.g. stale tags pushed from out-of-sync forks. Requires a repository context (tag_location or tag push event); not supported with tag_string.nofalse
require_branchRequire the tag to point to a commit reachable from the given branch. Provide a branch name (e.g. 'main'), or 'true' to auto-detect the repository default branch. Empty, 'false', 'no', or '0' disable the check. Requires a repository context (tag_location or tag push event); not supported with tag_string.no""
require_recentRequire the tag to have been created recently. Provide 'true' for the default 3-minute window, or a number of minutes. Uses the tag object's creation timestamp, so an annotated (or signed) tag is required; lightweight tags fail this check. Empty, 'false', 'no', or '0' disable the check. Requires a repository context; not supported with tag_string.nofalse
require_latestRequire the tag to point to the current tip commit of the target branch (require_branch when it names a branch, otherwise the repository default branch). Prevents releases from older commits. Requires a repository context; not supported with tag_string.nofalse
permit_missingAllow missing tags without errornofalse
tokenGitHub token for authenticated API calls and private repository accessno""
github_server_urlGitHub server URL for git operations (supports GitHub Enterprise Server). If not provided, falls back to GITHUB_SERVER_URL environment variable or https://github.comno""
debugEnable debug output in action logs. This enables both bash command tracing (set -x) and Python verbose logging (--verbose flag), providing comprehensive debugging information including git operations, API calls, and internal validation steps.nofalse
use_local_actionUse local repository action/code instead of the PyPI package. Set to 'true' when testing changes in a fork or branch before merging.nofalse
upload_jsonUpload validation results as JSON artifact to the workflow run. The artifact includes detailed validation information in JSON format.notrue
json_upload_formatJSON artifact format: 'compact', 'pretty', or 'both'. Compact format is single-line, pretty format is indented for readability.nopretty
github_step_summaryWrite validation summary to GitHub Actions step summary. Automatically detects GitHub Actions environment.notrue
namedescription
validSet true if tag passes validation checks
tag_typeDetected tag type (semver|calver|both|other|unknown)
signing_typeDetected signing type (gpg|ssh|unsigned|lightweight|invalid|gpg-unverifiable)
development_tagSet true if development/pre-release tag detected
version_prefixSet true if tag has version prefix (v or V)
tag_nameThe tag name being validated
incrementalSet true if the tag is strictly greater than the highest existing tag in the repository (empty when increment check not performed)
latest_tagHighest existing comparable tag found in the repository during the increment check (empty when increment check not performed)
recentSet true if the tag was created within the require_recent window (empty when the tag age check not performed)
latestSet true if the tag points to the current tip of the target branch (empty when the latest-commit check not performed)
artifact_pathPath to the JSON artifact file (if uploaded)
artifact_suffixUnique suffix for artifact naming (to avoid conflicts)