|
| 1 | +# SPDX-FileCopyrightText: © 2025 Phala Network <dstack@phala.network> |
| 2 | +# |
| 3 | +# SPDX-License-Identifier: Apache-2.0 |
| 4 | + |
| 5 | +name: Publish JS SDK to npm |
| 6 | +on: |
| 7 | + push: |
| 8 | + tags: ['js-sdk-v*'] |
| 9 | + workflow_dispatch: |
| 10 | + inputs: |
| 11 | + npm_tag: |
| 12 | + description: 'npm dist-tag (latest, beta, canary)' |
| 13 | + required: true |
| 14 | + default: 'latest' |
| 15 | + type: choice |
| 16 | + options: |
| 17 | + - latest |
| 18 | + - beta |
| 19 | + - canary |
| 20 | + |
| 21 | +permissions: |
| 22 | + id-token: write |
| 23 | + contents: write |
| 24 | + |
| 25 | +jobs: |
| 26 | + publish: |
| 27 | + runs-on: ubuntu-latest |
| 28 | + steps: |
| 29 | + - uses: actions/checkout@v5 |
| 30 | + |
| 31 | + - uses: actions/setup-node@v5 |
| 32 | + with: |
| 33 | + node-version: '20' |
| 34 | + registry-url: 'https://registry.npmjs.org' |
| 35 | + |
| 36 | + - name: Upgrade npm for trusted publishers support |
| 37 | + run: | |
| 38 | + npm install -g npm@latest |
| 39 | + echo "npm: $(npm --version)" |
| 40 | +
|
| 41 | + - name: Verify OIDC token availability |
| 42 | + run: | |
| 43 | + if [ -n "${ACTIONS_ID_TOKEN_REQUEST_URL}" ] && [ -n "${ACTIONS_ID_TOKEN_REQUEST_TOKEN}" ]; then |
| 44 | + echo "OIDC token available" |
| 45 | + else |
| 46 | + echo "OIDC token NOT available" |
| 47 | + echo "Check workflow permissions include 'id-token: write'" |
| 48 | + exit 1 |
| 49 | + fi |
| 50 | +
|
| 51 | + - name: Verify repository configuration |
| 52 | + working-directory: sdk/js |
| 53 | + run: | |
| 54 | + echo "Checking repository consistency..." |
| 55 | + GIT_REPO=$(git remote get-url origin | sed 's/.*github.com[/:]//; s/.git$//') |
| 56 | + PKG_REPO=$(node -e "console.log(require('./package.json').repository?.url || '')" | sed 's|https://github.com/||; s|git+||; s|.git$||') |
| 57 | + echo "Git remote: $GIT_REPO" |
| 58 | + echo "package.json: $PKG_REPO" |
| 59 | + if [ "$GIT_REPO" != "$PKG_REPO" ]; then |
| 60 | + echo "Repository mismatch!" |
| 61 | + echo "This will cause 422 error during publish" |
| 62 | + exit 1 |
| 63 | + fi |
| 64 | + echo "Repositories match" |
| 65 | +
|
| 66 | + - name: Install dependencies |
| 67 | + working-directory: sdk/js |
| 68 | + run: npm install |
| 69 | + |
| 70 | + - name: Build |
| 71 | + working-directory: sdk/js |
| 72 | + run: npm run build |
| 73 | + |
| 74 | + - name: Determine version and npm dist-tag |
| 75 | + id: tag |
| 76 | + working-directory: sdk/js |
| 77 | + run: | |
| 78 | + PKG_VERSION=$(node -e "console.log(require('./package.json').version)") |
| 79 | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then |
| 80 | + VERSION="$PKG_VERSION" |
| 81 | + echo "tag=${{ github.event.inputs.npm_tag }}" >> "$GITHUB_OUTPUT" |
| 82 | + else |
| 83 | + TAG_VERSION="${GITHUB_REF_NAME#js-sdk-v}" |
| 84 | + if [ "$TAG_VERSION" != "$PKG_VERSION" ]; then |
| 85 | + echo "::error::tag version ($TAG_VERSION) does not match package.json version ($PKG_VERSION)" |
| 86 | + exit 1 |
| 87 | + fi |
| 88 | + VERSION="$TAG_VERSION" |
| 89 | + # auto-detect from git tag: js-sdk-v0.5.8-beta.1 -> beta |
| 90 | + if echo "$VERSION" | grep -qiE '(beta|alpha|rc|preview)'; then |
| 91 | + echo "tag=beta" >> "$GITHUB_OUTPUT" |
| 92 | + else |
| 93 | + echo "tag=latest" >> "$GITHUB_OUTPUT" |
| 94 | + fi |
| 95 | + fi |
| 96 | + echo "version=$VERSION" >> "$GITHUB_OUTPUT" |
| 97 | +
|
| 98 | + - name: Publish to npm |
| 99 | + working-directory: sdk/js |
| 100 | + run: | |
| 101 | + NPM_TAG="${{ steps.tag.outputs.tag }}" |
| 102 | + echo "Publishing with dist-tag: $NPM_TAG" |
| 103 | + npm publish --access public --provenance --tag "$NPM_TAG" |
| 104 | +
|
| 105 | + - name: GitHub Release |
| 106 | + if: github.event_name == 'push' |
| 107 | + uses: softprops/action-gh-release@v2 |
| 108 | + with: |
| 109 | + name: "JS SDK v${{ steps.tag.outputs.version }}" |
| 110 | + body: | |
| 111 | + ## npm Package |
| 112 | +
|
| 113 | + **Package**: `@phala/dstack-sdk@${{ steps.tag.outputs.version }}` |
| 114 | +
|
| 115 | + **Install**: `npm install @phala/dstack-sdk@${{ steps.tag.outputs.version }}` |
| 116 | +
|
| 117 | + **Dist-tag**: `${{ steps.tag.outputs.tag }}` |
| 118 | +
|
| 119 | + **Registry**: https://www.npmjs.com/package/@phala/dstack-sdk/v/${{ steps.tag.outputs.version }} |
0 commit comments