Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
68a3578
Add MonadFixtureConsumer for consuming fixtures on the monad runloop
pdobacz Jun 12, 2026
84ae0fc
docs: use uv for monad runloop testing setup
pdobacz Jun 18, 2026
2561c49
perf: shrink triedb chunk sizing for monad fixture consumer
pdobacz Jun 18, 2026
428fc1f
fix: tear down eest-runner container when pytest exits
pdobacz Jun 18, 2026
e62599e
docs: note runloop parallelism is CPU-bound
pdobacz Jun 18, 2026
de3b3cb
feat: --monad-runloop fill flag for runloop-conformant block hashes
pdobacz Jun 18, 2026
13aad44
Minor fixes to MONAD_RUNLOOP_TESTING.md
pdobacz Jun 18, 2026
c5b6f2e
consumer: support MONAD_NEXT (rev 10) + page-encoded triedb
pdobacz Jun 18, 2026
cad717d
consumer: schedule-aware triedb encoding for MIP-8 transition
pdobacz Jun 19, 2026
702b90a
docs: MIP-8 dual-db fork-transition flow in MONAD_RUNLOOP_TESTING
pdobacz Jun 23, 2026
c037989
fill: make --monad-runloop transition fills pass
pdobacz Jun 23, 2026
64b5770
ci: add monad_runloop fixture release feature
pdobacz Jun 23, 2026
6321736
forks: drop unused PragueToMONAD_EIGHT transition fork
pdobacz Jun 23, 2026
c3b7aff
ci: add consume_release workflow
pdobacz Jun 24, 2026
38f4661
TEMP: trigger consume_release on push (mip8 transition smoke run)
pdobacz Jun 24, 2026
de78270
consume: resolve releases from monad-developers/execution-spec-tests
pdobacz Jun 24, 2026
03b16bc
TEMP: download draft fixtures in-workflow for the smoke run
pdobacz Jun 24, 2026
5e20ed4
ci(consume): paste full consume.log in summary, fix fields, drop html
pdobacz Jun 29, 2026
6d1fa4d
ci(consume): run consume direct with -v
pdobacz Jun 29, 2026
1ab8995
deps: allow coincurve 21 to fix Python 3.13 source build
pdobacz Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/configs/feature.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,8 @@ monad:
# (triggered by tarball output) fails to proceed on no tests processed
# in 1st phase (exit code 5)
fill-params: --suppress-no-test-exit-code -m blockchain_test --from=MONAD_EIGHT --until=MONAD_NEXT --chain-id=143 -k "not invalid_header"

monad_runloop:
evm-type: eels
# Like `monad`, but `--monad-runloop` and eestnet chain id `30143`
fill-params: --suppress-no-test-exit-code -m blockchain_test --from=MONAD_EIGHT --until=MONAD_NEXT --chain-id=30143 --monad-runloop -k "not invalid_header"
207 changes: 207 additions & 0 deletions .github/workflows/consume_release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
# Manually run a filled fixtures release against a pinned monad stack via
# `consume direct` + the eest-runner runloop client.

name: Consume Release (monad runloop)

on:
workflow_dispatch:
inputs:
release:
description: "Fixtures source: release spec (e.g. monad_runloop@v1.1.0-rc1), a fixtures.tar.gz URL, or latest"
required: true
default: "monad_runloop@latest"
harness_ref:
description: "monad-eest-rust-harness ref (branch/tag/SHA)"
required: false
default: "execute-with-eestnet"
monad_bft_repo:
description: "Override monad-bft from this owner/repo (e.g. category-labs/monad-bft); empty = keep the harness's pinned commit"
required: false
default: ""
monad_bft_ref:
description: "Ref/SHA in monad_bft_repo (default branch if empty); applies only when monad_bft_repo is set"
required: false
default: ""
monad_execution_repo:
description: "Override monad-execution from this owner/repo; empty = keep the harness's pinned commit"
required: false
default: ""
monad_execution_ref:
description: "Ref/SHA in monad_execution_repo (default branch if empty); applies only when monad_execution_repo is set"
required: false
default: ""
filter:
description: "Optional -k expression to consume a subset"
required: false
default: ""
# TEMP: run on push to this branch to exercise the workflow before
# workflow_dispatch is available on the default branch. Revert this commit.
push:
branches: [execute-with-eestnet]

permissions:
contents: write # TEMP: write is needed to see/download the draft release in this repo

jobs:
consume:
runs-on: ubuntu-24.04
timeout-minutes: 1440 # hosted runners still cap at 6h; raise the runner for a full release
steps:
- name: Validate inputs
shell: bash
env:
BFT_REPO: ${{ inputs.monad_bft_repo }}
BFT_REF: ${{ inputs.monad_bft_ref }}
EXEC_REPO: ${{ inputs.monad_execution_repo }}
EXEC_REF: ${{ inputs.monad_execution_ref }}
run: |
set -euo pipefail
fail=0
if [ -n "$BFT_REF" ] && [ -z "$BFT_REPO" ]; then
echo "::error::monad_bft_ref is set but monad_bft_repo is empty; set monad_bft_repo to override monad-bft."
fail=1
fi
if [ -n "$EXEC_REF" ] && [ -z "$EXEC_REPO" ]; then
echo "::error::monad_execution_ref is set but monad_execution_repo is empty; set monad_execution_repo to override monad-execution."
fail=1
fi
[ "$fail" -eq 0 ]

