Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
46 changes: 37 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ concurrency:

env:
ZIG_VERSION: "0.15.2"
RUST_VERSION: "1.89.0"
NODE_VERSION: "22.22.0"
BUN_VERSION: "1.3.14"

jobs:
fast:
Expand All @@ -44,14 +47,22 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "22"
node-version: ${{ env.NODE_VERSION }}

- name: Set up Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: ${{ env.BUN_VERSION }}

- name: Set up Rust
uses: dtolnay/rust-toolchain@1.89.0

- name: Install native build dependencies
run: sudo apt-get update && sudo apt-get install -y cargo perl rustc
run: sudo apt-get update && sudo apt-get install -y perl

- name: Install npm package dependencies
working-directory: zevm
run: npm --prefix npm/zevm install --ignore-scripts
run: npm --prefix npm/zevm ci --ignore-scripts

- name: Fetch Zig package dependencies
working-directory: zevm
Expand Down Expand Up @@ -127,8 +138,16 @@ jobs:
with:
version: ${{ env.ZIG_VERSION }}

- name: Set up Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: ${{ env.BUN_VERSION }}

- name: Set up Rust
uses: dtolnay/rust-toolchain@1.89.0

- name: Install native build dependencies
run: sudo apt-get update && sudo apt-get install -y cargo perl rustc
run: sudo apt-get update && sudo apt-get install -y perl

- name: Fetch Zig package dependencies
working-directory: zevm
Expand Down Expand Up @@ -160,6 +179,8 @@ jobs:

- name: Set up Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: ${{ env.BUN_VERSION }}

- name: Set up Go
uses: actions/setup-go@v5
Expand Down Expand Up @@ -254,10 +275,12 @@ jobs:
working-directory: zevm
run: |
ARTIFACT_DIR=.ops/release-metadata/"$RELEASE_IDENTIFIER"
echo "zevm_revision=$(jq -r '.zevmGitRevision' "$ARTIFACT_DIR/release-tuple.json")" >> "$GITHUB_OUTPUT"
echo "voltaire_revision=$(jq -r '.voltaireGitRevision' "$ARTIFACT_DIR/release-tuple.json")" >> "$GITHUB_OUTPUT"
echo "guillotine_mini_revision=$(jq -r '.guillotineMiniGitRevision' "$ARTIFACT_DIR/release-tuple.json")" >> "$GITHUB_OUTPUT"
echo "zig_version=$(jq -r '.zigVersion' "$ARTIFACT_DIR/release-tuple.json")" >> "$GITHUB_OUTPUT"
{
echo "zevm_revision=$(jq -r '.zevmGitRevision' "$ARTIFACT_DIR/release-tuple.json")"
echo "voltaire_revision=$(jq -r '.voltaireGitRevision' "$ARTIFACT_DIR/release-tuple.json")"
echo "guillotine_mini_revision=$(jq -r '.guillotineMiniGitRevision' "$ARTIFACT_DIR/release-tuple.json")"
echo "zig_version=$(jq -r '.zigVersion' "$ARTIFACT_DIR/release-tuple.json")"
} >> "$GITHUB_OUTPUT"

- name: Set up tuple Zig
uses: mlugg/setup-zig@v2
Expand All @@ -266,14 +289,19 @@ jobs:

- name: Set up Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: ${{ env.BUN_VERSION }}

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.24.x"

- name: Install native build dependencies
run: sudo apt-get update && sudo apt-get install -y cargo perl rustc
run: sudo apt-get update && sudo apt-get install -y perl

- name: Set up Rust
uses: dtolnay/rust-toolchain@1.89.0

- name: Verify materialized release tuple
working-directory: zevm
Expand Down
250 changes: 250 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,250 @@
name: Release

on:
push:
tags:
- "v*"

concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false

env:
ZIG_VERSION: "0.15.2"
RUST_VERSION: "1.89.0"
TEST_NODE_VERSION: "22.22.0"
PUBLISH_NODE_VERSION: "24.11.1"
PUBLISH_NPM_VERSION: "11.6.2"
BUN_VERSION: "1.3.14"

jobs:
verify:
name: Verify Release
runs-on: ubuntu-24.04
timeout-minutes: 45
permissions:
contents: read
steps:
- name: Checkout release tag
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive

- name: Require a commit merged to main
run: |
git fetch origin main
git merge-base --is-ancestor "$GITHUB_SHA" origin/main

- name: Set up Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}

- name: Set up Rust
uses: dtolnay/rust-toolchain@1.89.0

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.TEST_NODE_VERSION }}
cache: npm
cache-dependency-path: npm/zevm/package-lock.json

- name: Set up Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: ${{ env.BUN_VERSION }}

- name: Install native build dependencies
run: sudo apt-get update && sudo apt-get install -y perl

- name: Install npm dependencies
run: npm --prefix npm/zevm ci --ignore-scripts

- name: Verify release versions and tag
run: npm --prefix npm/zevm run verify:release -- "$GITHUB_REF_NAME"

