Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
184 commits
Select commit Hold shift + click to select a range
769af67
playing around
cylewitruk-stacks Jul 10, 2026
fe24c59
fix some remaining chain-histories test failures
cylewitruk-stacks Jul 22, 2026
9689c1c
fix last few flakes
cylewitruk-stacks Jul 22, 2026
1723d03
Merge remote-tracking branch 'upstream/develop' into testing/in-mem-f…
cylewitruk-stacks Jul 27, 2026
8eb1036
Merge remote-tracking branch 'upstream/develop' into testing/in-mem-f…
cylewitruk-stacks Jul 28, 2026
23f5096
Merge remote-tracking branch 'upstream/main' into testing/in-mem-for-…
cylewitruk-stacks Jul 28, 2026
f914807
Merge remote-tracking branch 'upstream/main' into testing/in-mem-for-…
cylewitruk-stacks Jul 28, 2026
6345f78
Merge remote-tracking branch 'upstream/main' into testing/in-mem-for-…
cylewitruk-stacks Aug 18, 2026
bf5cbcf
add changelog.d entry
cylewitruk-stacks Aug 18, 2026
b52a704
fix some failing tests in ci
cylewitruk-stacks Aug 19, 2026
978aaf8
change unit test matrix to 6 partitions
cylewitruk-stacks Aug 20, 2026
dd53124
ci tweaks, runtime balancing
cylewitruk-stacks Aug 20, 2026
2d8771b
rebalance again
cylewitruk-stacks Aug 20, 2026
e1a97b9
fix mock-block polling timeout
cylewitruk-stacks Aug 21, 2026
cc82949
Merge remote-tracking branch 'upstream/main' into testing/in-mem-for-…
cylewitruk-stacks Aug 21, 2026
3f090c2
adapt transaction simulation to generic chainstate
cylewitruk-stacks Aug 21, 2026
52b1e98
fix issues with epoch 4 reorg test
cylewitruk-stacks Aug 21, 2026
d7234aa
try to improve bitcoin rpc tests and consolidate p2p+rpc jobs
cylewitruk-stacks Aug 21, 2026
3c0c87d
stabilize signer_multinode_rollover
cylewitruk-stacks Aug 21, 2026
3332f35
test: stabilize slow signer integration tests
cylewitruk-stacks Aug 21, 2026
2888376
ci: avoid archive download for bitcoin matrix
cylewitruk-stacks Aug 21, 2026
d61f0d5
ci: reuse nextest archive binaries for coverage
cylewitruk-stacks Aug 21, 2026
f03598c
ci: cache workspace compilation with sccache
cylewitruk-stacks Aug 21, 2026
2993a8c
test: wait for current waterfall block commit
cylewitruk-stacks Aug 22, 2026
7984fd2
ci: rebalance unit tests with current timings
cylewitruk-stacks Aug 22, 2026
f5fd016
test: wait for valid waterfall commit output
cylewitruk-stacks Aug 22, 2026
ccefca2
ci: run archived tests without Rust toolchains
cylewitruk-stacks Aug 22, 2026
2521c73
test: settle multi-miner tenures on live state
cylewitruk-stacks Aug 22, 2026
0578783
test: avoid reevaluating generated ASCII literals
cylewitruk-stacks Aug 22, 2026
8602cf1
ci: restore runtime Rust dependencies
cylewitruk-stacks Aug 22, 2026
2ad37cf
test: bound generated UTF-8 conversion inputs
cylewitruk-stacks Aug 22, 2026
d9bcf18
test: shorten and stabilize slow integration paths
cylewitruk-stacks Aug 22, 2026
facf6ad
test: keep epoch 4 reorg recovery within reward cycle
cylewitruk-stacks Aug 22, 2026
cac006c
ci: rebalance tests from latest runtimes
cylewitruk-stacks Aug 22, 2026
390daea
ci: run p2p integration tests concurrently
cylewitruk-stacks Aug 22, 2026
833b35f
test: stabilize in-memory p2p convergence tests
cylewitruk-stacks Aug 22, 2026
ce00618
test: synchronize multi-miner epoch boot
cylewitruk-stacks Aug 22, 2026
6043d51
ci: refresh test timings from latest runs
cylewitruk-stacks Aug 22, 2026
2afb382
ci: isolate parser stress test from memory-heavy tests
cylewitruk-stacks Aug 22, 2026
0a64cca
test: wait for multi-miner tenures before advancing
cylewitruk-stacks Aug 22, 2026
759ed04
test: wait for current signer and miner state
cylewitruk-stacks Aug 22, 2026
315c686
test: allow commits from the parent Stacks tip
cylewitruk-stacks Aug 22, 2026
691402b
ci: run bitcoin integrations concurrently
cylewitruk-stacks Aug 22, 2026
2b9c02b
style: fix signer test import ordering
cylewitruk-stacks Aug 22, 2026
0a927d0
test: keep p2p pingbacks alive through convergence
cylewitruk-stacks Aug 22, 2026
f98c0e4
ci: prioritize balanced bitcoin test batches
cylewitruk-stacks Aug 22, 2026
8c185f9
ci: isolate unit stress-test tail
cylewitruk-stacks Aug 22, 2026
22d4b9f
ci: refresh balanced test timings
cylewitruk-stacks Aug 22, 2026
c1710ba
test: use in-memory MARF for Clarity cost tests
cylewitruk-stacks Aug 22, 2026
ab26dff
test: wait for signer state after shadow repair
cylewitruk-stacks Aug 22, 2026
8a7e7ae
ci: isolate signer registration stress test
cylewitruk-stacks Aug 22, 2026
5ea4a4c
test: allow contended replay state convergence
cylewitruk-stacks Aug 22, 2026
ae2f091
test: allow contended MARF funding rounds
cylewitruk-stacks Aug 22, 2026
6d35480
test: containerize SIP-031 integration daemon
cylewitruk-stacks Aug 22, 2026
850bd66
ci: isolate large mempool stress tests
cylewitruk-stacks Aug 22, 2026
f892d0d
test: rely on per-block mock-sign deadlines
cylewitruk-stacks Aug 22, 2026
f317149
style: apply CI import grouping
cylewitruk-stacks Aug 22, 2026
411e0dd
test: retain signer responses across slot updates
cylewitruk-stacks Aug 22, 2026
5296827
ci: canary four-slot Bitcoin scheduling
cylewitruk-stacks Aug 22, 2026
bdb87ee
ci: isolate contended unit stress tests
cylewitruk-stacks Aug 22, 2026
02e9eb1
test: wait for restarted signer readiness
cylewitruk-stacks Aug 22, 2026
afce689
ci: rebalance tests after isolating contention
cylewitruk-stacks Aug 22, 2026
254cf1d
test: synchronize mock-miner replay output
cylewitruk-stacks Aug 23, 2026
967c08d
ci: rebalance tests from multi-run timings
cylewitruk-stacks Aug 23, 2026
f230d9a
ci: refresh balanced test timings
cylewitruk-stacks Aug 23, 2026
1cde5a3
ci: reduce test-matrix contention tails
cylewitruk-stacks Aug 23, 2026
4ddd939
test: allow contended replay convergence
cylewitruk-stacks Aug 23, 2026
10fc098
ci: refresh bitcoin timings from green runs
cylewitruk-stacks Aug 23, 2026
973548c
ci: decouple bitcoin runner count from batch cap
cylewitruk-stacks Aug 23, 2026
ea05a4d
ci: remove serialized unit and p2p tails
cylewitruk-stacks Aug 23, 2026
c117566
ci: start archive build alongside preflight checks
cylewitruk-stacks Aug 23, 2026
b439e32
ci: reuse unchanged workspace test artifacts
cylewitruk-stacks Aug 23, 2026
8569e2a
ci: refresh balancing from recent green runs
cylewitruk-stacks Aug 23, 2026
004f9ab
ci: use lcov parallel coverage merge
cylewitruk-stacks Aug 23, 2026
2414517
docs: document p2p timing refresh
cylewitruk-stacks Aug 23, 2026
51078de
ci: start independent checks immediately
cylewitruk-stacks Aug 23, 2026
a545e04
ci: contain runner variance with smaller batches
cylewitruk-stacks Aug 23, 2026
a987290
ci: release bitcoin tests from the full archive build
cylewitruk-stacks Aug 23, 2026
b74c6fe
ci: split workspace test archives by suite
cylewitruk-stacks Aug 23, 2026
38f2ff2
test: prevent problematic transaction observation race
cylewitruk-stacks Aug 23, 2026
7398ccb
ci: isolate epoch boundary integration test
cylewitruk-stacks Aug 23, 2026
e5e7e99
ci: preserve signer monitoring in split archive
cylewitruk-stacks Aug 23, 2026
4439343
ci: refresh split-unit timing model
cylewitruk-stacks Aug 23, 2026
7793555
ci: parallelize native target feature checks
cylewitruk-stacks Aug 23, 2026
f3d6173
test: stabilize slow signer integration paths
cylewitruk-stacks Aug 23, 2026
68ddd15
ci: refresh unit timings from split archives
cylewitruk-stacks Aug 23, 2026
2cc90ff
test: trim redundant multi-miner block repetitions
cylewitruk-stacks Aug 23, 2026
5e60927
ci: incorporate current unit runner contention
cylewitruk-stacks Aug 23, 2026
e17df42
test: drive signer capitulation checks explicitly
cylewitruk-stacks Aug 23, 2026
738cf3e
ci: add a third balanced p2p shard
cylewitruk-stacks Aug 23, 2026
6898947
ci: contain stackslib unit contention
cylewitruk-stacks Aug 23, 2026
62597a9
test: shorten epoch 4 multi-miner runway
cylewitruk-stacks Aug 23, 2026
c57403b
test: stabilize signer rollover convergence
cylewitruk-stacks Aug 23, 2026
6087a6a
ci: streamline nextest archive setup
cylewitruk-stacks Aug 23, 2026
63b0c79
test: shorten repeated multi-miner blocks
cylewitruk-stacks Aug 23, 2026
f9886fd
test: shorten epoch 4 waterfall runway
cylewitruk-stacks Aug 23, 2026
bca7837
test: share compact epoch 4 waterfall setup
cylewitruk-stacks Aug 23, 2026
6a335ff
ci: prepare coverage tools off critical path
cylewitruk-stacks Aug 23, 2026
5d3ab48
ci: isolate contention-sensitive signer tests
cylewitruk-stacks Aug 23, 2026
7e61405
test: tolerate partial signer global state
cylewitruk-stacks Aug 23, 2026
5073d43
ci: model bitcoin test resource contention
cylewitruk-stacks Aug 23, 2026
1cd4233
ci: prepare bitcoin containers and llvm coverage
cylewitruk-stacks Aug 23, 2026
0f8001d
test: stabilize forked replay completion
cylewitruk-stacks Aug 23, 2026
554d8be
ci: refresh bitcoin integration timings
cylewitruk-stacks Aug 23, 2026
554f9f1
ci: cache exact nextest archive topologies
cylewitruk-stacks Aug 23, 2026
b4bd965
test: prevent bitcoin integration retry tails
cylewitruk-stacks Aug 23, 2026
60cf6fd
test: shorten vtxindex epoch setup
cylewitruk-stacks Aug 23, 2026
d6e51f7
ci: refresh unit test timings
cylewitruk-stacks Aug 23, 2026
56296b3
test: tolerate no-sortition burn gaps
cylewitruk-stacks Aug 23, 2026
a4076bf
ci: isolate signer precommit integration
cylewitruk-stacks Aug 23, 2026
5be6a9c
ci: refresh bitcoin integration timings
cylewitruk-stacks Aug 23, 2026
cb0b6b1
test: wait for signer global state at boundaries
cylewitruk-stacks Aug 24, 2026
a36dc72
ci: isolate p2p topology simulations
cylewitruk-stacks Aug 24, 2026
0ae9106
test: tolerate missed preparatory rollover tenures
cylewitruk-stacks Aug 24, 2026
c5cfde1
test: retry first multinode epoch tenure
cylewitruk-stacks Aug 24, 2026
14a86ce
ci: remove coverage merge from critical path
cylewitruk-stacks Aug 24, 2026
1de42e0
ci: isolate exclusive bitcoin replay test
cylewitruk-stacks Aug 24, 2026
8afcc23
test: stabilize slow bitcoin convergence cases
cylewitruk-stacks Aug 24, 2026
d98b890
test: bound bitcoin convergence retries in-process
cylewitruk-stacks Aug 24, 2026
4f30be8
test: synchronize first waterfall commit
cylewitruk-stacks Aug 24, 2026
98afbce
ci: isolate idle miner without another runner
cylewitruk-stacks Aug 24, 2026
c02aa6b
ci: retry concurrent bitcoin image pulls
cylewitruk-stacks Aug 24, 2026
1d41c2f
ci: size bitcoin matrix from discovered tests
cylewitruk-stacks Aug 24, 2026
996a795
test: tolerate waterfall commit replacement race
cylewitruk-stacks Aug 24, 2026
2120051
test: assert signer capitulation from local state
cylewitruk-stacks Aug 24, 2026
1966e10
ci: refresh bitcoin runtime balance
cylewitruk-stacks Aug 24, 2026
d98645c
test: synchronize tenure-extend proposal stall
cylewitruk-stacks Aug 24, 2026
5d5d0f0
ci: cache locally built Nix store paths
cylewitruk-stacks Aug 24, 2026
177ae58
ci: remove ineffective Nix cache experiment
cylewitruk-stacks Aug 24, 2026
ffd1887
ci: use ten-run p90 bitcoin timings
cylewitruk-stacks Aug 24, 2026
f3360e0
test: stabilize post-shadow and multi-miner progress
cylewitruk-stacks Aug 24, 2026
7bad97d
ci: reserve runners for multi-miner tests
cylewitruk-stacks Aug 24, 2026
7cf300f
test: synchronize signer before shadow recovery commit
cylewitruk-stacks Aug 24, 2026
638eca2
test: synchronize bitcoin integration progress
cylewitruk-stacks Aug 24, 2026
e844eee
test: remove redundant follower sync deadline
cylewitruk-stacks Aug 24, 2026
1de2dff
test: shorten compact epoch 4 schedule
cylewitruk-stacks Aug 24, 2026
696d969
ci: isolate bitcoin reorg convergence test
cylewitruk-stacks Aug 24, 2026
9f0d083
test: inspect waterfall commits through mempool
cylewitruk-stacks Aug 24, 2026
9154e82
test: wait for reorg block staging
cylewitruk-stacks Aug 24, 2026
530337d
ci: reserve runners for fragile integrations
cylewitruk-stacks Aug 24, 2026
2551304
test: synchronize signer integration state
cylewitruk-stacks Aug 24, 2026
ddb7891
ci: align bitcoin test resource reservations
cylewitruk-stacks Aug 24, 2026
87c8061
test: select latest signer block acceptance
cylewitruk-stacks Aug 24, 2026
e38a81f
ci: refresh unit test timing model
cylewitruk-stacks Aug 24, 2026
0661bcd
ci: rebalance tests from latest green run
cylewitruk-stacks Aug 24, 2026
85b0b45
test: synchronize replay after replacement burn tip
cylewitruk-stacks Aug 24, 2026
b2c52a3
ci: bound unit and bitcoin contention
cylewitruk-stacks Aug 24, 2026
124ca38
test: shorten SIP-031 emission schedule
cylewitruk-stacks Aug 24, 2026
adc1f3f
test: keep signer mock server available across requests
cylewitruk-stacks Aug 24, 2026
1e975ae
test: allow signer capitulation to settle under CI
cylewitruk-stacks Aug 24, 2026
2cf5968
ci: keep diagnostic artifact outages non-fatal
cylewitruk-stacks Aug 24, 2026
1b04f4d
test: isolate consensus-block convergence setup
cylewitruk-stacks Aug 24, 2026
8a9b4fa
ci: restore five-test bitcoin batches
cylewitruk-stacks Aug 24, 2026
13599d7
ci: model serialized unit-test groups
cylewitruk-stacks Aug 24, 2026
e4f8ff3
test: stall miner before replay-set fork
cylewitruk-stacks Aug 24, 2026
b23d55f
ci: prioritize slow tests within unit shards
cylewitruk-stacks Aug 24, 2026
338c12c
ci: partition native cargo-hack sweeps
cylewitruk-stacks Aug 24, 2026
0e973b4
ci: cap bitcoin batches at two execution waves
cylewitruk-stacks Aug 24, 2026
c898936
ci: prioritize only serialized unit-test groups
cylewitruk-stacks Aug 24, 2026
88f3fd3
test: anchor signer capitulation to global convergence
cylewitruk-stacks Aug 24, 2026
4c81ce8
test: shorten two-cycle signer transition
cylewitruk-stacks Aug 24, 2026
d3576aa
test: wait for forked tenure canonical tip
cylewitruk-stacks Aug 24, 2026
ffc95a0
ci: refresh bitcoin integration timings
cylewitruk-stacks Aug 24, 2026
9cebf94
ci: scope bitcoin timings to current topology
cylewitruk-stacks Aug 24, 2026
6a39796
test: wait for a newly submitted stale commit
cylewitruk-stacks Aug 24, 2026
e3b8b50
fix: rebuild downloader state at epoch handoff
cylewitruk-stacks Aug 24, 2026
5e1748a
test: fix stale commit and signer response waits
cylewitruk-stacks Aug 24, 2026
2ecca57
ci: refresh bitcoin timings after stabilization
cylewitruk-stacks Aug 24, 2026
54b25b6
test: stabilize signer rollover and rejection waits
cylewitruk-stacks Aug 24, 2026
bb8fd24
ci: rebalance unit tests from six green runs
cylewitruk-stacks Aug 24, 2026
9400003
test: recover stalled rollover interim blocks
cylewitruk-stacks Aug 24, 2026
7bdec94
test: synchronize multi-miner reorg progress
cylewitruk-stacks Aug 24, 2026
52e0b4a
ci: refresh runtime balancing from seven runs
cylewitruk-stacks Aug 24, 2026
c0be957
ci: rebalance tests with contention-aware percentiles
cylewitruk-stacks Aug 24, 2026
cb6b288
Merge remote-tracking branch 'upstream/main' into testing/in-mem-for-…
cylewitruk-stacks Aug 24, 2026
f1ba066
ci: rebalance co-critical test workflows
cylewitruk-stacks Aug 24, 2026
7cc8cbd
test: shorten multi-cycle follower setup
cylewitruk-stacks Aug 24, 2026
126783a
ci: balance bitcoin tests against recent maxima
cylewitruk-stacks Aug 24, 2026
b33db7f
ci: cache reusable Nix dependency artifacts
cylewitruk-stacks Aug 24, 2026
94e592b
test: observe signer progress in flaky bitcoin tests
cylewitruk-stacks Aug 25, 2026
2b040f8
ci: run isolated bitcoin tests concurrently
cylewitruk-stacks Aug 25, 2026
7def42d
test: make p2p convergence scheduling reproducible
cylewitruk-stacks Aug 25, 2026
48511d0
ci: optimize coverage-instrumented test binaries
cylewitruk-stacks Aug 25, 2026
c6455d1
Revert "ci: optimize coverage-instrumented test binaries"
cylewitruk-stacks Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 91 additions & 36 deletions .github/actions/artifacts/nextest-archive/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,26 @@ inputs:
archive-file:
description: "The nextest archive file"
required: true
debug-binary-path:
description: "Debug binary path"
required: true

