mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
## What does this PR do?
Fixes the failing `update-lshpack.yml` GitHub Action that has been
consistently failing with the error: "Could not fetch SHA for tag v2.3.4
@ {SHA}".
## Root Cause
The workflow assumed all Git tags are annotated tags that need to be
dereferenced via the GitHub API. However, some tags (like lightweight
tags) point directly to commits and don't need dereferencing. When the
script tried to dereference a lightweight tag, the API call failed.
## Fix
This PR updates the workflow to:
1. **Check the tag type** before attempting to dereference
2. **For annotated tags** (`type="tag"`): dereference to get the commit
SHA via `/git/tags/{sha}`
3. **For lightweight tags** (`type="commit"`): use the SHA directly
since it already points to the commit
## Changes Made
- Updated `.github/workflows/update-lshpack.yml` to properly handle both
lightweight and annotated Git tags
- Added proper tag type checking before attempting to dereference tags
- Improved error messages to distinguish between tag types
## Testing
The workflow will now handle both types of Git tags properly:
- ✅ Annotated tags: properly dereferences to get commit SHA
- ✅ Lightweight tags: uses the tag SHA directly as commit SHA
This should resolve the consistent failures in the lshpack update
automation.
## Files Changed
- `.github/workflows/update-lshpack.yml`: Updated tag SHA resolution
logic
🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
117 lines
4.6 KiB
YAML
117 lines
4.6 KiB
YAML
name: Update lshpack
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 5 * * 0"
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
check-update:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Check lshpack version
|
|
id: check-version
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
# Extract the commit hash from the line after COMMIT
|
|
CURRENT_VERSION=$(awk '/[[:space:]]*COMMIT[[:space:]]*$/{getline; gsub(/^[[:space:]]+|[[:space:]]+$/,"",$0); print}' cmake/targets/BuildLshpack.cmake)
|
|
|
|
if [ -z "$CURRENT_VERSION" ]; then
|
|
echo "Error: Could not find COMMIT line in BuildLshpack.cmake"
|
|
exit 1
|
|
fi
|
|
|
|
# Validate that it looks like a git hash
|
|
if ! [[ $CURRENT_VERSION =~ ^[0-9a-f]{40}$ ]]; then
|
|
echo "Error: Invalid git hash format in BuildLshpack.cmake"
|
|
echo "Found: $CURRENT_VERSION"
|
|
echo "Expected: 40 character hexadecimal string"
|
|
exit 1
|
|
fi
|
|
|
|
echo "current=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
|
|
|
LATEST_RELEASE=$(curl -sL https://api.github.com/repos/litespeedtech/ls-hpack/releases/latest)
|
|
if [ -z "$LATEST_RELEASE" ]; then
|
|
echo "Error: Failed to fetch latest release from GitHub API"
|
|
exit 1
|
|
fi
|
|
|
|
LATEST_TAG=$(echo "$LATEST_RELEASE" | jq -r '.tag_name')
|
|
if [ -z "$LATEST_TAG" ] || [ "$LATEST_TAG" = "null" ]; then
|
|
echo "Error: Could not extract tag name from GitHub API response"
|
|
exit 1
|
|
fi
|
|
|
|
# Get the tag reference, which contains both SHA and type
|
|
TAG_REF=$(curl -sL "https://api.github.com/repos/litespeedtech/ls-hpack/git/refs/tags/$LATEST_TAG")
|
|
if [ -z "$TAG_REF" ]; then
|
|
echo "Error: Could not fetch tag reference for $LATEST_TAG"
|
|
exit 1
|
|
fi
|
|
|
|
LATEST_TAG_SHA=$(echo "$TAG_REF" | jq -r '.object.sha')
|
|
TAG_TYPE=$(echo "$TAG_REF" | jq -r '.object.type')
|
|
|
|
if [ -z "$LATEST_TAG_SHA" ] || [ "$LATEST_TAG_SHA" = "null" ]; then
|
|
echo "Error: Could not fetch SHA for tag $LATEST_TAG"
|
|
exit 1
|
|
fi
|
|
|
|
# If it's an annotated tag, we need to dereference it to get the commit SHA
|
|
# If it's a lightweight tag, the SHA already points to the commit
|
|
if [ "$TAG_TYPE" = "tag" ]; then
|
|
LATEST_SHA=$(curl -sL "https://api.github.com/repos/litespeedtech/ls-hpack/git/tags/$LATEST_TAG_SHA" | jq -r '.object.sha')
|
|
if [ -z "$LATEST_SHA" ] || [ "$LATEST_SHA" = "null" ]; then
|
|
echo "Error: Could not fetch commit SHA for annotated tag $LATEST_TAG"
|
|
exit 1
|
|
fi
|
|
else
|
|
# For lightweight tags, the SHA is already the commit SHA
|
|
LATEST_SHA="$LATEST_TAG_SHA"
|
|
fi
|
|
|
|
if ! [[ $LATEST_SHA =~ ^[0-9a-f]{40}$ ]]; then
|
|
echo "Error: Invalid SHA format received from GitHub"
|
|
echo "Found: $LATEST_SHA"
|
|
echo "Expected: 40 character hexadecimal string"
|
|
exit 1
|
|
fi
|
|
|
|
echo "latest=$LATEST_SHA" >> $GITHUB_OUTPUT
|
|
echo "tag=$LATEST_TAG" >> $GITHUB_OUTPUT
|
|
|
|
- name: Update version if needed
|
|
if: success() && steps.check-version.outputs.current != steps.check-version.outputs.latest
|
|
run: |
|
|
set -euo pipefail
|
|
# Handle multi-line format where COMMIT and its value are on separate lines
|
|
sed -i -E '/[[:space:]]*COMMIT[[:space:]]*$/{n;s/[[:space:]]*([0-9a-f]+)[[:space:]]*$/ ${{ steps.check-version.outputs.latest }}/}' cmake/targets/BuildLshpack.cmake
|
|
|
|
- name: Create Pull Request
|
|
if: success() && steps.check-version.outputs.current != steps.check-version.outputs.latest
|
|
uses: peter-evans/create-pull-request@v4
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
add-paths: |
|
|
cmake/targets/BuildLshpack.cmake
|
|
commit-message: "deps: update lshpack to ${{ steps.check-version.outputs.tag }} (${{ steps.check-version.outputs.latest }})"
|
|
title: "deps: update lshpack to ${{ steps.check-version.outputs.tag }}"
|
|
delete-branch: true
|
|
branch: deps/update-lshpack-${{ github.run_number }}
|
|
body: |
|
|
## What does this PR do?
|
|
|
|
Updates lshpack to version ${{ steps.check-version.outputs.tag }}
|
|
|
|
Compare: https://github.com/litespeedtech/ls-hpack/compare/${{ steps.check-version.outputs.current }}...${{ steps.check-version.outputs.latest }}
|
|
|
|
Auto-updated by [this workflow](https://github.com/oven-sh/bun/actions/workflows/update-lshpack.yml)
|