diff --git a/.github/workflows/publish-core-sdk-package.yaml b/.github/workflows/publish-core-sdk-package.yaml deleted file mode 100644 index 48f08913..00000000 --- a/.github/workflows/publish-core-sdk-package.yaml +++ /dev/null @@ -1,140 +0,0 @@ -name: Publish core-sdk 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/core-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/core-sdk version) - echo "Latest version of @story-protocol/core-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/core-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 }} - - send_slack_notif: - needs: [build-test-publish, create_release] - uses: storyprotocol/gha-workflows/.github/workflows/reusable-slack-notifs.yml@main - with: - short-desc: '${{ github.repository }}: Package has been published to NPM Registry, version: ${{ needs.print_version_to_publish.outputs.version_to_be_published }}' - title: 'Published to Registry' - img-url: 'https://i.imgur.com/JHmKB0s.png' - img-alt-text: 'Published to Registry' - secrets: - channel-name: ${{ secrets.SLACK_CHANNEL_ID_STORY_57BLOCKS }} - slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }} diff --git a/.github/workflows/publish-package.yaml b/.github/workflows/publish-package.yaml new file mode 100644 index 00000000..a9752f6d --- /dev/null +++ b/.github/workflows/publish-package.yaml @@ -0,0 +1,196 @@ +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: + core_sdk_version_to_be_published: ${{ steps.get_version_to_publish.outputs.CORE_SDK_VERSION_TO_BE_PUBLISHED }} + react_sdk_version_to_be_published: ${{ steps.get_version_to_publish.outputs.REACT_SDK_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/core-sdk/package.json) + echo "CORE_SDK_VERSION_TO_BE_PUBLISHED=$(echo $content | jq -r '.version')" >> $GITHUB_OUTPUT + content=$(cat packages/react-sdk/package.json) + echo "REACT_SDK_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: + core_sdk_latest_version: ${{ steps.get_latest_version.outputs.CORE_SDK_LATEST_VERSION }} + react_sdk_latest_version: ${{ steps.get_latest_version.outputs.REACT_SDK_LATEST_VERSION }} + steps: + - name: Get latest package version + id: get_latest_version + run: | + CORE_SDK_LATEST_VERSION=$(npm view @story-protocol/core-sdk version --silent) + REACT_SDK_LATEST_VERSION=$(npm view @story-protocol/react-sdk version --silent) + echo "Latest version of @story-protocol/core-sdk on NPMJS is $CORE_SDK_LATEST_VERSION" + echo "CORE_SDK_LATEST_VERSION=$CORE_SDK_LATEST_VERSION" >> $GITHUB_OUTPUT + echo "Latest version of @story-protocol/react-sdk on NPMJS is $REACT_SDK_LATEST_VERSION" + echo "REACT_SDK_LATEST_VERSION=$REACT_SDK_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.core_sdk_latest_version }}" == "${{ needs.print_version_to_publish.outputs.core_sdk_version_to_be_published }}" ]; then + echo "The version to be published is the same as the latest version on NPM. " + fi + if [ "${{ needs.fetch_latest_version.outputs.react_sdk_latest_version }}" == "${{ needs.print_version_to_publish.outputs.react_sdk_version_to_be_published }}" ]; then + echo "The version to be published is the same as the latest version on NPM. " + fi + + build-test: + 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.core_sdk_latest_version != needs.print_version_to_publish.outputs.core_sdk_version_to_be_published || needs.fetch_latest_version.outputs.react_sdk_latest_version != needs.print_version_to_publish.outputs.react_sdk_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 + + publish-core-sdk: + 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.core_sdk_latest_version != needs.print_version_to_publish.outputs.core_sdk_version_to_be_published && github.event_name == 'push'}} + runs-on: ubuntu-latest + steps: + - name: Publish to npm + run: | + cd packages/core-sdk + npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + create_release-core-sdk: + 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.core_sdk_latest_version != needs.print_version_to_publish.outputs.core_sdk_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.core_sdk_version_to_be_published }} + + send_slack_notif-core-sdk: + needs: [build-test, create_release-core-sdk] + uses: storyprotocol/gha-workflows/.github/workflows/reusable-slack-notifs.yml@main + with: + short-desc: "${{ github.repository }}: Core-sdk package has been published to NPM Registry, version: ${{ needs.print_version_to_publish.outputs.core_sdk_version_to_be_published }}" + title: "Published to Registry" + img-url: "https://i.imgur.com/JHmKB0s.png" + img-alt-text: "Published to Registry" + secrets: + channel-name: ${{ secrets.SLACK_CHANNEL_ID_STORY_57BLOCKS }} + slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }} + + publish-react-sdk: + 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.react_sdk_latest_version != needs.print_version_to_publish.outputs.react_sdk_version_to_be_published && github.event_name == 'push'}} + runs-on: ubuntu-latest + steps: + - name: Publish to npm + run: | + cd packages/react-sdk + npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + create_release-react-sdk: + 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.react_sdk_latest_version != needs.print_version_to_publish.outputs.react_sdk_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.react_sdk_version_to_be_published }} + + send_slack_notif-react-sdk: + needs: [build-test, create_release-react-sdk] + uses: storyprotocol/gha-workflows/.github/workflows/reusable-slack-notifs.yml@main + with: + short-desc: "${{ github.repository }}: React-sdk package has been published to NPM Registry, version: ${{ needs.print_version_to_publish.outputs.react_sdk_version_to_be_published }}" + title: "Published to Registry" + img-url: "https://i.imgur.com/JHmKB0s.png" + img-alt-text: "Published to Registry" + secrets: + channel-name: ${{ secrets.SLACK_CHANNEL_ID_STORY_57BLOCKS }} + slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }} diff --git a/.github/workflows/publish-react-sdk-package.yaml b/.github/workflows/publish-react-sdk-package.yaml deleted file mode 100644 index b7035674..00000000 --- a/.github/workflows/publish-react-sdk-package.yaml +++ /dev/null @@ -1,104 +0,0 @@ -name: Publish react-sdk to npm, Tag and create GH Release - -on: - workflow_run: - workflows: ["Publish core-sdk to npm, Tag and create GH Release"] - types: - - completed - -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 --silent) - if [ -z "$LATEST_VERSION" ]; then - echo "Latest version of @story-protocol/react-sdk is not available on NPMJS" - fi - 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: 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 }} - - send_slack_notif: - needs: [build-test-publish, create_release] - uses: storyprotocol/gha-workflows/.github/workflows/reusable-slack-notifs.yml@main - with: - short-desc: "${{ github.repository }}: Package has been published to NPM Registry, version: ${{ needs.print_version_to_publish.outputs.version_to_be_published }}" - title: "Published to Registry" - img-url: "https://i.imgur.com/JHmKB0s.png" - img-alt-text: "Published to Registry" - secrets: - channel-name: ${{ secrets.SLACK_CHANNEL_ID_STORY_57BLOCKS }} - slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }}