Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
51d55d8
feat: transform into Universal Multi-VM Execution Profiler with Solan…
intelliDean May 4, 2026
8aef220
chore: fix clippy warnings and run fmt
intelliDean May 4, 2026
da2b77b
fix: resolve TS2304 error in Studio FlameGraph tooltip
intelliDean May 4, 2026
9d163b2
Refactor Atupa CLI core logic
intelliDean May 4, 2026
dae9404
fix(capture): report file always writes clean JSON regardless of --ou…
intelliDean May 6, 2026
7e591f5
fix(capture): unify all chain reports to StitchedReport shape for Stu…
intelliDean May 6, 2026
0d03db7
chore: fix studio server error
intelliDean May 6, 2026
9bc2731
refactor: resolve release blockers, add --vm flag, and deduplicate ad…
intelliDean Jun 3, 2026
acb5ac3
refactor(atupa-core): split into focused modules with improved design
intelliDean Aug 28, 2026
0c2f891
refactor(atupa-aave): decompose DeepTracer, fix bogus addresses, expa…
intelliDean Aug 28, 2026
0d74c5f
refactor(atupa-aave): split monolith into focused modules
intelliDean Aug 28, 2026
fdff4a2
refactor(atupa-adapters): split into focused modules with registry bu…
intelliDean Aug 28, 2026
54665fe
refactor(atupa-lido): decompose into modular structure, accumulator a…
intelliDean Aug 28, 2026
0ddfa32
refactor(atupa-nitro): split into modular structure with dedicated st…
intelliDean Aug 28, 2026
dbf3d41
refactor(atupa-output): split into common helpers, flamegraph generat…
intelliDean Aug 28, 2026
b2cc32e
refactor(atupa-parser): split into decoder, normalize, and aggregator…
intelliDean Aug 28, 2026
1174b28
refactor(atupa-rpc): split into client, types, error, and etherscan m…
intelliDean Aug 28, 2026
a64ddbb
refactor(atupa-sdk): split into registry, profile, and facade modules
intelliDean Aug 28, 2026
906052c
refactor(atupa-solana): split into error, client, and parser modules
intelliDean Aug 28, 2026
57b8c2d
refactor(atupa-starknet): split into error, types, flattener, and cli…
intelliDean Aug 28, 2026
f5bcf06
refactor(atupa-stellar): split into error, types, parser, and client …
intelliDean Aug 28, 2026
727d601
refactor(bin/atupa): modularize CLI entrypoint into commands, cli, ba…
intelliDean Aug 28, 2026
274aaa6
refactor(bin/atupa): modularize init scaffolding into templates, dete…
intelliDean Aug 28, 2026
64be73e
refactor(bin/atupa): enhance thresholds config parsing, evaluation me…
intelliDean Aug 28, 2026
0d34e4f
ci: modernize GitHub Actions, release workflows, and publishing script
intelliDean Aug 29, 2026
7559c6b
fix(studio): resolve ESLint errors, fix React state in effect and mem…
intelliDean Aug 29, 2026
79a116c
docs: update README, system architecture, testing guide, and adapter …
intelliDean Aug 29, 2026
603a5e8
chore(release): bump workspace version to 0.2.0
intelliDean Aug 29, 2026
245220d
feat(studio): add preloaded demo presets for Stylus, Solana, Starknet…
intelliDean Aug 29, 2026
fd9873f
feat(studio): adaptive chain-specific metric cards, multi-VM badges, …
intelliDean Aug 29, 2026
16340a7
chore: update gitignore and sync auto-load demo dataset
intelliDean Aug 29, 2026
257193e
chore: untrack generated bin/atupa/dist build artifacts
intelliDean Aug 29, 2026
66eed2f
style: apply cargo fmt across entire workspace
intelliDean Aug 29, 2026
38e71e7
fix(ci): add workspace rustfmt.toml for local/CI parity and apply can…
intelliDean Aug 29, 2026
cae690d
fix(ci): track embedded studio dist, update rust.yml build order, and…
intelliDean Aug 29, 2026
db75b4f
ci: configure clippy categories in rust.yml
intelliDean Aug 29, 2026
89d9390
ci: streamline clippy toolchain and frontend build step in rust.yml
intelliDean Aug 29, 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
33 changes: 17 additions & 16 deletions .github/workflows/gas-regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,31 @@
# 6. Fails CI if any threshold in atupa.toml is exceeded
#
# REQUIRED SECRETS (in repo Settings → Secrets):
# ATUPA_RPC_URL — Optional: override Anvil with a real mainnet fork RPC
# ATUPA_RPC_URL — Optional: override Anvil with a real RPC endpoint
#
# REQUIRED REPO VARIABLES:
# PROFILE_SCRIPT — relative path to a forge/cast script that outputs a TX hash
# to stdout (default: script/ProfileScript.s.sol)
# REPO VARIABLES (optional):
# PROFILE_SCRIPT — relative path to a forge/cast script (default: script/ProfileScript.s.sol)
# ATUPA_PROTOCOL — optional protocol adapter (aave | lido)
# ─────────────────────────────────────────────────────────────────────────────

