Skip to content

Commit c648ff5

Browse files
committed
docs: address sdk reference sync workflow feedback
1 parent f6844bb commit c648ff5

3 files changed

Lines changed: 187 additions & 75 deletions

File tree

.github/workflows/sdk-reference-sync.yml

Lines changed: 21 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ jobs:
8181
- name: Install Python dependencies
8282
run: pip install -r requirements.txt
8383

84-
- name: Determine sync parameters
84+
- name: Resolve generation inputs from trigger
8585
id: params
8686
env:
8787
EVENT_NAME: ${{ github.event_name }}
@@ -92,45 +92,7 @@ jobs:
9292
PAYLOAD_SDK: ${{ github.event.client_payload.sdk }}
9393
PAYLOAD_VERSION: ${{ github.event.client_payload.version }}
9494
PAYLOAD_LIMIT: ${{ github.event.client_payload.limit }}
95-
run: |
96-
if [[ "$EVENT_NAME" == "workflow_dispatch" ]]; then
97-
TRIGGER="workflow_dispatch"
98-
SDK="$INPUT_SDK"
99-
VERSION="$INPUT_VERSION"
100-
LIMIT="$INPUT_LIMIT"
101-
FORCE="$INPUT_FORCE"
102-
elif [[ "$EVENT_NAME" == "repository_dispatch" ]]; then
103-
TRIGGER="repository_dispatch (sdk-release)"
104-
SDK="$PAYLOAD_SDK"
105-
VERSION="${PAYLOAD_VERSION:-latest}"
106-
LIMIT="${PAYLOAD_LIMIT:-5}"
107-
FORCE="false"
108-
elif [[ "$EVENT_NAME" == "schedule" ]]; then
109-
TRIGGER="schedule (*/15 * * * *)"
110-
SDK="all"
111-
VERSION="all"
112-
LIMIT="3"
113-
FORCE="false"
114-
else
115-
TRIGGER="$EVENT_NAME"
116-
SDK="all"
117-
VERSION="latest"
118-
LIMIT="5"
119-
FORCE="false"
120-
fi
121-
122-
if [[ -z "$LIMIT" || "$LIMIT" == "0" ]]; then
123-
LIMIT_DISPLAY="No limit"
124-
else
125-
LIMIT_DISPLAY="$LIMIT"
126-
fi
127-
128-
echo "trigger=$TRIGGER" >> $GITHUB_OUTPUT
129-
echo "sdk=${SDK:-all}" >> $GITHUB_OUTPUT
130-
echo "version=${VERSION:-latest}" >> $GITHUB_OUTPUT
131-
echo "limit=${LIMIT:-5}" >> $GITHUB_OUTPUT
132-
echo "limit_display=$LIMIT_DISPLAY" >> $GITHUB_OUTPUT
133-
echo "force=${FORCE:-false}" >> $GITHUB_OUTPUT
95+
run: bash scripts/resolve-sdk-reference-sync-params.sh
13496

