ready to publish 0.2.3 #23
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: Build Release Artifacts | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| inputs: | |
| publish_vscode: | |
| description: 'Publish VSCode extension to marketplace' | |
| required: false | |
| default: false | |
| type: boolean | |
| env: | |
| CARGO_TERM_COLOR: always | |
| permissions: | |
| contents: write | |
| packages: write | |
| jobs: | |
| build-binaries: | |
| name: Build ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| include: | |
| - target: x86_64-unknown-linux-gnu | |
| os: ubuntu-latest | |
| name: linux-x64 | |
| - target: aarch64-unknown-linux-gnu | |
| os: ubuntu-latest | |
| name: linux-arm64 | |
| - target: x86_64-apple-darwin | |
| os: macos-14 | |
| name: darwin-x64 | |
| - target: aarch64-apple-darwin | |
| os: macos-latest | |
| name: darwin-arm64 | |
| - target: x86_64-pc-windows-msvc | |
| os: windows-latest | |
| name: win32-x64 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Add target | |
| run: | | |
| rustup target add ${{ matrix.target }} | |
| rustup component add rust-std-${{ matrix.target }} | |
| - name: Verify Rust installation | |
| run: | | |
| echo "Runner OS: ${{ runner.os }}" | |
| echo "Runner Arch: ${{ runner.arch }}" | |
| echo "Target: ${{ matrix.target }}" | |
| echo "---" | |
| rustup show | |
| echo "---" | |
| rustup target list --installed | |
| echo "---" | |
| rustc --version --verbose | |
| - name: Install cross-compilation tools (Linux ARM64) | |
| if: matrix.target == 'aarch64-unknown-linux-gnu' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y gcc-aarch64-linux-gnu | |
| - name: Configure cross-compilation (Linux ARM64) | |
| if: matrix.target == 'aarch64-unknown-linux-gnu' | |
| run: | | |
| echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV | |
| echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV | |
| - name: Cache cargo dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Install cross (for cross-compilation) | |
| if: matrix.target == 'aarch64-unknown-linux-gnu' | |
| run: cargo install cross --git https://github.com/cross-rs/cross | |
| - name: Build binary (cross-compilation) | |
| if: matrix.target == 'aarch64-unknown-linux-gnu' | |
| run: cross build --release --target ${{ matrix.target }} -p raz-cli | |
| - name: Build binary (native) | |
| if: matrix.target != 'aarch64-unknown-linux-gnu' | |
| run: cargo build --release --target ${{ matrix.target }} -p raz-cli | |
| - name: Prepare binary | |
| shell: bash | |
| run: | | |
| mkdir -p binaries/${{ matrix.name }} | |
| if [[ "${{ matrix.os }}" == "windows-latest" ]]; then | |
| cp target/${{ matrix.target }}/release/raz.exe binaries/${{ matrix.name }}/ | |
| else | |
| cp target/${{ matrix.target }}/release/raz binaries/${{ matrix.name }}/ | |
| fi | |
| - name: Upload binary | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: binary-${{ matrix.name }} | |
| path: binaries/${{ matrix.name }} | |
| build-vscode-extension: | |
| name: Build VSCode Extension | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| cache: 'npm' | |
| cache-dependency-path: raz-adapters/vscode/package-lock.json | |
| - name: Install dependencies | |
| working-directory: raz-adapters/vscode | |
| run: npm ci | |
| - name: Compile TypeScript | |
| working-directory: raz-adapters/vscode | |
| run: npm run compile | |
| - name: Install vsce | |
| run: npm install -g vsce | |
| - name: Package extension (no binaries) | |
| working-directory: raz-adapters/vscode | |
| run: vsce package --no-dependencies | |
| - name: Upload VSCode extension | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: vscode-extension | |
| path: raz-adapters/vscode/*.vsix | |
| create-release: | |
| name: Create GitHub Release | |
| needs: [build-binaries, build-vscode-extension] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Prepare release assets | |
| run: | | |
| mkdir -p release-assets | |
| # Package individual binaries - VS Code extension expects .tar.gz for all platforms | |
| cd artifacts | |
| for dir in binary-*; do | |
| platform=${dir#binary-} | |
| cd "$dir" | |
| # Create tar.gz for all platforms (VS Code extension expects this format) | |
| if [[ -f "raz.exe" ]]; then | |
| tar -czf "../../release-assets/raz-${platform}.tar.gz" raz.exe | |
| else | |
| tar -czf "../../release-assets/raz-${platform}.tar.gz" raz | |
| fi | |
| cd .. | |
| done | |
| cd .. | |
| # Copy VSCode extension | |
| cp artifacts/vscode-extension/*.vsix release-assets/ | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| draft: false | |
| prerelease: false | |
| generate_release_notes: true | |
| files: release-assets/* | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| publish-vscode: | |
| name: Publish VSCode Extension | |
| needs: [create-release] | |
| runs-on: ubuntu-latest | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| # Continue even if this job fails | |
| continue-on-error: true | |
| steps: | |
| - name: Download VSCode extension | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: vscode-extension | |
| path: . | |
| - name: Install vsce | |
| run: npm install -g vsce | |
| - name: Publish to VS Code marketplace | |
| continue-on-error: true | |
| run: | | |
| if [ -n "${{ secrets.VSCE_TOKEN }}" ]; then | |
| echo "Publishing to VS Code marketplace..." | |
| vsce publish --packagePath *.vsix --pat ${{ secrets.VSCE_TOKEN }} || echo "⚠️ Failed to publish to VS Code marketplace (possibly already exists)" | |
| else | |
| echo "⚠️ VSCE_TOKEN not set, skipping VS Code marketplace publish." | |
| fi | |
| - name: Publish to Open VSX Registry | |
| continue-on-error: true | |
| run: | | |
| if [ -n "${{ secrets.OVSX_TOKEN }}" ]; then | |
| echo "Publishing to Open VSX Registry..." | |
| npm install -g ovsx | |
| ovsx publish *.vsix -p ${{ secrets.OVSX_TOKEN }} || echo "⚠️ Failed to publish to Open VSX (possibly already exists)" | |
| else | |
| echo "⚠️ OVSX_TOKEN not set, skipping Open VSX publish." | |
| fi |