artifact-name:
description: "Artifact containing the nextest archive and bundled tools"
required: false
default: "nextest-archive"
test-list-artifact-name:
description: "Artifact containing the nextest test manifest"
required: false
default: "nextest-test-list"
package:
description: "Optional workspace package to archive instead of the full workspace"
required: false
default: ""
exclude-packages:
description: "Space-separated workspace packages to exclude from the archive"
required: false
default: ""
features:
description: "Comma-separated Cargo features enabled while building the archive"
required: false
default: "monitoring_prom"
runs:
using: "composite"
steps:
Expand All @@ -21,20 +37,19 @@ runs:
inputs.action == 'restore'
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # 8.0.1
with:
name: "nextest-archive"
name: ${{ inputs.artifact-name }}

# Install the tool binaries bundled in the artifact (see the staging step
# in the create path below)
# in the create path below).
- name: Install Bundled Tools
if: |
inputs.action == 'restore'
shell: bash
run: |
# upload-artifact does not preserve file permissions, so restore the
# executable bit before putting the tools on $PATH
chmod +x ci-tools/*
mkdir -p "$HOME/.cargo/bin"
mv -f ci-tools/* "$HOME/.cargo/bin/"
tar --extract --zstd --file ci-tools.tar.zst --directory "$HOME/.cargo/bin"
chmod +x "$HOME/.cargo/bin"/{cargo-nextest,grcov}
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"

# Checkout the code
- name: Checkout the latest code
Expand All @@ -49,8 +64,13 @@ runs:
if: |
inputs.action == 'create'
uses: ./.github/actions/setup-rust-toolchain
with:
components: llvm-tools-preview

# Cache compiler outputs by content in addition to restoring Cargo's target
# tree; this still helps when changed sources invalidate a local crate.
- name: Setup sccache
if: |
inputs.action == 'create'
uses: ./.github/actions/setup-sccache

# Install nextest and grcov
# grcov is not needed to build the archive, but it is bundled into the
Expand All @@ -62,25 +82,29 @@ runs:
with:
tools: nextest, grcov

# Stage the tool binaries so they are uploaded with the artifact. The many
# parallel test jobs restore them from there instead of each downloading
# from GitHub Releases, which rate-limits the runners' shared IPs (429)
# Stage the tools that do not ship with the Rust toolchain. Coverage jobs
# install llvm-tools-preview because its binaries depend on matching shared
# libraries from the toolchain sysroot.
- name: Stage Tool Binaries for Upload
if: |
inputs.action == 'create'
shell: bash
run: |
mkdir -p ci-tools
cp "$(command -v cargo-nextest)" "$(command -v grcov)" ci-tools/
cp \
"$(command -v cargo-nextest)" \
"$(command -v grcov)" \
ci-tools/
tar --create --zstd --file ci-tools.tar.zst --directory ci-tools .

# Install mold linker and clang (faster than default)
- name: Install mold Linker (and clang)
# Clang is preinstalled on GitHub's Ubuntu runners. Downloading mold
# directly avoids refreshing apt metadata in every archive job.
- name: Install mold Linker
if: |
inputs.action == 'create'
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y mold clang
uses: rui314/setup-mold@7e4f20ad28a2e8ca6fd0892ccf72e2abb706b9c3 # v1, mold 2.42.0
with:
make-default: false

# Restore the cargo cache
- name: Restore Cargo Cache
Expand All @@ -96,39 +120,70 @@ runs:
inputs.action == 'create'
shell: bash
env:
ARCHIVE_EXCLUDE_PACKAGES: ${{ inputs.exclude-packages }}
ARCHIVE_FEATURES: ${{ inputs.features }}
ARCHIVE_PACKAGE: ${{ inputs.package }}
RUSTFLAGS: "-C instrument-coverage -C linker=clang -C link-arg=-fuse-ld=mold -A warnings"
CARGO_INCREMENTAL: 0
# This command should be kept in sync with the same command in cache/cargo action
# Keep these package and feature combinations represented in the
# default-branch builds in cache/cargo.
run: |
# Capture the archive file input, then expand the leading ~ to $HOME
INPUT_FILE="${{ inputs.archive-file }}"
ARCHIVE_FILE="${INPUT_FILE/#\~/$HOME}"

PACKAGE_ARGS=(--workspace)
if [[ -n "$ARCHIVE_PACKAGE" ]]; then
if [[ -n "$ARCHIVE_EXCLUDE_PACKAGES" ]]; then
echo "package and exclude-packages cannot be used together" >&2
exit 1
fi
PACKAGE_ARGS=(--package "$ARCHIVE_PACKAGE")
elif [[ -n "$ARCHIVE_EXCLUDE_PACKAGES" ]]; then
read -r -a EXCLUDED_PACKAGES <<< "$ARCHIVE_EXCLUDE_PACKAGES"
for excluded_package in "${EXCLUDED_PACKAGES[@]}"; do
PACKAGE_ARGS+=(--exclude "$excluded_package")
done
fi

cargo nextest archive \
--workspace \
"${PACKAGE_ARGS[@]}" \
--tests \
--locked \
--features monitoring_prom \
--features "$ARCHIVE_FEATURES" \
--archive-file "$ARCHIVE_FILE"

cargo nextest list \
--archive-file "$ARCHIVE_FILE" \
--message-format json \
> nextest-test-list.json

# Matrix-generation jobs only need the test manifest. Keep it separate so
# they do not download the much larger archive and debug binaries.
- name: Create Nextest Test List Artifact
if: |
inputs.action == 'create'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # 7.0.1
with:
name: ${{ inputs.test-list-artifact-name }}
path: nextest-test-list.json
if-no-files-found: error
retention-days: 1
compression-level: 9
overwrite: true

- name: Create Nextest Archive Artifact
if: |
inputs.action == 'create'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # 7.0.1
with:
name: "nextest-archive"
name: ${{ inputs.artifact-name }}
path: |
${{ inputs.archive-file }}
ci-tools/
${{ inputs.debug-binary-path }}
!${{ inputs.debug-binary-path }}/examples/**
!${{ inputs.debug-binary-path }}/incremental/**
!${{ inputs.debug-binary-path }}/.fingerprint/**
!${{ inputs.debug-binary-path }}/build/**
!${{ inputs.debug-binary-path }}/deps/**/*.d
!${{ inputs.debug-binary-path }}/deps/**/*.rlib
!${{ inputs.debug-binary-path }}/deps/**/*.rmeta
ci-tools.tar.zst
if-no-files-found: error
retention-days: 1
compression-level: 9 # 0 (none) - 9 (most)
# The nextest archive and tool binaries are already compressed or
# incompressible; recompressing them only delays every test job.
compression-level: 0
overwrite: true
77 changes: 48 additions & 29 deletions .github/actions/cache/cargo/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,15 @@ runs:
restore-keys: ${{ steps.generate-keys.outputs.cargo-restore-key }}
fail-on-cache-miss: true

