diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0a484b1c1..e79c85277 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -20,9 +20,14 @@ jobs: cargo-lint: runs-on: ubuntu-latest timeout-minutes: 20 + strategy: + matrix: + target: ["native", "cannon", "asterisc"] + name: lint-${{ matrix.target }} steps: - name: Checkout sources uses: actions/checkout@v4 + - uses: taiki-e/install-action@just - name: Install Rust nightly toolchain uses: dtolnay/rust-toolchain@nightly with: @@ -30,25 +35,39 @@ jobs: - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - - name: cargo fmt - run: cargo fmt --all -- --check - - name: cargo clippy - run: cargo clippy --workspace --all --locked -- -D warnings + - name: Log into ghcr + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: fmt + lint + run: just lint-${{ matrix.target }} cargo-build: runs-on: ubuntu-latest timeout-minutes: 20 + strategy: + matrix: + target: ["native", "cannon", "asterisc"] + name: build-${{ matrix.target }} continue-on-error: true steps: - name: Checkout sources uses: actions/checkout@v4 + - uses: taiki-e/install-action@just - name: Install Rust stable toolchain uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true + - name: Log into ghcr + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: build - id: build - run: cargo build --workspace --all --locked + run: just build-${{ matrix.target }} cargo-doc: runs-on: ubuntu-latest timeout-minutes: 20 diff --git a/.github/workflows/fpvm-tests.yaml b/.github/workflows/fpvm-tests.yaml new file mode 100644 index 000000000..d75b42b5c --- /dev/null +++ b/.github/workflows/fpvm-tests.yaml @@ -0,0 +1,79 @@ +name: FPVM +on: [push] +env: + CARGO_TERM_COLOR: always +jobs: + build-example-programs: + runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + matrix: + fpvm: ["cannon", "asterisc"] + name: build-${{ matrix.fpvm }}-examples + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Prepare + id: prep + run: echo "::set-output name=timestamp::$(date +%s)" + - name: Install Rust stable toolchain + uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - uses: taiki-e/install-action@just + - name: Log into ghcr + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build ${{ matrix.fpvm }} examples + working-directory: ./fpvm-tests + run: just build-${{ matrix.fpvm }}-examples + - uses: actions/upload-artifact@v4 + with: + name: images-${{ matrix.fpvm }} + path: | + examples/minimal/target/${{ matrix.fpvm == 'cannon' && 'mips-unknown-none' || 'riscv64gc-unknown-none-elf' }}/release/minimal + examples/simple-revm/target/${{ matrix.fpvm == 'cannon' && 'mips-unknown-none' || 'riscv64gc-unknown-none-elf' }}/release/simple-revm + fpvm-example-tests: + needs: build-example-programs + runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + matrix: + fpvm: ["cannon-go", "cannon-rs", "asterisc"] + name: ${{ matrix.fpvm }}-tests + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Install Rust nightly toolchain + if: contains(matrix.fpvm, 'cannon-rs') + uses: dtolnay/rust-toolchain@nightly + - name: Install xsltproc + if: contains(matrix.fpvm, 'cannon-rs') + run: sudo apt-get install xsltproc + - name: Setup Go toolchain + if: "!contains(matrix.fpvm , 'cannon-rs')" + uses: actions/setup-go@v4 + with: + go-version: "1.21.6" + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - uses: taiki-e/install-action@just + - name: Download Binaries + uses: actions/download-artifact@v4 + with: + name: images-${{ contains(matrix.fpvm, 'cannon') && 'cannon' || 'asterisc' }} + - name: Restore Targets + run: | + TARGET="${{ contains(matrix.fpvm, 'cannon') && 'mips-unknown-none' || 'riscv64gc-unknown-none-elf' }}" + mkdir -p examples/minimal/target/$TARGET/release + mkdir -p examples/simple-revm/target/$TARGET/release + mv minimal examples/minimal/target/$TARGET/release + mv simple-revm examples/simple-revm/target/$TARGET/release + - name: Run FPVM tests + working-directory: ./fpvm-tests + run: just test-${{ matrix.fpvm }} diff --git a/build/README.md b/build/README.md index 8c87bfa93..ea20e2521 100644 --- a/build/README.md +++ b/build/README.md @@ -18,15 +18,16 @@ docker run \ --platform linux/amd64 \ -v `pwd`/:/workdir \ -w="/workdir" \ - cannon-pipeline:latest cargo build --release -Zbuild-std + ghcr.io/ethereum-optimism/kona/cannon-builder:main cargo build --release -Zbuild-std ``` **asterisc** + ``` docker run \ --rm \ --platform linux/amd64 \ -v `pwd`/:/workdir \ -w="/workdir" \ - asterisc-pipeline:latest cargo build --release -Zbuild-std + ghcr.io/ethereum-optimism/kona/asterisc-builder:main cargo build --release -Zbuild-std ``` diff --git a/examples/minimal/justfile b/examples/minimal/justfile index a2f532a43..f4c4121cc 100644 --- a/examples/minimal/justfile +++ b/examples/minimal/justfile @@ -7,7 +7,7 @@ build-cannon *args='': --platform linux/amd64 \ -v `pwd`/../../:/workdir \ -w="/workdir/examples/minimal" \ - cannon-pipeline:latest cargo build -Zbuild-std $@ + ghcr.io/ethereum-optimism/kona/cannon-builder:main cargo build -Zbuild-std $@ # Build for the `asterisc` target build-asterisc *args='': @@ -16,4 +16,4 @@ build-asterisc *args='': --platform linux/amd64 \ -v `pwd`/../../:/workdir \ -w="/workdir/examples/minimal" \ - asterisc-pipeline:latest cargo build -Zbuild-std $@ + ghcr.io/ethereum-optimism/kona/asterisc-builder:main cargo build -Zbuild-std $@ diff --git a/examples/simple-revm/justfile b/examples/simple-revm/justfile index 9ecd226dd..7a9f290f3 100644 --- a/examples/simple-revm/justfile +++ b/examples/simple-revm/justfile @@ -7,7 +7,7 @@ build-cannon *args='': --platform linux/amd64 \ -v `pwd`/../../:/workdir \ -w="/workdir/examples/simple-revm" \ - cannon-pipeline:latest cargo build -Zbuild-std $@ + ghcr.io/ethereum-optimism/kona/cannon-builder:main cargo build -Zbuild-std $@ # Build for the `asterisc` target build-asterisc *args='': @@ -16,4 +16,4 @@ build-asterisc *args='': --platform linux/amd64 \ -v `pwd`/../../:/workdir \ -w="/workdir/examples/simple-revm" \ - asterisc-pipeline:latest cargo build -Zbuild-std $@ + ghcr.io/ethereum-optimism/kona/asterisc-builder:main cargo build -Zbuild-std $@ diff --git a/fpvm-tests/justfile b/fpvm-tests/justfile index adfc85a88..7fd1e5c7a 100644 --- a/fpvm-tests/justfile +++ b/fpvm-tests/justfile @@ -1,19 +1,30 @@ # Test all FPVM targets -test: test-cannon test-asterisc +test: build-cannon-examples build-asterisc-examples test-cannon test-asterisc -# Test programs on `cannon` -test-cannon: - # Build the programs +# Build cannon programs +build-cannon-examples: @cd ../examples/minimal && just build-cannon --release @cd ../examples/simple-revm && just build-cannon --release + +# Build asterisc programs +build-asterisc-examples: + @cd ../examples/minimal && just build-asterisc --release + @cd ../examples/simple-revm && just build-asterisc --release + +# Test programs on `cannon` +test-cannon: test-cannon-go test-cannon-rs + +# Test programs on `cannon` +test-cannon-go: # Run Cannon tests @cd cannon-tests && go test -count=1 -v ./... + +# Test programs on `cannon-rs` +test-cannon-rs: + # Run Cannon tests @cd cannon-rs-tests && cargo +nightly test --release # Test programs on `asterisc` test-asterisc: - # Build the programs - @cd ../examples/minimal && just build-asterisc --release - @cd ../examples/simple-revm && just build-asterisc --release # Run Asterisc tests @cd asterisc-tests && go test -count=1 -v ./... diff --git a/justfile b/justfile index 149546174..1dba9043e 100644 --- a/justfile +++ b/justfile @@ -23,7 +23,7 @@ lint-cannon: --platform linux/amd64 \ -v `pwd`/:/workdir \ -w="/workdir" \ - cannon-pipeline:latest cargo +nightly clippy --workspace --all --all-features --target /mips-unknown-none.json -Zbuild-std -- -D warnings + ghcr.io/ethereum-optimism/kona/cannon-builder:main cargo +nightly clippy --workspace --all --all-features --target /mips-unknown-none.json -Zbuild-std -- -D warnings # Lint the workspace (risc-v arch) lint-asterisc: @@ -32,7 +32,7 @@ lint-asterisc: --platform linux/amd64 \ -v `pwd`/:/workdir \ -w="/workdir" \ - asterisc-pipeline:latest cargo +nightly clippy --workspace --all --all-features --target riscv64gc-unknown-linux-gnu -Zbuild-std -- -D warnings + ghcr.io/ethereum-optimism/kona/asterisc-builder:main cargo +nightly clippy --workspace --all --all-features --target riscv64gc-unknown-linux-gnu -Zbuild-std -- -D warnings # Build the workspace for all available targets build: build-native build-cannon build-asterisc @@ -48,7 +48,7 @@ build-cannon *args='': --platform linux/amd64 \ -v `pwd`/:/workdir \ -w="/workdir" \ - cannon-pipeline:latest cargo build --workspace --all -Zbuild-std $@ + ghcr.io/ethereum-optimism/kona/cannon-builder:main cargo build --workspace --all -Zbuild-std $@ # Build for the `asterisc` target build-asterisc *args='': @@ -57,4 +57,4 @@ build-asterisc *args='': --platform linux/amd64 \ -v `pwd`/:/workdir \ -w="/workdir" \ - asterisc-pipeline:latest cargo build --workspace --all -Zbuild-std $@ + ghcr.io/ethereum-optimism/kona/asterisc-builder:main cargo build --workspace --all -Zbuild-std $@