blob: 554810621e8c4f69362e6e438436607593c36b6e [file] [log] [blame]
---
# SPDX-FileCopyrightText: 2026 The Linux Foundation
# SPDX-License-Identifier: Apache-2.0
name: "GitHub Release Action"
description: "Creates GitHub releases with artifacts using the gh CLI tool"
inputs:
release-targets:
description: "Make targets to build release artifacts"
required: false
default: "release"
artifact-glob:
description: "Glob pattern for release artifacts"
required: false
default: "release/*"
github-token:
description: "GitHub token for authentication"
required: true
draft:
description: "Create a draft release"
required: false
default: "false"
runs:
using: "composite"
steps:
- name: Create GitHub Release
shell: bash
env:
GITHUB_TOKEN: ${{ inputs.github-token }}
RELEASE_TARGETS: ${{ inputs.release-targets }}
ARTIFACT_GLOB: ${{ inputs.artifact-glob }}
DRAFT_INPUT: ${{ inputs.draft }}
run: |
set -eu -o pipefail
# Determine version from git tags on HEAD
VERSION=""
for tag in $(git tag --points-at HEAD); do
if echo "$tag" | grep -qE '^v?[0-9]+\.[0-9]+\.[0-9]+(-dev[0-9]+)?$'; then
VERSION="$tag"
break
fi
done
if [ -z "$VERSION" ]; then
echo "ERROR: No SemVer tag (vX.Y.Z, X.Y.Z, or vX.Y.Z-devN) found on HEAD"
exit 1
fi
echo "Version: $VERSION"
# Build release artifacts
make $RELEASE_TARGETS
# Generate SHA256 checksums for all artifacts
CHECKSUM_FILE="checksums-sha256.txt"
sha256sum $ARTIFACT_GLOB > "$CHECKSUM_FILE"
echo "Generated checksums:"
cat "$CHECKSUM_FILE"
# Determine if this should be a draft release
DRAFT_FLAG=""
if [[ "$VERSION" == *"-dev"* ]] || [[ "$DRAFT_INPUT" == "true" ]]; then
DRAFT_FLAG="--draft"
echo "Creating draft release"
fi
# Get release notes from latest commit message
RELEASE_NOTES="$(git log -1 --pretty=%B)"
# Create GitHub release
gh release create "$VERSION" \
$ARTIFACT_GLOB \
"$CHECKSUM_FILE" \
--title "$VERSION" \
--notes "$RELEASE_NOTES" \
--generate-notes \
$DRAFT_FLAG