name: ⛽ Atupa Gas Regression

on:
pull_request:
branches: [ main ]
# Allow manual trigger for debugging
workflow_dispatch:
inputs:
base_tx:
description: 'Override base transaction hash'
description: 'Override base transaction hash / signature'
required: false
target_tx:
description: 'Override target transaction hash'
description: 'Override target transaction hash / signature'
required: false
protocol:
description: 'Optional protocol deep diff (aave | lido)'
required: false
vm:
description: 'Explicit VM runtime (evm | stylus | starknet | solana | stellar)'
required: false

permissions:
Expand All @@ -38,7 +43,6 @@ permissions:

env:
CARGO_TERM_COLOR: always
# Use Anvil by default; override with a real RPC via secret for mainnet-fork
RPC_URL: ${{ secrets.ATUPA_RPC_URL || 'http://127.0.0.1:8545' }}
ANVIL_PORT: 8545
ANVIL_MNEMONIC: 'test test test test test test test test test test test junk'
Expand Down Expand Up @@ -78,7 +82,6 @@ jobs:
--steps-tracing \
--silent &
echo "ANVIL_PID=$!" >> $GITHUB_ENV
# Wait for Anvil to be ready
for i in $(seq 1 20); do
cast block-number --rpc-url http://127.0.0.1:${{ env.ANVIL_PORT }} &>/dev/null && break
sleep 0.5
Expand All @@ -94,15 +97,13 @@ jobs:
PROFILE_SCRIPT="${{ vars.PROFILE_SCRIPT || 'script/ProfileScript.s.sol' }}"

if [ -f "$PROFILE_SCRIPT" ]; then
# Forge deployment path: run script, capture TX hash from stdout
TX_HASH=$(forge script "$PROFILE_SCRIPT" \
--rpc-url http://127.0.0.1:${{ env.ANVIL_PORT }} \
--private-key $PRIVATE_KEY \
--broadcast \
--json 2>/dev/null \
| jq -r '.receipts[-1].transactionHash' 2>/dev/null)
else
# Fallback: Use a simple cast send to a known deployed contract
echo "⚠️ No PROFILE_SCRIPT found. Sending dummy ETH transfer for baseline."
TX_HASH=$(cast send \
--rpc-url http://127.0.0.1:${{ env.ANVIL_PORT }} \
Expand Down Expand Up @@ -141,7 +142,6 @@ jobs:
with:
key: atupa-ci-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}


- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1

Expand Down Expand Up @@ -197,10 +197,9 @@ jobs:
diff:
name: 🏮 Atupa Gas Diff
runs-on: ubuntu-latest
# Support manual override of hashes via workflow_dispatch
needs: [ baseline, target ]
permissions:
pull-requests: write # Required for posting PR comments
pull-requests: write

steps:
- name: Checkout PR branch
Expand All @@ -214,7 +213,6 @@ jobs:
with:
key: atupa-ci-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}


- name: Install Foundry (for Anvil)
uses: foundry-rs/foundry-toolchain@v1

Expand Down Expand Up @@ -245,16 +243,19 @@ jobs:
echo " Base: $BASE"
echo " Target: $TARGET"

