From 6234425483a01f57a46c1389b0f2b46af1d96994 Mon Sep 17 00:00:00 2001 From: Lukas Maurer Date: Thu, 30 Jan 2025 11:21:08 +0100 Subject: [PATCH] ci: add workflow --- .github/workflows/snapshot.yml | 129 +++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 .github/workflows/snapshot.yml diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml new file mode 100644 index 0000000..99eb646 --- /dev/null +++ b/.github/workflows/snapshot.yml @@ -0,0 +1,129 @@ +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-icons' && + 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 ` + + - 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 + 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: + + ``` + npm i @siemens/ix-icons@${{ steps.get-version.outputs.version }} + ```