Skip to content

Releases

skipbuild 0.6.2

Choose a tag to compare

@github-actions github-actions released this 25 Oct 05:25

Highlights

Patch release for three cache-correctness defects found by an independent audit of 0.6.1. No new features; no cache-format changes.

Install

# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.sh | bash

# Windows (PowerShell)
irm https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.ps1 -OutFile install.ps1; .\install.ps1

Fixed

  • -- is now a hard boundary for launcher options. Everything after -- is passed to the wrapped compiler verbatim. Previously skipbuild -- g++ -c a.cpp --cache-dir X silently removed --cache-dir X from the compiler command line, because the option scanner walked the whole argv.
  • Read-only caches are never modified. --clean, --clear-stats, prune(), LRU access-time updates, corrupted-entry repair and remote-hit installs all respect read_only now. A remote hit is decompressed into a private staging directory and restored from there instead of being written into the cache, so remote reads keep working with a read-only local cache.
  • Remote uploads skip zero-byte sidecars instead of advertising empty files.

Tests

  • New cli_args_test covers the -- boundary, option consumption before/after the separator, and the override mask.
  • cli_e2e_test now asserts that a read-only --clean fails with an explanation and leaves the cache intact, and that a writable --clean still removes it.
  • test_eviction asserts a read-only cache refuses put() and does not prune existing entries.

16/16 tests pass locally (Release and warnings-as-errors builds); CI green on Windows x64/ARM64, Linux x64/ARM64, macOS ARM64/Intel.

Full details: CHANGELOG.md

skipbuild 0.6.1

Choose a tag to compare

@github-actions github-actions released this 24 Oct 11:27

Highlights

Packaging, CI and correctness release. skipbuild is now consumable as an installed CMake package, the installers refuse unverified binaries, and a parser bug that made every macOS build bypass the cache is fixed.

Install

# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.sh | bash

# Windows (PowerShell)
irm https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.ps1 -OutFile install.ps1; .\install.ps1

All binaries are verified against SHA256SUMS; the scripts fail closed if the checksum cannot be verified.

CMake package

install() now ships all public headers and exports skipbuild::core, skipbuild::skipbuild and skipbuild::libzstd_static:

find_package(skipbuild REQUIRED)
target_link_libraries(app PRIVATE skipbuild::core)
skipbuild_enable_target(app)

Fixed

  • macOS builds always bypassed the cache: absolute POSIX paths were parsed as MSVC /D//U//I//F flags, so /Users/.../a.cpp was swallowed as a /U define and the command ran uncached.
  • Installers failed open: a missing SHA256SUMS (or an asset absent from it) skipped verification; it is now mandatory and the asset name is matched exactly.
  • Windows installer ignored ARM64: the asset was hardcoded to skipbuild-windows-x64.exe.
  • Findskipbuild.cmake module mode was broken: it was installed to share/cmake/Modules but included skipbuild.cmake from lib/cmake/skipbuild; both files now ship side by side in both locations. skipbuild_enable() no longer calls an undefined macro on CMake < 3.19.
  • skipbuild-config.cmake had no targets: it self-assigned SKIPBUILD_EXECUTABLE; it now uses @PACKAGE_INIT@, loads skipbuildTargets.cmake, prefers the imported launcher and calls check_required_components().
  • CMake minimum version: CMP0135 requires 3.24; the project claimed 3.20.
  • Composite action: replaced leftover remake branding/placeholder URLs, installs from this repository, and sets SKIPBUILD_CACHE_DIR + CMAKE_*_COMPILER_LAUNCHER.
  • CI gates the release: sanitizers are blocking, the strict (warnings-as-errors) job runs ctest, and release requires all build, strict, sanitizer and launcher smoke jobs.
  • Tests that passed unconditionally: test_simple only printed state and test_multiprocess never started a second process; it now spawns four real workers, and a new cli_e2e_test drives skipbuild -- <compiler> through miss → hit → header-edit invalidation.
  • Removed dead tracked files (compile.bat, dummy_test.cpp, test.cpp, test_skipbuild.bat, verify_stats.ps1) that contained absolute paths from one developer machine.

Also included (previously unreleased): bounded HTTP responses (512 MiB), remote artifact SHA-256 verification, working --disable-incremental-msbuild, empty-sidecar skipping, atomic failed stores, orphan/temp sweeping, unambiguous length-prefixed cache keys, debug-info keys that include the absolute source/compile directory, and tellg() error handling.

Full details: CHANGELOG.md

