Speedup pre-release CI runs (#1804)

This commit is contained in:
Solomon
2026-01-06 15:58:10 +00:00
committed by GitHub
parent edef39c3fb
commit 0f3ee560f3
15 changed files with 548 additions and 1171 deletions

View File

@@ -1,8 +1,3 @@
# Set macOS deployment target to avoid linker warnings
# Use Rust project defaults: 10.12 for x86_64, 11.0 for aarch64
[target.x86_64-apple-darwin.env]
MACOSX_DEPLOYMENT_TARGET = "10.12"
[target.x86_64-apple-darwin] [target.x86_64-apple-darwin]
rustflags = [ rustflags = [
"-C", "link-arg=-framework", "-C", "link-arg=-framework",
@@ -13,9 +8,6 @@ rustflags = [
"-C", "link-arg=Foundation", "-C", "link-arg=Foundation",
] ]
[target.aarch64-apple-darwin.env]
MACOSX_DEPLOYMENT_TARGET = "11.0"
[target.aarch64-apple-darwin] [target.aarch64-apple-darwin]
rustflags = [ rustflags = [
"-C", "link-arg=-framework", "-C", "link-arg=-framework",

View File

@@ -27,6 +27,7 @@ env:
NODE_VERSION: 22 NODE_VERSION: 22
PNPM_VERSION: 10.13.1 PNPM_VERSION: 10.13.1
RUST_TOOLCHAIN: nightly-2025-12-04 RUST_TOOLCHAIN: nightly-2025-12-04
CARGO_XWIN_VERSION: 0.20.2
jobs: jobs:
bump-version: bump-version:
@@ -119,7 +120,7 @@ jobs:
build-frontend: build-frontend:
needs: bump-version needs: bump-version
runs-on: ubuntu-latest-m runs-on: ubuntu-latest-x64-l
env: env:
VITE_PUBLIC_REACT_VIRTUOSO_LICENSE_KEY: ${{ secrets.PUBLIC_REACT_VIRTUOSO_LICENSE_KEY }} VITE_PUBLIC_REACT_VIRTUOSO_LICENSE_KEY: ${{ secrets.PUBLIC_REACT_VIRTUOSO_LICENSE_KEY }}
VITE_VK_SHARED_API_BASE: ${{ secrets.VK_SHARED_API_BASE }} VITE_VK_SHARED_API_BASE: ${{ secrets.VK_SHARED_API_BASE }}
@@ -169,23 +170,19 @@ jobs:
build-backend: build-backend:
needs: [bump-version, build-frontend] needs: [bump-version, build-frontend]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
strategy: strategy:
# Platform matrix - keep target/name in sync with package-npx-cli job # Platform matrix - keep target/name in sync with package-npx-cli job
matrix: matrix:
include: include:
- target: x86_64-unknown-linux-musl - target: x86_64-unknown-linux-musl
os: ubuntu-latest-x64-l os: ubuntu-latest-x64-l
container: &zigbuild_container ghcr.io/rust-cross/cargo-zigbuild@sha256:af1bc2b869c5d76c1300f7a4685c2f1793d068e6e895c9f5c399b517b31a731e
name: linux-x64 name: linux-x64
- target: aarch64-unknown-linux-musl - target: aarch64-unknown-linux-musl
os: ubuntu-latest-arm64-l os: ubuntu-latest-arm64-l
name: linux-arm64 name: linux-arm64
container: *zigbuild_container
- target: x86_64-pc-windows-msvc - target: x86_64-pc-windows-msvc
os: windows-latest-l os: ubuntu-latest-x64-l
name: windows-x64 name: windows-x64
# Intel-only runner; last supported x86_64 image (EOL Aug 2027)
- target: x86_64-apple-darwin - target: x86_64-apple-darwin
os: macos-15-xlarge os: macos-15-xlarge
name: macos-x64 name: macos-x64
@@ -193,13 +190,30 @@ jobs:
os: macos-15-xlarge os: macos-15-xlarge
name: macos-arm64 name: macos-arm64
- target: aarch64-pc-windows-msvc - target: aarch64-pc-windows-msvc
os: windows-latest-l os: ubuntu-latest-x64-l
name: windows-arm64 name: windows-arm64
env:
CARGO_INCREMENTAL: "0"
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
SCCACHE_CACHE_SIZE: "10G"
CARGO_HOME: ${{ github.workspace }}/.cargo
RUSTUP_HOME: ${{ github.workspace }}/.rustup
XWIN_CACHE_DIR: ${{ github.workspace }}/.xwin-cache
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
ref: ${{ needs.bump-version.outputs.new_tag }} ref: ${{ needs.bump-version.outputs.new_tag }}
- name: Setup sccache
uses: BloopAI/sccache-action@main
- name: Cache Rust toolchain
uses: actions/cache@v4
with:
path: .rustup/toolchains
key: rust-toolchain-${{ runner.os }}-${{ matrix.target }}-${{ env.RUST_TOOLCHAIN }}
- name: Install Rust toolchain - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@stable
with: with:
@@ -207,21 +221,65 @@ jobs:
targets: ${{ matrix.target }} targets: ${{ matrix.target }}
components: rustfmt, clippy components: rustfmt, clippy
- name: Install libclang (Linux) - name: Install dependencies (Linux)
if: runner.os == 'Linux' if: runner.os == 'Linux'
run: | run: |
apt-get update sudo apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y clang libclang-dev DEBIAN_FRONTEND=noninteractive sudo apt-get install -y clang libclang-dev lld llvm nasm cmake ninja-build
- name: Cache Rust dependencies if [[ "${{ matrix.target }}" == *"windows"* ]]; then
uses: Swatinem/rust-cache@v2 DEBIAN_FRONTEND=noninteractive sudo apt-get install -y clang-19 clang-tools-19 llvm-19 lld-19
echo "/usr/lib/llvm-19/bin" >> $GITHUB_PATH
fi
- name: Cache Cargo registry
uses: actions/cache@v5
with: with:
workspaces: "." path: |
prefix-key: "cache-v1.0" .cargo/registry/cache
key: ${{ matrix.target }}_${{ matrix.os }} .cargo/registry/index
cache-on-failure: true .cargo/git/db
shared-key: "shared" .cargo/bin
cache-all-crates: true .cargo/.crates.toml
.cargo/.crates2.json
key: cargo-${{ runner.os }}-${{ env.RUST_TOOLCHAIN }}-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
cargo-${{ runner.os }}-${{ env.RUST_TOOLCHAIN }}-${{ matrix.target }}-
- name: Install Zig
if: runner.os == 'Linux' && !contains(matrix.target, 'windows')
uses: BloopAI/setup-zig@main
with:
version: 0.15.2
- name: Install cargo zigbuild
if: runner.os == 'Linux' && !contains(matrix.target, 'windows')
run: cargo install --locked cargo-zigbuild --version 0.20.1
- name: Install cargo xwin
if: runner.os == 'Linux' && contains(matrix.target, 'windows')
run: cargo install --locked cargo-xwin --version ${{ env.CARGO_XWIN_VERSION }}
- name: Cache xwin downloads
if: runner.os == 'Linux' && contains(matrix.target, 'windows')
uses: actions/cache@v5
with:
path: ${{ github.workspace }}/.xwin-cache
key: xwin-${{ runner.os }}-${{ matrix.target }}-cargo-xwin-${{ env.CARGO_XWIN_VERSION }}
- name: Cache target
uses: actions/cache@v5
with:
path: target
key: target-${{ runner.os }}-${{ env.RUST_TOOLCHAIN }}-${{ matrix.target }}-${{ github.ref_name }}-${{ github.sha }}
restore-keys: |
target-${{ runner.os }}-${{ env.RUST_TOOLCHAIN }}-${{ matrix.target }}-${{ github.ref_name }}-
target-${{ runner.os }}-${{ env.RUST_TOOLCHAIN }}-${{ matrix.target }}-
- name: Setup cargo-sweep
shell: bash
run: |
cargo install --locked cargo-sweep --version 0.8.0
- name: Download frontend artifact - name: Download frontend artifact
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
@@ -230,27 +288,40 @@ jobs:
path: frontend/dist/ path: frontend/dist/
- name: Build backend (Linux) - name: Build backend (Linux)
if: runner.os == 'Linux' if: runner.os == 'Linux' && !contains(matrix.target, 'windows')
run: | run: |
cargo zigbuild --release --target ${{ matrix.target }} -p server cargo zigbuild --release --target ${{ matrix.target }} -p server -p review --bin server --bin mcp_task_server --bin review
cargo zigbuild --release --target ${{ matrix.target }} --bin mcp_task_server
cargo zigbuild --release --target ${{ matrix.target }} -p review
env: env:
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }} POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
POSTHOG_API_ENDPOINT: ${{ secrets.POSTHOG_API_ENDPOINT }} POSTHOG_API_ENDPOINT: ${{ secrets.POSTHOG_API_ENDPOINT }}
VK_SHARED_API_BASE: ${{ secrets.VK_SHARED_API_BASE }} VK_SHARED_API_BASE: ${{ secrets.VK_SHARED_API_BASE }}
- name: Build backend (non-Linux) - name: Build backend (macOS)
if: runner.os != 'Linux' if: runner.os == 'macOS'
run: | run: |
cargo build --release --target ${{ matrix.target }} -p server if [[ "${{ matrix.target }}" == "x86_64-apple-darwin" ]]; then
cargo build --release --target ${{ matrix.target }} --bin mcp_task_server export MACOSX_DEPLOYMENT_TARGET=10.12
cargo build --release --target ${{ matrix.target }} -p review elif [[ "${{ matrix.target }}" == "aarch64-apple-darwin" ]]; then
export MACOSX_DEPLOYMENT_TARGET=11.0
fi
cargo build --release --target ${{ matrix.target }} -p server -p review --bin server --bin mcp_task_server --bin review
env: env:
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }} POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
POSTHOG_API_ENDPOINT: ${{ secrets.POSTHOG_API_ENDPOINT }} POSTHOG_API_ENDPOINT: ${{ secrets.POSTHOG_API_ENDPOINT }}
VK_SHARED_API_BASE: ${{ secrets.VK_SHARED_API_BASE }} VK_SHARED_API_BASE: ${{ secrets.VK_SHARED_API_BASE }}
- name: Build backend (Windows)
if: runner.os == 'Linux' && contains(matrix.target, 'windows')
run: |
cargo xwin build --release --target ${{ matrix.target }} -p server -p review --bin server --bin mcp_task_server --bin review
env:
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
POSTHOG_API_ENDPOINT: ${{ secrets.POSTHOG_API_ENDPOINT }}
VK_SHARED_API_BASE: ${{ secrets.VK_SHARED_API_BASE }}
# Avoid aws-lc-sys CMake failures when Rust's `release` profile includes debug info.
# Without this, cmake-rs selects RelWithDebInfo and CMake fails when ASM is enabled.
CARGO_PROFILE_RELEASE_DEBUG: 0
- name: Setup Sentry CLI - name: Setup Sentry CLI
uses: matbour/setup-sentry-cli@v2 uses: matbour/setup-sentry-cli@v2
with: with:
@@ -267,7 +338,7 @@ jobs:
shell: bash shell: bash
run: | run: |
mkdir -p dist mkdir -p dist
if [[ "${{ matrix.os }}" == "windows-latest-l" ]]; then if [[ "${{ matrix.name }}" == *"windows"* ]]; then
cp target/${{ matrix.target }}/release/server.exe dist/vibe-kanban-${{ matrix.name }}.exe cp target/${{ matrix.target }}/release/server.exe dist/vibe-kanban-${{ matrix.name }}.exe
cp target/${{ matrix.target }}/release/mcp_task_server.exe dist/vibe-kanban-mcp-${{ matrix.name }}.exe cp target/${{ matrix.target }}/release/mcp_task_server.exe dist/vibe-kanban-mcp-${{ matrix.name }}.exe
cp target/${{ matrix.target }}/release/review.exe dist/vibe-kanban-review-${{ matrix.name }}.exe cp target/${{ matrix.target }}/release/review.exe dist/vibe-kanban-review-${{ matrix.name }}.exe
@@ -291,7 +362,7 @@ jobs:
- name: Sign main binary (macOS) - name: Sign main binary (macOS)
if: runner.os == 'macOS' if: runner.os == 'macOS'
uses: indygreg/apple-code-sign-action@v1 uses: BloopAI/apple-code-sign-action@v1
with: with:
input_path: target/${{ matrix.target }}/release/server input_path: target/${{ matrix.target }}/release/server
output_path: vibe-kanban output_path: vibe-kanban
@@ -304,19 +375,9 @@ jobs:
if: runner.os == 'macOS' if: runner.os == 'macOS'
run: zip vibe-kanban.zip vibe-kanban run: zip vibe-kanban.zip vibe-kanban
- name: Notarize signed binary (macOS)
if: runner.os == 'macOS'
uses: indygreg/apple-code-sign-action@v1
continue-on-error: true
with:
input_path: vibe-kanban.zip
sign: false
notarize: true
app_store_connect_api_key_json_file: app_store_key.json
- name: Sign MCP binary (macOS) - name: Sign MCP binary (macOS)
if: runner.os == 'macOS' if: runner.os == 'macOS'
uses: indygreg/apple-code-sign-action@v1 uses: BloopAI/apple-code-sign-action@v1
with: with:
input_path: target/${{ matrix.target }}/release/mcp_task_server input_path: target/${{ matrix.target }}/release/mcp_task_server
output_path: vibe-kanban-mcp output_path: vibe-kanban-mcp
@@ -329,19 +390,9 @@ jobs:
if: runner.os == 'macOS' if: runner.os == 'macOS'
run: zip vibe-kanban-mcp.zip vibe-kanban-mcp run: zip vibe-kanban-mcp.zip vibe-kanban-mcp
- name: Notarize signed MCP binary (macOS)
if: runner.os == 'macOS'
uses: indygreg/apple-code-sign-action@v1
continue-on-error: true
with:
input_path: vibe-kanban-mcp.zip
sign: false
notarize: true
app_store_connect_api_key_json_file: app_store_key.json
- name: Sign Review binary (macOS) - name: Sign Review binary (macOS)
if: runner.os == 'macOS' if: runner.os == 'macOS'
uses: indygreg/apple-code-sign-action@v1 uses: BloopAI/apple-code-sign-action@v1
with: with:
input_path: target/${{ matrix.target }}/release/review input_path: target/${{ matrix.target }}/release/review
output_path: vibe-kanban-review output_path: vibe-kanban-review
@@ -354,12 +405,15 @@ jobs:
if: runner.os == 'macOS' if: runner.os == 'macOS'
run: zip vibe-kanban-review.zip vibe-kanban-review run: zip vibe-kanban-review.zip vibe-kanban-review
- name: Notarize signed Review binary (macOS) - name: Notarize signed binaries (macOS)
if: runner.os == 'macOS' if: runner.os == 'macOS'
uses: indygreg/apple-code-sign-action@v1 uses: BloopAI/apple-code-sign-action@main
continue-on-error: true continue-on-error: true
with: with:
input_path: vibe-kanban-review.zip input_path: |
vibe-kanban.zip
vibe-kanban-mcp.zip
vibe-kanban-review.zip
sign: false sign: false
notarize: true notarize: true
app_store_connect_api_key_json_file: app_store_key.json app_store_connect_api_key_json_file: app_store_key.json
@@ -385,6 +439,13 @@ jobs:
path: dist/ path: dist/
retention-days: 1 retention-days: 1
- name: Sweep Cargo target cache
shell: bash
run: |
cargo sweep --maxsize 10GB
cargo sweep --time 30
package-npx-cli: package-npx-cli:
needs: [bump-version, build-frontend, build-backend] needs: [bump-version, build-frontend, build-backend]
runs-on: ubuntu-latest-m runs-on: ubuntu-latest-m

