Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
d9a7145
fix(node): drop isEthereum from testnet properties
nol4lej Aug 24, 2026
3212c05
fix(rpc): derive state-override account keys the way the runtime does
nol4lej Aug 24, 2026
9e32354
fix(dev): endow the EVM relay key so relaying works out of the box
nol4lej Aug 24, 2026
0f38fab
test(web3api): read the runtime version instead of hardcoding it
nol4lej Aug 24, 2026
fd11165
test(transaction-cost): sign the transaction so it reaches the check …
nol4lej Aug 24, 2026
3ae87f9
feat(ismp): integrate Hyperbridge for cross-chain messaging with Paseo
nol4lej Aug 31, 2026
4bebcef
test(ismp): add the ISMP test suites and Hyperbridge relayer kit
nol4lej Aug 31, 2026
0563e19
build(sdk): migrate polkadot-sdk 2512 -> 2606 and ISMP to republished…
nol4lej Sep 1, 2026
b09e53f
test(frontier): drop vendored upstream test harnesses to resolve the …
nol4lej Sep 1, 2026
3733fe2
fix(frontier): apply portable upstream security and correctness patches
nol4lej Sep 1, 2026
c245f99
build: drop dead core2 patch, its cid -> sc-network chain is gone sin…
nol4lej Sep 1, 2026
7c747a9
chore: drop obsolete advisory ignores, dead weight-reclaim wiring and…
nol4lej Sep 1, 2026
600a82e
docs: correct post-migration comments and record the deliberate ISMP …
nol4lej Sep 1, 2026
8510ca6
docs(runtime): cut node-template boilerplate comments and state the S…
nol4lej Sep 1, 2026
90f5411
docs(ismp): drop migration archaeology, dead references and duplicate…
nol4lej Sep 1, 2026
b07353e
feat(ismp): enforce the slot-duration bounds at compile time and expo…
nol4lej Sep 1, 2026
d0b45a5
style: restore canonical rustfmt and taplo formatting after the comme…
nol4lej Sep 1, 2026
b98876e
style: sort dependency tables alphabetically to satisfy taplo
nol4lej Sep 1, 2026
237eb7f
fix(benchmarks): drop the removed pallet_ismp target and make the run…
nol4lej Sep 1, 2026
74491b2
fix(benchmarks): report a SIGKILLed pallet as a failure instead of cl…
nol4lej Sep 1, 2026
23c65fe
fix(benchmarks): skip the storage-info dump that keeps runs in the OO…
nol4lej Sep 1, 2026
0b821e9
refactor(scripts): group the benchmark tooling under scripts/benchmarks
nol4lej Sep 1, 2026
a687672
fix(benchmarks): refuse to merge fewer parts than the target file alr…
nol4lej Sep 1, 2026
7545480
fix(benchmarks): correct the misleading --allow-partial guidance in t…
nol4lej Sep 2, 2026
67a30b9
refactor(benchmarks): restore the plain runner and point it at the re…
nol4lej Sep 2, 2026
7de1128
refactor(benchmarks): restore the plain runner and drop the low-memor…
nol4lej Sep 2, 2026
09fd1d0
perf(ismp): replace hand-written messaging weights with CPX62 benchmarks
nol4lej Sep 2, 2026
ca11f05
fix(ismp-messaging): correct the overflowed dispatch_post proof size …
nol4lej Sep 2, 2026
c12dba0
build(runtime): bump spec_version to 11 for the ISMP runtime upgrade
nol4lej Sep 2, 2026
9df1113
ci(release): verify the Docker image's coprocessor before pushing the…
nol4lej Sep 2, 2026
d57ff9a
docs(ismp-messaging): correct the proof_size root cause and record th…
nol4lej Sep 2, 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
53 changes: 53 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# What the Docker build context must not carry.
#
# CI never needed this file: a fresh checkout has no target/ and no node_modules. A
# developer's clone does — target/ alone is >100 GB here — and `COPY . .` would ship all
# of it to the daemon before the first line compiles. Anyone building these images
# locally (to reproduce a release, or to check a build-arg) needs the same context CI
# gets.

# Build artifacts
target/
**/target/

# Dependencies
node_modules/
**/node_modules/

# Test suites — not needed to build the node
ts-tests/

# NOT excluded: .git/
#
# `template/node/build.rs` calls substrate's `generate_cargo_keys`, which reads
# `.git/HEAD` to stamp the commit hash into `--version` (0.2.0-ca11f057e7c). CI checks
# out with fetch-depth: 0, so released images carry that hash today; excluding .git here
# would silently drop it and leave every image reporting a bare 0.2.0. 763 MB of context
# is a fair price for being able to tell which commit an image came from.

# CI definitions
.github/

# Docker's own files
Dockerfile
**/Dockerfile
.dockerignore
docker-compose*.yml

# IDE / OS noise
.vscode/
.idea/
.DS_Store
*.swp
*~

# Secrets — never send to a build context
.env
.env.*
!.env.example
*.pem
*.key

# Scratch
*.tmp
*.log
94 changes: 90 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,21 @@ jobs:
run: make setup

