fix(workflows): prefer caller tag in do-release resolution
Handle Teacup workflow_call input forwarding gaps by using needs.prepare.outputs.tag as a fallback and normalizing %touch docker-compose.yml(string=...) wrappers before selecting the release tag.
This commit is contained in:
@@ -59,16 +59,40 @@ jobs:
|
|||||||
id: resolve-version
|
id: resolve-version
|
||||||
env:
|
env:
|
||||||
INPUT_TAG: ${{ inputs.tag }}
|
INPUT_TAG: ${{ inputs.tag }}
|
||||||
|
CALLER_TAG: ${{ needs.prepare.outputs.tag }}
|
||||||
DETECTED_TAG: ${{ steps.detect-tag.outputs.detected_tag }}
|
DETECTED_TAG: ${{ steps.detect-tag.outputs.detected_tag }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
# Try to use explicit input first
|
normalize_candidate() {
|
||||||
requested_tag="$(printf '%s' "${INPUT_TAG}" | sed 's/^[[:space:]]\+//; s/[[:space:]]\+$//')"
|
local raw="$1"
|
||||||
|
|
||||||
# Fall back to detected tag if input is empty
|
raw="$(printf '%s' "$raw" | sed 's/^[[:space:]]\+//; s/[[:space:]]\+$//')"
|
||||||
if [[ -z "$requested_tag" && -n "${DETECTED_TAG}" ]]; then
|
|
||||||
requested_tag="$DETECTED_TAG"
|
# Teacup can surface expression strings as %!t(string=value); unwrap it.
|
||||||
|
if [[ "$raw" =~ ^%\!t\(string=(.*)\)$ ]]; then
|
||||||
|
raw="${BASH_REMATCH[1]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
raw="$(printf '%s' "$raw" | sed 's/^[[:space:]]\+//; s/[[:space:]]\+$//')"
|
||||||
|
printf '%s' "$raw"
|
||||||
|
}
|
||||||
|
|
||||||
|
input_tag="$(normalize_candidate "${INPUT_TAG}")"
|
||||||
|
caller_tag="$(normalize_candidate "${CALLER_TAG}")"
|
||||||
|
detected_tag="$(normalize_candidate "${DETECTED_TAG}")"
|
||||||
|
|
||||||
|
# Try explicit input first.
|
||||||
|
requested_tag="$input_tag"
|
||||||
|
|
||||||
|
# Fall back to caller workflow output when workflow_call input forwarding is unreliable.
|
||||||
|
if [[ -z "$requested_tag" && -n "$caller_tag" ]]; then
|
||||||
|
requested_tag="$caller_tag"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fall back to detected tag if neither input nor caller tag is available.
|
||||||
|
if [[ -z "$requested_tag" && -n "$detected_tag" ]]; then
|
||||||
|
requested_tag="$detected_tag"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Try GITHUB_REF if still empty
|
# Try GITHUB_REF if still empty
|
||||||
@@ -82,8 +106,9 @@ jobs:
|
|||||||
tag="v${normalized}"
|
tag="v${normalized}"
|
||||||
else
|
else
|
||||||
echo "Error: Could not resolve release version" >&2
|
echo "Error: Could not resolve release version" >&2
|
||||||
echo " - inputs.tag: '$INPUT_TAG'" >&2
|
echo " - inputs.tag(raw): '$INPUT_TAG'" >&2
|
||||||
echo " - detected_tag: '${DETECTED_TAG}'" >&2
|
echo " - needs.prepare.outputs.tag(raw): '$CALLER_TAG'" >&2
|
||||||
|
echo " - detected_tag(raw): '${DETECTED_TAG}'" >&2
|
||||||
echo " - GITHUB_REF: '$GITHUB_REF'" >&2
|
echo " - GITHUB_REF: '$GITHUB_REF'" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ A `### Breaking` section is used in addition to Keep a Changelog's standard sect
|
|||||||
- Made `do-release` version resolution resilient to `workflow_call` input passing issues by adding a separate tag detection step that fetches and discovers the latest tag from origin as a fallback when `inputs.tag` is empty, enabling proper operation even when Gitea's workflow_call doesn't pass inputs through correctly.
|
- Made `do-release` version resolution resilient to `workflow_call` input passing issues by adding a separate tag detection step that fetches and discovers the latest tag from origin as a fallback when `inputs.tag` is empty, enabling proper operation even when Gitea's workflow_call doesn't pass inputs through correctly.
|
||||||
- Fixed version resolution in `do-release` workflow by moving version calculation before checkout, resolving from inputs/git tags, and always passing explicit version to `publish` action.
|
- Fixed version resolution in `do-release` workflow by moving version calculation before checkout, resolving from inputs/git tags, and always passing explicit version to `publish` action.
|
||||||
- Fixed tag detection in `do-release` to prioritize the tag at current HEAD (created by `prepare-release`) over the globally latest tag, ensuring correct version is detected when called from `prepare-release` workflow.
|
- Fixed tag detection in `do-release` to prioritize the tag at current HEAD (created by `prepare-release`) over the globally latest tag, ensuring correct version is detected when called from `prepare-release` workflow.
|
||||||
|
- Fixed `do-release` workflow_call resolution on Teacup runners by explicitly falling back to `needs.prepare.outputs.tag` and normalizing `%!t(string=...)` wrapped values before choosing a release tag.
|
||||||
- Made `publish` action version resolution more robust with clearer error messages when version input is missing and workflow is not running from a tag push.
|
- Made `publish` action version resolution more robust with clearer error messages when version input is missing and workflow is not running from a tag push.
|
||||||
- Fixed `do-release` workflow to always checkout the resolved release tag, eliminating conditional checkout logic that could skip the checkout when called from `prepare-release` workflow.
|
- Fixed `do-release` workflow to always checkout the resolved release tag, eliminating conditional checkout logic that could skip the checkout when called from `prepare-release` workflow.
|
||||||
- Pinned `securego/gosec` and `golang/govulncheck-action` to concrete version tags (`v2.22.4` and `v1.0.4`) so self-hosted Gitea runners can resolve them via direct git clone without relying on the GitHub Actions floating-tag API.
|
- Pinned `securego/gosec` and `golang/govulncheck-action` to concrete version tags (`v2.22.4` and `v1.0.4`) so self-hosted Gitea runners can resolve them via direct git clone without relying on the GitHub Actions floating-tag API.
|
||||||
|
|||||||
Reference in New Issue
Block a user