1111 issue_comment :
1212 types : [created]
1313
14+ permissions :
15+ contents : read
16+
1417jobs :
1518 init :
1619 runs-on : ubuntu-latest
2730
2831 steps :
2932 - name : Get repository from pull request comment
30- uses : actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7 .0.1
33+ uses : actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 .0.0
3134 id : get-repository
3235 with :
3336 github-token : ${{secrets.GITHUB_TOKEN}}
5457 require : write
5558
5659 - name : Add reaction on start
57- uses : peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 .0.0
60+ uses : peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 .0.0
5861 with :
5962 token : ${{ secrets.COMMAND_BOT_PAT }}
6063 repository : ${{ github.event.repository.full_name }}
@@ -76,11 +79,11 @@ jobs:
7679 fi
7780
7881 - name : Init branch
79- uses : xt0rted/pull-request-comment-branch@d97294d304604fa98a2600a6e2f916a84b596dc7 # v1
82+ uses : xt0rted/pull-request-comment-branch@e8b8daa837e8ea7331c0003c9c316a64c6d8b0b1 # v3.0.0
8083 id : comment-branch
8184
8285 - name : Add reaction on failure
83- uses : peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 .0.0
86+ uses : peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 .0.0
8487 if : failure()
8588 with :
8689 token : ${{ secrets.COMMAND_BOT_PAT }}
@@ -94,14 +97,16 @@ jobs:
9497
9598 steps :
9699 - name : Restore cached git repository
97- uses : buildjet/cache@e376f15c6ec6dc595375c78633174c7e5f92dc0e # v3
100+ uses : buildjet/cache@3e70d19e31d6a8030aeddf6ed8dbe601f94d09f4 # v4.0.2
98101 with :
99102 path : .git
100103 key : git-repo
101104
102105 - name : Checkout ${{ needs.init.outputs.head_ref }}
103- uses : actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
106+ uses : actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
104107 with :
108+ # Needed to allow force push later
109+ persist-credentials : true
105110 token : ${{ secrets.COMMAND_BOT_PAT }}
106111 fetch-depth : 0
107112 ref : ${{ needs.init.outputs.head_ref }}
@@ -115,23 +120,57 @@ jobs:
115120 uses : skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
116121 id : package-engines-versions
117122 with :
118- fallbackNode : ' ^20 '
119- fallbackNpm : ' ^10 '
123+ fallbackNode : ' ^24 '
124+ fallbackNpm : ' ^11.3 '
120125
121126 - name : Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }}
122- uses : actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4 .0.3
127+ uses : actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6 .0.0
123128 with :
124129 node-version : ${{ steps.package-engines-versions.outputs.nodeVersion }}
125130 cache : npm
126131
127132 - name : Set up npm ${{ steps.package-engines-versions.outputs.npmVersion }}
128133 run : npm i -g 'npm@${{ steps.package-engines-versions.outputs.npmVersion }}'
129-
134+
130135 - name : Rebase to ${{ needs.init.outputs.base_ref }}
131136 if : ${{ contains(needs.init.outputs.arg1, 'rebase') }}
132137 run : |
133138 git fetch origin '${{ needs.init.outputs.base_ref }}:${{ needs.init.outputs.base_ref }}'
134- git rebase 'origin/${{ needs.init.outputs.base_ref }}'
139+
140+ # Start the rebase
141+ git rebase 'origin/${{ needs.init.outputs.base_ref }}' || {
142+ # Handle rebase conflicts in a loop
143+ while [ -d .git/rebase-merge ] || [ -d .git/rebase-apply ]; do
144+ echo "Handling rebase conflict..."
145+
146+ # Remove and checkout /dist and /js folders from the base branch
147+ if [ -d "dist" ]; then
148+ rm -rf dist
149+ git checkout origin/${{ needs.init.outputs.base_ref }} -- dist/ 2>/dev/null || echo "No dist folder in base branch"
150+ fi
151+ if [ -d "js" ]; then
152+ rm -rf js
153+ git checkout origin/${{ needs.init.outputs.base_ref }} -- js/ 2>/dev/null || echo "No js folder in base branch"
154+ fi
155+
156+ # Stage all changes
157+ git add .
158+
159+ # Check if there are any changes after resolving conflicts
160+ if git diff --cached --quiet; then
161+ echo "No changes after conflict resolution, skipping commit"
162+ git rebase --skip
163+ else
164+ echo "Changes found, continuing rebase without editing commit message"
165+ git -c core.editor=true rebase --continue
166+ fi
167+
168+ # Break if rebase is complete
169+ if [ ! -d .git/rebase-merge ] && [ ! -d .git/rebase-apply ]; then
170+ break
171+ fi
172+ done
173+ }
135174
136175 - name : Install dependencies & build
137176 env :
@@ -146,7 +185,7 @@ jobs:
146185 run : |
147186 git add '${{ github.workspace }}${{ needs.init.outputs.git_path }}'
148187 git commit --signoff -m 'chore(assets): Recompile assets'
149-
188+
150189 - name : Commit fixup
151190 if : ${{ contains(needs.init.outputs.arg1, 'fixup') }}
152191 run : |
@@ -163,14 +202,18 @@ jobs:
163202
164203 - name : Push normally
165204 if : ${{ !contains(needs.init.outputs.arg1, 'rebase') && !contains(needs.init.outputs.arg1, 'amend') }}
166- run : git push origin '${{ needs.init.outputs.head_ref }}'
205+ env :
206+ HEAD_REF : ${{ needs.init.outputs.head_ref }}
207+ run : git push origin "$HEAD_REF"
167208
168209 - name : Force push
169210 if : ${{ contains(needs.init.outputs.arg1, 'rebase') || contains(needs.init.outputs.arg1, 'amend') }}
170- run : git push --force origin '${{ needs.init.outputs.head_ref }}'
211+ env :
212+ HEAD_REF : ${{ needs.init.outputs.head_ref }}
213+ run : git push --force-with-lease origin "$HEAD_REF"
171214
172215 - name : Add reaction on failure
173- uses : peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 .0.0
216+ uses : peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 .0.0
174217 if : failure()
175218 with :
176219 token : ${{ secrets.COMMAND_BOT_PAT }}
0 commit comments