- name: Build release binary and WASM
run: make build-release
run: |
# The coprocessor is a compile-time constant: a testnet release must carry the
# hyperbridge-testnet feature or it ships mainnet's `Polkadot(3367)`.
if [ "${{ needs.metadata.outputs.environment }}" = "testnet" ]; then
make build-release FEATURES=hyperbridge-testnet
else
make build-release
fi

- name: Verify the built runtime targets ${{ needs.metadata.outputs.environment }}
run: |
# Reads the coprocessor back off the binary instead of trusting the flag above.
# A mismatch here is a wrong deployment that would only surface once a relayer
# tried to work, long after the deploy reported success.
bash scripts/verify-coprocessor.sh "${{ needs.metadata.outputs.environment }}"

- name: Verify WASM size (< 1.5 MB)
run: |
Expand Down Expand Up @@ -235,6 +249,20 @@ jobs:
contents: read
packages: write
steps:
# Same reason as the `build` job, plus one more: `load: true` below materialises
# the image in the runner's local store on top of the build cache, so this job now
# needs headroom for both. A stock runner has ~14 GB free.
- name: Free disk space
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true

- name: Checkout
uses: actions/checkout@v4

Expand All @@ -259,19 +287,77 @@ jobs:
type=raw,value=latest,enable=${{ needs.metadata.outputs.is_prerelease == 'false' }}
type=raw,value=testnet-latest,enable=${{ needs.metadata.outputs.is_prerelease == 'true' }}

- name: Build and push Docker image
# Build, verify, then push — in that order, deliberately. This image is what
# Watchtower installs on the validators, and `deploy-runtime` extracts the runtime
# WASM from it for the on-chain setCode. The `build` job verifies its own binary,
# but that binary is not this image: this job compiles independently, so a wrong
# `build-args` here passes `build` green and ships the wrong deployment. Once a tag
# is pushed to GHCR the nodes may pull it before anyone can delete it, so the check
# has to gate the push rather than follow it.
#
# `load: true` (instead of platforms: linux/amd64) puts the image in the runner's
# local store so it can be inspected; the runner is amd64, so the artifact is the
# same. The push step repeats identical inputs and is served from cache.
- name: Build Docker image
uses: docker/build-push-action@v6
with:
context: .
file: docker/Dockerfile
push: true
load: true
# Same feature selection as the binary build above: the image the validators
# actually run must target the same deployment as the runtime being deployed.
build-args: |
CARGO_FEATURES=${{ needs.metadata.outputs.environment == 'testnet' && 'hyperbridge-testnet' || '' }}
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
cache-from: type=gha
# ignore-error: a flaky gha cache backend (intermittent "not_found" on
# export) must not fail a job whose image already pushed successfully.
cache-to: type=gha,mode=max,ignore-error=true
platforms: linux/amd64

- name: Verify the image targets ${{ needs.metadata.outputs.environment }}
run: |
# Reads the coprocessor back out of the image's own binary. Testnet must report
# Kusama(4009) — the identifier Hyperbridge's Paseo deployment uses, per their
# solochain docs — and mainnet Polkadot(3367).
#
# The binary is copied out and run on the runner rather than inside the
# container: verify-coprocessor.sh binds RPC to localhost only, so an in-
# container node would need --network host to be reachable anyway. This works
# because the runner (ubuntu-latest) and the image (debian:bookworm-slim) are
# both amd64 glibc with libssl3. If this step ever fails with a loader error
# rather than a coprocessor mismatch, that assumption is what broke.
# metadata-action emits several tags; they all name the same image, so any one
# works. Fail loudly rather than run `docker create ""` if the list is empty.
IMAGE=$(echo "${{ steps.docker_meta.outputs.tags }}" | head -1)
if [ -z "$IMAGE" ]; then
echo "No tag produced by docker_meta — nothing to verify." >&2
exit 1
fi
echo "Verifying $IMAGE"
CID=$(docker create "$IMAGE")
docker cp "$CID:/usr/local/bin/orbinum-node" ./node-from-image
docker rm "$CID"
chmod +x ./node-from-image
bash scripts/verify-coprocessor.sh \
"${{ needs.metadata.outputs.environment }}" ./node-from-image

- name: Push Docker image
uses: docker/build-push-action@v6
with:
context: .
file: docker/Dockerfile
push: true
build-args: |
CARGO_FEATURES=${{ needs.metadata.outputs.environment == 'testnet' && 'hyperbridge-testnet' || '' }}
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max,ignore-error=true
# Deliberately no `platforms:` — it must match the Build step above or the two
# get different cache keys, which would recompile the node from scratch here
# (~25 min) and push an image other than the one just verified. The runner is
# amd64, so the default single-platform build produces linux/amd64 either way.

# ── 6. Crear GitHub Release ───────────────────────────────────────────────
github-release:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,6 @@ docker/testnet/origin.key

# Generated chain specs (canonical copy lives in node-deploy)
scripts/generate-specs/dist/

# Contiene mnemonics en claro — nunca commitear
scripts/vk/add-validators.cjs
Loading
Loading