-
Notifications
You must be signed in to change notification settings - Fork 16
130 lines (108 loc) · 4.44 KB
/
regenerate_models.yaml
File metadata and controls
130 lines (108 loc) · 4.44 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
127
128
129
130
name: Regenerate models from OpenAPI spec
on:
workflow_dispatch:
inputs:
docs_pr_number:
description: "PR number in apify/apify-docs that triggered this workflow"
required: true
type: string
docs_pr_branch:
description: "Branch name in apify/apify-docs PR"
required: true
type: string
concurrency:
group: regenerate-models-${{ inputs.docs_pr_number }}
cancel-in-progress: true
jobs:
regenerate-models:
name: Regenerate models
runs-on: ubuntu-latest
steps:
- name: Checkout apify-client-python
uses: actions/checkout@v6
- name: Checkout apify-docs at PR branch
uses: actions/checkout@v6
with:
repository: apify/apify-docs
ref: ${{ inputs.docs_pr_branch }}
path: apify-docs
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
cache-dependency-path: apify-docs/package-lock.json
- name: Build OpenAPI spec bundle
run: |
cd apify-docs
corepack enable
npm ci --force
npm run openapi:build:json
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Set up uv
uses: astral-sh/setup-uv@v6
- name: Generate models from local spec
run: |
# Temporarily point datamodel-codegen to the local spec instead of the remote URL
sed -i 's|^url = ".*"|input = "apify-docs/static/api/openapi.json"|' pyproject.toml
uv run datamodel-codegen
git checkout -- pyproject.toml
- name: Check for changes
id: changes
run: |
if git diff --exit-code src/apify_client/_models.py; then
echo "No changes in generated models"
echo "changed=false" >> "$GITHUB_OUTPUT"
else
echo "Models have changed"
echo "changed=true" >> "$GITHUB_OUTPUT"
fi
- name: Configure git
if: steps.changes.outputs.changed == 'true'
run: |
git config user.name "apify-service-account"
git config user.email "apify-service-account@users.noreply.github.com"
- name: Create or update PR
if: steps.changes.outputs.changed == 'true'
id: pr
run: |
BRANCH="chore/update-models-docs-pr-${{ inputs.docs_pr_number }}"
DOCS_PR_URL="https://github.com/apify/apify-docs/pull/${{ inputs.docs_pr_number }}"
git checkout -b "$BRANCH"
git add src/apify_client/_models.py
git commit -m "chore: update generated models from apify-docs PR #${{ inputs.docs_pr_number }}"
git push --force origin "$BRANCH"
# Check if PR already exists
EXISTING_PR=$(gh pr list --head "$BRANCH" --json url --jq '.[0].url' 2>/dev/null || true)
if [ -n "$EXISTING_PR" ]; then
echo "PR already exists: $EXISTING_PR"
echo "pr_url=$EXISTING_PR" >> "$GITHUB_OUTPUT"
echo "created=false" >> "$GITHUB_OUTPUT"
else
BODY="This PR updates the auto-generated Pydantic models based on OpenAPI specification changes in [apify-docs PR #${{ inputs.docs_pr_number }}]($DOCS_PR_URL).
## Changes
- Regenerated \`src/apify_client/_models.py\` using \`datamodel-codegen\`
## Source
- apify-docs PR: $DOCS_PR_URL"
PR_URL=$(gh pr create \
--title "chore: update generated models from apify-docs PR #${{ inputs.docs_pr_number }}" \
--body "$BODY" \
--head "$BRANCH" \
--base master)
echo "Created PR: $PR_URL"
echo "pr_url=$PR_URL" >> "$GITHUB_OUTPUT"
echo "created=true" >> "$GITHUB_OUTPUT"
fi
env:
GITHUB_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
- name: Comment on apify-docs PR
if: steps.changes.outputs.changed == 'true' && steps.pr.outputs.created == 'true'
run: |
gh pr comment "${{ inputs.docs_pr_number }}" \
--repo apify/apify-docs \
--body "A PR to update the Python client models has been created in apify-client-python: ${{ steps.pr.outputs.pr_url }}
This was automatically triggered by OpenAPI specification changes in this PR."
env:
GITHUB_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}