Skip to content

Auto-release updates #521

Auto-release updates

Auto-release updates #521

Workflow file for this run

name: Auto-release updates
on:
schedule:
- cron: "0 */6 * * *" # every 6 hours
workflow_dispatch:
permissions:
contents: write
pull-requests: write
actions: write
jobs:
refresh:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
# Use the existing chore/changelog-refresh branch (if any) as the
# comparison baseline instead of main. This prevents re-triggering the
# Mintlify agent every 6 hours for releases that were already processed
# but whose PR has not been merged yet. When the PR is merged or closed
# (with delete-branch: true below), the branch disappears and the next
# release is detected normally.
- name: Use existing changelog refresh branch as baseline
run: |
if git ls-remote --exit-code --heads origin chore/changelog-refresh >/dev/null 2>&1; then
git fetch origin chore/changelog-refresh
git checkout origin/chore/changelog-refresh -- docs/changelog/ || true
echo "Baseline restored from chore/changelog-refresh branch."
else
echo "No chore/changelog-refresh branch; using main as baseline."
fi
- name: Regenerate docs/changelog from GitHub releases
run: node scripts/generate-changelog.js
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CHANGELOG_CACHE_TTL_SECONDS: "0"
CHANGELOG_CHANGES_FILE: /tmp/changelog-changes.json
- name: Read changelog changes
id: changes
run: |
if [ ! -f /tmp/changelog-changes.json ] || [ "$(jq length /tmp/changelog-changes.json)" -eq 0 ]; then
echo "No changelog changes detected."
echo "pages=" >> "$GITHUB_OUTPUT"
echo "has_sdk_updates=false" >> "$GITHUB_OUTPUT"
exit 0
fi
PAGES=$(jq -r '[.[].page] | join(" ")' /tmp/changelog-changes.json)
echo "pages=${PAGES}" >> "$GITHUB_OUTPUT"
# Read ALL latest versions from the cache file (updated by generate-changelog.js).
# This ensures the pre-release workflow always gets every SDK's current version,
# not just the ones whose changelog page happened to change in this run.
CACHE=scripts/.changelog-cache.json
echo "restate_version=$(jq -r '.repos.restate.releases[0].tag_name // empty' "$CACHE" | sed 's/^v//')" >> "$GITHUB_OUTPUT"
echo "ts_version=$(jq -r '.repos["sdk-typescript"].releases[0].tag_name // empty' "$CACHE" | sed 's/^v//')" >> "$GITHUB_OUTPUT"
echo "python_version=$(jq -r '.repos["sdk-python"].releases[0].tag_name // empty' "$CACHE" | sed 's/^v//')" >> "$GITHUB_OUTPUT"
echo "java_version=$(jq -r '.repos["sdk-java"].releases[0].tag_name // empty' "$CACHE" | sed 's/^v//')" >> "$GITHUB_OUTPUT"
echo "go_version=$(jq -r '.repos["sdk-go"].releases[0].tag_name // empty' "$CACHE" | sed 's/^v//')" >> "$GITHUB_OUTPUT"
echo "rust_version=$(jq -r '.repos["sdk-rust"].releases[0].tag_name // empty' "$CACHE" | sed 's/^v//')" >> "$GITHUB_OUTPUT"
# Check if any non-operator SDK page changed
HAS=$(jq -r '[.[] | select(.page != "operator") | .latestVersion // empty | select(. != "")] | if length > 0 then "true" else "false" end' /tmp/changelog-changes.json)
echo "has_sdk_updates=${HAS}" >> "$GITHUB_OUTPUT"
echo "Changes detected:"
jq -r '.[] | " \(.label) \(.latestVersion) — \(.latestReleaseUrl)"' /tmp/changelog-changes.json
- name: Trigger pre-release workflow
if: steps.changes.outputs.has_sdk_updates == 'true'
continue-on-error: true
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
ARGS=""
RESTATE_V="${{ steps.changes.outputs.restate_version }}"
TS_V="${{ steps.changes.outputs.ts_version }}"
PYTHON_V="${{ steps.changes.outputs.python_version }}"
JAVA_V="${{ steps.changes.outputs.java_version }}"
GO_V="${{ steps.changes.outputs.go_version }}"
RUST_V="${{ steps.changes.outputs.rust_version }}"
[ -n "$RESTATE_V" ] && ARGS="$ARGS -f restateVersion=$RESTATE_V"
[ -n "$TS_V" ] && ARGS="$ARGS -f sdkTypescriptVersion=$TS_V"
[ -n "$PYTHON_V" ] && ARGS="$ARGS -f sdkPythonVersion=$PYTHON_V"
[ -n "$JAVA_V" ] && ARGS="$ARGS -f sdkJavaVersion=$JAVA_V"
[ -n "$GO_V" ] && ARGS="$ARGS -f sdkGoVersion=$GO_V"
[ -n "$RUST_V" ] && ARGS="$ARGS -f sdkRustVersion=$RUST_V"
echo "Dispatching pre-release workflow with:${ARGS}"
gh workflow run pre-release.yml $ARGS
sleep 5
RUN_URL=$(gh run list --workflow pre-release.yml --limit 1 --json url --jq '.[0].url')
echo "Pre-release workflow run: ${RUN_URL}"
- name: Open or update changelog refresh PR
uses: peter-evans/create-pull-request@v6
with:
commit-message: "chore: refresh changelog from GitHub releases"
title: "chore: refresh changelog"
body: |
Automated changelog refresh from GitHub releases across the
restatedev org. Review the rendered `docs/changelog.mdx` and merge
when the output looks right.
branch: chore/changelog-refresh
delete-branch: true
add-paths: docs/changelog
reviewers: gvdongen
labels: |
automated
changelog