From 9202f839df2238be338bcb709ad3e36e9d66c9ca Mon Sep 17 00:00:00 2001 From: Bonnie Date: Tue, 2 Jul 2024 14:42:09 +0800 Subject: [PATCH] Add publish-react-sdk.package.yaml file --- ...age.yaml => publish-core-sdk-package.yaml} | 0 .../workflows/publish-react-sdk-package.yaml | 130 ++++++++++++++++++ 2 files changed, 130 insertions(+) rename .github/workflows/{publish-package.yaml => publish-core-sdk-package.yaml} (100%) create mode 100644 .github/workflows/publish-react-sdk-package.yaml diff --git a/.github/workflows/publish-package.yaml b/.github/workflows/publish-core-sdk-package.yaml similarity index 100% rename from .github/workflows/publish-package.yaml rename to .github/workflows/publish-core-sdk-package.yaml diff --git a/.github/workflows/publish-react-sdk-package.yaml b/.github/workflows/publish-react-sdk-package.yaml new file mode 100644 index 00000000..62784c22 --- /dev/null +++ b/.github/workflows/publish-react-sdk-package.yaml @@ -0,0 +1,130 @@ +name: Publish to npm, Tag and create GH Release + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + Timestamp: + uses: storyprotocol/gha-workflows/.github/workflows/reusable-timestamp.yml@main + + print_version_to_publish: + needs: [Timestamp] + runs-on: ubuntu-latest + outputs: + version_to_be_published: ${{ steps.get_version_to_publish.outputs.VERSION_TO_BE_PUBLISHED }} + steps: + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - name: Get version to publish + id: get_version_to_publish + run: | + content=$(cat packages/react-sdk/package.json) + echo "VERSION_TO_BE_PUBLISHED=$(echo $content | jq -r '.version')" >> $GITHUB_OUTPUT + + # Fetch the latest version from NPM + fetch_latest_version: + needs: [Timestamp] + runs-on: ubuntu-latest + outputs: + LATEST_VERSION: ${{ steps.get_latest_version.outputs.LATEST_VERSION }} + steps: + - name: Get latest package version + id: get_latest_version + run: | + LATEST_VERSION=$(npm view @story-protocol/react-sdk version) + echo "Latest version of @story-protocol/react-sdk on NPMJS is $LATEST_VERSION" + echo "LATEST_VERSION=$LATEST_VERSION" >> $GITHUB_OUTPUT + + # Fail the PR if the version to be published is the same as the latest version on NPM + fail_if_version_is_same: + needs: [print_version_to_publish, fetch_latest_version] + runs-on: ubuntu-latest + steps: + - name: Fail if version is the same + run: | + if [ "${{ needs.fetch_latest_version.outputs.LATEST_VERSION }}" == "${{ needs.print_version_to_publish.outputs.version_to_be_published }}" ]; then + echo "The version to be published is the same as the latest version on NPM. Exiting..." + exit 1 + fi + + build-test-publish: + needs: + [print_version_to_publish, fetch_latest_version, fail_if_version_is_same] + # Skip this job if the version to be published is the same as the latest version on NPM + # and the event triggering the workflow is a push + if: needs.fetch_latest_version.outputs.LATEST_VERSION != needs.print_version_to_publish.outputs.version_to_be_published && github.event_name == 'push' + runs-on: ubuntu-latest + environment: "beta-sepolia" + env: + RPC_PROVIDER_URL: ${{ secrets.RPC_PROVIDER_URL }} + WALLET_PRIVATE_KEY: ${{ secrets.WALLET_PRIVATE_KEY }} + TEST_WALLET_ADDRESS: ${{ secrets.TEST_WALLET_ADDRESS }} + SEPOLIA_RPC_PROVIDER_URL: ${{ secrets.SEPOLIA_RPC_PROVIDER_URL }} + TEST_SEPOLIA_RPC_PROVIDER_URL: ${{ secrets.TEST_SEPOLIA_RPC_PROVIDER_URL }} + SEPOLIA_WALLET_PRIVATE_KEY: ${{ secrets.SEPOLIA_WALLET_PRIVATE_KEY }} + SEPOLIA_TEST_WALLET_ADDRESS: ${{ secrets.SEPOLIA_TEST_WALLET_ADDRESS }} + STORY_TEST_NET_RPC_PROVIDER_URL: ${{ secrets.STORY_TEST_NET_RPC_PROVIDER_URL }} + STORY_TEST_NET_WALLET_PRIVATE_KEY: ${{ secrets.STORY_TEST_NET_WALLET_PRIVATE_KEY }} + STORY_TEST_NET_TEST_WALLET_ADDRESS: ${{ secrets.STORY_TEST_NET_TEST_WALLET_ADDRESS }} + steps: + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - uses: pnpm/action-setup@d882d12c64e032187b2edb46d3a0d003b7a43598 # v2.4.0 + with: + version: 8.8.0 + + - name: Setup Node.js environment + uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1 + with: + node-version: 20.0.0 + cache: pnpm + registry-url: https://registry.npmjs.org/ + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Install dependencies + run: pnpm install + + - name: Fix + run: pnpm fix + + - name: Run Anvil + id: run_anvil + run: anvil --fork-url ${SEPOLIA_RPC_PROVIDER_URL} --silent & + + - name: Check on Run Anvil + if: steps.run_anvil.outcome != 'success' + run: exit 1 + + - name: Test + run: pnpm test + + - name: Build + run: pnpm build + + - name: Publish to npm + run: | + cd packages/react-sdk + npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + create_release: + needs: + [print_version_to_publish, fetch_latest_version, fail_if_version_is_same] + # Skip this job if the version to be published is the same as the latest version on NPM + # and the event triggering the workflow is a push + if: needs.fetch_latest_version.outputs.LATEST_VERSION != needs.print_version_to_publish.outputs.version_to_be_published && github.event_name == 'push' + uses: storyprotocol/gha-workflows/.github/workflows/reusable-create-release.yml@main + with: + version_to_publish: ${{ needs.print_version_to_publish.outputs.version_to_be_published }}