Release #53
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| workflow_dispatch: | |
| branches: | |
| - release | |
| permissions: | |
| contents: write | |
| id-token: write | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| environment: Release | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - uses: pnpm/action-setup@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 24 | |
| cache: 'pnpm' | |
| registry-url: 'https://registry.npmjs.org' | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Build everything | |
| run: | | |
| pnpm build | |
| - name: Pack packages | |
| run: | | |
| pnpm pack -r --pack-destination release-artifacts | |
| - name: Check if versions exist on npm | |
| id: check_versions | |
| run: | | |
| # Detect npm tag from version (alpha, beta, rc, etc.) | |
| get_npm_tag() { | |
| local version=$1 | |
| if [[ "$version" == *"-alpha"* ]]; then | |
| echo "alpha" | |
| elif [[ "$version" == *"-beta"* ]]; then | |
| echo "beta" | |
| elif [[ "$version" == *"-rc"* ]]; then | |
| echo "rc" | |
| else | |
| echo "latest" | |
| fi | |
| } | |
| check_npm_version() { | |
| local pkg_name=$1 | |
| local pkg_path=$2 | |
| local output_key=$3 | |
| LOCAL_VERSION=$(node -p "require('./${pkg_path}/package.json').version") | |
| NPM_TAG=$(get_npm_tag "$LOCAL_VERSION") | |
| echo "${pkg_name} local version: $LOCAL_VERSION (tag: $NPM_TAG)" | |
| echo "${output_key}_tag=${NPM_TAG}" >> $GITHUB_OUTPUT | |
| if npm view "${pkg_name}@${LOCAL_VERSION}" version 2>/dev/null; then | |
| echo "${pkg_name}@${LOCAL_VERSION} already exists on npm" | |
| echo "${output_key}_exists=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "${pkg_name}@${LOCAL_VERSION} does not exist on npm" | |
| echo "${output_key}_exists=false" >> $GITHUB_OUTPUT | |
| fi | |
| } | |
| check_npm_version "@ton/walletkit" "packages/walletkit" "walletkit" | |
| check_npm_version "@ton/appkit" "packages/appkit" "appkit" | |
| check_npm_version "@ton/appkit-react" "packages/appkit-react" "appkit_react" | |
| # Output walletkit version for release naming | |
| WALLETKIT_VERSION=$(node -p "require('./packages/walletkit/package.json').version") | |
| echo "walletkit_version=${WALLETKIT_VERSION}" >> $GITHUB_OUTPUT | |
| - name: Prepare checksums for release | |
| run: | | |
| # Copy and rename Android bridge checksums | |
| if [ -f "packages/walletkit-android-bridge/dist/checksums.json" ]; then | |
| cp packages/walletkit-android-bridge/dist/checksums.json release-artifacts/walletkit-android-bridge.checksums.json | |
| else | |
| echo "Warning: Android bridge checksums not found at packages/walletkit-android-bridge/dist/checksums.json" | |
| fi | |
| # Copy and rename iOS bridge checksums | |
| if [ -f "packages/walletkit-ios-bridge/dist/checksums.json" ]; then | |
| cp packages/walletkit-ios-bridge/dist/checksums.json release-artifacts/walletkit-ios-bridge.checksums.json | |
| else | |
| echo "Warning: iOS bridge checksums not found" | |
| fi | |
| - name: Create Release Draft | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| tag_name: v${{ steps.check_versions.outputs.walletkit_version }} | |
| name: Release v${{ steps.check_versions.outputs.walletkit_version }} | |
| draft: true | |
| files: | | |
| release-artifacts/ton-walletkit-*.tgz | |
| release-artifacts/walletkit-ios-bridge-*.tgz | |
| release-artifacts/walletkit-android-bridge-*.tgz | |
| release-artifacts/walletkit-android-bridge.checksums.json | |
| release-artifacts/walletkit-ios-bridge.checksums.json | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Publish @ton/walletkit | |
| if: steps.check_versions.outputs.walletkit_exists == 'false' | |
| run: | | |
| pnpm publish \ | |
| --filter="@ton/walletkit" \ | |
| --access=public \ | |
| --publish-branch=release \ | |
| --tag=${{ steps.check_versions.outputs.walletkit_tag }} \ | |
| --verbose | |
| - name: Publish @ton/appkit | |
| if: steps.check_versions.outputs.appkit_exists == 'false' | |
| run: | | |
| pnpm publish \ | |
| --filter="@ton/appkit" \ | |
| --access=public \ | |
| --publish-branch=release \ | |
| --tag=${{ steps.check_versions.outputs.appkit_tag }} \ | |
| --verbose | |
| - name: Publish @ton/appkit-react | |
| if: steps.check_versions.outputs.appkit_react_exists == 'false' | |
| run: | | |
| pnpm publish \ | |
| --filter="@ton/appkit-react" \ | |
| --access=public \ | |
| --publish-branch=release \ | |
| --tag=${{ steps.check_versions.outputs.appkit_react_tag }} \ | |
| --verbose |