Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
535 commits
Select commit Hold shift + click to select a range
12a638c
Skip libyaml onedir test on downgrade flavor
dwoz Aug 11, 2026
ddf673f
test_libyaml: version-conditional assertions across install/upgrade/d…
dwoz Aug 12, 2026
6b373eb
test_libyaml: key on install_salt.use_prev_version, not artifact version
dwoz Aug 12, 2026
098e4be
zeromq: per-instance UUID IDENTITY for daemon AsyncReqMessageClient (…
dwoz Aug 13, 2026
c21f76a
Fix pem_finger so PEM strings match file fingerprints
twangboy Aug 11, 2026
6a3e0f4
Disable pip's periodic version check in salt-pip
dwoz Aug 13, 2026
6c1d1d5
Add functional test for salt-pip PIP_DISABLE_PIP_VERSION_CHECK
dwoz Aug 13, 2026
95c4666
Add configurable/cgroup-aware minion memory headroom check
dwoz Aug 13, 2026
bc6d557
Make salt.loader.resource_modules deny-by-default
dwoz Jul 26, 2026
f52cede
Update aiohttp to version 3.14.3
twangboy Aug 13, 2026
1ae9e23
Add scenario tests for minion memory headroom (#69884)
dwoz Aug 14, 2026
160e62f
Fix handling of specific x509_v2 GeneralNames
lkubb Aug 14, 2026
da45305
Account for issuer's basicConstraints pathlen in CA certs
lkubb Aug 14, 2026
cff853e
Respect `get_encoding` param
lkubb Aug 14, 2026
b82635c
Minor lint fixes
lkubb Aug 14, 2026
99cc5e5
Fix Junos timeout wrappers crashing on dev_timeout=None (#58108)
ggiesen Jul 12, 2026
d467ae5
Strip reserved __kwarg__ marker before forwarding Junos RPC options (…
ggiesen Jul 16, 2026
e7e4b3b
Fix NTP/SNMP/probe config on NAPALM proxy minions (bare-name templates)
ggiesen Jul 12, 2026
cde89ca
Add changelog for #69793
ggiesen Jul 12, 2026
7fd38d8
Drop unused salt.utils.napalm import from the napalm tests
ggiesen Jul 12, 2026
b862e2c
Remove legacy test_napalm_probes.py superseded by the pytest tests
ggiesen Jul 12, 2026
082dc0a
Serialize concurrent NAPALM calls on a shared device connection (#55332)
ggiesen Jul 16, 2026
aa300ad
Optimize EventPublisher fan-out: raw_payload passthrough + tag peek
dwoz Aug 15, 2026
ecc256e
Add tests for EventPublisher fan-out raw_payload passthrough + tag pe…
dwoz Aug 15, 2026
a20cbf5
Fix crash/mutation/log bugs in the shared napalm utils and proxy
ggiesen Jul 12, 2026
8e05b7a
Add changelog for #69796
ggiesen Jul 12, 2026
77e8378
Fix functional tests after pathlen fix
lkubb Aug 15, 2026
f5b2880
Widen retry window for salt-minion service re-registration race
twangboy Aug 11, 2026
bf939d3
Update GitPython to 3.1.59 and pyasn1 to 0.6.4
twangboy Aug 12, 2026
bf17a04
Merge branch '3006.x' into fix-55332-napalm-cli-race
twangboy Aug 17, 2026
df50d24
Fan-out: propagate raw_payload kwarg to base + zeromq + ws PublishSer…
dwozniak-collab Aug 18, 2026
31770c5
Stop the loader from shadowing top-level imports via sys.path (#69139)
ggiesen Jul 11, 2026
248eb32
Add functional regression test for the loader sys.path shadow (#69139)
ggiesen Jul 13, 2026
03014ce
Revert PR #69622 (mis-merge of 3008.x content onto 3007.x)
dwozniak-collab Aug 18, 2026
ac92dec
Merge pull request #69819 from ggiesen/fix-55332-napalm-cli-race
dwoz Aug 18, 2026
d043b42
Merge pull request #70047 from lkubb/fix-x509v2-nameconstraints
dwoz Aug 18, 2026
3c620bc
Merge pull request #70038 from dwoz/dwoz/fix/69884-memory-headroom-co…
dwoz Aug 18, 2026
1ece064
Merge remote-tracking branch 'origin/3006.x' into merge/3006.x/3007.x…
dwozniak-collab Aug 18, 2026
a7d4f73
Fix master-cluster peer traffic honoring cluster_pool_port (#69877)
dwozniak-collab Aug 18, 2026
da2a8c5
tests/stress/ep: fixture + PubServer drain-timeout regression
dwozniak-collab Aug 18, 2026
7745e98
tests/stress/ep: subprocess-level throughput, fanout, fault-injection…
dwozniak-collab Aug 18, 2026
255ef26
Add MWorker-only stress + regression tests
dwozniak-collab Aug 18, 2026
269063a
tests/stress: add isolated MWorkerQueue subprocess stress suite
dwozniak-collab Aug 18, 2026
d0351b4
stress/pubchannel: fixture spawning isolated PublishServer._publish_d…
dwozniak-collab Aug 18, 2026
5f35a88
stress/pubchannel: smoke and throughput tests
dwozniak-collab Aug 18, 2026
2613ecb
stress/pubchannel: slow-subscriber and zmq pub_hwm drop-visibility re…
dwozniak-collab Aug 18, 2026
1491bdb
stress/pubchannel: fault injection and peer churn tests
dwozniak-collab Aug 18, 2026
f3ffc8f
Constrain git-describe tag match to v3007.* on 3007.x
dwozniak-collab Aug 18, 2026
34759af
Rewrite salt.ext.tornado imports to plain tornado in metaproxy tests
dwozniak-collab Aug 18, 2026
9a41326
Merge pull request #70052 from dwoz/dwoz/optimize/ep-fanout-passthrough
dwoz Aug 18, 2026
6993c20
Merge pull request #70079 from dwoz/dwoz/fix/69877-cluster-port-rename
dwoz Aug 19, 2026
f5b74a1
Add Master Inodes (Disk Files) panel to stress-test dashboard
charzl Aug 19, 2026
752bdd6
Ship Python 3.11.15 in 3007.x onedir packages
dwozniak-collab Aug 19, 2026
0da38ee
Add process-level CPU metrics for Master/API to fd_exporter.py
charzl Aug 19, 2026
d3fff81
tcp PubServer: catch StreamBufferFullError in publish_payload
dwozniak-collab Aug 19, 2026
66320e5
Fix missing minion number on Inode panel titles
charzl Aug 19, 2026
4f66179
Add Master Inodes (% Used) panel + fix render_panels.py percent unit
charzl Aug 19, 2026
7c67fd7
Revert Master Inodes (% Used) panel -- cAdvisor overlay2 limitation
charzl Aug 19, 2026
c0a9665
Revert panel 51's container CPU query back to salt-master
charzl Aug 20, 2026
99b37ea
Panel 51: drop redundant container CPU line, revert title
charzl Aug 20, 2026
b58802f
Add Per-Master-Process CPU and FD panel groups
charzl Aug 20, 2026
d2af51f
Combine the 5 MWorker panels into one per CPU/FD section
charzl Aug 20, 2026
3fa8b91
Add a 10m duration option to the stress test dispatch
charzl Aug 20, 2026
69ed821
Add run-nightly-stress.yml: dispatch nightly-stress-test.yml per branch
charzl Aug 20, 2026
8616e3c
Fix test_schema assertions for jsonschema 4.x error wording
dwozniak-collab Aug 20, 2026
a390711
Merge pull request #70097 from dwoz/dwoz/fix/pubserver-buffer-full-3008x
dwoz Aug 20, 2026
915b4c8
Retry chocolatey installer download on transient HTTP errors
dwoz Aug 20, 2026
28e25c9
Restore several dropped 3006.x fixes + adapt tests for py3.11 deps
dwoz Aug 20, 2026
dfdb211
Restore junos/linux_shadow fixes dropped by the botched-merge revert
dwoz Aug 20, 2026
4838a87
Restore more dropped 3006.x fixes on the merge-forward
dwoz Aug 20, 2026
5c701bc
Include minion id on rejected-auth log + guard pillar_refresh functio…
dwoz Aug 20, 2026
8b63e70
Merge pull request #69837 from twangboy/add/69836/master
dwoz Aug 21, 2026
9ed7f75
Merge pull request #70105 from dwoz/fix/nightly-chocolatey-504
dwoz Aug 21, 2026
3bae854
Merge pull request #70094 from saltstack/feature/vcops-100030-master-…
dwoz Aug 21, 2026
61cc506
Merge remote-tracking branch 'origin/3008.x' into feature/vcops-10959…
charzl Aug 21, 2026
8b88ad7
Rename nightly-stress-test.yml to run-stress-test.yml, add branch input
charzl Aug 19, 2026
362cebc
Add nightly-stress-test.yml dispatcher (byte-identical to master's)
charzl Aug 19, 2026
df0ca24
Drop branch input's default -- callers must pass it explicitly
charzl Aug 19, 2026
d0da26e
Merge run-stress-test.yml back into a single nightly-stress-test.yml
charzl Aug 20, 2026
d5fbd3e
Drop branch input's default and all hardcoded '3006.x' fallbacks
charzl Aug 20, 2026
fa1a228
Drop the branch-input comment
charzl Aug 20, 2026
758d00e
Discard non-dict frames in tcp.PublishClient.recv
dwoz Aug 21, 2026
7a81922
Restore Amazon-Linux-2 / CentOS-7 skip on test_ansible_playbook
dwoz Aug 21, 2026
781be86
Add changelog entry for 3006.x nightly stress test enablement
charzl Aug 21, 2026
7ab5c7c
Avoid asyncio.wait_for cancel-after-consume in transport recv paths
dwoz Aug 21, 2026
e2cf612
Merge pull request #70096 from saltstack/feature/vcops-109599-master-…
dwoz Aug 21, 2026
425e568
Add debug logging to fileserver dispatch and roots backend
BrianHa94 Aug 21, 2026
96d13fe
Make set_umask/get_umask thread safe
geoffberger Jul 21, 2026
c61c285
Fix changelog entry to describe what this PR actually changes
charzl Aug 21, 2026
14ae27f
Trim changelog entry -- state the effect, not the implementation detail
charzl Aug 21, 2026
46f393d
Narrow the previous transport recv fix; revert breaking bits
dwoz Aug 21, 2026
8164797
tcp transport: cap client-side outbound write buffers per ipc_write_b…
dwozniak-collab Aug 19, 2026
1423f10
Add changelog entry for fileserver debug logging
BrianHa94 Aug 21, 2026
e5aba86
tests/module_names: exclude pubchannel stress helpers.py from test_*.…
dwoz Aug 21, 2026
d77d6ef
stress/master_subprocess: widen aarch64 RSS ceilings on churn tests
dwoz Aug 21, 2026
03fda2b
Fix _lint() to resolve platform-specific requirements lock file
BrianHa94 Jul 28, 2026
452be62
Fix remaining duplicate-key hook bugs and add yamllint regression guard
BrianHa94 Jul 29, 2026
7bd2adb
Give lint.lock per-platform variants and trim it to lint-only deps
BrianHa94 Jul 31, 2026
7ea4061
Skip lint-lock checks that require a Linux host, fix stale doc reference
BrianHa94 Aug 3, 2026
8567cd8
Re-sync darwin/windows boto3 pin with linux/cloud after rebasing onto…
BrianHa94 Aug 22, 2026
db3bdea
Re-sync freebsd boto3 pin with linux/cloud/darwin/windows
BrianHa94 Aug 22, 2026
161b714
Fix ZeroMQSocketMonitor teardown race causing Windows libzmq abort
dwoz Aug 22, 2026
3e6e9a1
Cap Cython < 3.3 for onedir source builds
dwoz Aug 22, 2026
2d2dd52
Merge pull request #70099 from saltstack/feature/run-stress-test
dwoz Aug 22, 2026
2dbf862
Merge pull request #69922 from dwoz/dwoz/perf/zmq-identity-slot-cap-3…
dwoz Aug 22, 2026
942be37
Pin Cython<3.3 for pyzmq source-build compat
dwoz Aug 22, 2026
12f7174
Merge pull request #69933 from BrianHa94/fix-69932-lint-pre-commit-cr…
dwoz Aug 22, 2026
a35f4cd
Pin Cython<3.3 for pyzmq source-build compat
dwoz Aug 22, 2026
fadb107
Merge pull request #70106 from BrianHa94/fix/add-debug-logs-to-filese…
dwoz Aug 23, 2026
7f34881
Merge pull request #69956 from lkubb/x509_v2-wrapper-file-args
dwoz Aug 23, 2026
4eb647b
Merge pull request #70098 from dwoz/dwoz/fix/client-write-buffer-cap-…
dwoz Aug 23, 2026
c74f105
Merge pull request #70121 from dwoz/dwoz/fix/cython-3.3-pin-3006x
dwoz Aug 23, 2026
de002e6
Merge pull request #70118 from dwoz/dwoz/fix/cython-3.3-pin-3008x
dwoz Aug 24, 2026
ca1a7ca
publish-nightly-release: don't publish source-build artifacts
dwoz Aug 24, 2026
e89b0d0
Fix RequestClient close/_send_recv teardown race causing Windows libz…
twangboy Aug 24, 2026
dd3fe66
Merge pull request #70128 from dwoz/dwoz/fix/nightly-publish-drop-fro…
dwoz Aug 24, 2026
6c1a6b3
Preserve EventPublisher setproctitle across MasterPubServerChannel re…
dwoz Aug 23, 2026
beb5acd
Fix _handle_signals TypeError when SIGTERM hits a forked child
dwoz Aug 23, 2026
74472db
Rename changelog to PR number 70123
dwoz Aug 23, 2026
cf91558
Normalize FileserverUpdate process title casing
dwoz Aug 22, 2026
cf93e4c
Rename changelog entry to PR number
dwoz Aug 22, 2026
8485035
resource_warnings: route unclosed-resource warnings through Salt logger
dwoz Aug 20, 2026
9955b89
Restore cleanup in __del__ (keep loud warning as safety-net signal)
dwoz Aug 22, 2026
54c0600
Fix minion graceful-stop path
dwoz Aug 15, 2026
4fae12f
Rename changelog to PR number
dwoz Aug 15, 2026
5ab2260
Fix test setup gaps exposed by graceful-stop fixup
dwoz Aug 20, 2026
5f84235
Fix cross-platform / cross-package test setup for graceful-stop suite
dwoz Aug 22, 2026
4d75202
Bump packaged pip to 26.2
twangboy Aug 24, 2026
01c5c63
Surface pip errors from install_salt.sh's requirements step
twangboy Aug 24, 2026
484784f
Set PIP_BUILD_CONSTRAINT alongside PIP_CONSTRAINT in build.py
twangboy Aug 24, 2026
aa523c6
Address review feedback: dedupe PIP_CONSTRAINT setup, fix missing env…
twangboy Aug 24, 2026
3791704
Scope the pyzmq<26 cap to non-Windows; Windows stays on pyzmq>=27.1.0
twangboy Aug 24, 2026
c3fc30d
Merge pull request #70080 from dwoz/dwoz/tests/master-subprocess-stress
dwoz Aug 24, 2026
1fbfb9a
Merge pull request #70126 from dwoz/dwoz/fix/masterpubserverchannel-p…
dwoz Aug 25, 2026
491de19
Retry chocolatey installer download on transient HTTP errors
dwoz Aug 24, 2026
1788450
Regenerate remaining lock files for windows-scoped pyzmq pins
dwoz Aug 25, 2026
df27f95
test_windows_env_handling: stop relying on duplicate-case env entries
dwoz Jun 26, 2026
ff0074f
publish-nightly-release: backfill dropped build artifacts + dedupe by…
dwoz Aug 25, 2026
96b015e
Merge pull request #70131 from dwoz/dwoz/fix/publish-nightly-backfill…
dwoz Aug 25, 2026
d612dde
Merge pull request #70063 from dwoz/merge/3006.x/3007.x-08-14-26
dwoz Aug 25, 2026
1058188
Merge pull request #70110 from twangboy/fix/70109/3008.x
dwoz Aug 25, 2026
e9f2d14
Merge pull request #70123 from dwoz/dwoz/fix/handle-signals-default-i…
dwoz Aug 25, 2026
495f0ee
Merge pull request #70111 from dwoz/dwoz/fix/fileserverupdate-name-co…
dwoz Aug 25, 2026
a64863d
Merge pull request #70100 from dwoz/dwoz/fix/log-unclosed-resource-wa…
dwoz Aug 25, 2026
039bca8
Merge pull request #70051 from dwoz/dwoz/fix/minion-graceful-stop-fixup
dwoz Aug 25, 2026
17c1f44
Merge remote-tracking branch 'origin/3007.x' into merge/3007.x/3008.x…
dwoz Aug 25, 2026
b701590
Merge pull request #70103 from saltstack/feature/run-nightly-stress
dwoz Aug 25, 2026
f85447b
Merge pull request #69842 from geoffberger/fix-umask-thread-safety
dwoz Aug 25, 2026
8613a5b
publish-nightly-release: skip publish when head_sha unchanged
dwoz Aug 26, 2026
cb61068
publish-nightly-release: fix shellcheck SC2016 in change-check
dwoz Aug 26, 2026
7d8db8d
publish-nightly-release: reword comment so shellcheck doesn't parse it
dwoz Aug 26, 2026
1fde51d
Bump relenv to 0.22.23
dwoz Aug 25, 2026
6072117
Bump onedir Python point versions to match relenv 0.22.23 assets
dwoz Aug 25, 2026
299ce6f
Preserve EventPublisher setproctitle across MasterPubServerChannel re…
dwoz Aug 23, 2026
4db0a57
Rename changelog to PR number
dwoz Aug 23, 2026
a919896
Merge remote-tracking branch 'origin/3008.x' into merge/3007.x/3008.x…
dwoz Aug 25, 2026
1e264b4
MWorker: allow AESFuncs methods to opt into async dispatch
dwoz Aug 9, 2026
f951c5f
MWorker: convert AESFuncs mine family to async dispatch
dwoz Aug 9, 2026
ec64a6a
MWorker: convert AESFuncs minion_pub family to async dispatch
dwoz Aug 9, 2026
9e007e3
MWorker: convert AESFuncs _pillar to async dispatch
dwoz Aug 9, 2026
a7ff00f
MWorker: convert AESFuncs fileserver family to async dispatch
dwoz Aug 9, 2026
8cc6e90
MWorker: convert AESFuncs return/job-cache family to async dispatch
dwoz Aug 9, 2026
32d7698
MWorker: convert AESFuncs resources/verify/master_opts to async dispatch
dwoz Aug 9, 2026
7c8009c
Await presence_callback so async verify_minion actually runs
dwoz Aug 9, 2026
1f4b732
MWorker: convert ClearFuncs non-auth methods to async dispatch
dwoz Aug 9, 2026
f17bc77
MWorker: convert AuthFuncs minion authentication to async dispatch
dwoz Aug 9, 2026
24e4cbf
tests: add asyncio blocking-detection fixture for async MWorker path
dwoz Aug 9, 2026
0360e42
Guard shared caches against executor-thread races
dwoz Aug 9, 2026
fb66a49
MWorker: propagate ContextVars across executor boundary + error tests
dwoz Aug 9, 2026
a837d2a
tests: concurrency + integration coverage for async MWorker handlers
dwoz Aug 9, 2026
f25a79e
Fix nested SyncWrapper deadlock in tcp.PublishServer.publish
dwoz Aug 9, 2026
785a4a0
Fix async-mworker event bus stability
dwoz Aug 11, 2026
df20672
Fix async-mworker TCP PoolRouter fair distribution + auth shims
dwoz Aug 11, 2026
55c6fe3
Make async-mworker opt-in via master_async_mworker (default False on …
dwoz Aug 25, 2026
ffa5062
Fix async-mworker unit test regressions surfaced by CI
dwoz Aug 25, 2026
dafc14b
Fix async-mworker: close stale publisher on StreamClosedError
dwoz Aug 25, 2026
fd4ef06
Fix async-mworker: cache AutoKey on PoolRoutingChannel to preserve mt…
dwoz Aug 25, 2026
f333916
Add master_mworker_max_inflight cap for async-mworker
dwoz Aug 25, 2026
58c89a7
Fix async-mworker test regressions surfaced by CI
dwoz Aug 26, 2026
0bdd112
Ensure RUNTIME_VARS.TMP exists at unit-test session start
dwoz Aug 26, 2026
b959ced
test_shared_state_races: use PKCS1v15-SHA224 for FIPS compatibility
dwoz Aug 26, 2026
d854e80
nightly: sign RPM packages with whichever key is in the signing secret
dwoz Aug 26, 2026
b755971
Fix isolated-FS cluster serving stale cluster.pub after join-reply
dwoz Aug 26, 2026
5c6a3fd
Add HAProxy-fronted scenario test for isolated-FS cluster (#70090)
dwoz Aug 26, 2026
27a5130
Bump cryptography, pyopenssl, msgpack, requests, setuptools; add attr…
dwoz Aug 21, 2026
98f2ed4
Add zc.lockfile to --only-binary allow-list
dwoz Aug 25, 2026
a4d130d
Cap cryptography <49 on Windows for win32 wheel availability
dwoz Aug 26, 2026
20f5bd8
Make tls module refuse to load on pyOpenSSL 26+
dwoz Aug 26, 2026
5202ff4
Bump relenv to 0.22.25
dwoz Aug 26, 2026
1e9472d
Add unit + scenario coverage for cluster.pem cache refresh (#70090)
dwoz Aug 26, 2026
a17fee9
Merge remote-tracking branch 'origin/3006.x' into merge/3006.x/3007.x…
dwoz Aug 26, 2026
2bca722
Merge remote-tracking branch 'origin/3008.x' into merge/3007.x/3008.x…
dwoz Aug 26, 2026
e67c307
Fix Combine Code Coverage job on 3007.x
dwoz Aug 25, 2026
34aa5c9
Merge pull request #70146 from dwoz/merge/3006.x/3007.x-08-26-26
dwoz Aug 26, 2026
2a32200
Merge pull request #70145 from dwoz/dwoz/fix/70090-cluster-isolated-h…
dwoz Aug 26, 2026
6d935cb
Merge remote-tracking branch 'origin/3007.x' into merge/3007.x/3008.x…
dwoz Aug 26, 2026
c432617
Fix python_version and regen freebsd locks
dwoz Aug 26, 2026
19f1de7
Force -undefined dynamic_lookup for macOS onedir C-ext builds
dwoz Aug 26, 2026
1369526
Add regression tests for PubServer drain-task cap and Unpacker/ipc_wr…
dwoz Aug 26, 2026
49939ce
Cap in-flight drain tasks per subscriber in PubServer.publish_payload
dwoz Aug 26, 2026
b8f2622
Widen PubServer drain queue default and defer QueueFull to watchdog
dwoz Aug 26, 2026
6d062bf
Merge remote-tracking branch 'origin/3008.x' into merge/3007.x/3008.x…
dwoz Aug 26, 2026
9e68e51
Resync every drifted requirements lock to 3008.x
dwoz Aug 27, 2026
08c307e
Raise SRP floors so lock regen does not drop 3007.x pins
dwoz Aug 27, 2026
ca4f736
Bump setuptools floor to 82.0.1 to match SRP baseline
dwoz Aug 27, 2026
0ebc1f3
publish-nightly-release: skip publish for test-nightly-* branches
dwoz Aug 27, 2026
b1c6a42
Merge pull request #70132 from dwoz/merge/3007.x/3008.x-08-25-26
dwoz Aug 27, 2026
1bf1157
nightly: sign RPM packages with whichever key is in the signing secret
dwoz Aug 26, 2026
162c55c
Merge pull request #70155 from dwoz/dwoz/backport/70141-to-3008.x
dwoz Aug 27, 2026
5bcae1d
templates/build-packages: pass secrets: inherit for nightly too
dwoz Aug 27, 2026
8fcd6c2
templates/build-packages: pass secrets: inherit for nightly too
dwoz Aug 27, 2026
df5d1db
Merge pull request #70159 from dwoz/dwoz/fix/nightly-inherit-secrets
dwoz Aug 27, 2026
ca4940b
Merge pull request #70160 from dwoz/dwoz/backport/70159-to-3008.x
dwoz Aug 27, 2026
4c8764b
version: mark ARGON (3008) as released
dwoz Aug 27, 2026
54e8259
version: mark ARGON (3008) as released
dwoz Aug 27, 2026
972deae
Merge pull request #70162 from dwoz/dwoz/backport/70161-to-3008.x
dwoz Aug 27, 2026
dc5dbff
Merge pull request #70161 from dwoz/dwoz/fix/argon-released-true
dwoz Aug 27, 2026
20f5ba4
ci: skip CI on saltstack/salt-nightlies (duplicate of upstream)
dwoz Aug 14, 2026
6fac47b
nightly: sign DEB packages with debsigs, mirroring RPM signing path
dwoz Aug 27, 2026
774dfdc
nightly: sign DEB packages with debsigs, mirroring RPM signing path
dwoz Aug 27, 2026
12141ba
Merge pull request #70165 from dwoz/dwoz/feat/nightly-deb-signing
dwoz Aug 27, 2026
bbab41b
Merge pull request #70166 from dwoz/dwoz/backport/70165-to-3008.x
dwoz Aug 27, 2026
08bed8b
test_version: assert current_release() contract, not a hardcoded code…
dwoz Aug 27, 2026
bef560b
Merge pull request #70163 from dwoz/dwoz/backport/70043-to-3008.x
dwoz Aug 27, 2026
f2c2ae4
test_version: assert current_release() contract, not a hardcoded code…
dwoz Aug 27, 2026
fd8241a
Merge pull request #70167 from dwoz/dwoz/fix/test-current-release-arg…
dwoz Aug 27, 2026
085f22c
Merge pull request #70168 from dwoz/dwoz/fix/test-current-release-arg…
dwoz Aug 27, 2026
2afdc78
version: constrain git-describe --match to v3008.* on 3008.x
dwoz Aug 28, 2026
4ae4bf9
Merge pull request #70170 from dwoz/dwoz/fix/git-describe-match-3008-…
dwoz Aug 28, 2026
d0f3913
dashboard: adopt PyData Sphinx Theme palette + logo, matching docs
dwoz Aug 29, 2026
5456549
Merge pull request #70184 from dwoz/dwoz/dashboard-pst-theme
dwoz Aug 29, 2026
48322d7
Merge remote-tracking branch 'origin/3008.x' into merge/3008.x/master…
dwoz Aug 30, 2026
c0cc8dc
Drop agents/scratch/ from the merge (transient audit intermediates)
dwoz Aug 30, 2026
621251a
Merge pull request #70191 from dwoz/merge/3008.x/master-08-28-26
dwoz Aug 31, 2026
c3017e2
Matrix nightly-stress-test.yml over master/3008.x/3006.x
charzl Aug 18, 2026
1deed10
TEMPORARY: bypass SKIP_NIGHTLY_STRESS_TEST to test-run this branch
charzl Aug 18, 2026
19f84a7
Add a branch input so workflow_dispatch can target an arbitrary ref
charzl Aug 18, 2026
bef5473
Replace matrix with a plain branch input + separate dispatcher
charzl Aug 18, 2026
408a3b8
Swap file names: nightly-stress-test.yml is now the dispatcher
charzl Aug 19, 2026
08bb649
Move the SKIP_NIGHTLY_STRESS_TEST opt-out to the dispatcher
charzl Aug 19, 2026
ce83944
Dispatch each nightly branch against its own ref, not always master
charzl Aug 19, 2026
8fa7639
Revert "Dispatch each nightly branch against its own ref, not always …
charzl Aug 19, 2026
d06fe8a
Drop the re-added comment explaining the opt-out's placement
charzl Aug 19, 2026
4d3b3fc
Fold 3008.x's enable_metrics/worker_threads into the universal file
charzl Aug 19, 2026
d51af61
Dispatch each nightly branch against its own --ref, not always master
charzl Aug 19, 2026
b52061f
Don't have nightly-stress-test.yml assume run-stress-test.yml's defaults
charzl Aug 31, 2026
58b7812
Drop the branch loop from nightly-stress-test.yml; own the branch lis…
charzl Aug 31, 2026
75fc07c
Merge run-stress-test.yml back into nightly-stress-test.yml
charzl Aug 31, 2026
e5cf324
Drop the duplicated SKIP_NIGHTLY_STRESS_TEST check from the worker job
charzl Aug 31, 2026
8c810a9
Revert nightly-stress-test.yml -- port from #70197 lands separately
charzl Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file added .github/scripts/SaltProject_altlogo_teal.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
130 changes: 111 additions & 19 deletions .github/scripts/generate_nightly_dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
from __future__ import annotations

import argparse
import base64
import html
import json
import os
Expand All @@ -64,6 +65,13 @@

KEEP_PER_BRANCH = 30

LOGO_PATH = Path(__file__).parent / "SaltProject_altlogo_teal.png"
LOGO_DATA_URI = (
"data:image/png;base64," + base64.b64encode(LOGO_PATH.read_bytes()).decode("ascii")
if LOGO_PATH.exists()
else ""
)

# Extract chunk + os slug from artifact directory name.
# Example dirs (actions/download-artifact@v4 creates one dir per artifact):
# testrun-junit-artifacts-photonos-5-ci-test-onedir-zeromq-unit-1-1786614358
Expand Down Expand Up @@ -393,34 +401,104 @@ def render_index_html(history: list) -> str:
else '<tr><td colspan="7"><em>no history yet</em></td></tr>'
)

logo_img = (
f'<img src="{LOGO_DATA_URI}" alt="Salt Project" class="logo">'
if LOGO_DATA_URI
else '<span class="logo-fallback">Salt Project</span>'
)
return f"""<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Salt Nightlies</title>
<style>
body {{ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; margin: 2em; color: #222; }}
h1 {{ font-size: 1.5em; margin-bottom: 0.3em; }}
.subhead {{ color: #666; font-size: 0.9em; margin-bottom: 1.5em; }}
:root {{
/* PyData Sphinx Theme tokens (light) — matches docs.saltproject.io */
--pst-color-primary: #0a7d91;
--pst-color-secondary: #8045e5;
--pst-color-text-base: #222832;
--pst-color-text-muted: #57606a;
--pst-color-background: #ffffff;
--pst-color-surface: #f6f8fa;
--pst-color-border: #d1d5da;
--pst-color-border-muted: #eaecef;
--pst-color-link: var(--pst-color-primary);
--pst-color-link-hover: var(--pst-color-secondary);
--pst-color-success: #28a745;
--pst-color-danger: #d72d47;
--pst-color-warning: #9a6700;
--pst-font-family-base: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
--pst-font-family-monospace: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace;
}}
* {{ box-sizing: border-box; }}
html, body {{ margin: 0; padding: 0; }}
body {{
font-family: var(--pst-font-family-base);
color: var(--pst-color-text-base);
background: var(--pst-color-background);
line-height: 1.5;
}}
a {{ color: var(--pst-color-link); text-decoration: none; }}
a:hover {{ color: var(--pst-color-link-hover); text-decoration: underline; }}
code {{
font-family: var(--pst-font-family-monospace);
font-size: 0.85em;
background: var(--pst-color-surface);
padding: 1px 4px;
border-radius: 3px;
}}

/* Navbar */
.navbar {{
display: flex;
align-items: center;
gap: 1.5em;
padding: 0.6em 1.5em;
border-bottom: 1px solid var(--pst-color-border);
background: var(--pst-color-background);
}}
.navbar .logo {{ height: 32px; width: auto; display: block; }}
.navbar .logo-fallback {{ font-weight: 600; color: var(--pst-color-primary); }}
.navbar nav {{ display: flex; gap: 1.2em; flex-wrap: wrap; }}
.navbar nav a {{ font-size: 0.95em; color: var(--pst-color-text-base); }}
.navbar nav a:hover {{ color: var(--pst-color-link-hover); text-decoration: none; }}
.navbar nav a.active {{ color: var(--pst-color-primary); font-weight: 600; }}
.navbar .spacer {{ flex: 1; }}

/* Page content */
main {{ padding: 1.5em 1.5em 3em; }}
h1 {{ font-size: 1.6em; margin: 0 0 0.3em; color: var(--pst-color-text-base); font-weight: 600; }}
.subhead {{ color: var(--pst-color-text-muted); font-size: 0.9em; margin-bottom: 1.5em; max-width: 60em; }}

/* Main table */
table {{ border-collapse: collapse; width: 100%; font-size: 0.9em; }}
th, td {{ padding: 0.4em 0.6em; text-align: left; border-bottom: 1px solid #eee; }}
th {{ background: #f6f8fa; font-weight: 600; }}
th, td {{ padding: 0.5em 0.7em; text-align: left; border-bottom: 1px solid var(--pst-color-border-muted); }}
th {{ background: var(--pst-color-surface); font-weight: 600; color: var(--pst-color-text-base); }}
tr.row {{ cursor: pointer; }}
tr.row:hover {{ background: #f9fafb; }}
tr.row.ok .status {{ color: #1a7f37; font-weight: 600; }}
tr.row.fail .status {{ color: #cf222e; font-weight: 600; }}
tr.row.pending .status {{ color: #9a6700; }}
.num-fail {{ color: #cf222e; font-weight: 600; }}
.num-flaky {{ color: #9a6700; }}
.dim {{ color: #999; }}
code {{ font-size: 0.85em; background: #f6f8fa; padding: 1px 4px; border-radius: 3px; }}
a {{ color: #0969da; text-decoration: none; }}
a:hover {{ text-decoration: underline; }}
.detail {{ margin: 0.5em 0 0.5em 0; width: auto; font-size: 0.85em; }}
.detail th, .detail td {{ border-bottom: 1px solid #f0f0f0; }}
.detail-section-title {{ margin: 0.75em 0 0.25em 0; font-weight: 600; font-size: 0.85em; color: #57606a; }}
tr.row:hover {{ background: var(--pst-color-surface); }}
tr.row.ok .status {{ color: var(--pst-color-success); font-weight: 600; }}
tr.row.fail .status {{ color: var(--pst-color-danger); font-weight: 600; }}
tr.row.pending .status {{ color: var(--pst-color-warning); }}
.num-fail {{ color: var(--pst-color-danger); font-weight: 600; }}
.num-flaky {{ color: var(--pst-color-warning); }}
.dim {{ color: var(--pst-color-text-muted); opacity: 0.6; }}

/* Detail (expanded row) */
.detail {{ margin: 0.5em 0; width: auto; font-size: 0.85em; }}
.detail th, .detail td {{ border-bottom: 1px solid var(--pst-color-border-muted); }}
.detail-section-title {{ margin: 0.75em 0 0.25em; font-weight: 600; font-size: 0.85em; color: var(--pst-color-text-muted); }}
.detail-flex {{ display: flex; gap: 2em; align-items: flex-start; margin-left: 1em; flex-wrap: wrap; }}
.detail-pane {{ min-width: 20em; }}

/* Footer */
footer {{
margin-top: 3em;
padding: 1em 1.5em;
border-top: 1px solid var(--pst-color-border);
color: var(--pst-color-text-muted);
font-size: 0.85em;
}}
</style>
<script>
function toggle(id) {{
Expand All @@ -430,8 +508,20 @@ def render_index_html(history: list) -> str:
</script>
</head>
<body>
<header class="navbar">
<a href="https://saltproject.io/" title="Salt Project">{logo_img}</a>
<nav>
<a href="https://saltproject.io/">Home</a>
<a href="https://docs.saltproject.io/salt/install-guide/en/latest/">Install Guide</a>
<a href="https://docs.saltproject.io/">Docs</a>
<a href="https://saltstack.github.io/salt-nightlies/" class="active">Nightlies</a>
<a href="https://github.com/saltstack/salt">GitHub</a>
</nav>
<span class="spacer"></span>
</header>
<main>
<h1>Salt Nightlies</h1>
<div class="subhead">Recent nightly builds. `tests` = total testcase executions across all axes (OS &times; transport &times; FIPS &times; chunk); `unique` = distinct (classname, name) tuples. Click a row to expand the per-suite&nbsp;&times;&nbsp;OS breakdown (tests, flaky, failed, skip). Updated {now}.</div>
<div class="subhead">Recent nightly builds. <code>tests</code> = total testcase executions across all axes (OS &times; transport &times; FIPS &times; chunk); <code>unique</code> = distinct (classname, name) tuples. Click a row to expand the per-suite&nbsp;&times;&nbsp;OS breakdown (tests, flaky, failed, skip).</div>
<table>
<thead>
<tr>
Expand All @@ -443,6 +533,8 @@ def render_index_html(history: list) -> str:
{rows_html}
</tbody>
</table>
</main>
<footer>Updated {now}. Source: <a href="https://github.com/saltstack/salt-nightlies">saltstack/salt-nightlies</a>.</footer>
</body>
</html>
"""
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-deps-ci-action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ jobs:

macos-dependencies:
name: MacOS
runs-on: ${{ matrix.arch == 'x86_64' && 'macos-15-intel' || 'macos-14' }}
runs-on: ${{ matrix.arch == 'x86_64' && 'macos-15-intel' || 'macos-15' }}
if: ${{ toJSON(fromJSON(inputs.matrix)['macos']) != '[]' }}
timeout-minutes: 90
strategy:
Expand Down
46 changes: 43 additions & 3 deletions .github/workflows/build-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ on:
type: boolean
default: false
description: Sign RPM Packages
sign-deb-packages:
type: boolean
default: false
description: Sign DEB Packages (via debsigs, using SIGNING_GPG_KEY)
sign-macos-packages:
type: boolean
default: false
Expand Down Expand Up @@ -66,6 +70,7 @@ jobs:

build-deb-packages:
name: DEB
environment: ${{ inputs.environment }}
if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }}
runs-on:
- ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_runner }}
Expand Down Expand Up @@ -113,6 +118,10 @@ jobs:
apt-get install -y devscripts
# Installing patchelf for relenv ELF binary patching
apt-get install -y patchelf
# Installing debsigs for DEB signing (invoked by tools pkg
# build deb --key-id=<id>). Cheap install even when signing is
# off so the toolchain is always ready.
apt-get install -y debsigs

- name: Download Onedir Tarball as an Artifact
if: inputs.source == 'onedir'
Expand Down Expand Up @@ -155,6 +164,30 @@ jobs:
salt-version: "${{ inputs.salt-version }}"
cwd: pkgs/checkout/

- name: Setup GnuPG
if: ${{ inputs.sign-deb-packages }}
env:
SIGNING_GPG_KEY: ${{ secrets.SIGNING_GPG_KEY }}
SIGNING_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }}
run: |
install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg
GNUPGHOME="$(mktemp -d -p /run/gpg)"
export GNUPGHOME
echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV"
cat <<EOF > "${GNUPGHOME}/gpg.conf"
batch
no-tty
pinentry-mode loopback
passphrase-file ${GNUPGHOME}/passphrase
EOF
echo "${SIGNING_PASSPHRASE}" > "${GNUPGHOME}/passphrase"
echo "${SIGNING_GPG_KEY}" | gpg --import -
# Discover the imported key's fingerprint so `tools pkg build
# deb --key-id=<id>` (and the debsigs call it makes) uses
# whatever key material was provided rather than a hardcoded id.
SIGN_KEY_ID=$(gpg --list-secret-keys --with-colons | awk -F: '$1=="fpr" {print $10; exit}')
echo "SIGN_KEY_ID=${SIGN_KEY_ID}" >> "$GITHUB_ENV"

- name: Configure Git
if: ${{ startsWith(github.event.ref, 'refs/tags') == false }}
working-directory: pkgs/checkout/
Expand All @@ -178,7 +211,7 @@ jobs:
format('--onedir=salt-{0}-onedir-linux-{1}.tar.xz', inputs.salt-version, matrix.arch)
||
format('--arch={0}', matrix.arch)
}}
}} ${{ inputs.sign-deb-packages && format('--key-id={0}', env.SIGN_KEY_ID) || '' }}

- name: Cleanup
run: |
Expand Down Expand Up @@ -281,6 +314,13 @@ jobs:
EOF
echo "${SIGNING_PASSPHRASE}" > "${GNUPGHOME}/passphrase"
echo "${SIGNING_GPG_KEY}" | gpg --import -
# Discover the fingerprint of the just-imported signing key so
# Build RPM can pass it to rpmsign without hardcoding a specific
# key id. Lets each repo (saltstack/salt, saltstack/salt-nightlies)
# provide its own key material via SIGNING_GPG_KEY and have the
# workflow use whatever's in the resulting keyring.
SIGN_KEY_ID=$(gpg --list-secret-keys --with-colons | awk -F: '$1=="fpr" {print $10; exit}')
echo "SIGN_KEY_ID=${SIGN_KEY_ID}" >> "$GITHUB_ENV"

- name: Configure Git
if: ${{ startsWith(github.event.ref, 'refs/tags') == false }}
Expand All @@ -302,7 +342,7 @@ jobs:
format('--onedir=salt-{0}-onedir-linux-{1}.tar.xz', inputs.salt-version, matrix.arch)
||
format('--arch={0}', matrix.arch)
}} ${{ inputs.sign-rpm-packages && '--key-id=64CBBC8173D76B3F' || '' }}
}} ${{ inputs.sign-rpm-packages && format('--key-id={0}', env.SIGN_KEY_ID) || '' }}