13597
- name: Generate SDK Reference
13698
working-directory: sdk-reference-generator
@@ -168,40 +130,24 @@ jobs:
168130
echo "changed_files=$CHANGED_FILES" >> $GITHUB_OUTPUT
169131
echo "total_mdx_files=$TOTAL_MDX_FILES" >> $GITHUB_OUTPUT
170132
171-
- name: Create pull request
133+
- name: Commit changes and manage pull request
172134
if: steps.changes.outputs.changes == 'true'
173-
id: cpr
174-
uses: peter-evans/create-pull-request@v8
175-
with:
176-
branch: automation/sdk-reference-sync
177-
delete-branch: true
178-
add-paths: |
179-
docs/sdk-reference
180-
docs.json
181-
author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
182-
committer: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
183-
commit-message: docs: sync SDK reference for ${{ steps.params.outputs.sdk }} ${{ steps.params.outputs.version }}
184-
title: docs: sync SDK reference for ${{ steps.params.outputs.sdk }} ${{ steps.params.outputs.version }}
185-
body: |
186-
## Summary
187-
This automated PR syncs generated SDK reference documentation.
188-
189-
## Trigger
190-
- Source: `${{ steps.params.outputs.trigger }}`
191-
- SDK: `${{ steps.params.outputs.sdk }}`
192-
- Version: `${{ steps.params.outputs.version }}`
193-
- Limit: `${{ steps.params.outputs.limit_display }}`
194-
- Force: `${{ steps.params.outputs.force }}`
195-
196-
## Changes
197-
- Updates generated reference files under `docs/sdk-reference/**`
198-
- Updates `docs.json` navigation when generation changes the docs tree
199-
- Changed files detected in this run: `${{ steps.changes.outputs.changed_files }}`
200-
- Total tracked MDX reference files after generation: `${{ steps.changes.outputs.total_mdx_files }}`
201-
202-
## Run Details
203-
- Workflow: `${{ github.workflow }}`
204-
- Run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
135+
id: pr
136+
env:
137+
GH_TOKEN: ${{ github.token }}
138+
BASE_BRANCH: ${{ github.ref_name }}
139+
BRANCH_NAME: automation/sdk-reference-sync
140+
TRIGGER: ${{ steps.params.outputs.trigger }}
141+
SDK_NAME: ${{ steps.params.outputs.sdk }}
142+
SDK_VERSION: ${{ steps.params.outputs.version }}
143+
LIMIT_DISPLAY: ${{ steps.params.outputs.limit_display }}
144+
FORCE: ${{ steps.params.outputs.force }}
145+
CHANGED_FILES: ${{ steps.changes.outputs.changed_files }}
146+
TOTAL_MDX_FILES: ${{ steps.changes.outputs.total_mdx_files }}
147+
WORKFLOW_NAME: ${{ github.workflow }}
148+
REPOSITORY: ${{ github.repository }}
149+
RUN_ID: ${{ github.run_id }}
150+
run: bash scripts/create-sdk-reference-sync-pr.sh
205151