- name: Checkout consumer (execution-specs)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Checkout monad-eest-rust-harness (build input)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: monad-exp/monad-eest-rust-harness
ref: ${{ inputs.harness_ref || 'execute-with-eestnet' }} # TEMP fallback for push
path: monad-eest-rust-harness
submodules: recursive
fetch-depth: 0
token: ${{ secrets.MONAD_STACK_TOKEN }}

# Optional submodule overrides. Set a *_repo to pull that submodule from
# a different fork at *_ref (default branch if ref is empty); leave it
# empty to keep the harness's pinned commit. actions/checkout handles
# auth, so no manual credential setup is needed. The monad-bft override
# recurses (so monad-execution lands at the new bft's pin); the
# monad-execution override runs after, so it is not reset.
- name: Override monad-bft
if: ${{ inputs.monad_bft_repo != '' }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ${{ inputs.monad_bft_repo }}
ref: ${{ inputs.monad_bft_ref }}
path: monad-eest-rust-harness/monad-bft
submodules: recursive
fetch-depth: 0
token: ${{ secrets.MONAD_STACK_TOKEN }}

- name: Override monad-execution
if: ${{ inputs.monad_execution_repo != '' }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ${{ inputs.monad_execution_repo }}
ref: ${{ inputs.monad_execution_ref }}
path: monad-eest-rust-harness/monad-bft/monad-execution
fetch-depth: 0
token: ${{ secrets.MONAD_STACK_TOKEN }}

- name: Log pinned stack
id: stack
working-directory: monad-eest-rust-harness
shell: bash
run: |
bft=$(git -C monad-bft rev-parse HEAD)
exec=$(git -C monad-bft/monad-execution rev-parse HEAD)
echo "monad-bft: $bft"
echo "monad-execution: $exec"
echo "bft=$bft" >> "$GITHUB_OUTPUT"
echo "exec=$exec" >> "$GITHUB_OUTPUT"

- name: Build the monad-builder image
working-directory: monad-eest-rust-harness
shell: bash
run: docker build -t monad-builder:latest - < monad-bft/docker/builder/Dockerfile

- name: Build the eest-runner stack (build.sh)
working-directory: monad-eest-rust-harness
shell: bash
run: ./build.sh

- name: Setup uv
uses: ./.github/actions/setup-uv

- name: Install EEST
shell: bash
run: uv sync --no-progress

- name: Provision hugepages
shell: bash
run: sudo sysctl -w vm.nr_hugepages=3072

# TEMP: the release fetcher can't see drafts (unauthenticated), so pull
# the draft asset here with the repo's own token, then consume locally.
- name: Download draft fixtures (TEMP)
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
gh release download "tests-monad_runloop@v1.1.0-rc2" \
--repo "${{ github.repository }}" \
--pattern 'fixtures_monad_runloop.tar.gz' --clobber
mkdir -p draft_fixtures
tar xzf fixtures_monad_runloop.tar.gz -C draft_fixtures

- name: Consume release
id: consume
shell: bash
env:
# TEMP (push): consume the downloaded draft fixtures, mip8 fork-transition only.
RELEASE: draft_fixtures/fixtures
FILTER: ${{ inputs.filter || 'mip8_pageified_storage and test_fork_transition' }}
run: |
set -o pipefail
echo "release=$RELEASE" >> "$GITHUB_OUTPUT"
echo "filter=${FILTER:-(none)}" >> "$GITHUB_OUTPUT"
FILTER_ARG=()
if [ -n "$FILTER" ]; then
FILTER_ARG=(-k "$FILTER")
fi
uv run consume direct \
--input "$RELEASE" \
--bin "$GITHUB_WORKSPACE/monad-eest-rust-harness/bin/eest-runner" \
"${FILTER_ARG[@]}" -v | tee consume.log

- name: Summary
if: always()
shell: bash
env:
RELEASE: ${{ steps.consume.outputs.release }}
FILTER: ${{ steps.consume.outputs.filter }}
HARNESS_REF: ${{ inputs.harness_ref || 'execute-with-eestnet' }}
BFT_SHA: ${{ steps.stack.outputs.bft }}
EXEC_SHA: ${{ steps.stack.outputs.exec }}
run: |
{
echo "## consume \`${RELEASE:-(unknown)}\`"
echo ""
echo "| input | value |"
echo "|---|---|"
echo "| harness_ref | \`${HARNESS_REF}\` |"
echo "| monad-bft | \`${BFT_SHA:-(unknown)}\` |"
echo "| monad-execution | \`${EXEC_SHA:-(unknown)}\` |"
echo "| filter | \`${FILTER:-(none)}\` |"
echo ""
echo '```'
cat consume.log 2>/dev/null || echo "(no consume.log produced)"
echo '```'
} >> "$GITHUB_STEP_SUMMARY"

- name: Upload log
if: always()
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: consume-report
path: consume.log
if-no-files-found: warn
Loading