Skip to content

Commit e2c86ec

Browse files
committed
Base Update 9
1 parent f8cd069 commit e2c86ec

56 files changed

Lines changed: 864 additions & 203 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/action_bins.yml

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
name: Build Bins
2+
on:
3+
push:
4+
branches:
5+
- main
6+
tags:
7+
- '*'
8+
workflow_dispatch:
9+
permissions:
10+
contents: write
11+
env:
12+
PLATFORMS: >-
13+
[{"name":"windows","os":"windows-latest"},{"name":"linux","os":"ubuntu-latest"},{"name":"mac","os":"macos-latest"},{"name":"web","os":"ubuntu-latest"}]
14+
TARGETS: >-
15+
[{"tier":"main","name":"core","selector":"core:main","testable":true},{"tier":"main","name":"hash","selector":"hash:main","testable":true},{"tier":"main","name":"dhcm","selector":"dhcm:main","testable":true},{"tier":"main","name":"pow_client","selector":"pow:main:client","testable":true},{"tier":"main","name":"pow_server","selector":"pow:main:server","testable":true},{"tier":"main","name":"pow_combined","selector":"pow:main:combined","testable":true},{"tier":"main","name":"pqc","selector":"pqc:main","testable":true},{"tier":"main","name":"system","selector":"system:main","testable":true},{"tier":"base","name":"core_cipher_main","selector":"core:core_cipher_main","testable":true},{"tier":"base","name":"core_ecc_main","selector":"core:core_ecc_main","testable":true},{"tier":"base","name":"core_mac_main","selector":"core:core_mac_main","testable":true},{"tier":"base","name":"dhcm_legacy","selector":"dhcm:dhcm_legacy_main","testable":true},{"tier":"base","name":"dhcm_primitive","selector":"dhcm:dhcm_primitive_main","testable":true},{"tier":"base","name":"hash_legacy","selector":"hash:hash_legacy_main","testable":true},{"tier":"base","name":"hash_primitive","selector":"hash:hash_primitive_main","testable":true},{"tier":"base","name":"pow_client_legacy","selector":"pow:base:legacy","testable":true},{"tier":"base","name":"pow_client_primitive","selector":"pow:base:primitive","testable":true},{"tier":"base","name":"pow_server_legacy","selector":"pow:base:legacy","testable":true},{"tier":"base","name":"pow_server_primitive","selector":"pow:base:primitive","testable":true},{"tier":"base","name":"pow_combined","selector":"pow:base:combined","testable":true},{"tier":"base","name":"pqc_kem_main","selector":"pqc:pqc_kem_main","testable":true},{"tier":"base","name":"pqc_sign_main","selector":"pqc:pqc_sign_main","testable":true},{"tier":"partial","name":"aes_aead","selector":"core:aes_aead","testable":true},{"tier":"partial","name":"aes_modes","selector":"core:aes_modes","testable":true},{"tier":"partial","name":"ecc","selector":"core:ecc","testable":true},{"tier":"partial","name":"macs","selector":"core:macs","testable":true},{"tier":"partial","name":"stream_aead","selector":"core:stream_aead","testable":true},{"tier":"partial","name":"dhcm_legacy_alive","selector":"dhcm:legacy_alive","testable":true},{"tier":"partial","name":"dhcm_legacy_unsafe","selector":"dhcm:legacy_unsafe","testable":true},{"tier":"partial","name":"dhcm_primitive_fast","selector":"dhcm:primitive_fast","testable":true},{"tier":"partial","name":"dhcm_primitive_memory_hard","selector":"dhcm:primitive_memory_hard","testable":true},{"tier":"partial","name":"dhcm_primitive_sponge_xof","selector":"dhcm:primitive_sponge_xof","testable":true},{"tier":"partial","name":"hash_legacy_alive","selector":"hash:legacy_alive","testable":true},{"tier":"partial","name":"hash_legacy_unsafe","selector":"hash:legacy_unsafe","testable":true},{"tier":"partial","name":"hash_primitive_fast","selector":"hash:primitive_fast","testable":true},{"tier":"partial","name":"hash_primitive_memory_hard","selector":"hash:primitive_memory_hard","testable":true},{"tier":"partial","name":"hash_primitive_sponge_xof","selector":"hash:primitive_sponge_xof","testable":true},{"tier":"partial","name":"pow_client_legacy_alive","selector":"pow:partial:pair:legacy_alive","testable":true},{"tier":"partial","name":"pow_client_legacy_unsafe","selector":"pow:partial:pair:legacy_unsafe","testable":true},{"tier":"partial","name":"pow_client_primitive_fast","selector":"pow:partial:pair:primitive_fast","testable":true},{"tier":"partial","name":"pow_client_primitive_memory_hard","selector":"pow:partial:pair:primitive_memory_hard","testable":true},{"tier":"partial","name":"pow_client_primitive_sponge_xof","selector":"pow:partial:pair:primitive_sponge_xof","testable":true},{"tier":"partial","name":"pow_server_legacy_alive","selector":"pow:partial:pair:legacy_alive","testable":true},{"tier":"partial","name":"pow_server_legacy_unsafe","selector":"pow:partial:pair:legacy_unsafe","testable":true},{"tier":"partial","name":"pow_server_primitive_fast","selector":"pow:partial:pair:primitive_fast","testable":true},{"tier":"partial","name":"pow_server_primitive_memory_hard","selector":"pow:partial:pair:primitive_memory_hard","testable":true},{"tier":"partial","name":"pow_server_primitive_sponge_xof","selector":"pow:partial:pair:primitive_sponge_xof","testable":true},{"tier":"partial","name":"pow_combined_legacy_alive","selector":"pow:partial:combined:legacy_alive","testable":true},{"tier":"partial","name":"pow_combined_legacy_unsafe","selector":"pow:partial:combined:legacy_unsafe","testable":true},{"tier":"partial","name":"pow_combined_primitive_fast","selector":"pow:partial:combined:primitive_fast","testable":true},{"tier":"partial","name":"pow_combined_primitive_memory_hard","selector":"pow:partial:combined:primitive_memory_hard","testable":true},{"tier":"partial","name":"pow_combined_primitive_sponge_xof","selector":"pow:partial:combined:primitive_sponge_xof","testable":true},{"tier":"partial","name":"kem_code_based","selector":"pqc:kem_code_based","testable":true},{"tier":"partial","name":"kem_lattice","selector":"pqc:kem_lattice","testable":true},{"tier":"partial","name":"sign_hash_based","selector":"pqc:sign_hash_based","testable":true},{"tier":"partial","name":"sign_lattice","selector":"pqc:sign_lattice","testable":true}]
16+
jobs:
17+
build:
18+
runs-on: ${{ matrix.platform.os }}
19+
strategy:
20+
fail-fast: false
21+
max-parallel: 4
22+
matrix:
23+
platform: ${{ fromJson(env.PLATFORMS) }}
24+
target: ${{ fromJson(env.TARGETS) }}
25+
env:
26+
BIN_DIR: ${{ matrix.platform.name == 'web' && 'web' || matrix.platform.name }}
27+
LOG_FILE: action_${{ matrix.platform.name }}_build_${{ matrix.target.tier }}_${{ matrix.target.name }}.log
28+
SOURCE_DATE_EPOCH: 0
29+
TZ: UTC
30+
steps:
31+
- uses: actions/checkout@v4
32+
with:
33+
fetch-depth: 1
34+
- uses: actions/setup-python@v5
35+
with:
36+
python-version: "3.11"
37+
- name: Guard --no_gen not present
38+
run: python -c "import pathlib,sys; root=pathlib.Path('.'); bad=[]; [bad.append(str(p)) for p in root.rglob('*') if p.is_file() and '--no_gen' in p.read_text(errors='ignore')]; print('Found --no_gen in', bad) if bad else None; sys.exit(1 if bad else 0)"
39+
- name: Install GCC (Windows)
40+
if: matrix.platform.name == 'windows'
41+
run: choco install mingw -y
42+
shell: powershell
43+
- name: Install GCC (Linux)
44+
if: matrix.platform.name == 'linux'
45+
run: sudo apt-get update && sudo apt-get install -y build-essential
46+
- name: Install GCC (mac)
47+
if: matrix.platform.name == 'mac'
48+
run: brew install gcc
49+
- name: Setup Emscripten
50+
if: matrix.platform.name == 'web'
51+
run: |
52+
git clone https://github.com/emscripten-core/emsdk.git
53+
cd emsdk
54+
./emsdk install 3.1.60
55+
./emsdk activate 3.1.60
56+
echo "EMSDK=$PWD" >> $GITHUB_ENV
57+
echo "EM_CONFIG=$PWD/.emscripten" >> $GITHUB_ENV
58+
echo "$PWD" >> $GITHUB_PATH
59+
echo "$PWD/upstream/emscripten" >> $GITHUB_PATH
60+
- name: Build
61+
run: python runner.py --platform ${{ matrix.platform.name }} --build ${{ matrix.target.selector }} --action-log ${{ env.LOG_FILE }}
62+
- name: Upload Output
63+
uses: actions/upload-artifact@v4
64+
with:
65+
name: output-${{ matrix.platform.name }}-${{ matrix.target.name }}-build
66+
path: |
67+
bin/${{ env.BIN_DIR }}
68+
logs/${{ env.LOG_FILE }}
69+
if-no-files-found: error
70+
test:
71+
runs-on: ${{ matrix.platform.os }}
72+
needs: build
73+
strategy:
74+
fail-fast: false
75+
max-parallel: 4
76+
matrix:
77+
platform: ${{ fromJson(env.PLATFORMS) }}
78+
target: ${{ fromJson(env.TARGETS) }}
79+
if: ${{ matrix.target.testable }}
80+
env:
81+
BIN_DIR: ${{ matrix.platform.name == 'web' && 'web' || matrix.platform.name }}
82+
LOG_FILE: action_${{ matrix.platform.name }}_test_${{ matrix.target.tier }}_${{ matrix.target.name }}.log
83+
SOURCE_DATE_EPOCH: 0
84+
TZ: UTC
85+
steps:
86+
- uses: actions/checkout@v4
87+
with:
88+
fetch-depth: 1
89+
- uses: actions/setup-python@v5
90+
with:
91+
python-version: "3.11"
92+
- name: Guard --no_gen not present
93+
run: python -c "import pathlib,sys; root=pathlib.Path('.'); bad=[]; [bad.append(str(p)) for p in root.rglob('*') if p.is_file() and '--no_gen' in p.read_text(errors='ignore')]; print('Found --no_gen in', bad) if bad else None; sys.exit(1 if bad else 0)"
94+
- name: Install GCC (Windows)
95+
if: matrix.platform.name == 'windows'
96+
run: choco install mingw -y
97+
shell: powershell
98+
- name: Install GCC (Linux)
99+
if: matrix.platform.name == 'linux'
100+
run: sudo apt-get update && sudo apt-get install -y build-essential
101+
- name: Install GCC (mac)
102+
if: matrix.platform.name == 'mac'
103+
run: brew install gcc
104+
- name: Install Wasmtime (web)
105+
if: matrix.platform.name == 'web'
106+
run: |
107+
curl https://wasmtime.dev/install.sh -sSf | bash
108+
echo "$HOME/.wasmtime/bin" >> $GITHUB_PATH
109+
- name: Download Build Output
110+
uses: actions/download-artifact@v4
111+
with:
112+
name: output-${{ matrix.platform.name }}-${{ matrix.target.name }}-build
113+
path: .
114+
- name: Test
115+
run: python runner.py --platform ${{ matrix.platform.name }} --test ${{ matrix.target.selector }} --action-log ${{ env.LOG_FILE }}
116+
- name: Upload Output
117+
uses: actions/upload-artifact@v4
118+
with:
119+
name: output-${{ matrix.platform.name }}-${{ matrix.target.name }}-test
120+
path: |
121+
logs/${{ env.LOG_FILE }}
122+
if-no-files-found: error
123+
commit:
124+
runs-on: ubuntu-latest
125+
needs:
126+
- build
127+
- test
128+
steps:
129+
- uses: actions/checkout@v4
130+
with:
131+
fetch-depth: 0
132+
- name: Download Artifacts
133+
uses: actions/download-artifact@v4
134+
with:
135+
path: .
136+
merge-multiple: true
137+
- name: Commit Outputs
138+
run: |
139+
git config user.name "github-actions[bot]"
140+
git config user.email "github-actions[bot]@users.noreply.github.com"
141+
git add -f bin logs
142+
if [ -z "$(git status --porcelain)" ]; then
143+
exit 0
144+
fi
145+
git commit -m "Add platform binaries and logs"
146+
git pull --rebase
147+
git push

0 commit comments

Comments
 (0)