name: Release - WASM on: workflow_dispatch: inputs: version: description: 'Version to release (e.g. 2.1.0)' required: true type: string beta: description: 'Publish as beta (npm tag: beta instead of latest)' type: boolean default: false dry-run: description: 'Dry run (build but do not publish)' type: boolean default: false permissions: contents: write id-token: write env: CARGO_TERM_COLOR: always jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Validate version run: | PKG_VERSION=$(node -p "require('./packages/wasm/package.json').version") if [ "$PKG_VERSION" != "${{ inputs.version }}" ]; then echo "::error::Version mismatch: package.json has $PKG_VERSION, expected ${{ inputs.version }}" exit 1 fi echo "Version validated: ${{ inputs.version }}" build: needs: validate runs-on: ubuntu-latest name: Build WASM steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - uses: dtolnay/rust-toolchain@1.95.0 with: targets: wasm32-unknown-unknown - uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git ~/.cache/pdfium-rs target key: ${{ runner.os }}-cargo-wasm-release-${{ hashFiles('**/Cargo.lock') }} - name: Install wasm-pack run: cargo install wasm-pack --locked - name: Build WASM package working-directory: packages/wasm run: npm run build - name: Verify output run: | test -f packages/wasm/pkg/liteparse_wasm_bg.wasm test -f packages/wasm/pkg/liteparse_wasm.js test -f packages/wasm/pkg/liteparse_wasm.d.ts - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: wasm-pkg path: packages/wasm/pkg/ if-no-files-found: error publish: needs: build runs-on: ubuntu-latest name: Publish to npm steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 registry-url: https://registry.npmjs.org - name: Download WASM artifacts uses: actions/download-artifact@v4 with: name: wasm-pkg path: packages/wasm/pkg - name: Publish if: ${{ !inputs.dry-run }} working-directory: packages/wasm env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_TAG: ${{ inputs.beta && 'beta' || 'latest' }} run: npm publish --access public --provenance --tag "$NPM_TAG" --ignore-scripts - name: Create git tag if: ${{ !inputs.dry-run }} run: | git tag "wasm-v${{ inputs.version }}" git push origin "wasm-v${{ inputs.version }}" - name: Create GitHub Release if: ${{ !inputs.dry-run }} uses: softprops/action-gh-release@v2 with: tag_name: wasm-v${{ inputs.version }} name: "WASM v${{ inputs.version }}" generate_release_notes: true - name: Summary (dry run) if: ${{ inputs.dry-run }} run: | echo "## Dry Run Summary" >> $GITHUB_STEP_SUMMARY echo "Would release wasm-v${{ inputs.version }}" >> $GITHUB_STEP_SUMMARY echo "### Package: @llamaindex/liteparse-wasm" >> $GITHUB_STEP_SUMMARY WASM_SIZE=$(stat --format=%s packages/wasm/pkg/liteparse_wasm_bg.wasm) echo "WASM binary size: $(numfmt --to=iec $WASM_SIZE)" >> $GITHUB_STEP_SUMMARY