# https://taskfile.dev version: "3" vars: APPLE_TARGETS: "aarch64-apple-ios aarch64-apple-darwin x86_64-apple-darwin" tasks: # ── Setup ──────────────────────────────────────────────────────────────── setup: desc: Initialise submodules and verify toolchain cmds: - git submodule update --init --recursive - rustc --version - cmd: cmake --version | head -1 platforms: [darwin, linux] - cmd: cmake --version platforms: [windows] status: - test -f vendors/wolfssl/CMakeLists.txt # ── Build ──────────────────────────────────────────────────────────────── build: desc: Build all crates (debug) deps: [setup] cmds: - cargo build --workspace release: desc: Build all crates (release) deps: [setup] cmds: - cargo build --workspace --release build:ios: desc: Cross-compile for iOS (aarch64-apple-ios, release) deps: [setup] cmds: - cargo build-ios --release build:macos-arm64: desc: Cross-compile for macOS ARM64 (release) deps: [setup] cmds: - cargo build-macos-arm64 --release build:macos-x64: desc: Cross-compile for macOS x86_64 (release) deps: [setup] cmds: - cargo build-macos-x64 --release build:apple: desc: Cross-compile all Apple targets (iOS + macOS, release) deps: [setup] cmds: - cargo build-ios --release - cargo build-macos-arm64 --release - cargo build-macos-x64 --release build:android-arm64: desc: Cross-compile for Android ARM64 (release) deps: [setup] preconditions: - sh: command -v aarch64-linux-android21-clang msg: "Android NDK not in PATH. Set ANDROID_NDK_HOME and add toolchain bin/ to PATH." cmds: - cargo build-android-arm64 --release build:android-x64: desc: Cross-compile for Android x86_64 (release) deps: [setup] preconditions: - sh: command -v x86_64-linux-android21-clang msg: "Android NDK not in PATH. Set ANDROID_NDK_HOME and add toolchain bin/ to PATH." cmds: - cargo build-android-x64 --release build:android: desc: Cross-compile all Android targets (release) cmds: - task: build:android-arm64 - task: build:android-x64 # ── Windows (run on Windows only) ───────────────────────────────────── build:windows-x64: desc: Build for Windows x86_64 (release, run on Windows) platforms: [windows] deps: [setup] cmds: - cargo build --workspace --release --target x86_64-pc-windows-msvc ci:windows: desc: Full CI pipeline for Windows platforms: [windows] cmds: - task: lint - task: test - task: conformance - task: build:windows-x64 # ── Linux ──────────────────────────────────────────────────────────────── build:linux-x64: desc: Build for Linux x86_64 (release, run on Linux) platforms: [linux] deps: [setup] cmds: - cargo build --workspace --release --target x86_64-unknown-linux-gnu ci:linux: desc: Full CI pipeline for Linux (lint + test + conformance + build + Android) platforms: [linux] cmds: - task: lint - task: test - task: conformance - task: build:linux-x64 - task: build:android # ── Aggregate ──────────────────────────────────────────────────────────── build:all: desc: Build for all targets (native + Apple + Android) cmds: - task: release - task: build:apple - task: build:android # ── Test ───────────────────────────────────────────────────────────────── test: desc: Run all unit tests deps: [setup] cmds: - cargo test --workspace conformance: desc: Run NIST/RFC conformance test vectors deps: [setup] cmds: - cargo run -p ccc-conformance-tests test:all: desc: Run unit tests + conformance tests cmds: - task: test - task: conformance # ── Lint ───────────────────────────────────────────────────────────────── fmt: desc: Format code with rustfmt cmds: - cargo fmt fmt:check: desc: Check formatting (no changes) cmds: - cargo fmt --check clippy: desc: Run clippy with strict warnings deps: [setup] cmds: - cargo clippy --workspace -- -D warnings lint: desc: Full lint (fmt check + clippy) cmds: - task: fmt:check - task: clippy # ── CI Pipeline ───────────────────────────────────────────────────────── ci: desc: Full CI pipeline (lint → test → conformance → release build) cmds: - task: lint - task: test - task: conformance - task: release ci:full: desc: Full CI + all cross-compile targets (platform-aware) cmds: - task: ci - task: build:apple - task: build:android ci:macos: desc: Full CI pipeline for macOS (lint + test + conformance + Apple targets) platforms: [darwin] cmds: - task: lint - task: test - task: conformance - task: release - task: build:apple # ── Utility ───────────────────────────────────────────────────────────── clean: desc: Remove all build artifacts cmds: - cargo clean check: desc: Type-check without building (fast) deps: [setup] cmds: - cargo check --workspace check:stub: desc: Type-check wolfSSL crate with stub_ffi (no C build) cmds: - cargo check -p ccc-crypto-wolfssl --features stub_ffi artifacts: desc: Show artifact locations for all built targets platforms: [darwin, linux] cmds: - | echo "=== Build artifacts ===" for dir in target/debug target/release target/aarch64-apple-ios/release target/aarch64-apple-darwin/release target/x86_64-apple-darwin/release target/aarch64-linux-android/release target/x86_64-linux-android/release target/x86_64-unknown-linux-gnu/release; do if [ -d "$dir" ]; then echo "" echo "── $dir ──" find "$dir" -maxdepth 1 \( -name "*.rlib" -o -name "*.a" -o -name "*.dylib" -o -name "*.so" -o -name "conformance" \) 2>/dev/null | sort find "$dir/build" -name "libwolfssl.a" 2>/dev/null | head -1 fi done artifacts:windows: desc: Show artifact locations (Windows) platforms: [windows] cmds: - cmd: | echo === Build artifacts === for %%d in (target\debug target\release target\x86_64-pc-windows-msvc\release) do ( if exist "%%d" ( echo. echo -- %%d -- dir /b "%%d\*.rlib" "%%d\*.lib" "%%d\*.dll" "%%d\*.exe" 2>nul ) ) ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### # Default # # if we are executed with option of "--taskfile", and no task, so this default...that is why we pass it along # --taskfile {{.TASKFILE}} # we spent several hours fixing that out, because of PEBKAC default: cmds: - task --list --taskfile {{.TASKFILE}}