1466
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,9 @@ tower-http = { version = "0.5", features = ["cors", "request-id", "trace", "fs"]
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0", features = ["preserve_order"] } serde_json = { version = "1.0", features = ["preserve_order"] }
anyhow = "1.0" anyhow = "1.0"
openssl-sys = { version = "0.9", features = ["vendored"] } git2 = { version = "0.20.3", default-features = false }
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls-webpki-roots-no-provider"] }
rustls = { version = "0.23", default-features = false, features = ["aws_lc_rs", "std", "tls12"] }
thiserror = "2.0.12" thiserror = "2.0.12"
tracing = "0.1.43" tracing = "0.1.43"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "json"] } tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "json"] }
@@ -28,6 +30,6 @@ schemars = { version = "1.0.4", features = ["derive", "chrono04", "uuid1", "pres
async-trait = "0.1" async-trait = "0.1"
[profile.release] [profile.release]
debug = true debug = 1
split-debuginfo = "packed" split-debuginfo = "packed"
strip = true strip = true

View File

@@ -11,7 +11,7 @@ serde = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
anyhow = { workspace = true } anyhow = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
sqlx = { version = "0.8.6", features = ["runtime-tokio-rustls", "sqlite", "sqlite-preupdate-hook", "chrono", "uuid"] } sqlx = { version = "0.8.6", features = ["runtime-tokio", "tls-rustls-aws-lc-rs", "sqlite", "sqlite-preupdate-hook", "chrono", "uuid"] }
chrono = { version = "0.4", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1.0", features = ["v4", "serde"] } uuid = { version = "1.0", features = ["v4", "serde"] }
ts-rs = { workspace = true } ts-rs = { workspace = true }

View File

@@ -15,7 +15,7 @@ tokio = { workspace = true }
sqlx = "0.8.6" sqlx = "0.8.6"
serde_json = { workspace = true } serde_json = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
git2 = "0.19" git2 = { workspace = true }
futures = "0.3.31" futures = "0.3.31"
axum = { workspace = true } axum = { workspace = true }

View File

@@ -14,15 +14,14 @@ bytes = "1.0"
serde_json = { workspace = true } serde_json = { workspace = true }
anyhow = { workspace = true } anyhow = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
sqlx = { version = "0.8.6", features = ["runtime-tokio-rustls", "sqlite", "sqlite-preupdate-hook", "chrono", "uuid"] } sqlx = { version = "0.8.6", features = ["runtime-tokio", "tls-rustls-aws-lc-rs", "sqlite", "sqlite-preupdate-hook", "chrono", "uuid"] }
uuid = { version = "1.0", features = ["v4", "serde"] } uuid = { version = "1.0", features = ["v4", "serde"] }
async-trait = { workspace = true } async-trait = { workspace = true }
thiserror = { workspace = true } thiserror = { workspace = true }
command-group = { version = "5.0", features = ["with-tokio"] } command-group = { version = "5.0", features = ["with-tokio"] }
nix = { version = "0.29", features = ["signal", "process"] } nix = { version = "0.29", features = ["signal", "process"] }
openssl-sys = { workspace = true } reqwest = { workspace = true }
reqwest = { version = "0.12", features = ["json"] } sentry = { version = "0.41.0", default-features = false, features = ["anyhow", "backtrace", "panic", "debug-images", "reqwest"] }
sentry = { version = "0.41.0", features = ["anyhow", "backtrace", "panic", "debug-images"] }
futures = "0.3" futures = "0.3"
json-patch = "2.0" json-patch = "2.0"
tokio = { workspace = true } tokio = { workspace = true }

View File

@@ -12,13 +12,14 @@ aes-gcm = "0.10"
chrono = { version = "0.4", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] }
futures = "0.3" futures = "0.3"
async-trait = "0.1" async-trait = "0.1"
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] } reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls-webpki-roots-no-provider", "stream"] }
rustls = { workspace = true }
secrecy = "0.10.3" secrecy = "0.10.3"
sentry = { version = "0.41.0", features = ["anyhow", "backtrace", "panic", "debug-images"] } sentry = { version = "0.41.0", default-features = false, features = ["anyhow", "backtrace", "panic", "debug-images", "reqwest"] }
sentry-tracing = { version = "0.41.0", features = ["backtrace"] } sentry-tracing = { version = "0.41.0", default-features = false, features = ["backtrace"] }
serde = { workspace = true } serde = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
sqlx = { version = "0.8.6", default-features = false, features = ["runtime-tokio-rustls", "postgres", "uuid", "chrono", "json", "macros", "migrate", "ipnetwork"] } sqlx = { version = "0.8.6", default-features = false, features = ["runtime-tokio", "tls-rustls-aws-lc-rs", "postgres", "uuid", "chrono", "json", "macros", "migrate", "ipnetwork"] }
ipnetwork = "0.20" ipnetwork = "0.20"
tokio = { workspace = true } tokio = { workspace = true }
tokio-stream = { version = "0.1.17", features = ["sync"] } tokio-stream = { version = "0.1.17", features = ["sync"] }
@@ -30,7 +31,7 @@ thiserror = { workspace = true }
ts-rs = { workspace = true } ts-rs = { workspace = true }
utils = { path = "../utils" } utils = { path = "../utils" }
uuid = { version = "1", features = ["serde", "v4"] } uuid = { version = "1", features = ["serde", "v4"] }
jsonwebtoken = "9" jsonwebtoken = { version = "10.2.0", features = ["rust_crypto"] }
rand = "0.9" rand = "0.9"
sha2 = "0.10" sha2 = "0.10"
hmac = "0.12" hmac = "0.12"
@@ -39,8 +40,7 @@ hex = "0.4"
urlencoding = "2.1" urlencoding = "2.1"
url = "2.5" url = "2.5"
base64 = "0.22" base64 = "0.22"
aws-config = { version = "1.5", default-features = false, features = ["behavior-version-latest", "rustls"] } aws-sdk-s3 = { version = "1.65", default-features = false, features = ["behavior-version-latest"] }
aws-sdk-s3 = { version = "1.65", default-features = false, features = ["behavior-version-latest", "rustls"] }
aws-credential-types = "1.2" aws-credential-types = "1.2"
tempfile = "3" tempfile = "3"
tar = "0.4" tar = "0.4"

