Skip to content

[BDGR-173] Add new automated release workflow #69

[BDGR-173] Add new automated release workflow

[BDGR-173] Add new automated release workflow #69

Workflow file for this run

name: Yarn Unlocker
# Short-cut for the common case of a PR having a merge conflict with only `yarn.lock`.
# Responds to a comment on a pull request containing "/yarn unlock"
# Test-merges the PR. If there's only one conflict, that being yarn.lock,
# it runs `yarn` (which will fix it) and pushes the merge commit.
on:
issue_comment:
types: [created]
permissions:
contents: write
issues: write
pull-requests: write
jobs:
merge-yarn-lock:
if: contains(github.event.comment.html_url, '/pull/') && contains(github.event.comment.body, '/yarn unlock')
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
id: comment
with:
script: |
const comment = await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `Trying to merge yarn.lock... follow along at https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${{ github.run_id }}`
})
return comment.data.id
- uses: actions/github-script@v7
id: pr
with:
result-encoding: string
script: |
const pull = await github.rest.pulls.get({
pull_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo
})
return pull.data.head.ref
- uses: actions/checkout@v4
with:
ref: ${{ steps.pr.outputs.result }}
fetch-depth: 0
- name: Use Node.js 18.x
uses: actions/setup-node@v4
with:
node-version: 18.x
cache: "yarn"
cache-dependency-path: "yarn.lock"
- run: yarn install --immutable --inline-builds
- id: merge
run: |
git config --global user.name "${GITHUB_ACTOR}"
git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
git merge origin/main > ${{ runner.temp }}/merge.log || true
# If there are no conflicts, we're done here
if ! grep -q 'CONFLICT' ${{ runner.temp }}/merge.log; then
echo needs-merge=false >> "$GITHUB_OUTPUT"
exit 1
fi
# Abort *unless* there is only one conflict, that being yarn.lock
if [ "$(grep -c 'CONFLICT' ${{ runner.temp }}/merge.log)" -eq 1 ] && grep -q 'Merge conflict in yarn.lock' ${{ runner.temp }}/merge.log; then
exit 0
fi
echo cannot-fix=true >> "$GITHUB_OUTPUT"
exit 1
- if: failure() && steps.merge.outputs.needs-merge == 'false'
uses: actions/github-script@v7
with:
script: |
github.rest.issues.updateComment({
comment_id: ${{ steps.comment.outputs.result }},
owner: context.repo.owner,
repo: context.repo.repo,
body: 'No conflicts found.'
})
- if: failure() && steps.merge.outputs.cannot-fix == 'true'
uses: actions/github-script@v7
with:
script: |
github.rest.issues.updateComment({
comment_id: ${{ steps.comment.outputs.result }},
owner: context.repo.owner,
repo: context.repo.repo,
body: 'Cannot fix conflicts. Please merge manually.'
})
- run: |
yarn install --no-immutable
yarn dedupe
git add yarn.lock
git commit -m 'chore: merge yarn.lock'
git push origin HEAD
- uses: actions/github-script@v7
with:
script: |
github.rest.issues.updateComment({
comment_id: ${{ steps.comment.outputs.result }},
owner: context.repo.owner,
repo: context.repo.repo,
body: 'Merged yarn.lock!'
})
- if: failure() && !steps.merge.outputs.needs-merge && !steps.merge.outputs.cannot-fix
uses: actions/github-script@v7
with:
script: |
github.rest.issues.updateComment({
comment_id: ${{ steps.comment.outputs.result }},
owner: context.repo.owner,
repo: context.repo.repo,
body: `Something went wrong. Please look at [the logs](https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${{ github.run_id }}).`
})