0.6.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 02:23

skipbuild 0.6.0 — cache-integrity and remote-transport fixes.

Highlights

  • File locks release correctly on Windows: unlock now targets the exact locked byte range and closes the handle, so purging corrupted entries no longer stalls and handles are not leaked.
  • Sidecar metadata is accurate: meta.json records the real sidecar filename and content hash instead of the .zst storage name/hash, so .pdb/.idb/.dwo sidecars validate and restore correctly.
  • compression_enabled actually works: disabling compression stores artifacts raw, readers accept both layouts, and meta.json reports the real state.
  • Remote timeouts are enforced: WinHTTP resolve/connect/send/receive timeouts now come from config, so a stalled server can no longer hang a build.
  • No plaintext HTTPS on POSIX: builds without TLS refuse https:// and disable the remote cache with a warning instead of sending requests in the clear to port 443.

Upgrade notes

No configuration changes required. Entries written with compression disabled are readable by 0.6.0; the compressed layout remains the default.

Full Changelog: v0.3.0...v0.6.0

0.4.0

Choose a tag to compare

@rayyan0x rayyan0x released this 20 Oct 13:42
925cb13

What's Changed

  • release: 0.4.0 — cache & CLI correctness fixes by @rayyan0x in #15

Full Changelog: v0.3.0...0.4.0

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 18 Oct 15:59

Full Changelog: v0.2.2...v0.3.0

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 18 Oct 04:20

Full Changelog: v0.2.1...v0.2.2

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 18 Oct 04:07

What's Changed

  • README: fix all commands with verified output, remove hardcoded paths, match exact env/config names from code by @rayyan0x in #5
  • Docs/quickstart fix by @rayyan0x in #6
  • Docs/quickstart fix by @rayyan0x in #7
  • README: fix install commands format for copy-paste by @rayyan0x in #8
  • fix release workflow: add binary verification, fix artifact paths by @rayyan0x in #9
  • docs: add remote caching guide with S3 mock server and team workflow by @rayyan0x in #10
  • Docs/quickstart fix by @rayyan0x in #11
  • Docs/quickstart fix by @rayyan0x in #12
  • Docs/quickstart fix by @rayyan0x in #13
  • Align code, CLI, and docs; restore true zero-dependency packaging by @rayyan0x in #14

Full Changelog: v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 12:09

skipbuild v0.2.0

Second release — focused on build-tool integration (response files, PCH), observability, and cleaner configuration naming.

⚠️ Breaking changes

  • Environment variables renamed BUILDCACHE_* → SKIPBUILD_* (e.g. SKIPBUILD_DIR, SKIPBUILD_MAX_SIZE, SKIPBUILD_REMOTE_URL). The old BUILDCACHE_* names still work as a fallback, but SKIPBUILD_* takes precedence.
  • Default paths renamed: cache dir ~/.cache/skipbuild (was .../buildcache), config .skipbuild.conf (was .buildcache.conf). Existing .buildcache.conf files are still read.

Added

  • Response file (@file.rsp) support for compile commands (quoted/escaped args, CRLF, nested files).
  • Precompiled header (PCH) support — MSVC (/Yc, /Yu, /Fp, /Y-) and GCC/Clang (-x c++-header, -include, -fpch-preprocess).
  • REMAKE_LOG env var for log levels: debug, info, warn, error, none (legacy SKIPBUILD_DEBUG=1 still works).
  • Visual Studio / MSBuild logging — [skipbuild] output goes via OutputDebugString, visible in VS Output → Debug.
  • ARM64 CI: Ubuntu ARM64, macOS Apple Silicon, Windows ARM64.
  • MSBuild incremental behavior: caching auto-disabled when the output is newer than the source.
  • Remote caching guide (S3-compatible).

Changed

  • Version centralized; skipbuild --version now reports 0.2.0 (no hardcoded versions).
  • Response file parser hardened: strict bounds checks, max recursion depth (10), UTF-8 BOM stripping, CRLF normalization.
  • Removed orphaned cache/remote.cpp (never compiled; duplicated core.cpp).
  • Removed redundant release.yml; releases are built by build.yml.

Fixed

  • Fatal 0xC0000409 (stack-buffer-overrun) crash parsing response files with quoted args on Windows.
  • Quotes in response file tokens are now stripped (previously kept as part of the argument).
  • Test-suite crashes during cleanup (stats tracker destructor ordering).
  • Cache-key determinism across different build directories.

