Release #382
Workflow file for this run
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: | |
| inputs: | |
| npm_tag: | |
| description: 'npm tag for publish' | |
| required: true | |
| default: 'latest' | |
| type: choice | |
| options: | |
| - latest | |
| - alpha | |
| version: | |
| description: 'Override version (leave empty to auto-compute). Use when retrying a failed publish.' | |
| required: false | |
| default: '' | |
| type: string | |
| permissions: {} | |
| env: | |
| RELEASE_BUILD: 'true' | |
| DEBUG: 'napi:*' | |
| NPM_TAG: ${{ inputs.npm_tag }} | |
| jobs: | |
| prepare: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| outputs: | |
| version: ${{ steps.version.outputs.version }} | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - uses: ./.github/actions/set-snapshot-version | |
| if: ${{ inputs.version == '' }} | |
| id: computed | |
| with: | |
| npm_tag: ${{ inputs.npm_tag }} | |
| - name: Set final version | |
| id: version | |
| run: echo "version=${{ inputs.version || steps.computed.outputs.version }}" >> $GITHUB_OUTPUT | |
| build-rust: | |
| runs-on: ${{ matrix.settings.os }} | |
| needs: prepare | |
| permissions: | |
| contents: read | |
| env: | |
| VERSION: ${{ needs.prepare.outputs.version }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| settings: | |
| - target: aarch64-apple-darwin | |
| os: macos-latest | |
| - target: x86_64-apple-darwin | |
| os: macos-latest | |
| - target: aarch64-unknown-linux-gnu | |
| os: ubuntu-latest | |
| - target: aarch64-unknown-linux-musl | |
| os: ubuntu-latest | |
| - target: x86_64-unknown-linux-gnu | |
| os: ubuntu-latest | |
| - target: x86_64-unknown-linux-musl | |
| os: ubuntu-latest | |
| - target: x86_64-pc-windows-msvc | |
| os: windows-latest | |
| - target: aarch64-pc-windows-msvc | |
| os: windows-latest | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - uses: ./.github/actions/clone | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| - uses: oxc-project/setup-rust@23f38cfb0c04af97a055f76acee94d5be71c7c82 # v1.0.16 | |
| with: | |
| save-cache: ${{ github.ref_name == 'main' }} | |
| cache-key: release | |
| - name: Rustup Adds Target | |
| run: rustup target add ${{ matrix.settings.target }} | |
| - uses: oxc-project/setup-node@4c26e7cb3605b6bdef5450dacd02c434b10fd8ba # v1.2.0 | |
| - name: Set binding version | |
| shell: bash | |
| run: | | |
| pnpm exec tool replace-file-content packages/cli/binding/Cargo.toml 'version = "0.0.0"' 'version = "${{ env.VERSION }}"' | |
| pnpm exec tool replace-file-content crates/vite_global_cli/Cargo.toml 'version = "0.0.0"' 'version = "${{ env.VERSION }}"' | |
| cat crates/vite_global_cli/Cargo.toml | |
| - name: Verify version replacement | |
| shell: bash | |
| run: | | |
| if grep -q 'version = "0.0.0"' crates/vite_global_cli/Cargo.toml; then | |
| echo "ERROR: Version replacement failed for crates/vite_global_cli/Cargo.toml" | |
| head -5 crates/vite_global_cli/Cargo.toml | |
| exit 1 | |
| fi | |
| if grep -q 'version = "0.0.0"' packages/cli/binding/Cargo.toml; then | |
| echo "ERROR: Version replacement failed for packages/cli/binding/Cargo.toml" | |
| head -5 packages/cli/binding/Cargo.toml | |
| exit 1 | |
| fi | |
| echo "Version replacement verified successfully" | |
| - name: Build | |
| uses: ./.github/actions/build-upstream | |
| with: | |
| target: ${{ matrix.settings.target }} | |
| - name: Upload Vite+ native artifact | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: vite-plus-native-${{ matrix.settings.target }} | |
| path: ./packages/cli/binding/*.node | |
| if-no-files-found: error | |
| - name: Upload Rust CLI binary artifact | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: vite-global-cli-${{ matrix.settings.target }} | |
| path: | | |
| ./target/${{ matrix.settings.target }}/release/vp | |
| ./target/${{ matrix.settings.target }}/release/vp.exe | |
| ./target/${{ matrix.settings.target }}/release/vp-shim.exe | |
| if-no-files-found: error | |
| - name: Remove .node files before upload dist | |
| if: ${{ matrix.settings.target == 'x86_64-unknown-linux-gnu' }} | |
| run: | | |
| rm ./packages/core/dist/**/*.node | |
| - name: Upload core dist | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| if: ${{ matrix.settings.target == 'x86_64-unknown-linux-gnu' }} | |
| with: | |
| name: core | |
| path: ./packages/core/dist | |
| if-no-files-found: error | |
| - name: Upload cli dist | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| if: ${{ matrix.settings.target == 'x86_64-unknown-linux-gnu' }} | |
| with: | |
| name: cli | |
| path: ./packages/cli/dist | |
| if-no-files-found: error | |
| - name: Upload cli skills (docs for agent integration) | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| if: ${{ matrix.settings.target == 'x86_64-unknown-linux-gnu' }} | |
| with: | |
| name: cli-skills | |
| path: ./packages/cli/skills | |
| if-no-files-found: error | |
| - name: Upload LICENSE files | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| if: ${{ matrix.settings.target == 'x86_64-unknown-linux-gnu' }} | |
| with: | |
| name: licenses | |
| path: | | |
| ./packages/core/LICENSE | |
| ./packages/cli/LICENSE | |
| if-no-files-found: error | |
| Release: | |
| runs-on: ubuntu-latest | |
| needs: [prepare, build-rust] | |
| permissions: | |
| contents: write | |
| packages: write | |
| id-token: write # Required for OIDC | |
| env: | |
| VERSION: ${{ needs.prepare.outputs.version }} | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - uses: ./.github/actions/clone | |
| - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0 | |
| - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 | |
| with: | |
| node-version-file: .node-version | |
| package-manager-cache: false | |
| registry-url: 'https://registry.npmjs.org' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install | |
| - name: Download cli dist | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| path: packages/cli/dist | |
| pattern: cli | |
| merge-multiple: true | |
| - name: Download cli skills | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| path: packages/cli/skills | |
| pattern: cli-skills | |
| merge-multiple: true | |
| - name: Download cli binding | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| path: packages/cli/artifacts | |
| pattern: vite-plus-native-* | |
| - name: Download core dist | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| path: packages/core/dist | |
| pattern: core | |
| merge-multiple: true | |
| - name: Download LICENSE files | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| path: packages | |
| pattern: licenses | |
| merge-multiple: true | |
| - uses: ./.github/actions/download-rolldown-binaries | |
| with: | |
| github-token: ${{ github.token }} | |
| target: x86_64-unknown-linux-gnu | |
| upload: 'false' | |
| - name: Download Rust CLI binaries | |
| uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| path: rust-cli-artifacts | |
| pattern: vite-global-cli-* | |
| - name: Move Rust CLI binaries to target directories | |
| run: | | |
| # Move each artifact's binary to the correct target directory | |
| for artifact_dir in rust-cli-artifacts/vite-global-cli-*/; do | |
| if [ -d "$artifact_dir" ]; then | |
| # Extract target name from directory (e.g., vite-global-cli-x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu) | |
| dir_name=$(basename "$artifact_dir") | |
| target_name=${dir_name#vite-global-cli-} | |
| # Create target directory and copy binary | |
| mkdir -p "target/${target_name}/release" | |
| cp -r "$artifact_dir"* "target/${target_name}/release/" | |
| fi | |
| done | |
| # Show what we have (fail if no binaries found) | |
| vp_files=$(find target -name "vp*" -type f 2>/dev/null || echo "") | |
| if [ -z "$vp_files" ]; then | |
| echo "Error: No vp binaries found in target directory" | |
| echo "Artifact contents:" | |
| find rust-cli-artifacts -type f || true | |
| exit 1 | |
| fi | |
| echo "Found binaries:" | |
| echo "$vp_files" | |
| - name: Set npm packages version | |
| run: | | |
| sed -i 's/"version": "0.0.0"/"version": "${{ env.VERSION }}"/' packages/core/package.json | |
| sed -i 's/"version": "0.0.0"/"version": "${{ env.VERSION }}"/' packages/test/package.json | |
| sed -i 's/"version": "0.0.0"/"version": "${{ env.VERSION }}"/' packages/cli/package.json | |
| - name: Build test | |
| run: pnpm --filter=@voidzero-dev/vite-plus-test build | |
| - name: 'Setup npm' | |
| run: | | |
| npm install -g npm@latest | |
| - name: Publish native addons | |
| run: | | |
| node ./packages/cli/publish-native-addons.ts | |
| - name: Publish | |
| run: | | |
| pnpm publish --filter=./packages/core --tag ${{ inputs.npm_tag }} --access public --no-git-checks | |
| pnpm publish --filter=./packages/test --tag ${{ inputs.npm_tag }} --access public --no-git-checks | |
| pnpm publish --filter=./packages/cli --tag ${{ inputs.npm_tag }} --access public --no-git-checks | |
| - name: Create release body | |
| run: | | |
| if [[ "${{ inputs.npm_tag }}" == "latest" ]]; then | |
| INSTALL_BASH="curl -fsSL https://vite.plus | bash" | |
| INSTALL_PS1="irm https://vite.plus/ps1 | iex" | |
| else | |
| INSTALL_BASH="curl -fsSL https://vite.plus | VP_VERSION=${{ env.VERSION }} bash" | |
| INSTALL_PS1="\\\$env:VP_VERSION=\\\"${{ env.VERSION }}\\\"; irm https://vite.plus/ps1 | iex" | |
| fi | |
| cat > ./RELEASE_BODY.md <<EOF | |
| ## vite-plus v${{ env.VERSION }} | |
| ### Published Packages | |
| - \`@voidzero-dev/vite-plus-core@${{ env.VERSION }}\` | |
| - \`@voidzero-dev/vite-plus-test@${{ env.VERSION }}\` | |
| - \`vite-plus@${{ env.VERSION }}\` | |
| ### Installation | |
| **macOS/Linux:** | |
| \`\`\`bash | |
| ${INSTALL_BASH} | |
| \`\`\` | |
| **Windows:** | |
| \`\`\`powershell | |
| ${INSTALL_PS1} | |
| \`\`\` | |
| View the full commit: https://github.com/${{ github.repository }}/commit/${{ github.sha }} | |
| EOF | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0 | |
| id: release | |
| with: | |
| body_path: ./RELEASE_BODY.md | |
| draft: false | |
| make_latest: ${{ inputs.npm_tag == 'latest' }} | |
| prerelease: ${{ inputs.npm_tag == 'alpha' }} | |
| name: vite-plus v${{ env.VERSION }} | |
| tag_name: v${{ env.VERSION }} | |
| target_commitish: ${{ github.sha }} | |
| - name: Send Discord notification | |
| if: ${{ inputs.npm_tag == 'latest' }} | |
| uses: tsickert/discord-webhook@b217a69502f52803de774ded2b1ab7c282e99645 # v7.0.0 | |
| with: | |
| webhook-url: ${{ secrets.DISCORD_RELEASES_WEBHOOK_URL }} | |
| embed-title: vite-plus v${{ env.VERSION }} | |
| embed-description: | | |
| A new release is available! | |
| **Published Packages:** | |
| • @voidzero-dev/vite-plus-core@${{ env.VERSION }} | |
| • @voidzero-dev/vite-plus-test@${{ env.VERSION }} | |
| • vite-plus@${{ env.VERSION }} | |
| **Install:** | |
| • macOS/Linux: `curl -fsSL https://vite.plus | bash` | |
| • Windows: `irm https://vite.plus/ps1 | iex` | |
| embed-url: https://github.com/${{ github.repository }}/releases/tag/v${{ env.VERSION }} |