Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update snapit.yml to use shopify/snapit #602

Closed
wants to merge 3 commits into from
Closed
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
175 changes: 7 additions & 168 deletions .github/workflows/snapit.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Snapshot
name: /snapit

on:
issue_comment:
Expand All @@ -8,178 +8,17 @@ on:
concurrency: ${{ github.workflow }}-${{ github.ref }}

jobs:
snapshot:
name: Snapshot Release
if: |
github.event.issue.pull_request &&
(startsWith(github.event.comment.body, '/snapit') || startsWith(github.event.comment.body, '/snapshot-release'))
snapit:
name: /snapit
runs-on: ubuntu-latest
steps:
- name: Enforce permission requirement
uses: prince-chrismc/check-actor-permissions-action@v1
with:
permission: write

- name: Add initial reaction
uses: peter-evans/create-or-update-comment@v2
with:
comment-id: ${{ github.event.comment.id }}
reactions: eyes

- name: Get PR branch
uses: xt0rted/pull-request-comment-branch@v1
id: comment-branch

- name: Set latest commit status as pending
uses: myrotvorets/set-commit-status-action@master
with:
sha: ${{ steps.comment-branch.outputs.head_sha }}
token: ${{ secrets.GITHUB_TOKEN }}
status: pending

- name: Validate pull request
uses: actions/github-script@v6
id: pr_data
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
script: |
try {
const pullRequest = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
})

// Pull request from fork
if (context.payload.repository.full_name !== pullRequest.data.head.repo.full_name) {
const errorMessage = '`/snapit` is not supported on pull requests from forked repositories.'

await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: errorMessage,
})

core.setFailed(errorMessage)
}
} catch (err) {
core.setFailed(`Request failed with error ${err}`)
}

- name: Checkout default branch
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Checkout pull request branch
run: hub pr checkout ${{ github.event.issue.number }}
- name: Create snapshot
uses: Shopify/snapit@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Reset changeset entries on changeset-release/main branch
run: |
if [[ $(git branch --show-current) == 'changeset-release/main' ]]; then
git checkout origin/main -- .changeset
fi

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18.17.1'

- name: Install dependencies
run: yarn --frozen-lockfile

- name: Create an .npmrc
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
cat << EOF > "$HOME/.npmrc"
//registry.npmjs.org/:_authToken=$NPM_TOKEN
EOF

- name: Create and publish snapshot release
uses: actions/github-script@v6
id: snapshot-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
script: |
const execa = require('execa')

await execa.command('yarn changeset version --snapshot snapshot-release', { stdio: 'inherit' })

const releaseProcess = execa.command('yarn release --no-git-tags --snapshot --tag snapshot-release')
releaseProcess.stdout.pipe(process.stdout)

const {stdout} = await releaseProcess

const newTags = Array
.from(stdout.matchAll(/New tag:\s+([^\s\n]+)/g))
.map(([_, tag]) => tag)

if (newTags.length) {
const multiple = newTags.length > 1

const body = (
`🫰✨ **Thanks @${context.actor}! ` +
`Your snapshot${multiple ? 's have' : ' has'} been published to npm.**\n\n` +
`Test the snapshot${multiple ? 's' : ''} by updating your \`package.json\` ` +
`with the newly published version${multiple ? 's' : ''}:\n` +
newTags.map(tag => (
'```sh\n' +
`yarn add ${tag}\n` +
'```'
)).join('\n')
)
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body,
})
core.setOutput('succeeded', 'true')
} else {
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `💥 **Snapshot release unsuccessful!** No tags have been found.\n\n` +
'Try running the command below and committing your changes.\n\n' +
'```sh\n' +
'yarn changeset\n' +
'```',
})
core.setOutput('succeeded', 'false')
}

- name: Add success reaction
uses: peter-evans/create-or-update-comment@v2
if: ${{ steps.snapshot-release.outputs.succeeded == 'true' }}
with:
comment-id: ${{ github.event.comment.id }}
reactions: rocket

- name: Add failure reaction
uses: peter-evans/create-or-update-comment@v2
if: ${{ steps.snapshot-release.outputs.succeeded == 'false' }}
with:
comment-id: ${{ github.event.comment.id }}
reactions: confused

- name: Fail workflow if snapshot failed
uses: actions/github-script@v6
if: ${{ steps.snapshot-release.outputs.succeeded == 'false' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
script: |
core.setFailed('No snapshot tags have been found')

- name: Set latest commit status as ${{ job.status }}
uses: myrotvorets/set-commit-status-action@master
if: always()
with:
sha: ${{ steps.comment-branch.outputs.head_sha }}
token: ${{ secrets.GITHUB_TOKEN }}
status: ${{ job.status }}
build_script: yarn build:production
Loading