-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore: add snapshot release workflow (#70)
- Loading branch information
Showing
1 changed file
with
156 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
name: Snapshot Release | ||
|
||
on: | ||
issue_comment: | ||
types: | ||
- created | ||
|
||
jobs: | ||
release_next: | ||
name: release:next | ||
runs-on: ubuntu-latest | ||
# Permissions necessary for Changesets to push a new branch and open PRs | ||
# (for automated Version Packages PRs), and request the JWT for provenance. | ||
# More info: https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#adding-permissions-settings | ||
permissions: | ||
contents: write | ||
pull-requests: write | ||
id-token: write | ||
if: | | ||
github.repository == 'apollographql/graphql-testing-library' && | ||
github.event.issue.pull_request && | ||
( | ||
github.event.sender.login == 'alessbell' || | ||
github.event.sender.login == 'bignimbus' || | ||
github.event.sender.login == 'jerelmiller' || | ||
github.event.sender.login == 'phryneas' | ||
) && | ||
startsWith(github.event.comment.body, '/release:pr') | ||
steps: | ||
- uses: alessbell/[email protected] | ||
id: comment-branch | ||
|
||
- name: Get sha | ||
id: parse-sha | ||
continue-on-error: true | ||
run: | | ||
if [ "${{ steps.comment-branch.outputs.head_owner }}" == "apollographql" ]; then | ||
echo "sha=${{ steps.comment-branch.outputs.head_sha }}" >> "${GITHUB_OUTPUT}" | ||
else | ||
sha_from_comment="$(echo $COMMENT_BODY | tr -s ' ' | cut -d ' ' -f2)" | ||
if [ $sha_from_comment == "/release:pr" ]; then | ||
exit 1 | ||
else | ||
echo "sha=$sha_from_comment" >> "${GITHUB_OUTPUT}" | ||
fi | ||
fi | ||
env: | ||
COMMENT_BODY: ${{ github.event.comment.body }} | ||
|
||
- name: Comment sha reminder | ||
if: steps.parse-sha.outcome == 'failure' | ||
uses: peter-evans/[email protected] | ||
with: | ||
issue-number: ${{ github.event.issue.number }} | ||
body: | | ||
Did you forget to add the sha? Please use `/release:pr <sha>` | ||
- name: Fail job | ||
if: steps.parse-sha.outcome == 'failure' | ||
run: | | ||
exit 1 | ||
- name: Checkout ref | ||
uses: actions/checkout@v4 | ||
with: | ||
## specify the owner + repository in order to checkout the fork | ||
## for community PRs | ||
repository: ${{ steps.comment-branch.outputs.head_owner }}/${{ steps.comment-branch.outputs.head_repo }} | ||
ref: ${{ steps.parse-sha.outputs.sha }} | ||
fetch-depth: 0 | ||
|
||
- name: Detect new changesets | ||
id: added-files | ||
run: | | ||
delimiter="$(openssl rand -hex 8)" | ||
echo "changesets<<${delimiter}" >> "${GITHUB_OUTPUT}" | ||
echo "$(git diff --name-only --diff-filter=A ${{ steps.comment-branch.outputs.base_sha }} ${{ steps.parse-sha.outputs.sha }} .changeset/*.md)" >> "${GITHUB_OUTPUT}" | ||
echo "${delimiter}" >> "${GITHUB_OUTPUT}" | ||
- name: Append NPM token to .npmrc | ||
run: | | ||
cat << EOF > "$HOME/.npmrc" | ||
provenance=true | ||
//registry.npmjs.org/:_authToken=$NPM_TOKEN | ||
EOF | ||
env: | ||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | ||
|
||
- name: Setup Node.js 20.x | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: 20.x | ||
|
||
- name: Install pnpm and dependencies | ||
uses: pnpm/action-setup@v4 | ||
with: | ||
version: 9 | ||
run_install: true | ||
|
||
- name: Check for pre.json file existence | ||
id: check_files | ||
uses: andstor/[email protected] | ||
with: | ||
files: ".changeset/pre.json" | ||
|
||
- name: Exit pre mode if pre.json exists | ||
# Changesets prevents us from generating a snapshot release | ||
# if we're in prerelease mode, so we remove `pre.json` if it exists | ||
# (but do not commit this change since we want the branch to remain | ||
# in pre mode) | ||
if: steps.check_files.outputs.files_exists == 'true' | ||
run: rm .changeset/pre.json | ||
|
||
- name: Add comment if no new changesets exist | ||
if: ${{ steps.added-files.outputs.changesets == '' }} | ||
uses: peter-evans/[email protected] | ||
with: | ||
issue-number: ${{ github.event.issue.number }} | ||
body: | | ||
Please add a changeset via `npx changeset` before attempting a snapshot release. | ||
# https://github.com/atlassian/changesets/blob/master/docs/snapshot-releases.md | ||
- name: Release to pr tag | ||
if: ${{ steps.added-files.outputs.changesets != '' }} | ||
run: | | ||
npx changeset version --snapshot pr-${{ github.event.issue.number }} && pnpm i | ||
pnpm run clean | ||
pnpm run build | ||
pnpm run prepdist:changesets | ||
cd dist | ||
npx changeset publish --no-git-tag --snapshot --tag pr | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | ||
|
||
- name: Get released version | ||
if: ${{ steps.added-files.outputs.changesets != '' }} | ||
id: get-version | ||
run: echo "version=$(node -p "require('./dist/package.json').version")" >> "$GITHUB_OUTPUT" | ||
|
||
- name: Deprecate version | ||
if: ${{ steps.added-files.outputs.changesets != '' }} | ||
run: pnpm deprecate @apollo/graphql-testing-library@${{ steps.get-version.outputs.version }} "This is a snapshot release created to test @apollo/graphql-testing-library. It should not be installed in production environments." | ||
|
||
- name: Create comment | ||
if: ${{ steps.added-files.outputs.changesets != '' }} | ||
uses: peter-evans/[email protected] | ||
with: | ||
issue-number: ${{ github.event.issue.number }} | ||
body: | | ||
A new release has been made for this PR. You can install it with: | ||
``` | ||
npm i @apollo/graphql-testing-library@${{ steps.get-version.outputs.version }} |
e9f4033
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Coverage Report (100%)
e9f4033
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Coverage Report (100%)