# Use the Atupa composite action (the action.yml we just created)
# Execute Atupa composite action
- name: Run Atupa Gas Diff
uses: ./
with:
base_tx: ${{ steps.hashes.outputs.base }}
target_tx: ${{ steps.hashes.outputs.target }}
rpc_url: 'http://127.0.0.1:${{ env.ANVIL_PORT }}'
protocol: ${{ github.event.inputs.protocol || vars.ATUPA_PROTOCOL || '' }}
vm: ${{ github.event.inputs.vm || '' }}
config: 'atupa.toml'
post_comment: 'true'
upload_svg: 'true'
upload_json: 'true'

- name: Stop Anvil
if: always()
Expand Down
13 changes: 10 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
# Atupa Release — Automated Binary Compilation & Publishing
#
# Triggered when a new version tag (v*) is pushed.
# Performs a cross-platform matrix build (Linux, macOS, Windows),
# bundles the Studio frontend into the binary, and creates a GitHub Release.
# Performs a cross-platform matrix build (Linux, macOS, Windows),
# bundles the Studio frontend into the binary, generates SHA-256 checksums,
# and creates a GitHub Release before publishing crates in order.
# ─────────────────────────────────────────────────────────────────────────────

name: 🚀 Release
Expand Down Expand Up @@ -107,6 +108,7 @@ jobs:
cd target/${{ matrix.target }}/release
tar czf ../../../${{ matrix.asset_name }} atupa
cd ../../../
sha256sum ${{ matrix.asset_name }} > ${{ matrix.asset_name }}.sha256

- name: Package Binary (Windows)
if: runner.os == 'Windows'
Expand All @@ -115,12 +117,16 @@ jobs:
cd target/${{ matrix.target }}/release
Compress-Archive -Path atupa.exe -DestinationPath ../../../${{ matrix.asset_name }}
cd ../../../
$hash = (Get-FileHash -Path ${{ matrix.asset_name }} -Algorithm SHA256).Hash.ToLower()
"$hash ${{ matrix.asset_name }}" | Out-File -FilePath "${{ matrix.asset_name }}.sha256" -Encoding ascii

# 🚀 Upload to the release created in Phase 1
- name: Upload Asset to Release
uses: softprops/action-gh-release@v2
with:
files: ${{ matrix.asset_name }}
files: |
${{ matrix.asset_name }}
${{ matrix.asset_name }}.sha256
tag_name: ${{ github.ref_name }}

# ── Phase 3: Publish to Crates.io ──────────────────────────────────────────
Expand Down Expand Up @@ -159,4 +165,5 @@ jobs:
echo "⚠️ CRATES_IO_TOKEN not found. Skipping publish step."
exit 0
fi
chmod +x ./publish.sh
./publish.sh
36 changes: 21 additions & 15 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Rust
name: Rust CI

on:
push:
Expand All @@ -11,47 +11,53 @@ env:

jobs:
fmt:
name: Format Check
name: 🎨 Format Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- uses: Swatinem/rust-cache@v2
- name: Run fmt
- name: Check code formatting
run: cargo fmt --all -- --check

clippy:
name: Lint (Clippy)
name: 🔍 Lint (Clippy)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-node@v4
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- name: Build Studio
node-version: 22
- name: Build Studio Frontend
run: |
cd studio
npm install
npm ci || npm install
npm run build
- uses: Swatinem/rust-cache@v2
- name: Run clippy
run: cargo clippy --workspace --all-targets -- -D warnings
run: cargo clippy --workspace --all-targets

test:
name: Test Suite
name: 🧪 Workspace Test Suite
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build Studio
- uses: actions/setup-node@v4
with:
node-version: 22
cache: 'npm'
cache-dependency-path: 'studio/package-lock.json'
- name: Build Studio Frontend
run: |
cd studio
npm install
npm ci || npm install
npm run build
- name: Cargo Check
- uses: Swatinem/rust-cache@v2
- name: Workspace Check
run: cargo check --workspace
- name: Run tests
- name: Run all workspace tests
run: cargo test --workspace
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ artifacts/
# Playground
playground/out/
playground/cache/


demo
48 changes: 0 additions & 48 deletions ARBITRUM_UNIFIED_PROPOSAL.md

This file was deleted.

Loading
Loading