# Cache extraction makes target files newer than the checkout. Refresh only
# sources whose Git blob changed so Cargo can safely reuse unchanged local
# crates and test harnesses from the default-branch cache.
- name: Restore Workspace Source Freshness
if: |
inputs.action == 'restore'
shell: bash
run: bash ./.github/scripts/restore_cargo_freshness.sh

# Checkout the code
- name: Checkout the latest code
if: |
Expand All @@ -73,8 +82,13 @@ runs:
if: |
inputs.action == 'create'
uses: ./.github/actions/setup-rust-toolchain
with:
components: llvm-tools-preview

# Populate the shared compiler cache while creating the default-branch
# Cargo cache so pull-request builds can reuse unchanged workspace crates.
- name: Setup sccache
if: |
inputs.action == 'create'
uses: ./.github/actions/setup-sccache

# Install nextest
- name: Install nextest
Expand All @@ -84,50 +98,55 @@ runs:
with:
tools: nextest

# Install mold linker and clang (faster than default)
- name: Install mold Linker (and clang)
# Clang is preinstalled on GitHub's Ubuntu runners. Downloading mold
# directly avoids refreshing apt metadata in the cache-generation job.
- name: Install mold Linker
if: |
inputs.action == 'create'
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y mold clang
uses: rui314/setup-mold@7e4f20ad28a2e8ca6fd0892ccf72e2abb706b9c3 # v1, mold 2.42.0
with:
make-default: false

