-
Notifications
You must be signed in to change notification settings - Fork 16
126 lines (108 loc) · 4.26 KB
/
generate.yml
File metadata and controls
126 lines (108 loc) · 4.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
name: 🔄 Generate SDK
on:
push:
branches:
- main
paths:
- '.github/workflows/generate.yml'
- 'scripts/generate-sdk.mts'
- 'scripts/generate-types.mts'
- 'scripts/generate-strict-types.mts'
schedule:
# At 07:23 on every day-of-week from Monday through Friday.
- cron: '23 7 * * 1-5'
workflow_dispatch:
inputs:
force:
description: 'Force regeneration even if no changes detected'
required: false
default: false
type: boolean
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
fetch_and_update:
name: Sync OpenAPI definition
runs-on: ubuntu-latest
permissions:
contents: write # To push generated SDK code
pull-requests: write # To create PRs for review
outputs:
has_changes: ${{ steps.check.outputs.has_changes }}
steps:
- name: Random delay
if: github.event_name == 'schedule'
run: |
# Add random delay between 0-10 minutes for scheduled runs
delay=$((RANDOM % 600))
echo "Sleeping for $delay seconds..."
sleep $delay
- uses: SocketDev/socket-registry/.github/actions/setup-and-install@bbe46386c0a2bc6baefd02916234956a38e622d5 # main
- name: Configure push credentials
env:
GH_TOKEN: ${{ github.token }}
run: git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git"
- uses: SocketDev/socket-registry/.github/actions/setup-git-signing@bbe46386c0a2bc6baefd02916234956a38e622d5 # main
with:
gpg-private-key: ${{ secrets.BOT_GPG_PRIVATE_KEY }}
- name: Generate SDK
# Fetches OpenAPI, generates types/api.d.ts and src/types-strict.ts
run: pnpm run generate-sdk
- name: Check for changes
id: check
run: |
if [ -n "$(git status --porcelain)" ]; then
echo "has_changes=true" >> $GITHUB_OUTPUT
else
echo "has_changes=false" >> $GITHUB_OUTPUT
fi
- name: Commit and push changes
if: steps.check.outputs.has_changes == 'true'
run: |
git checkout -b automated/open-api
git add .
git commit -m "fix(openapi): sync with openapi definition"
git push origin automated/open-api -fu
- name: Create Pull Request
if: steps.check.outputs.has_changes == 'true'
env:
GH_TOKEN: ${{ github.token }}
run: |
# Check if PR already exists
existing_pr=$(gh pr list --head automated/open-api --json number --jq '.[0].number' || echo "")
if [ -z "$existing_pr" ]; then
gh pr create \
--head automated/open-api \
--base main \
--title "Sync with OpenAPI definition" \
--body "## OpenAPI Sync
The OpenAPI definition in the API has been updated. This PR automatically:
- Downloads the latest OpenAPI specification
- Regenerates TypeScript types (types/api.d.ts)
- Regenerates strict TypeScript types (src/types-strict.ts)
- Updates SDK method signatures if needed
### What's Changed
See the file changes below for specific updates to the API types, strict types, and methods.
**Please review carefully for any breaking changes in the API.**" \
--label "dependencies" \
--label "automated"
else
echo "PR #$existing_pr already exists, skipping creation"
fi
# Pushes made with GITHUB_TOKEN don't trigger other workflows.
# Close/reopen the PR to generate a pull_request.reopened event,
# which triggers required CI and enterprise audit workflows.
- name: Trigger CI checks
if: steps.check.outputs.has_changes == 'true'
env:
GH_TOKEN: ${{ github.token }}
run: |
pr_number=$(gh pr list --head automated/open-api --json number --jq '.[0].number')
if [ -n "$pr_number" ]; then
gh pr close "$pr_number"
gh pr reopen "$pr_number"
fi
- uses: SocketDev/socket-registry/.github/actions/cleanup-git-signing@bbe46386c0a2bc6baefd02916234956a38e622d5 # main
if: always()