From bb0e1ab5fc5d5a36cb4228f66895803aa1968da3 Mon Sep 17 00:00:00 2001 From: kamran Date: Tue, 24 Feb 2026 16:47:15 +0500 Subject: [PATCH 1/2] ci: cache vivisect workspaces between test runs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CI always starts cold because *.viv files are in .gitignore and never committed. Benchmark on mimikatz (112 viv feature tests): 8.65s WITH cache vs 118.95s WITHOUT — roughly 14x speedup. Add a GitHub Actions cache step that persists tests/data/**/*.viv between runs. Cache key includes OS, architecture, Python version, and a hash of requirements.txt so it auto-invalidates when the vivisect version is bumped. On a cache miss tests fall back to cold execution normally; the cache is a pure optimization with no hard dependency. fixes #556 --- .github/workflows/tests.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 77d2879d4..d8093c325 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -113,6 +113,11 @@ jobs: run: | pip install -r requirements.txt pip install -e .[dev,scripts] + - name: Cache vivisect workspaces + uses: actions/cache@v4 + with: + path: tests/data/**/*.viv + key: viv-${{ runner.os }}-${{ runner.arch }}-${{ matrix.python-version }}-${{ hashFiles('**/requirements.txt') }} - name: Run tests (fast) # this set of tests runs about 80% of the cases in 20% of the time, # and should catch most errors quickly. From ed34ffd395747fcdcce270714ff4628d917c62ac Mon Sep 17 00:00:00 2001 From: kamran Date: Wed, 25 Feb 2026 04:00:38 +0500 Subject: [PATCH 2/2] ci: pin actions/cache to commit hash per repo convention --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d8093c325..2b157abe8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -114,7 +114,7 @@ jobs: pip install -r requirements.txt pip install -e .[dev,scripts] - name: Cache vivisect workspaces - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: tests/data/**/*.viv key: viv-${{ runner.os }}-${{ runner.arch }}-${{ matrix.python-version }}-${{ hashFiles('**/requirements.txt') }}