# Build the cargo crates
# Build the exact archive topologies consumed by pull-request CI. Cargo
# keeps their distinct feature fingerprints side-by-side in target/.
- name: Build Cargo Crates
if: |
inputs.action == 'create'
shell: bash
env:
RUSTFLAGS: "-C instrument-coverage -C linker=clang -C link-arg=-fuse-ld=mold -A warnings"
CARGO_INCREMENTAL: 0
# This command should be kept in sync with the same command in artifacts/nextest-archive action
run: |
cargo nextest archive \
build_cache_archive() {
local archive_name="$1"
local features="$2"
shift 2

cargo nextest archive \
"$@" \
--tests \
--locked \
--features "$features" \
--archive-file "$RUNNER_TEMP/$archive_name.tar.zst"
}

build_cache_archive remaining monitoring_prom \
--workspace \
--tests \
--locked \
--features monitoring_prom \
--archive-file "not_used.tar.zst"
--exclude stacks-node \
--exclude stackslib
build_cache_archive bitcoin monitoring_prom,stacks-signer/monitoring_prom \
--package stacks-node
build_cache_archive stackslib monitoring_prom \
--package stackslib

# Dynamic cleanup of local workspace crates right after building. We never want them to exist in the produced cache.
# These are things like stacks-signer, stacks-inspect, etc. built locally from our codebase.
# We must always compile them on-the-fly from current code, as they aren't bumped in version when they are changed.
- name: Clean Local Workspace Crates
# Record content identities so restore jobs can invalidate changed sources
# without throwing away every reusable workspace artifact.
- name: Record Workspace Source Index
if: |
inputs.action == 'create'
shell: bash
run: |
if [ -f Cargo.toml ]; then
echo "Identifying local workspace crates to exclude from restored cache..."
cargo metadata --format-version 1 --no-deps | jq -r '.packages[].name' | while read -r crate; do
echo "Wiping build artifacts for local crate: $crate"
cargo clean -p "$crate"
done
else
echo "ERROR: No Cargo.toml found in the current working directory."
exit 1
fi
git ls-files -s -z > target/.ci-workspace-source-index

