Skip to content

Snapshot Release

Snapshot Release #287

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 == 'siemens/ix' &&
github.event.issue.pull_request &&
(
github.event.sender.login == 'danielleroux' ||
github.event.sender.login == 'nuke-ellington'
) &&
startsWith(github.event.comment.body, '/release:pr')
steps:
- uses: alessbell/pull-request-comment-branch@v2.1.0
id: comment-branch
- name: Get sha
id: parse-sha
continue-on-error: true
run: |
if [ "${{ steps.comment-branch.outputs.head_owner }}" == "siemens" ]; 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/create-or-update-comment@v4.0.0
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}"
- uses: ./.github/workflows/actions/turbo
- name: Check for pre.json file existence
id: check_files
uses: andstor/file-existence-action@v3.0.0
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 changeset exists
if: ${{ steps.added-files.outputs.changesets == '' }}
uses: peter-evans/create-or-update-comment@v4.0.0
with:
issue-number: ${{ github.event.issue.number }}
body: |
Please add a changeset via `pnpm changeset` before attempting a snapshot release.
- name: Release to pr tag
if: ${{ steps.added-files.outputs.changesets != '' }}
run: |
pnpm changeset version --snapshot pr-${{ github.event.issue.number }} && pnpm i --lockfile-only
pnpm build --filter \!documentation
echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> .npmrc
pnpm changeset publish --no-git-tag --snapshot --tag snapshot
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get released version
if: ${{ steps.added-files.outputs.changesets != '' }}
id: get-version
run: echo "version=$(node -p "require('./packages/core/package.json').version")" >> "$GITHUB_OUTPUT"
- name: Create comment
if: ${{ steps.added-files.outputs.changesets != '' }}
uses: peter-evans/create-or-update-comment@v4.0.0
with:
issue-number: ${{ github.event.issue.number }}
body: |
A new release has been made for this PR. You can install it with:
Core library:
```
npm i @siemens/ix@${{ steps.get-version.outputs.version }}
```
Angular:
```
npm i @siemens/ix-angular@${{ steps.get-version.outputs.version }}
```
React:
```
npm i @siemens/ix-react@${{ steps.get-version.outputs.version }}
```
Vue:
```
npm i @siemens/ix-vue@${{ steps.get-version.outputs.version }}
```