diff --git a/.github/workflows/update-cares.yml b/.github/workflows/update-cares.yml index 8ba2359603..317af7f623 100644 --- a/.github/workflows/update-cares.yml +++ b/.github/workflows/update-cares.yml @@ -50,12 +50,12 @@ jobs: exit 1 fi - LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/c-ares/c-ares/git/ref/tags/$LATEST_TAG" | jq -r '.object.sha') + LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/c-ares/c-ares/git/refs/tags/$LATEST_TAG" | jq -r '.object.sha') if [ -z "$LATEST_TAG_SHA" ] || [ "$LATEST_TAG_SHA" = "null" ]; then echo "Error: Could not fetch SHA for tag $LATEST_TAG" exit 1 fi - LATEST_SHA=$(curl -sL "https://api.github.com/repos/c-ares/c-ares/git/ref/tags/$LATEST_TAG_SHA" | jq -r '.object.sha') + LATEST_SHA=$(curl -sL "https://api.github.com/repos/c-ares/c-ares/git/tags/$LATEST_TAG_SHA" | jq -r '.object.sha') if [ -z "$LATEST_SHA" ] || [ "$LATEST_SHA" = "null" ]; then echo "Error: Could not fetch SHA for tag $LATEST_TAG @ $LATEST_TAG_SHA" exit 1 diff --git a/.github/workflows/update-libarchive.yml b/.github/workflows/update-libarchive.yml index 08fa6924a6..ed7c10b223 100644 --- a/.github/workflows/update-libarchive.yml +++ b/.github/workflows/update-libarchive.yml @@ -50,7 +50,7 @@ jobs: exit 1 fi - LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/libarchive/libarchive/git/ref/tags/$LATEST_TAG" | jq -r '.object.sha') + LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/libarchive/libarchive/git/refs/tags/$LATEST_TAG" | jq -r '.object.sha') if [ -z "$LATEST_TAG_SHA" ] || [ "$LATEST_TAG_SHA" = "null" ]; then echo "Error: Could not fetch SHA for tag $LATEST_TAG" exit 1 diff --git a/.github/workflows/update-libdeflate.yml b/.github/workflows/update-libdeflate.yml index 3ed757835b..95d86ecf0c 100644 --- a/.github/workflows/update-libdeflate.yml +++ b/.github/workflows/update-libdeflate.yml @@ -50,7 +50,7 @@ jobs: exit 1 fi - LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/ebiggers/libdeflate/git/ref/tags/$LATEST_TAG" | jq -r '.object.sha') + LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/ebiggers/libdeflate/git/refs/tags/$LATEST_TAG" | jq -r '.object.sha') if [ -z "$LATEST_TAG_SHA" ] || [ "$LATEST_TAG_SHA" = "null" ]; then echo "Error: Could not fetch SHA for tag $LATEST_TAG" exit 1 diff --git a/.github/workflows/update-lolhtml.yml b/.github/workflows/update-lolhtml.yml index 87056e759b..d6917baa91 100644 --- a/.github/workflows/update-lolhtml.yml +++ b/.github/workflows/update-lolhtml.yml @@ -50,7 +50,7 @@ jobs: exit 1 fi - LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/cloudflare/lol-html/git/ref/tags/$LATEST_TAG" | jq -r '.object.sha') + LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/cloudflare/lol-html/git/refs/tags/$LATEST_TAG" | jq -r '.object.sha') if [ -z "$LATEST_TAG_SHA" ] || [ "$LATEST_TAG_SHA" = "null" ]; then echo "Error: Could not fetch SHA for tag $LATEST_TAG" exit 1 diff --git a/.github/workflows/update-lshpack.yml b/.github/workflows/update-lshpack.yml index bed83f5c9f..8f986588f6 100644 --- a/.github/workflows/update-lshpack.yml +++ b/.github/workflows/update-lshpack.yml @@ -50,7 +50,7 @@ jobs: exit 1 fi - LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/litespeedtech/ls-hpack/git/ref/tags/$LATEST_TAG" | jq -r '.object.sha') + LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/litespeedtech/ls-hpack/git/refs/tags/$LATEST_TAG" | jq -r '.object.sha') if [ -z "$LATEST_TAG_SHA" ] || [ "$LATEST_TAG_SHA" = "null" ]; then echo "Error: Could not fetch SHA for tag $LATEST_TAG" exit 1 diff --git a/.github/workflows/update-zstd.yml b/.github/workflows/update-zstd.yml new file mode 100644 index 0000000000..a48020021c --- /dev/null +++ b/.github/workflows/update-zstd.yml @@ -0,0 +1,99 @@ +name: Update zstd + +on: + schedule: + - cron: "0 1 * * 0" + workflow_dispatch: + +jobs: + check-update: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - uses: actions/checkout@v4 + + - name: Check zstd 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/BuildZstd.cmake) + + if [ -z "$CURRENT_VERSION" ]; then + echo "Error: Could not find COMMIT line in BuildZstd.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 BuildZstd.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/facebook/zstd/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 + + LATEST_TAG_SHA=$(curl -sL "https://api.github.com/repos/facebook/zstd/git/refs/tags/$LATEST_TAG" | jq -r '.object.sha') + if [ -z "$LATEST_TAG_SHA" ] || [ "$LATEST_TAG_SHA" = "null" ]; then + echo "Error: Could not fetch SHA for tag $LATEST_TAG" + exit 1 + fi + LATEST_SHA=$(curl -sL "https://api.github.com/repos/facebook/zstd/git/tags/$LATEST_TAG_SHA" | jq -r '.object.sha') + if [ -z "$LATEST_SHA" ] || [ "$LATEST_SHA" = "null" ]; then + echo "Error: Could not fetch SHA for tag $LATEST_TAG @ $LATEST_TAG_SHA" + exit 1 + 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/BuildZstd.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/BuildZstd.cmake + commit-message: "deps: update zstd to ${{ steps.check-version.outputs.tag }} (${{ steps.check-version.outputs.latest }})" + title: "deps: update zstd to ${{ steps.check-version.outputs.tag }}" + delete-branch: true + branch: deps/update-zstd-${{ github.run_number }} + body: | + ## What does this PR do? + + Updates zstd to version ${{ steps.check-version.outputs.tag }} + + Compare: https://github.com/facebook/zstd/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-zstd.yml)