Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 141 additions & 0 deletions .github/workflows/spec_update.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
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-java-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: Set up JDK 21
uses: actions/setup-java@v5
with:
java-version: '21'
distribution: 'zulu'
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.9.14'
- run: python -m pip install ply six packaging
- name: Get current time
uses: 1466587594/get-current-time@v2
id: current-time
with:
format: YYYY_MM_DD
utcOffset: "-08:00"
- name: Grant execute permissions
run: chmod +x gradlew && chmod +x update-submodules
- name: Set up submodules
run: ./update-submodules
- name: Update spec submodule
run: |
git submodule update --remote core/src/main/stone
- 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 core/src/main/stone | 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 core/src/main/stone
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 Stone
run: ./gradlew :core:generateStone

- 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 }}
Loading