Skip to content

Update action_bins.yml #3

Update action_bins.yml

Update action_bins.yml #3

Workflow file for this run

name: Build Bins
on:
push:
branches:
- main
tags:
- '*'
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ${{ matrix.platform.os }}
strategy:
fail-fast: false
max-parallel: 4
matrix:
platform: ${{ fromJson('[{\"name\":\"windows\",\"os\":\"windows-latest\"},{\"name\":\"linux\",\"os\":\"ubuntu-latest\"},{\"name\":\"mac\",\"os\":\"macos-latest\"},{\"name\":\"web\",\"os\":\"ubuntu-latest\"}]') }}
target: ${{ fromJson('[{\"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}]') }}
env:
BIN_DIR: ${{ matrix.platform.name == 'web' && 'web' || matrix.platform.name }}
LOG_FILE: action_${{ matrix.platform.name }}_build_${{ matrix.target.tier }}_${{ matrix.target.name }}.log
SOURCE_DATE_EPOCH: 0
TZ: UTC
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Guard --no_gen not present
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)"
- name: Install GCC (Windows)
if: matrix.platform.name == 'windows'
run: choco install mingw -y
shell: powershell
- name: Install GCC (Linux)
if: matrix.platform.name == 'linux'
run: sudo apt-get update && sudo apt-get install -y build-essential
- name: Install GCC (mac)
if: matrix.platform.name == 'mac'
run: brew install gcc
- name: Setup Emscripten
if: matrix.platform.name == 'web'
run: |
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install 3.1.60
./emsdk activate 3.1.60
echo "EMSDK=$PWD" >> $GITHUB_ENV
echo "EM_CONFIG=$PWD/.emscripten" >> $GITHUB_ENV
echo "$PWD" >> $GITHUB_PATH
echo "$PWD/upstream/emscripten" >> $GITHUB_PATH
- name: Build
run: python runner.py --platform ${{ matrix.platform.name }} --build ${{ matrix.target.selector }} --action-log ${{ env.LOG_FILE }}
- name: Upload Output
uses: actions/upload-artifact@v4
with:
name: output-${{ matrix.platform.name }}-${{ matrix.target.name }}-build
path: |
bin/${{ env.BIN_DIR }}
logs/${{ env.LOG_FILE }}
if-no-files-found: error
test:
runs-on: ${{ matrix.platform.os }}
needs: build
strategy:
fail-fast: false
max-parallel: 4
matrix:
platform: ${{ fromJson('[{\"name\":\"windows\",\"os\":\"windows-latest\"},{\"name\":\"linux\",\"os\":\"ubuntu-latest\"},{\"name\":\"mac\",\"os\":\"macos-latest\"},{\"name\":\"web\",\"os\":\"ubuntu-latest\"}]') }}
target: ${{ fromJson('[{\"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}]') }}
env:
BIN_DIR: ${{ matrix.platform.name == 'web' && 'web' || matrix.platform.name }}
LOG_FILE: action_${{ matrix.platform.name }}_test_${{ matrix.target.tier }}_${{ matrix.target.name }}.log
SOURCE_DATE_EPOCH: 0
TZ: UTC
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Guard --no_gen not present
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)"
- name: Install GCC (Windows)
if: matrix.platform.name == 'windows'
run: choco install mingw -y
shell: powershell
- name: Install GCC (Linux)
if: matrix.platform.name == 'linux'
run: sudo apt-get update && sudo apt-get install -y build-essential
- name: Install GCC (mac)
if: matrix.platform.name == 'mac'
run: brew install gcc
- name: Install Wasmtime (web)
if: matrix.platform.name == 'web'
run: |
curl https://wasmtime.dev/install.sh -sSf | bash
echo "$HOME/.wasmtime/bin" >> $GITHUB_PATH
- name: Download Build Output
uses: actions/download-artifact@v4
with:
name: output-${{ matrix.platform.name }}-${{ matrix.target.name }}-build
path: .
- name: Test
run: python runner.py --platform ${{ matrix.platform.name }} --test ${{ matrix.target.selector }} --action-log ${{ env.LOG_FILE }}
- name: Upload Output
uses: actions/upload-artifact@v4
with:
name: output-${{ matrix.platform.name }}-${{ matrix.target.name }}-test
path: |
logs/${{ env.LOG_FILE }}
if-no-files-found: error
commit:
runs-on: ubuntu-latest
needs:
- build
- test
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
path: .
merge-multiple: true
- name: Commit Outputs
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -f bin logs
if [ -z "$(git status --porcelain)" ]; then
exit 0
fi
git commit -m "Add platform binaries and logs"
git pull --rebase
git push