# Save cache data
- name: Save Cache
Expand Down
24 changes: 23 additions & 1 deletion .github/actions/coveralls-upload/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ description: |
inputs:
files:
description: Space-separated list of coverage report files to upload (supports globs)
required: true
required: false
default: ''
build-number:
description: Overrides the build number Coveralls autodetects from CI
required: true
Expand All @@ -21,6 +22,18 @@ inputs:
git-commit:
description: When provided, attributes the coverage to a specific commit
required: false
flag-name:
description: Unique report name for a parallel Coveralls build
required: false
default: ''
parallel:
description: Whether this report belongs to a parallel Coveralls build
required: false
default: 'false'
parallel-finished:
description: Whether to finalize a parallel Coveralls build
required: false
default: 'false'
coverage-reporter-version:
description: Coveralls reporter binary version (the action SHA is pinned but downloads the reporter at 'latest' unless pinned)
required: false
Expand All @@ -42,6 +55,9 @@ runs:
compare-ref: ${{ inputs.compare-ref }}
git-branch: ${{ inputs.git-branch }}
git-commit: ${{ inputs.git-commit }}
flag-name: ${{ inputs.flag-name }}
parallel: ${{ inputs.parallel }}
parallel-finished: ${{ inputs.parallel-finished }}
fail-on-error: true
coverage-reporter-version: ${{ inputs.coverage-reporter-version }}

Expand All @@ -61,6 +77,9 @@ runs:
compare-ref: ${{ inputs.compare-ref }}
git-branch: ${{ inputs.git-branch }}
git-commit: ${{ inputs.git-commit }}
flag-name: ${{ inputs.flag-name }}
parallel: ${{ inputs.parallel }}
parallel-finished: ${{ inputs.parallel-finished }}
fail-on-error: true
coverage-reporter-version: ${{ inputs.coverage-reporter-version }}

Expand All @@ -80,6 +99,9 @@ runs:
compare-ref: ${{ inputs.compare-ref }}
git-branch: ${{ inputs.git-branch }}
git-commit: ${{ inputs.git-commit }}
flag-name: ${{ inputs.flag-name }}
parallel: ${{ inputs.parallel }}
parallel-finished: ${{ inputs.parallel-finished }}
fail-on-error: true
coverage-reporter-version: ${{ inputs.coverage-reporter-version }}

Expand Down
Loading
Loading