- name: Fetch and verify Zig dependencies
run: |
zig build --fetch
zig build dependency-preflight -- --zig-version "$ZIG_VERSION"

- name: Build
run: zig build --summary all

- name: Test
run: zig build test --summary all

- name: Run release qualification
run: |
zig build qualification-check -- --require-covered
zig build verify --summary all

- name: Verify native interfaces
run: |
zig build c-smoke
zig build npm-smoke

- name: Build TypeScript package
run: |
npm --prefix npm/zevm run typecheck
npm --prefix npm/zevm run build

- name: Verify clean generated state
run: git diff --exit-code -- .

native:
name: Native ${{ matrix.platform }}
needs: verify
runs-on: ${{ matrix.runner }}
timeout-minutes: 45
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
- platform: darwin-arm64
runner: macos-15
zig-target: aarch64-macos
rust-target: aarch64-apple-darwin
smoke: true
- platform: darwin-x64
runner: macos-15-intel
zig-target: x86_64-macos
rust-target: x86_64-apple-darwin
smoke: true
- platform: linux-arm64-gnu
runner: ubuntu-24.04-arm
zig-target: aarch64-linux-gnu
rust-target: aarch64-unknown-linux-gnu
smoke: true
- platform: linux-arm64-musl
runner: ubuntu-24.04-arm
zig-target: aarch64-linux-musl
rust-target: aarch64-unknown-linux-musl
smoke: false
- platform: linux-x64-gnu
runner: ubuntu-24.04
zig-target: x86_64-linux-gnu
rust-target: x86_64-unknown-linux-gnu
smoke: true
- platform: linux-x64-musl
runner: ubuntu-24.04
zig-target: x86_64-linux-musl
rust-target: x86_64-unknown-linux-musl
smoke: false
- platform: win32-arm64-msvc
runner: windows-11-arm
zig-target: aarch64-windows-msvc
rust-target: aarch64-pc-windows-msvc
smoke: true
- platform: win32-ia32-msvc
runner: windows-2025
zig-target: x86-windows-msvc
rust-target: i686-pc-windows-msvc
smoke: false
- platform: win32-x64-msvc
runner: windows-2025
zig-target: x86_64-windows-msvc
rust-target: x86_64-pc-windows-msvc
smoke: true
steps:
- name: Checkout release tag
uses: actions/checkout@v4

- name: Set up Zig
uses: mlugg/setup-zig@v2
with:
version: ${{ env.ZIG_VERSION }}

- name: Set up Rust
uses: dtolnay/rust-toolchain@1.89.0
with:
targets: ${{ matrix.rust-target }}

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.TEST_NODE_VERSION }}

- name: Install musl build tools
if: endsWith(matrix.platform, '-musl')
shell: bash
run: sudo apt-get update && sudo apt-get install -y musl-tools

- name: Fetch Zig dependencies
shell: bash
run: zig build --fetch

- name: Build native addon
shell: bash
run: >-
zig build npm-platform-artifacts
-Dtarget=${{ matrix.zig-target }}
-Doptimize=ReleaseSafe
--summary all

- name: Smoke test native addon
if: matrix.smoke
shell: bash
run: node npm/zevm/scripts/smoke.cjs "zig-out/npm/prebuilds/${{ matrix.platform }}/zevm.node"

- name: Verify native artifact
shell: bash
run: test -s "zig-out/npm/prebuilds/${{ matrix.platform }}/zevm.node"

- name: Upload native artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform }}
path: zig-out/npm/prebuilds/${{ matrix.platform }}/zevm.node
if-no-files-found: error
retention-days: 7

publish:
name: Publish npm Packages
needs:
- verify
- native
runs-on: ubuntu-24.04
timeout-minutes: 20
environment: npm
permissions:
contents: read
id-token: write
steps:
- name: Checkout release tag
uses: actions/checkout@v4

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: ${{ env.PUBLISH_NODE_VERSION }}

- name: Pin publishing npm
run: npm install --global "npm@${PUBLISH_NPM_VERSION}"

- name: Install package dependencies
run: npm --prefix npm/zevm ci --ignore-scripts

- name: Download native artifacts
uses: actions/download-artifact@v4
with:
path: zig-out/npm/prebuilds

- name: Verify release payload
run: |
test "$(find zig-out/npm/prebuilds -name zevm.node -type f | wc -l)" -eq 9
npm --prefix npm/zevm run verify:release -- "$GITHUB_REF_NAME"
npm --prefix npm/zevm run build

- name: Publish platform packages and main package
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
if [ -n "${NPM_TOKEN:-}" ]; then
npm config set //registry.npmjs.org/:_authToken "$NPM_TOKEN"
fi
npm --prefix npm/zevm run publish:all
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ _
.direnv

*.node
/npm/zevm/LICENSE
/npm/platforms/*/LICENSE

./debug/
**/*.pdb
Expand Down
1 change: 1 addition & 0 deletions .node-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
22.22.0
Loading
Loading