mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
## Summary
- Fixed all `update-*.yml` workflows that were creating duplicate PRs
every week
## Problem
The update workflows (libarchive, zstd, cares, etc.) were using `${{
github.run_number }}` in the branch name, e.g.:
```yaml
branch: deps/update-libarchive-${{ github.run_number }}
```
This caused a new unique branch to be created on every workflow run, so
the `peter-evans/create-pull-request` action couldn't detect existing
PRs and would create duplicates.
**Evidence:** There are currently 8+ open duplicate PRs for libarchive
alone:
- #26432 deps: update libarchive to v3.8.5 (deps/update-libarchive-56)
- #26209 deps: update libarchive to v3.8.5 (deps/update-libarchive-55)
- #25955 deps: update libarchive to v3.8.5 (deps/update-libarchive-54)
- etc.
## Solution
Changed all workflows to use static branch names, e.g.:
```yaml
branch: deps/update-libarchive
```
This allows the action to:
1. Detect if an existing branch/PR already exists
2. Update the existing PR with new changes instead of creating a new one
3. Properly use `delete-branch: true` when the PR is merged
## Files Changed
- `.github/workflows/update-cares.yml`
- `.github/workflows/update-hdrhistogram.yml`
- `.github/workflows/update-highway.yml`
- `.github/workflows/update-libarchive.yml`
- `.github/workflows/update-libdeflate.yml`
- `.github/workflows/update-lolhtml.yml`
- `.github/workflows/update-lshpack.yml`
- `.github/workflows/update-root-certs.yml`
- `.github/workflows/update-sqlite3.yml`
- `.github/workflows/update-vendor.yml`
- `.github/workflows/update-zstd.yml`
## Test plan
- [x] Verified the change is syntactically correct
- [ ] Wait for next scheduled run of any workflow to verify it updates
existing PR instead of creating a new one
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
83 lines
2.5 KiB
YAML
83 lines
2.5 KiB
YAML
name: Daily Root Certs Update Check
|
|
|
|
on:
|
|
schedule:
|
|
- cron: "0 0 * * *" # Runs at 00:00 UTC every day
|
|
workflow_dispatch: # Allows manual trigger
|
|
|
|
jobs:
|
|
check-and-update:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Bun
|
|
uses: oven-sh/setup-bun@v1
|
|
with:
|
|
bun-version: latest
|
|
|
|
- name: Generate root certs and capture output
|
|
id: generate-certs
|
|
run: |
|
|
cd packages/bun-usockets/
|
|
OUTPUT=$(bun generate-root-certs.mjs -v)
|
|
echo "cert_output<<EOF" >> $GITHUB_ENV
|
|
echo "$OUTPUT" >> $GITHUB_ENV
|
|
echo "EOF" >> $GITHUB_ENV
|
|
|
|
- name: Check for changes and stage files
|
|
id: check-changes
|
|
run: |
|
|
if [[ -n "$(git status --porcelain)" ]]; then
|
|
echo "Found changes, staging modified files..."
|
|
git config --global user.name "github-actions[bot]"
|
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
|
|
# Get list of modified files and add them
|
|
git status --porcelain | while read -r status file; do
|
|
# Remove leading status and whitespace
|
|
file=$(echo "$file" | sed 's/^.* //')
|
|
echo "Adding changed file: $file"
|
|
git add "$file"
|
|
done
|
|
|
|
echo "changes=true" >> $GITHUB_OUTPUT
|
|
|
|
# Store the list of changed files
|
|
CHANGED_FILES=$(git status --porcelain)
|
|
echo "changed_files<<EOF" >> $GITHUB_ENV
|
|
echo "$CHANGED_FILES" >> $GITHUB_ENV
|
|
echo "EOF" >> $GITHUB_ENV
|
|
else
|
|
echo "No changes detected"
|
|
echo "changes=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Create Pull Request
|
|
if: steps.check-changes.outputs.changes == 'true'
|
|
uses: peter-evans/create-pull-request@v5
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
commit-message: "update(root_certs): Update root certificates $(date +'%Y-%m-%d')"
|
|
title: "update(root_certs) $(date +'%Y-%m-%d')"
|
|
body: |
|
|
Automated root certificates update
|
|
|
|
${{ env.cert_output }}
|
|
|
|
## Changed Files:
|
|
```
|
|
${{ env.changed_files }}
|
|
```
|
|
branch: certs/update-root-certs
|
|
base: main
|
|
delete-branch: true
|
|
labels:
|
|
- "automation"
|
|
- "root-certs"
|