forked from dropbox/dropbox-sdk-python
-
Notifications
You must be signed in to change notification settings - Fork 0
135 lines (126 loc) · 4.58 KB
/
Copy pathspec_update.yml
File metadata and controls
135 lines (126 loc) · 4.58 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
131
132
133
134
135
name: Spec Update
on:
workflow_dispatch:
repository_dispatch:
types: [spec_update]
permissions:
id-token: write
contents: read
jobs:
Update:
runs-on: ubuntu-latest
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::082972943155:role/oidc-github-dropbox-dropbox-sdk-python-repo
aws-region: us-west-2
- name: Fetch GitHub App credentials from Secrets Manager
uses: aws-actions/aws-secretsmanager-get-secrets@v3
with:
secret-ids: |
SDK_UPDATER,sdk-updater-github-app
parse-json-secrets: true
- name: Generate GitHub App installation token
id: app-token
uses: actions/create-github-app-token@v3
with:
client-id: ${{ env.SDK_UPDATER_CLIENT_ID }}
private-key: ${{ env.SDK_UPDATER_PRIVATE_KEY }}
- uses: actions/checkout@v7
- name: Setup Python environment
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Get current time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY_MM_DD
utcOffset: "-08:00"
- name: Update Modules
run: |
git submodule init
git submodule update --remote --recursive
- name: Generate Branch Name
id: git-branch
env:
FORMATTED_TIME: ${{ steps.current-time.outputs.formattedTime }}
run: |
echo "branch=spec_update_${FORMATTED_TIME}" >> "$GITHUB_OUTPUT"
- name: Generate Num Diffs
id: git-diff-num
run: |
diffs=$(git diff --submodule spec | grep ">" | wc -l)
echo "Number of Spec diffs: $diffs"
echo "num-diff=$diffs" >> "$GITHUB_OUTPUT"
- name: Generate Diff
id: git-diff
env:
NUM_DIFF: ${{ steps.git-diff-num.outputs.num-diff }}
run: |
cd spec
gitdiff=$(git log -n "$NUM_DIFF" --pretty="format:%n %H %n%n %b")
commit="Automated Spec Update $gitdiff"
while true; do
delimiter="SPEC_UPDATE_EOF_$(python -c 'import uuid; print(uuid.uuid4())')"
if ! grep -Fxq "$delimiter" <<< "$commit"; then
break
fi
done
{
printf 'commit<<%s\n' "$delimiter"
printf '%s\n' "$commit"
printf '%s\n' "$delimiter"
} >> "$GITHUB_OUTPUT"
cd ..
- name: Generate New Routes
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
python generate_base_client.py
- name: Close Old Pull Requests
id: close-old-prs
if: steps.git-diff-num.outputs.num-diff != 0
run: |
closed=""
while read -r pr_num; do
echo "Closing old PR #$pr_num"
gh pr close "$pr_num" --delete-branch
closed="${closed:+$closed,}$pr_num"
done < <(gh pr list --label "automated-spec-update" --state open --json number --jq '.[].number')
echo "closed=$closed" >> "$GITHUB_OUTPUT"
shell: bash
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
- name: Create Pull Request
id: create-pr
uses: peter-evans/create-pull-request@v8
if: steps.git-diff-num.outputs.num-diff != 0
with:
token: ${{ steps.app-token.outputs.token }}
commit-message: |
${{ steps.git-diff.outputs.commit}}
branch: ${{ steps.git-branch.outputs.branch }}
delete-branch: true
title: 'Automated Spec Update - ${{ steps.current-time.outputs.formattedTime }}'
body: |
${{ steps.git-diff.outputs.commit}}
base: 'main'
labels: |
automated-spec-update
draft: false
- name: Comment on closed PRs
if: steps.create-pr.outputs.pull-request-number && steps.close-old-prs.outputs.closed
run: |
IFS=',' read -ra prs <<< "${{ steps.close-old-prs.outputs.closed }}"
for pr_num in "${prs[@]}"; do
gh pr comment "$pr_num" --body "Superseded by #${{ steps.create-pr.outputs.pull-request-number }}"
done
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
# - name: Enable Pull Request Automerge
# if: steps.create-pr.outputs.pull-request-number
# run: gh pr merge --merge --auto "${{ steps.create-pr.outputs.pull-request-number }}"
# env:
# GH_TOKEN: ${{ steps.app-token.outputs.token }}