Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
19b3809
feat: an actor can be ended and its death watched; an actor thread's …
nicolas-maman Oct 27, 2026
537024b
feat: linked actors share their deaths (#2974)
nicolas-maman Oct 27, 2026
b8be5f8
feat: both schedulers step inside one panic barrier; a cooperative pa…
nicolas-maman Oct 27, 2026
158106f
feat: an ended actor can be restarted in place, under the same ref (#…
nicolas-maman Oct 27, 2026
8ea886d
feat: std.supervise, supervisors that restart actors in place (#2974)
nicolas-maman Oct 27, 2026
ebe765d
feat: a bounded mailbox, @mailbox(bound: N), and try_send (#2974)
nicolas-maman Oct 27, 2026
c1da361
tests: the actor-thread epoch test waits for the steps it checks, and…
nicolas-maman Oct 28, 2026
e70effd
perf: #2974's fields and spawn checks off the hot paths; a restart ke…
nicolas-maman Oct 28, 2026
13bdfe7
docs: the actor delivery contract, Phase 1 shipped, a supervisor exam…
nicolas-maman Oct 28, 2026
e0c1dcb
tests: the bound and restart tests wait for what they assume (#2974)
nicolas-maman Oct 28, 2026
403e064
typechecker: a builder call fills defaults after _ctx; a bare actor_r…
nicolas-maman Oct 28, 2026
c87d3ea
codegen: an ask whose reply is an actor_ref holds a pointer (#3332)
nicolas-maman Oct 28, 2026
2d61af0
docs: an Aether configuration beside HCL (#476)
nicolas-maman Oct 28, 2026
37c0abf
codegen: every message ahead of the actors and functions (#3341)
nicolas-maman Oct 28, 2026
5464b49
tests: the sweep tests the tree, not an install (#3342)
nicolas-maman Oct 28, 2026
01d80e5
std.stream: credit-windowed streams between actors (#426)
nicolas-maman Oct 28, 2026
de8f246
runtime: Windows locks take no debug record from the heap (#3346)
nicolas-maman Oct 28, 2026
0f8e076
build: make compiler-fast links (#3351)
nicolas-maman Oct 28, 2026
dc40730
Merge remote-tracking branch 'origin/main' into feat/oct28-batch9b
nicolas-maman Oct 28, 2026
b12d914
std.tcp: connect_buffered and available; the send-timeout test cuts b…
nicolas-maman Oct 28, 2026
f07aea8
perf: the batch flush reads a target's death only while a restart cla…
nicolas-maman Oct 28, 2026
0251a34
tests: the caps read test holds file_read_all_raw's result as the str…
nicolas-maman Oct 28, 2026
e8cc39b
fix: the cooperative ask honours its timeout and forgets a queued mes…
nicolas-maman Oct 28, 2026
6854baa
fix: sandbox grant levels are each thread's, kept by the runtime (#2955)
nicolas-maman Oct 28, 2026
5e84850
P-256 constant time: fixed-width field engine, RFC 6979, CT harness (…
nicolas-maman Oct 27, 2026
7e12231
Keep SHA-2 digests and fresh keys out of strings (#2600, #3293)
nicolas-maman Oct 27, 2026
6d6da16
P-384, P-521, secp256k1 constant time on the ecc engine (#2600, #3291)
nicolas-maman Oct 27, 2026
4704c1b
RSA private-key operations: constant time, blinded (#2600)
nicolas-maman Oct 27, 2026
3a3e3ff
Ed25519, Ed448, X448 constant time; x448.agree (#2600, #1298)
nicolas-maman Oct 27, 2026
5c9b6ea
Keep SHA-3/SHAKE output out of strings (#2600)
nicolas-maman Oct 27, 2026
e798d9e
AES bitsliced and GHASH masked: constant-time record ciphers (#2600, …
nicolas-maman Oct 27, 2026
b1ec0c2
std.http: choose the TLS backend per request and per server (#1298)
nicolas-maman Oct 27, 2026
126411a
tls13 chain validation checks the whole path, not names and signature…
nicolas-maman Oct 28, 2026
c7ec5e8
tls13_cert: refuse DER lengths over three bytes, a four-byte one over…
nicolas-maman Oct 27, 2026
6efc1c4
tls13_cert: verify RSA-SHA384/512, ECDSA-SHA512, P-521 and Ed25519 ch…
nicolas-maman Oct 27, 2026
07f049c
x509-limbo and bettertls conformance for tls13_cert, and the fixes th…
nicolas-maman Oct 27, 2026
f9897b7
tls13_cert: a TLS leaf's keyUsage must allow digitalSignature (#3309)
nicolas-maman Oct 27, 2026
05fc5ea
tls13_cert: only a self-signed root ends a path, as on OpenSSL (#3310)
nicolas-maman Oct 27, 2026
dec1ba6
tls13_cert: accept what OpenSSL accepts unless it is unsafe (#1298)
nicolas-maman Oct 28, 2026
5f77655
std.http: the OpenSSL backend runs at security level 2 at least (#3312)
nicolas-maman Oct 28, 2026
31d0bcb
std.http: the OpenSSL backend never matches the host against the CN (…
nicolas-maman Oct 28, 2026
e901a58
BoGo conformance for the pure TLS stack; make conformance-bogo (#1298)
nicolas-maman Oct 28, 2026
373c152
tls13_cert: a pinned self-signed leaf is trusted as it stands (#3303)
nicolas-maman Oct 28, 2026
9797c1c
tls13 client: refuse unsolicited and misplaced extensions (#3315)
nicolas-maman Oct 28, 2026
dd2b1c1
tls13 client: check the server's Certificate message and its entries …
nicolas-maman Oct 28, 2026
473504d
tls13: enforce the record layer's limits and types (#3317)
nicolas-maman Oct 28, 2026
7f8eafe
tls13: reassemble handshake messages split across records (#3321)
nicolas-maman Oct 28, 2026
fbd7ed2
crypto: the track's free helpers declare @frees; hmac.bytes (#2600)
nicolas-maman Oct 28, 2026
d585abd
tls13 client: verify_mode is a bit set; thread partial chains (#3311)
nicolas-maman Oct 28, 2026
72659c4
tls13: send the middlebox-compatibility change_cipher_spec (#3322)
nicolas-maman Oct 28, 2026
6f2bf0b
tls13 client: dispatch a P-521 CertificateVerify as ECDSA (#3326)
nicolas-maman Oct 28, 2026
087999a
tls: trust partial chains on request, on both backends (#3311)
nicolas-maman Oct 28, 2026
658f9de
tls13 server: sign with any key a certificate carries; server_set_tls…
nicolas-maman Oct 28, 2026
7c92e3b
tls13: whole-message checks, the right alerts, Ed25519 servers (#3324…
nicolas-maman Oct 28, 2026
3808e93
tests: test_supervise holds the actor while the send behind its panic…
nicolas-maman Oct 28, 2026
52a192f
tests: the new drivers' fixtures are pruned; the pure-TLS gateway tes…
nicolas-maman Oct 28, 2026
a5979b5
fix: every library export runs in an execution frame with an outcome …
nicolas-maman Oct 28, 2026
2e4ccc4
tls13: KeyUpdate, ticket checks and TLS 1.3 alerts after the handshak…
nicolas-maman Oct 28, 2026
8d496ab
tls13: HelloRetryRequest, client and server; ServerHello and PSK chec…
nicolas-maman Oct 28, 2026
a7b94d2
tls13 client: 0-RTT keys, EndOfEarlyData keys and the ticket's suite …
nicolas-maman Oct 28, 2026
dab25ce
tests: crypto_tls13_resume and emit_lib_execution_frame are driver fi…
nicolas-maman Oct 28, 2026
9d98b0f
std.http: server_set_tls_pem; the OpenSSL backend sends the chain; TL…
nicolas-maman Oct 28, 2026
540b1a4
tls13_hs: the HelloRetryRequest random is SHA-256("HelloRetryRequest"…
nicolas-maman Oct 28, 2026
910f7ab
new_changelogs: the #3361 fragment's heading names #3361 (#3361)
nicolas-maman Oct 28, 2026
ac754ce
tls13 server: check the ClientHello, take secp256r1, sign RSA-PSS SHA…
nicolas-maman Oct 28, 2026
b4ad546
tls13 client: read what the server sent before closing a failed hands…
nicolas-maman Oct 28, 2026
4582abe
tls13_hs: decode_error for a repeated EncryptedExtensions extension a…
nicolas-maman Oct 28, 2026
8dae5a1
tls13_hs: check a CertificateRequest's certificate_authorities and si…
nicolas-maman Oct 28, 2026
e54a2c8
std/http/README: the pure server's groups, HelloRetryRequest and RSA-…
nicolas-maman Oct 28, 2026
bf0aa95
tls13 client: bound the server's flight by its bytes, not 256 records…
nicolas-maman Oct 28, 2026
99e389e
tls13 client: unexpected_message for a type the server's flight canno…
nicolas-maman Oct 28, 2026
e37ebc6
tls13_hs: the full ClientHello offers psk_key_exchange_modes (#3363)
nicolas-maman Oct 28, 2026
9e58f95
tls13 client: name secp384r1 without a share, follow its HelloRetryRe…
nicolas-maman Oct 28, 2026
a9f0c31
tests: the pure TLS client with a CSPRNG that fails (#3293)
nicolas-maman Oct 28, 2026
739bf09
fix: a call's deadline or a cancel ends the call at a safe point (#2956)
nicolas-maman Oct 28, 2026
c86fcdd
refactor: the send buffer is its file's thread-local, reached by acce…
nicolas-maman Oct 28, 2026
99aacac
chore: remove the dead message pool header and its two no-op variables
nicolas-maman Oct 28, 2026
8b0f83e
fix: nothing claims a message payload pool, and a payload free is a f…
nicolas-maman Oct 28, 2026
ad9c308
tls13 client: free_hello_keys declares @frees (#3369)
nicolas-maman Oct 28, 2026
c7a056d
fix: an allocation that fails inside a library call ends the call (#2…
nicolas-maman Oct 28, 2026
3b629bd
std.http: the TLS configuration calls are serialized; the re-load tes…
nicolas-maman Oct 28, 2026
a4a9c75
changelog: two re-loads at once are safe (#3371)
nicolas-maman Oct 28, 2026
c3d51d3
docs/api: tcp.html matches std.tcp's connect_buffered comment (#3338)
nicolas-maman Oct 28, 2026
cca48b5
tls13 server: only BEGIN CERTIFICATE blocks form the chain, each pars…
nicolas-maman Oct 28, 2026
a9ea497
fix: AETHER_VERBOSE=1 prints the runtime configuration at startup
nicolas-maman Oct 28, 2026
8d0dee9
std/http README: only certificate blocks form the chain (#3378)
nicolas-maman Oct 28, 2026
94721f8
std.bytes: wipe and wipe_free, zeroing the compiler cannot drop (#3376)
nicolas-maman Oct 28, 2026
15fbd3b
tls13: handshake messages and data in as many records as they take; e…
nicolas-maman Oct 28, 2026
c77e32a
tls13 server: every CertificateVerify is verified before it is sent (…
nicolas-maman Oct 28, 2026
776a927
tls13 server: keep the part of a record the caller's buffer did not t…
nicolas-maman Oct 28, 2026
36e320e
std.http: see what the pure TLS server holds before parking; no raw r…
nicolas-maman Oct 28, 2026
9f5f962
fix: every allocation the generated code makes is checked
nicolas-maman Oct 28, 2026
21312cd
test: threaded_dispatch checks the loop-head safe point commit 3 emit…
nicolas-maman Oct 28, 2026
35f7719
std.cryptography: hedged signing nonces; the mTLS client checks its s…
nicolas-maman Oct 28, 2026
c8ab42f
fix: ae build --target=wasm reads the one runtime list
nicolas-maman Oct 28, 2026
ee377fa
tls13: the record readers drop what they consumed; no floods before t…
nicolas-maman Oct 28, 2026
5d7c1e5
std.cryptography.shield: a long-lived secret kept encrypted in memory…
nicolas-maman Oct 28, 2026
6d47a2f
tls13 server keys: no copy of a private key left in freed memory (#3382)
nicolas-maman Oct 28, 2026
417d56e
tls13 server: the private key is kept shielded (#3376)
nicolas-maman Oct 28, 2026
80793ff
tls13 client: conn_get_ticket keeps at most 256 KiB of data while it …
nicolas-maman Oct 28, 2026
c75f348
conformance: BoGo runs in no CI job; what its shim does not cover (#1…
nicolas-maman Oct 28, 2026
4d2eea8
test: the undelivered-message test settles each round, so its window …
nicolas-maman Oct 28, 2026
57edf66
fix: an ask builds its own message, so its slot reaches no other send…
nicolas-maman Oct 28, 2026
9e08c21
test: the slices unit test expects the checked malloc helper (#3377)
nicolas-maman Oct 28, 2026
76d090f
fix: a call that ends other than OK returns its zero value on every path
nicolas-maman Oct 28, 2026
e9972e7
fix: a step runs in its own context; a nested step leaves a superviso…
nicolas-maman Oct 28, 2026
bd6ccee
codegen: a store into another actor's state through its reference tak…
nicolas-maman Oct 28, 2026
adb8346
std.supervise: each child is restarted once per restart, in start order
nicolas-maman Oct 28, 2026
5587786
runtime: a link passes a death on through a queue, so a chain of link…
nicolas-maman Oct 28, 2026
50110d8
fix: a receiver stepped inline inside an enforce block runs without t…
nicolas-maman Oct 28, 2026
56ea30a
fix: an actor stepped inside a library call runs outside it
nicolas-maman Oct 28, 2026
e5ad67c
codegen: every store through a pointer, a slice or a reference publis…
nicolas-maman Oct 28, 2026
8d32610
runtime: an actor ended before scheduler_start is finalized at once
nicolas-maman Oct 28, 2026
c7ffdd7
runtime: a panic that leaves a link's drain puts the queue back
nicolas-maman Oct 28, 2026
d6b7ec5
fix: the cooperative scheduler never steps an actor inside its own ha…
nicolas-maman Oct 29, 2026
f6cc5ff
runtime: a panic in a dropped message's release no longer stops an ac…
nicolas-maman Oct 29, 2026
2501232
feat: execution accounts, a budget that belongs to a script across it…
nicolas-maman Oct 29, 2026
46b9874
std.cryptography: hashes, MACs and ciphers wipe their own state (#3402)
nicolas-maman Oct 29, 2026
bbdda54
tls13 server: the CertificateVerify comment says the nonce is hedged …
nicolas-maman Oct 29, 2026
b2f3984
docs: the std.host row counts its 32 exports (#2954)
nicolas-maman Oct 29, 2026
3590bf1
std.http: a TLS connection whose readable socket holds no request is …
nicolas-maman Oct 29, 2026
b94d22d
fix: a panic in what follows a panicking handler stays in the step
nicolas-maman Oct 29, 2026
b2c3677
fix: an interruption a containment frame catches goes on to its call
nicolas-maman Oct 29, 2026
a826cf6
fix: every owned place a panic can skip is in the unwind journal
nicolas-maman Oct 29, 2026
8cbc085
std.http: a KeyUpdate that reaches a parked pure-TLS connection no lo…
nicolas-maman Oct 29, 2026
d427b40
std.cryptography: every module wipes what it frees, and make ci check…
nicolas-maman Oct 29, 2026
4ed70a1
fix: freeing an execution account in use leaves nothing naming it
nicolas-maman Oct 29, 2026
15cbead
fix: freeing an execution account credits its ancestors for its live …
nicolas-maman Oct 29, 2026
0981799
fix: an ACTIVE execution account is charged once for nested executions
nicolas-maman Oct 29, 2026
fedc88f
fix: accounts cost threads with none in use no lock, and a free is li…
nicolas-maman Oct 29, 2026
828f146
fix: the timing list's growth is a checked allocation, and its failur…
nicolas-maman Oct 29, 2026
9a539df
docs: why the accounts' address filter may skip the lock, and what a …
nicolas-maman Oct 29, 2026
aff9ed6
fix: a runtime copy leaves the accounts it shares when it is unloaded
nicolas-maman Oct 29, 2026
55b4010
fix: an execution account made under a parent that is not live is ref…
nicolas-maman Oct 29, 2026
f1c404a
fix: every drop an owned type accepts compiles in the unwind journal
nicolas-maman Oct 29, 2026
76a96ef
fix: a containment frame tells an interruption by what its code raised
nicolas-maman Oct 29, 2026
151ee55
fix: what a step runs after its handler runs in the step's context
nicolas-maman Oct 29, 2026
b5054b5
fix: the release compiler links the runtime pieces the development on…
nicolas-maman Oct 29, 2026
a15ba6e
feat: what a shipped library promises across versions, checked before…
nicolas-maman Oct 29, 2026
2de06b0
test: the cross-version ABI matrix, in CI and before every release
nicolas-maman Oct 29, 2026
bbb0922
fix: a death hook that panics in an actor's end no longer cuts the end
nicolas-maman Oct 29, 2026
007ccc8
perf: a plain actor step reads one word to know it has nothing to put…
nicolas-maman Oct 29, 2026
0222ee9
fix: the step's sandbox bit is set only where a level may be seen
nicolas-maman Oct 29, 2026
00f5e09
test: the step-word host's hook setter no longer reads as a listener
nicolas-maman Oct 29, 2026
d9ed500
test: test_owned_panic_unwind is in canonical format (#3406)
nicolas-maman Oct 29, 2026
92bc921
fix: ae reads the native runtime list where a native link needs it (#…
nicolas-maman Oct 29, 2026
dd6f86e
fix: a death notice journals the entries it takes (#3421)
nicolas-maman Oct 29, 2026
3cbdc64
test: the nested ACTIVE-time test bounds the charge by the time taken…
nicolas-maman Oct 29, 2026
f232a9c
fix: the generated allocation helpers carry AETHER_MAYBE_UNUSED (#3425)
nicolas-maman Oct 29, 2026
4bc4b89
fix: sys/ioctl.h is included only in the networking build (#3427)
nicolas-maman Oct 29, 2026
e4cef2b
fix: the pure TLS stack links nothing of the HTTP server or client (#…
nicolas-maman Oct 29, 2026
60b2e34
fix: the runtime-list paths are sized to hold any root whole (#3420)
nicolas-maman Oct 29, 2026
398398a
test: the TLS tests read what every OpenSSL CI runs says (#3429)
nicolas-maman Oct 29, 2026
964adc5
test: regression tests free what they allocate (#3430)
nicolas-maman Oct 29, 2026
f244576
Merge main (0.857.0, #3305) into the batch
nicolas-maman Oct 29, 2026
0e5320a
fix: free of a slice is the builtin release whatever extern free is d…
nicolas-maman Oct 29, 2026
05faf75
fix: runtime copies agree on the image that owns the levels and accou…
nicolas-maman Oct 29, 2026
66cabfb
test: the runtime-copy tests check their claims on every platform (#3…
nicolas-maman Oct 29, 2026
7a651e1
fix: a fatal runtime error flushes the program's stdout first (#3435)
nicolas-maman Oct 29, 2026
eeb34d6
fix: wait_for_idle() waits for a receive timeout's arm to end (#3443)
nicolas-maman Oct 29, 2026
3572119
fix: a runtime copy joins another copy's sandbox count before its fir…
nicolas-maman Oct 29, 2026
aa4493e
fix: gateway script libraries load again; the runtime keeps its host …
nicolas-maman Oct 29, 2026
5dfee7b
Merge main (0.858.0, #3423) into the batch
nicolas-maman Oct 29, 2026
3809d4b
fix: the release compiler finds libaether.h too (#3439)
nicolas-maman Oct 29, 2026
383617f
test: the resumption test reads OpenSSL 3.0's and LibreSSL's names to…
nicolas-maman Oct 29, 2026
1e2b331
test: the ownership probe uses the creds API; the key test runs one s…
nicolas-maman Oct 29, 2026
d519ec6
fix: a library whose runtime is left to its host loads without one (#…
nicolas-maman Oct 29, 2026
3525bd6
fix: a std.tcp write to a closed peer fails instead of ending the pro…
nicolas-maman Oct 29, 2026
ca2cf74
fix: a fatal error's stdout flush never waits behind another thread (…
nicolas-maman Oct 29, 2026
dfb6603
fix: each runtime copy keeps its sandbox pointers, and the cooperativ…
nicolas-maman Oct 29, 2026
52f160a
fix: wait_for_idle() restarts when an arm ends inside its window, and…
nicolas-maman Oct 29, 2026
334e26e
fix: Cygwin and MSYS2's gcc take the PE path for the weak runtime dat…
nicolas-maman Oct 29, 2026
bdd8157
fix: net.fd_write to a socket whose peer closed fails instead of endi…
nicolas-maman Oct 29, 2026
3f553df
fix: a pathLenConstraint over three bytes reads as unbounded; a zero-…
nicolas-maman Oct 29, 2026
1baa30f
test: free(xs) under extern free keeps the slice checks, and the chan…
nicolas-maman Oct 29, 2026
269c84f
security: runtime copies find each other by a record in each image, n…
nicolas-maman Oct 29, 2026
4d09f7d
Merge remote-tracking branch 'origin/main' into feat/oct28-batch9b
nicolas-maman Oct 29, 2026
ad4a2d8
security: the runtime copies' records are read-only and the only way …
nicolas-maman Oct 29, 2026
251d631
fix: the fatal flush waits a little for another thread that holds std…
nicolas-maman Oct 29, 2026
fb6b3e8
fix: wait_for_idle() inside an actor panics (#3463); the firing count…
nicolas-maman Oct 29, 2026
8e2dbb0
fix: basicConstraints refuses a field repeated or out of order (#3303)
nicolas-maman Oct 29, 2026
ea91a88
test: a panic caught inside the block of a library that runs the prog…
nicolas-maman Oct 29, 2026
e3de216
Merge remote-tracking branch 'origin/main' into feat/oct28-batch9b
nicolas-maman Oct 29, 2026
41bc8fc
fix: only the sandbox's join pointer is each copy's own (#3438)
nicolas-maman Oct 29, 2026
65cec34
fix: a copy reads no image past its own and tests none by name (#3445)
nicolas-maman Oct 29, 2026
465c0ff
fix: wait_for_idle() reads every handled count before every sent coun…
nicolas-maman Oct 29, 2026
d53457d
fix: wait_for_idle() refuses on any thread that runs actors (#3463)
nicolas-maman Oct 29, 2026
d494720
fix: basicConstraints refuses a byte after its SEQUENCE (#3303)
nicolas-maman Oct 29, 2026
be002a0
docs: the fatal flush's bound is on stdout's lock, not on its own wri…
nicolas-maman Oct 29, 2026
7739d84
test: two libraries with a sandbox each run the program's panic (#3438)
nicolas-maman Oct 29, 2026
b3b4616
fix: the panic and the step barrier serve every copy of the sandbox r…
nicolas-maman Oct 29, 2026
1b1f578
fix: a step counts only a message it took, and every send counts befo…
nicolas-maman Oct 29, 2026
3c14f47
fix: the examples leave the core role before they wait, and #3463's w…
nicolas-maman Oct 29, 2026
fbf19fb
fix: a sandbox copy with no place among the hooks refuses inside its …
nicolas-maman Oct 29, 2026
d8b60ed
fix: the walk stops at the asking copy's own image, and records are f…
nicolas-maman Oct 29, 2026
056b434
test: std.stream's leak check reclaims released actors each run (#426)
nicolas-maman Oct 29, 2026
5883be2
fix: a failed TLS connection drains its socket before it closes, so t…
nicolas-maman Oct 29, 2026
b8a8fb9
docs: std.tcp's index count and guide name close_drained (#3465)
nicolas-maman Oct 29, 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
  •  
  •  
  •  
80 changes: 80 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,28 @@ jobs:
- name: Run full CI suite
run: HARDEN=${{ matrix.harden }} CC=${{ matrix.cc }} AE_SWEEP_SHARD=${{ matrix.shard }} CI_SWEEP_UNIT=${{ matrix.unit }} AE_SWEEP_KEEP_C=${{ matrix.name == 'Linux / GCC' && '1' || '0' }} make ${{ matrix.target || 'ci' }}

# The cross-version ABI matrix (#2957, docs/abi-policy.md): this tree's
# libraries and hosts against the latest published release's, on the
# toolchain `make ci` just built. One Linux and one macOS leg (the
# release workflow runs it on every platform it ships); without the
# release in AETHER_ABI_OLD_HOME the sweep above skipped it.
- name: ABI matrix against the latest release
if: matrix.name == 'Linux / GCC' || matrix.name == 'macOS / Clang (ARM64)'
timeout-minutes: 15
env:
GH_TOKEN: ${{ github.token }}
run: |
case "${{ matrix.os }}" in
ubuntu*) target=linux-x86_64 ;;
*) target=macos-arm64 ;;
esac
prev="$RUNNER_TEMP/aether-prev"
mkdir -p "$prev"
gh release download --repo "${{ github.repository }}" --pattern "aether-*-$target.tar.gz" --dir "$RUNNER_TEMP"
tar -xzf "$RUNNER_TEMP"/aether-*-"$target".tar.gz -C "$prev"
echo "against $(cat "$prev/VERSION")"
AETHER_ABI_OLD_HOME="$prev" CC=${{ matrix.cc }} sh tests/integration/abi_matrix/test_abi_matrix.sh

# The .ae corpus at -O0 (what `ae run` compiles at) against -O2 (what the
# sweep in `make ci` compiles at), diffing stdout and exit code (#2488).
# One leg is enough to catch a program that behaves differently at -O0,
Expand Down Expand Up @@ -1382,6 +1404,64 @@ jobs:
sh "tests/integration/$t/test_$t.sh"
done

# std.cryptography's secret-key operations must not branch on, or index
# memory with, a secret (#2600, #1298). The probe marks every secret input
# undefined for Valgrind's memcheck; memcheck reports each conditional jump
# and address computed from one, and any such report fails the job. The
# other legs have no valgrind and run the probe as a known-answer test.
#
# The same job, on the same build, runs the conformance corpora of the pure
# TLS stack (#1298), each pinned to a commit and a checksum and fetched
# into a cache rather than kept in the repository: x509-limbo and the
# bettertls suite it imports, against tls13_cert's path validation. Each
# step reports on its own; tests/conformance/*/expected.txt lists every
# case that is skipped or does not agree, with the reason.
ci-crypto-ct:
name: Crypto constant-time (Valgrind) and conformance corpora
runs-on: ubuntu-latest
timeout-minutes: 30

steps:
- uses: actions/checkout@v4

- name: Install toolchain
run: sudo rm -f /etc/apt/sources.list.d/google-chrome.list; sudo apt-get update && sudo apt-get install -y gcc make bc valgrind

- name: Build the toolchain
run: make -j"$(nproc)" compiler ae stdlib

- name: Constant-time probe under memcheck
run: CT_REQUIRE_VALGRIND=1 sh tests/integration/crypto_ct_valgrind/test_crypto_ct_valgrind.sh

# The corpora are fetched once from main's runs and read by every PR's
# (the key names the pins, so moving one fetches afresh); a miss only
# downloads them again.
- name: Restore the conformance corpora
id: conformance_cache
if: success() || failure()
uses: actions/cache/restore@v4
with:
path: ~/.cache/aether-conformance
key: conformance-${{ hashFiles('tests/conformance/*/run.sh') }}

- name: x509-limbo (C2SP/x509-limbo, pinned)
if: success() || failure()
run: sh tests/conformance/x509_limbo/run.sh limbo

- name: bettertls (through x509-limbo's import)
if: success() || failure()
run: sh tests/conformance/x509_limbo/run.sh bettertls

- name: Save the conformance corpora
if: >-
(success() || failure())
&& github.event_name == 'push' && github.ref == 'refs/heads/main'
&& steps.conformance_cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: ~/.cache/aether-conformance
key: conformance-${{ hashFiles('tests/conformance/*/run.sh') }}

ci-wasm:
name: WebAssembly (Emscripten)
runs-on: ubuntu-22.04
Expand Down
38 changes: 38 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,44 @@ jobs:
make test-install
make test-release-archive

# -- The cross-version ABI matrix (#2957, docs/abi-policy.md) ---
# This release's libraries and hosts against the release before it: the
# latest published one, since this one is published only after every
# build leg. The tree names the script, so an older tag that lacks it
# skips the step (the rule at the checkout above).
- name: ABI matrix against the previous release (Unix)
if: matrix.os != 'windows-latest'
env:
GH_TOKEN: ${{ github.token }}
run: |
[ -f tests/integration/abi_matrix/test_abi_matrix.sh ] || exit 0
prev="$RUNNER_TEMP/aether-prev"
mkdir -p "$prev"
gh release download --repo "${{ github.repository }}" --pattern "aether-*-${{ matrix.target }}.tar.gz" --dir "$RUNNER_TEMP"
tar -xzf "$RUNNER_TEMP"/aether-*-${{ matrix.target }}.tar.gz -C "$prev"
echo "against $(cat "$prev/VERSION")"
AETHER_ABI_OLD_HOME="$prev" sh tests/integration/abi_matrix/test_abi_matrix.sh

- name: Download the previous release (Windows, ABI matrix)
if: matrix.os == 'windows-latest'
shell: pwsh
env:
GH_TOKEN: ${{ github.token }}
run: |
if (-not (Test-Path tests/integration/abi_matrix/test_abi_matrix.sh)) { exit 0 }
gh release download --repo "${{ github.repository }}" --pattern "aether-*-windows-x86_64.zip" --dir "$env:RUNNER_TEMP"
$zip = Get-ChildItem "$env:RUNNER_TEMP" -Filter "aether-*-windows-x86_64.zip" | Select-Object -First 1
Expand-Archive -Path $zip.FullName -DestinationPath "$env:RUNNER_TEMP/aether-prev"

- name: ABI matrix against the previous release (Windows)
if: matrix.os == 'windows-latest'
shell: msys2 {0}
run: |
[ -f tests/integration/abi_matrix/test_abi_matrix.sh ] || exit 0
prev="$(cygpath -u "$RUNNER_TEMP")/aether-prev"
echo "against $(cat "$prev/VERSION")"
AETHER_ABI_OLD_HOME="$prev" CC=gcc sh tests/integration/abi_matrix/test_abi_matrix.sh

- name: Strip (Windows)
if: matrix.os == 'windows-latest'
shell: msys2 {0}
Expand Down
Loading
Loading