| --- |
| # 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 |