View File

@@ -11,7 +11,8 @@ path = "src/main.rs"
[dependencies] [dependencies]
clap = { version = "4", features = ["derive", "env"] } clap = { version = "4", features = ["derive", "env"] }
tokio = { workspace = true } tokio = { workspace = true }
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] } reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls-webpki-roots-no-provider", "stream"] }
rustls = { workspace = true }
serde = { workspace = true } serde = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
tar = "0.4" tar = "0.4"

View File

@@ -100,6 +100,11 @@ fn create_spinner(message: &str) -> ProgressBar {
#[tokio::main] #[tokio::main]
async fn main() -> Result<()> { async fn main() -> Result<()> {
// Install rustls crypto provider before any TLS operations
rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.expect("Failed to install rustls crypto provider");
let args = Args::parse(); let args = Args::parse();
// Initialize tracing // Initialize tracing

View File

@@ -24,23 +24,23 @@ serde_json = { workspace = true }
anyhow = { workspace = true } anyhow = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
tracing-subscriber = { workspace = true } tracing-subscriber = { workspace = true }
sqlx = { version = "0.8.6", features = ["runtime-tokio-rustls", "sqlite", "sqlite-preupdate-hook", "chrono", "uuid"] } sqlx = { version = "0.8.6", features = ["runtime-tokio", "tls-rustls-aws-lc-rs", "sqlite", "sqlite-preupdate-hook", "chrono", "uuid"] }
chrono = { version = "0.4", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1.0", features = ["v4", "serde"] } uuid = { version = "1.0", features = ["v4", "serde"] }
ts-rs = { workspace = true } ts-rs = { workspace = true }
nix = { version = "0.29", features = ["signal", "process"] } nix = { version = "0.29", features = ["signal", "process"] }
openssl-sys = { workspace = true }
rmcp = { version = "0.5.0", features = ["server", "transport-io"] } rmcp = { version = "0.5.0", features = ["server", "transport-io"] }
schemars = { workspace = true } schemars = { workspace = true }
secrecy = "0.10.3" secrecy = "0.10.3"
sentry = { version = "0.41.0", features = ["anyhow", "backtrace", "panic", "debug-images"] } sentry = { version = "0.41.0", default-features = false, features = ["anyhow", "backtrace", "panic", "debug-images", "reqwest"] }
reqwest = { version = "0.12", features = ["json"] } reqwest = { workspace = true }
rustls = { workspace = true }
strip-ansi-escapes = "0.2.1" strip-ansi-escapes = "0.2.1"
thiserror = { workspace = true } thiserror = { workspace = true }
os_info = "3.12.0" os_info = "3.12.0"
futures-util = "0.3" futures-util = "0.3"
ignore = "0.4" ignore = "0.4"
git2 = "0.19" git2 = { workspace = true }
mime_guess = "2.0" mime_guess = "2.0"
rust-embed = "8.2" rust-embed = "8.2"
url = "2.5" url = "2.5"

View File

@@ -7,6 +7,11 @@ use utils::{
}; };
fn main() -> anyhow::Result<()> { fn main() -> anyhow::Result<()> {
// Install rustls crypto provider before any TLS operations
rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.expect("Failed to install rustls crypto provider");
sentry_utils::init_once(SentrySource::Mcp); sentry_utils::init_once(SentrySource::Mcp);
tokio::runtime::Builder::new_multi_thread() tokio::runtime::Builder::new_multi_thread()
.enable_all() .enable_all()

View File

@@ -27,6 +27,11 @@ pub enum VibeKanbanError {
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), VibeKanbanError> { async fn main() -> Result<(), VibeKanbanError> {
// Install rustls crypto provider before any TLS operations
rustls::crypto::aws_lc_rs::default_provider()
.install_default()
.expect("Failed to install rustls crypto provider");
sentry_utils::init_once(SentrySource::Backend); sentry_utils::init_once(SentrySource::Backend);
let log_level = std::env::var("RUST_LOG").unwrap_or_else(|_| "info".to_string()); let log_level = std::env::var("RUST_LOG").unwrap_or_else(|_| "info".to_string());

View File

@@ -20,21 +20,20 @@ serde_json = { workspace = true }
url = "2.5" url = "2.5"
anyhow = { workspace = true } anyhow = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
sqlx = { version = "0.8.6", features = ["runtime-tokio-rustls", "sqlite", "sqlite-preupdate-hook", "chrono", "uuid"] } sqlx = { version = "0.8.6", features = ["runtime-tokio", "tls-rustls-aws-lc-rs", "sqlite", "sqlite-preupdate-hook", "chrono", "uuid"] }
chrono = { version = "0.4", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1.0", features = ["v4", "serde"] } uuid = { version = "1.0", features = ["v4", "serde"] }
ts-rs = { workspace = true } ts-rs = { workspace = true }
dirs = "5.0" dirs = "5.0"
git2 = "0.19" git2 = { workspace = true }
tempfile = "3.21" tempfile = "3.21"
async-trait = { workspace = true } async-trait = { workspace = true }
rust-embed = "8.2" rust-embed = "8.2"
ignore = "0.4" ignore = "0.4"
openssl-sys = { workspace = true }
regex = "1.11.1" regex = "1.11.1"
notify-rust = "4.11" notify-rust = "4.11"
os_info = "3.12.0" os_info = "3.12.0"
reqwest = { version = "0.12", features = ["json"] } reqwest = { workspace = true }
futures-util = "0.3" futures-util = "0.3"
json-patch = "2.0" json-patch = "2.0"
backon = "1.5.1" backon = "1.5.1"

View File

@@ -19,8 +19,8 @@ rust-embed = "8.2"
directories = "6.0.0" directories = "6.0.0"
open = "5.3.2" open = "5.3.2"
regex = "1.11.1" regex = "1.11.1"
sentry = { version = "0.41.0", features = ["anyhow", "backtrace", "panic", "debug-images"] } sentry = { version = "0.41.0", default-features = false, features = ["anyhow", "backtrace", "panic", "debug-images", "reqwest"] }
sentry-tracing = { version = "0.41.0", features = ["backtrace"] } sentry-tracing = { version = "0.41.0", default-features = false, features = ["backtrace"] }
futures-util = "0.3" futures-util = "0.3"
json-patch = "2.0" json-patch = "2.0"
jsonwebtoken = { version = "10.2.0", features = ["rust_crypto"] } jsonwebtoken = { version = "10.2.0", features = ["rust_crypto"] }
@@ -30,11 +30,11 @@ tokio-stream = { version = "0.1.17", features = ["sync"] }
shellexpand = "3.1.1" shellexpand = "3.1.1"
which = "8.0.0" which = "8.0.0"
similar = "2" similar = "2"
git2 = "0.19" git2 = { workspace = true }
dirs = "5.0" dirs = "5.0"
thiserror = { workspace = true } thiserror = { workspace = true }
url = "2.5" url = "2.5"
reqwest = { version = "0.12", features = ["json"] } reqwest = { workspace = true }
sqlx = { version = "0.8.6", default-features = false, features = ["postgres", "uuid", "chrono"] } sqlx = { version = "0.8.6", default-features = false, features = ["postgres", "uuid", "chrono"] }
[target.'cfg(windows)'.dependencies] [target.'cfg(windows)'.dependencies]