Skip to content

Commit a10108a

Browse files
Copilottechfish-11Copilotakku1139
authored
Add workflow to auto-create PR on upstream Misskey release (#3)
* Initial plan * Add workflow to auto-create PR on upstream Misskey release Co-authored-by: techfish-11 <135989741+techfish-11@users.noreply.github.com> Agent-Logs-Url: https://github.com/evex-dev/eveskey/sessions/68630c3d-b655-4a3d-9473-8b32fa6e642a * Update .github/workflows/upstream-release-sync.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update .github/workflows/upstream-release-sync.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * ci: upstream-release-sync: Avoid duplicate execution * ci: upstream-release-sync: remove unneeded GITHUB_TOKEN * ci: upstream-release-sync: Check less frequently * ci: upstream-release-sync: better check * ci: upstream-release-sync: better logic and fmt * ci: upstream-release-sync: remove unneeded if GitHub CLI returns `1` if the release is not found * ci: upstream-release-sync: fix to use x-access-token * ci: upstream-release-sync: fix check name * ci: upstream-release-sync: add more GH_TOKEN to (maybe) increase rate-limit * ci: upstream-release-sync: remove newline * ci: upstream-release-sync: allow to update workflows --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: techfish-11 <135989741+techfish-11@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Akari Tsuyukusa <akkun11.open@gmail.com>
1 parent ece9679 commit a10108a

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
name: Sync upstream release
2+
3+
on:
4+
schedule:
5+
- cron: '39 6 * * Tue'
6+
workflow_dispatch:
7+
8+
concurrency:
9+
group: upstream-release-sync
10+
11+
jobs:
12+
sync:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/create-github-app-token@v3
16+
id: app-token
17+
with:
18+
app-id: ${{ secrets.SYNC_AGENT_APP_ID }}
19+
private-key: ${{ secrets.SYNC_AGENT_PRIVATE_KEY }}
20+
21+
- name: Get latest upstream release
22+
id: upstream
23+
run: |
24+
tag=$(gh release view --repo misskey-dev/misskey --json tagName --jq '.tagName')
25+
echo "tag=$tag" >> "$GITHUB_OUTPUT"
26+
env:
27+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
28+
29+
- name: Check if PR already exists
30+
id: check
31+
run: |
32+
if gh pr list --repo ${{ github.repository }} --json isCrossRepository --state all --base develop --head upstream/${{ steps.upstream.outputs.tag }} | \
33+
jq -e '.[] | select(.isCrossRepository == false)' > /dev/null 2>&1
34+
then
35+
echo "exists=true" >> $GITHUB_OUTPUT
36+
else
37+
echo "exists=false" >> $GITHUB_OUTPUT
38+
fi
39+
env:
40+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
41+
42+
- name: Get GitHub App User ID
43+
id: get-user-id
44+
run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
45+
env:
46+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
47+
48+
- name: Setup git repository
49+
if: steps.check.outputs.exists == 'false'
50+
run: |
51+
git init --bare
52+
git config user.name "github-actions[bot]"
53+
git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]'
54+
git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com' git fetch --filter=blob:none origin develop
55+
56+
- name: Add upstream remote and fetch tag
57+
if: steps.check.outputs.exists == 'false'
58+
run: |
59+
git remote add upstream https://github.com/misskey-dev/misskey.git
60+
git fetch upstream tag "${{ steps.upstream.outputs.tag }}" --no-tags
61+
62+
- name: Create and push branch
63+
if: steps.check.outputs.exists == 'false'
64+
run: git push origin "refs/tags/${{ steps.upstream.outputs.tag }}:refs/heads/upstream/${{ steps.upstream.outputs.tag }}"
65+
66+
- name: Create PR
67+
if: steps.check.outputs.exists == 'false'
68+
run: |
69+
body=$(gh release view "${{ steps.upstream.outputs.tag }}" --repo misskey-dev/misskey --json body --jq '.body')
70+
if [[ -z "$body" ]]; then
71+
body="Sync upstream release: ${{ steps.upstream.outputs.tag }}"
72+
fi
73+
echo "$body" > /tmp/pr-body.txt
74+
gh pr create \
75+
--title "upstream: ${{ steps.upstream.outputs.tag }}" \
76+
--body-file /tmp/pr-body.txt \
77+
--head "upstream/${{ steps.upstream.outputs.tag }}" \
78+
--base develop
79+
env:
80+
GH_TOKEN: ${{ steps.app-token.outputs.token }}

0 commit comments

Comments
 (0)