fix(ci): also strip features=["vector"] from kin Cargo.toml on Windows #17
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
| # SPDX-License-Identifier: Apache-2.0 | |
| # Copyright 2026 Firelock, LLC | |
| name: Release | |
| on: | |
| push: | |
| tags: | |
| - "v*.*.*" | |
| permissions: | |
| contents: write | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| build: | |
| name: Build (${{ matrix.artifact }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| artifact: kin-linux-x86_64 | |
| shim_name: libkin_vfs_shim.so | |
| - os: ubuntu-24.04-arm | |
| target: aarch64-unknown-linux-gnu | |
| artifact: kin-linux-aarch64 | |
| shim_name: libkin_vfs_shim.so | |
| - os: macos-latest | |
| target: x86_64-apple-darwin | |
| artifact: kin-macos-x86_64 | |
| shim_name: libkin_vfs_shim.dylib | |
| - os: macos-latest | |
| target: aarch64-apple-darwin | |
| artifact: kin-macos-aarch64 | |
| shim_name: libkin_vfs_shim.dylib | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| artifact: kin-windows-x86_64 | |
| shim_name: kin_vfs_shim.dll | |
| skip_vector: true | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Install Rust stable | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Install cross (ARM64) | |
| if: matrix.cross | |
| run: cargo install cross --git https://github.com/cross-rs/cross | |
| - name: Checkout kin-vfs | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: firelock-ai/kin-vfs | |
| path: kin-vfs | |
| - name: Checkout kin-db (for Windows vector-free build) | |
| if: ${{ matrix.skip_vector }} | |
| uses: actions/checkout@v6 | |
| with: | |
| repository: firelock-ai/kin-db | |
| path: kin-db-local | |
| - name: Patch kin-db to disable vector on Windows | |
| if: ${{ matrix.skip_vector }} | |
| shell: bash | |
| run: | | |
| # 1. Remove vector feature from kin-db defaults | |
| sed -i 's/^default = \["vector"\]/default = []/' kin-db-local/crates/kin-db/Cargo.toml | |
| # 2. Remove features = ["vector"] from kin's dep on kin-db | |
| sed -i 's/, features = \["vector"\]//' Cargo.toml | |
| # 3. Point kin's dep to the patched local checkout | |
| mkdir -p .cargo | |
| cat >> .cargo/config.toml << 'TOML' | |
| [patch."https://github.com/firelock-ai/kin-db.git"] | |
| kin-db = { path = "kin-db-local/crates/kin-db" } | |
| kin-model = { path = "kin-db-local/crates/kin-model" } | |
| TOML | |
| - name: Build kin-cli (native) | |
| if: ${{ !matrix.cross }} | |
| shell: bash | |
| run: cargo build --release --target "$TARGET" -p kin-cli | |
| env: | |
| TARGET: ${{ matrix.target }} | |
| - name: Build kin-cli (cross) | |
| if: ${{ matrix.cross }} | |
| run: cross build --release --target "$TARGET" -p kin-cli | |
| env: | |
| TARGET: ${{ matrix.target }} | |
| - name: Build kin-vfs (native) | |
| if: ${{ !matrix.cross }} | |
| working-directory: kin-vfs | |
| shell: bash | |
| run: | | |
| cargo build --release --target "$TARGET" -p kin-vfs-cli | |
| cargo build --release --target "$TARGET" -p kin-vfs-shim | |
| env: | |
| TARGET: ${{ matrix.target }} | |
| - name: Build kin-vfs (cross) | |
| if: ${{ matrix.cross }} | |
| working-directory: kin-vfs | |
| run: | | |
| cross build --release --target "$TARGET" -p kin-vfs-cli | |
| cross build --release --target "$TARGET" -p kin-vfs-shim | |
| env: | |
| TARGET: ${{ matrix.target }} | |
| - name: Package (Unix) | |
| if: runner.os != 'Windows' | |
| run: | | |
| mkdir "$ARTIFACT" | |
| cp "target/${TARGET}/release/kin" "$ARTIFACT/" | |
| cp "kin-vfs/target/${TARGET}/release/kin-vfs" "$ARTIFACT/" 2>/dev/null || true | |
| cp "kin-vfs/target/${TARGET}/release/${SHIM_NAME}" "$ARTIFACT/" 2>/dev/null || true | |
| tar czf "${ARTIFACT}.tar.gz" "$ARTIFACT" | |
| shasum -a 256 "${ARTIFACT}.tar.gz" > "${ARTIFACT}.tar.gz.sha256" | |
| env: | |
| TARGET: ${{ matrix.target }} | |
| ARTIFACT: ${{ matrix.artifact }} | |
| SHIM_NAME: ${{ matrix.shim_name }} | |
| - name: Package (Windows) | |
| if: runner.os == 'Windows' | |
| shell: pwsh | |
| run: | | |
| New-Item -ItemType Directory -Path $env:ARTIFACT | |
| Copy-Item "target/$env:TARGET/release/kin.exe" "$env:ARTIFACT/" | |
| Copy-Item "kin-vfs/target/$env:TARGET/release/kin-vfs.exe" "$env:ARTIFACT/" -ErrorAction SilentlyContinue | |
| Copy-Item "kin-vfs/target/$env:TARGET/release/$env:SHIM_NAME" "$env:ARTIFACT/" -ErrorAction SilentlyContinue | |
| Compress-Archive -Path "$env:ARTIFACT/*" -DestinationPath "$env:ARTIFACT.zip" | |
| Get-FileHash -Algorithm SHA256 "$env:ARTIFACT.zip" | Format-List Hash | Out-File -Encoding utf8 "$env:ARTIFACT.zip.sha256" | |
| env: | |
| TARGET: ${{ matrix.target }} | |
| ARTIFACT: ${{ matrix.artifact }} | |
| SHIM_NAME: ${{ matrix.shim_name }} | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ matrix.artifact }} | |
| path: | | |
| ${{ matrix.artifact }}.tar.gz | |
| ${{ matrix.artifact }}.tar.gz.sha256 | |
| ${{ matrix.artifact }}.zip | |
| ${{ matrix.artifact }}.zip.sha256 | |
| publish: | |
| name: Publish Release | |
| needs: build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| merge-multiple: true | |
| - name: Generate release notes from changelog | |
| run: | | |
| VERSION="${GITHUB_REF_NAME#v}" | |
| node ./scripts/extract-release-notes.mjs \ | |
| --version "$VERSION" \ | |
| --input ./CHANGELOG.md \ | |
| --output ./release-notes.md | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| body_path: ./release-notes.md | |
| generate_release_notes: true | |
| prerelease: ${{ contains(github.ref_name, '-alpha') }} | |
| files: | | |
| kin-linux-x86_64.tar.gz | |
| kin-linux-x86_64.tar.gz.sha256 | |
| kin-linux-aarch64.tar.gz | |
| kin-linux-aarch64.tar.gz.sha256 | |
| kin-macos-x86_64.tar.gz | |
| kin-macos-x86_64.tar.gz.sha256 | |
| kin-macos-aarch64.tar.gz | |
| kin-macos-aarch64.tar.gz.sha256 | |
| kin-windows-x86_64.zip | |
| kin-windows-x86_64.zip.sha256 | |
| publish_npm: | |
| name: Publish npm Wrapper | |
| needs: publish | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Install Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 20 | |
| registry-url: https://registry.npmjs.org | |
| - name: Verify npm package version matches tag | |
| run: | | |
| PACKAGE_VERSION=$(node -p "require('./packages/kin-mcp/package.json').version") | |
| TAG_VERSION="${GITHUB_REF_NAME#v}" | |
| test "$PACKAGE_VERSION" = "$TAG_VERSION" | |
| - name: Publish npm package | |
| run: npm publish ./packages/kin-mcp --access public | |
| env: | |
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} |