Refactor cell #14
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: PR_COMMENT_CI | |
on: | |
issue_comment: | |
types: [created] | |
jobs: | |
check: | |
runs-on: ubuntu-latest | |
outputs: | |
next_action: ${{ steps.get-action.outputs.next_action }} | |
if: ${{ github.event.issue.pull_request }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
sparse-checkout: | | |
.github/CODEOWNERS | |
sparse-checkout-cone-mode: false | |
- uses: actions/github-script@v7 | |
id: get-action | |
with: | |
script: | | |
const user = context.payload.comment.user.login | |
core.debug(`user: ${user}`) | |
const fs = require('fs') | |
const CODEOWNERS = fs.readFileSync('.github/CODEOWNERS', 'utf8') | |
core.debug(`CODEOWNERS: ${CODEOWNERS}`) | |
let isReviewer = false; | |
CODEOWNERS.match(/@\w+/g).forEach((owner) => { | |
if (owner === `@${user}`) { | |
isReviewer = true | |
} | |
}) | |
let next_action = '' | |
if (isReviewer) { | |
const body = context.payload.comment.body | |
core.info(`body: ${body}`) | |
if (body.startsWith('/update-common')) { | |
next_action='update-common' | |
} | |
if (body.startsWith('/update-snapshot')) { | |
next_action='update-snapshot' | |
} | |
if(next_action){ | |
await github.rest.reactions.createForIssueComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: context.payload.comment.id, | |
content: 'rocket', | |
}) | |
} | |
} else { | |
core.warning('You are not collaborator'); | |
} | |
core.info(`next_action: ${next_action}`) | |
core.setOutput('next_action', next_action) | |
update-common: | |
needs: check | |
runs-on: ubuntu-latest | |
if: ${{ needs.check.outputs.next_action == 'update-common' }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.PERSONAL_TOKEN }} | |
- name: gh checkout pr | |
env: | |
GH_TOKEN: ${{ secrets.PERSONAL_TOKEN }} | |
run: gh pr checkout ${{ github.event.issue.number }} --recurse-submodules | |
- run: | | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
- run: git submodule update --remote --merge | |
- name: Commit Common | |
run: | | |
git add . | |
git commit -m "chore: update common" | |
git push | |
update-snapshot: | |
needs: check | |
runs-on: ubuntu-latest | |
if: ${{ needs.check.outputs.next_action == 'update-snapshot' }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.PERSONAL_TOKEN }} | |
- name: gh checkout pr | |
env: | |
GH_TOKEN: ${{ secrets.PERSONAL_TOKEN }} | |
run: gh pr checkout ${{ github.event.issue.number }} --recurse-submodules | |
- name: merge develop | |
run: | | |
git config --local user.email "github-actions[bot]@users.noreply.github.com" | |
git config --local user.name "github-actions[bot]" | |
git merge develop --no-commit || true | |
- name: check conflicts | |
run: | | |
conflict_count=$(git status | grep -c 'both modified:') | |
working_tree_clean=$(git status | grep -c 'nothing to commit, working tree clean') | |
csr_snap_conflict=$(git status | grep 'both modified:' | grep -c 'csr.test.jsx.snap') | |
ssr_snap_conflict=$(git status | grep 'both modified:' | grep -c 'ssr.test.jsx.snap') | |
common_conflict=$(git status | grep 'both modified:' | grep -c '_common') | |
conflicts_sum=$((csr_snap_conflict + ssr_snap_conflict + common_conflict)) | |
if [ "$working_tree_clean" -eq "1" ]; then | |
echo "nothing to commit, working tree clean" | |
exit 0 | |
fi | |
if [ "$conflict_count" -gt "0" ]&&[ "$conflicts_sum" -eq "0" ]; then | |
echo "Unknown conflict " | |
git status | |
exit 1 | |
fi | |
if [ "$csr_snap_conflict" -eq "1" ];then | |
git checkout --theirs test/snap/__snapshots__/csr.test.jsx.snap | |
fi | |
if [ "$ssr_snap_conflict" -eq "1" ];then | |
git checkout --theirs test/snap/__snapshots__/ssr.test.jsx.snap | |
fi | |
if [ "$common_conflict" -eq "1" ];then | |
git checkout --theirs src/_common | |
fi | |
git commit -am "chore: merge develop" | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
- run: npm install | |
- run: npm run test:update | |
- name: Commit Snapshot | |
run: | | |
working_tree_clean=$(git status | grep -c 'nothing to commit, working tree clean') | |
if [ "$working_tree_clean" -eq "0" ]; then | |
git add . | |
git commit -m "chore: update snapshot" | |
fi | |
- name: git push | |
run: | | |
branch_ahead=$(git status | grep -c 'Your branch is ahead of') | |
if [ "$branch_ahead" -eq "1" ]; then | |
git push | |
fi |