Downloads

  • Windows x64: skipbuild.exe
  • Linux / macOS: skipbuild

Full diff: v0.1.0...v0.2.0

v0.1.0 — First stable release

Choose a tag to compare

@rayyan0x rayyan0x released this 12 Oct 16:31

skipbuild v0.1.0 🚀

First stable release of skipbuild — a zero-setup, cross-platform C++ build cache designed to make rebuilds near-instant. Eliminate agonizing compilation bottlenecks across Windows, Linux, and macOS.

✨ Features

  • Deterministic Cache Keys: Hashing infrastructure monitors source text stream, include graphs, flags, native compiler binary footprints, and runtime environment layers via SHA-256 blocks.
  • Native MSVC Symbol Support: Full native preservation maps for /Zi PDB debug streams, .idb dependency nodes, /Fo outputs, /I paths, /std:, /O, and /W execution flags.
  • GCC/Clang Compatibility: Built-in intercept matrices tracking -std=, -O, -g, -I, -fPIC, and -gsplit-dwarf (.dwo) options.
  • High-Speed Payload Compression: Core storage architecture compresses objects utilizing integrated Zstd level 3 blocks, delivering an average ~70% reduction in disk storage space.
  • Transparent Fail-Safe Resilience: Built with error isolation layers. Cache processing issues or storage failures transparently fall back to native compiler execution so your pipeline never breaks.
  • Tiered Configuration Resolving: Precedence runs sequentially: CLI Options ──► Environment Variables (BUILDCACHE_*) ──► .buildcache.conf files.
  • Integrated Cache Diagnostics: Manage pipeline optimization details cleanly via --stats, --clear-stats, and --clean utility actions.

🖥️ Platform Support (Tested & Verified)

Operating System Target Compiler Verified Toolchain Version
Windows MSVC 19.51 (Visual Studio 2022 Build Tools)
Linux GCC 13.3 (Ubuntu 24.04 LTS Runtime)
macOS Apple Clang 21 (macOS 16 Environment)

🚀 Quick Start & Verification

Run these commands in your console terminal framework (or Developer PowerShell for VS 2022 on Windows):

# Clone and build skipbuild core
git clone https://github.com/rayyan0x/skipbuild.git
cd skipbuild
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --parallel

# Create a small dummy validation file
echo '#include <stdio.h>' > hello.cpp
echo 'int main() { printf("Hello, skipbuild!\n"); return 0; }' >> hello.cpp

# Cold run (Cache MISS)
build\Release\skipbuild.exe -- cl.exe /c hello.cpp /Fohello.obj

# Hot run (Cache HIT)
build\Release\skipbuild.exe -- cl.exe /c hello.cpp /Fohello.obj

📦 Installation

Method A: Automated One-Line Install Script (Recommended)

Linux & macOS (Bash/Zsh):

curl -fsSL https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.sh | bash

Windows (PowerShell 5.1+):

irm https://raw.githubusercontent.com/rayyan0x/skipbuild/main/scripts/install.ps1 | iex

Method B: Traditional Compilation From Source

git clone https://github.com/rayyan0x/skipbuild.git
cd skipbuild
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --parallel

🔧 Build System Integration

Build Toolchain Direct Configuration Mapping
CMake (Global Launcher) set(CMAKE_CXX_COMPILER_LAUNCHER "skipbuild")
CMake (Target Isolated) set_target_properties(my_target PROPERTIES CXX_COMPILER_LAUNCHER "skipbuild")
Ninja (build.ninja) rule cxx: command = skipbuild -- g++ -c $in -o $out $flags
GNU Make (Makefile) CXX := skipbuild g++

📊 Performance Benchmarks

Evaluated on an isolation test pipeline composed of 50 source targets interacting with 10 core include header tracks, tracked under -O2 -std=c++20 parameters.

  • Cold Build Time: 22.0 seconds (Baseline)
  • Hot Rebuild Time: 0.2 seconds 🚀
  • Net Performance Acceleration: ~110x Faster execution loops

📥 Asset Directory Fingerprints

Pre-compiled executable assets are attached below for instant zero-compilation use. Verify your downloaded binaries using the official cryptographic verification fingerprints:

  • skipbuild-windows-x64.exe — Standalone Windows x64 processing environment.
  • skipbuild-linux-x64 — Standalone Linux x64 executable container block.
  • skipbuild-macos-x64 — Standalone native macOS x64 architecture runner.
  • SHA256SUMS — Secure validation signatures tracking asset bundle verification.