Skip to content

Version Packages

Version Packages #6089

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/apollo-client' &&
github.event.issue.pull_request &&
(
github.event.sender.login == 'benjamn' ||
github.event.sender.login == 'alessbell' ||
github.event.sender.login == 'bignimbus' ||
github.event.sender.login == 'hwillson' ||
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 dependencies (with cache)
uses: bahmutov/npm-install@v1
- 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 }} && npm i
npm run build
npm 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: npm deprecate @apollo/client@${{ steps.get-version.outputs.version }} "This is a snapshot release from https://github.com/apollographql/apollo-client/pull/${{ github.event.issue.number }}. Use at your own discretion."
- 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/client@${{ steps.get-version.outputs.version }}
```