- name: Set Artifact Name
id: set-artifact-name
Expand Down Expand Up @@ -332,7 +372,7 @@ jobs:
env:
PIP_INDEX_URL: https://pypi.org/simple
runs-on:
- ${{ matrix.arch == 'arm64' && 'macos-14' || 'macos-15-intel' }}
- ${{ matrix.arch == 'arm64' && 'macos-15' || 'macos-15-intel' }}

steps:
- name: Check Package Signing Enabled
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-salt-onedir.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ jobs:
matrix:
include: ${{ fromJSON(inputs.matrix)['macos'] }}
runs-on:
- ${{ matrix.arch == 'arm64' && 'macos-14' || 'macos-15-intel' }}
- ${{ matrix.arch == 'arm64' && 'macos-15' || 'macos-15-intel' }}
env:
PIP_INDEX_URL: https://pypi.org/simple
USE_S3_CACHE: 'false'
Expand Down
22 changes: 12 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ on:
- 3006.x
- 3007.x
- 3008.x
- '[0-9][0-9][0-9][0-9].[0-9]*-[0-9]*'
- '[0-9][0-9][0-9][0-9].[0-9]*-patch'
- master
pull_request:
types:
Expand Down Expand Up @@ -464,8 +466,8 @@ jobs:
with:
cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }}
salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}"
relenv-version: "0.22.14"
python-version: "3.14.6"
relenv-version: "0.22.25"
python-version: "3.14.7"
ci-python-version: "3.14"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
Expand All @@ -481,8 +483,8 @@ jobs:
with:
salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}"
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}
relenv-version: "0.22.14"
python-version: "3.14.6"
relenv-version: "0.22.25"
python-version: "3.14.7"
ci-python-version: "3.14"
source: "onedir"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
Expand All @@ -498,8 +500,8 @@ jobs:
with:
salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}"
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}
relenv-version: "0.22.14"
python-version: "3.14.6"
relenv-version: "0.22.25"
python-version: "3.14.7"
ci-python-version: "3.14"
source: "src"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
Expand All @@ -514,10 +516,10 @@ jobs:
with:
nox-session: ci-test-onedir
nox-version: 2022.8.7
python-version: "3.14.6"
python-version: "3.14.7"
ci-python-version: "3.14"
salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}"
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.14.6
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.14.7
nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
Expand All @@ -535,7 +537,7 @@ jobs:
salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}"
nox-version: 2022.8.7
ci-python-version: "3.14"
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.14.6
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.14.7
skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.config)['skip_code_coverage'] }}
testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }}
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }}
Expand All @@ -554,7 +556,7 @@ jobs:
ci-python-version: "3.14"
testrun: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['testrun']) }}
salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}"
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.14.6
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.14.7
skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.config)['skip_code_coverage'] }}
workflow-slug: ci
default-timeout: 180
Expand Down
Loading