206152
- name: Summary
207153
env:
@@ -213,8 +159,8 @@ jobs:
213159
CHANGES: ${{ steps.changes.outputs.changes }}
214160
CHANGED_FILES: ${{ steps.changes.outputs.changed_files }}
215161
TOTAL_MDX_FILES: ${{ steps.changes.outputs.total_mdx_files }}
216-
PR_OPERATION: ${{ steps.cpr.outputs.pull-request-operation }}
217-
PR_URL: ${{ steps.cpr.outputs.pull-request-url }}
162+
PR_OPERATION: ${{ steps.pr.outputs.operation }}
163+
PR_URL: ${{ steps.pr.outputs.url }}
218164
run: |
219165
echo "## SDK Reference Generation Complete" >> $GITHUB_STEP_SUMMARY
220166
echo "" >> $GITHUB_STEP_SUMMARY
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
5+
if [[ -z "${GITHUB_OUTPUT:-}" ]]; then
6+
echo "GITHUB_OUTPUT is required" >&2
7+
exit 1
8+
fi
9+
10+
if [[ -z "${GH_TOKEN:-}" ]]; then
11+
echo "GH_TOKEN is required" >&2
12+
exit 1
13+
fi
14+
15+
base_branch="${BASE_BRANCH:?BASE_BRANCH is required}"
16+
branch_name="${BRANCH_NAME:-automation/sdk-reference-sync}"
17+
sdk_name="${SDK_NAME:-all}"
18+
sdk_version="${SDK_VERSION:-latest}"
19+
trigger="${TRIGGER:-unknown}"
20+
limit_display="${LIMIT_DISPLAY:-5}"
21+
force="${FORCE:-false}"
22+
changed_files="${CHANGED_FILES:-0}"
23+
total_mdx_files="${TOTAL_MDX_FILES:-0}"
24+
workflow_name="${WORKFLOW_NAME:-}"
25+
repository="${REPOSITORY:-}"
26+
run_id="${RUN_ID:-}"
27+
28+
if [[ "$base_branch" == "$branch_name" ]]; then
29+
echo "Base branch and PR branch cannot be the same" >&2
30+
exit 1
31+
fi
32+
33+
git config user.name "github-actions[bot]"
34+
git config user.email "github-actions[bot]@users.noreply.github.com"
35+
36+
git switch -C "$branch_name"
37+
git add docs/sdk-reference docs.json
38+
39+
if git diff --staged --quiet; then
40+
{
41+
echo "operation=none"
42+
echo "url="
43+
} >> "$GITHUB_OUTPUT"
44+
exit 0
45+
fi
46+
47+
title="docs: sync SDK reference for ${sdk_name} ${sdk_version}"
48+
49+
git commit -m "$title"
50+
git push --force-with-lease origin "HEAD:${branch_name}"
51+
52+
body_file="$(mktemp)"
53+
trap 'rm -f "$body_file"' EXIT
54+
55+
cat <<EOF > "$body_file"
56+
## Summary
57+
This automated PR syncs generated SDK reference documentation.
58+
59+
## Trigger
60+
- Source: \`${trigger}\`
61+
- SDK: \`${sdk_name}\`
62+
- Version: \`${sdk_version}\`
63+
- Limit: \`${limit_display}\`
64+
- Force: \`${force}\`
65+
66+
## Changes
67+
- Updates generated reference files under \`docs/sdk-reference/**\`
68+
- Updates \`docs.json\` navigation when generation changes the docs tree
69+
- Changed files detected in this run: \`${changed_files}\`
70+
- Total tracked MDX reference files after generation: \`${total_mdx_files}\`
71+
72+
## Run Details
73+
- Workflow: \`${workflow_name}\`
74+
- Run: https://github.com/${repository}/actions/runs/${run_id}
75+
EOF
76+
77+
pr_info="$(gh pr list \
78+
--repo "$repository" \
79+
--base "$base_branch" \
80+
--head "$branch_name" \
81+
--state open \
82+
--json number,url \
83+
--jq '.[0]? | select(.) | [.number, .url] | @tsv')"
84+
85+
if [[ -n "$pr_info" ]]; then
86+
pr_number="${pr_info%%$'\t'*}"
87+
pr_url="${pr_info#*$'\t'}"
88+
gh pr edit "$pr_number" --repo "$repository" --title "$title" --body-file "$body_file" >/dev/null
89+
operation="updated"
90+
else
91+
pr_url="$(gh pr create \
92+
--repo "$repository" \
93+
--base "$base_branch" \
94+
--head "$branch_name" \
95+
--title "$title" \
96+
--body-file "$body_file")"
97+
operation="created"
98+
fi
99+
100+
{
101+
echo "operation=$operation"
102+
echo "url=$pr_url"
103+
} >> "$GITHUB_OUTPUT"
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
5+
if [[ -z "${GITHUB_OUTPUT:-}" ]]; then
6+
echo "GITHUB_OUTPUT is required" >&2
7+
exit 1
8+
fi
9+
10+
event_name="${EVENT_NAME:-}"
11+
input_sdk="${INPUT_SDK:-}"
12+
input_version="${INPUT_VERSION:-}"
13+
input_limit="${INPUT_LIMIT:-}"
14+
input_force="${INPUT_FORCE:-}"
15+
payload_sdk="${PAYLOAD_SDK:-}"
16+
payload_version="${PAYLOAD_VERSION:-}"
17+
payload_limit="${PAYLOAD_LIMIT:-}"
18+
19+
case "$event_name" in
20+
"workflow_dispatch")
21+
trigger="workflow_dispatch"
22+
sdk="${input_sdk:-all}"
23+
version="${input_version:-latest}"
24+
limit="${input_limit:-5}"
25+
force="${input_force:-false}"
26+
;;
27+
"repository_dispatch")
28+
trigger="repository_dispatch (sdk-release)"
29+
sdk="${payload_sdk:-all}"
30+
version="${payload_version:-latest}"
31+
limit="${payload_limit:-5}"
32+
force="false"
33+
;;
34+
"schedule")
35+
trigger="schedule (*/15 * * * *)"
36+
sdk="all"
37+
version="all"
38+
limit="3"
39+
force="false"
40+
;;
41+
*)
42+
trigger="${event_name:-unknown}"
43+
sdk="all"
44+
version="latest"
45+
limit="5"
46+
force="false"
47+
;;
48+
esac
49+
50+
if [[ -z "$limit" || "$limit" == "0" ]]; then
51+
limit_display="No limit"
52+
else
53+
limit_display="$limit"
54+
fi
55+
56+
{
57+
echo "trigger=$trigger"
58+
echo "sdk=$sdk"
59+
echo "version=$version"
60+
echo "limit=$limit"
61+
echo "limit_display=$limit_display"
62+
echo "force=$force"
63+
} >> "$GITHUB_OUTPUT"

0 commit comments

Comments
 (0)