Skip to content

Commit

Permalink
Add CI
Browse files Browse the repository at this point in the history
  • Loading branch information
tarrencev committed Mar 18, 2024
1 parent 961655d commit f50dfff
Show file tree
Hide file tree
Showing 16 changed files with 343 additions and 42 deletions.
66 changes: 66 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: ci

on:
push:
branches:
- main
pull_request:

env:
CARGO_TERM_COLOR: always
RUST_VERSION: nightly

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
components: llvm-tools-preview
- run: cargo llvm-cov nextest --all-features --lcov --output-path lcov.info
- uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: lcov.info

ensure-wasm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
target: wasm32-unknown-unknown
- run: cargo build -r --target wasm32-unknown-unknown -p account-sdk

cairo-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: software-mansion/setup-scarb@v1
with:
scarb-version: "2.5.3"
- run: scarb fmt --check
- run: scarb test

clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
components: clippy
- run: cargo clippy --all-targets --all-features

fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
components: rustfmt
- run: cargo +nightly fmt --check --all
35 changes: 35 additions & 0 deletions .github/workflows/release-dispatch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: release-dispatch
on:
workflow_dispatch:
inputs:
version:
description: Version to release
required: true
type: string

jobs:
propose-release:
permissions:
pull-requests: write
contents: write
runs-on: ubuntu-latest
container:
image: ghcr.io/dojoengine/dojo-dev:5d61184
steps:
# Workaround described here: https://github.com/actions/checkout/issues/760
- uses: actions/checkout@v3
- run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- run: cargo release version ${{ inputs.version }} --execute --no-confirm && cargo release replace --execute --no-confirm
- id: version_info
run: |
cargo install cargo-get
echo "version=$(cargo get workspace.package.version)" >> $GITHUB_OUTPUT
- uses: peter-evans/create-pull-request@v5
with:
# We have to use a PAT in order to trigger ci
token: ${{ secrets.CREATE_PR_TOKEN }}
title: "Prepare release: v${{ steps.version_info.outputs.version }}"
commit-message: "Prepare release: v${{ steps.version_info.outputs.version }}"
branch: prepare-release
base: main
delete-branch: true
198 changes: 198 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
name: release

on:
pull_request:
types: [closed]
branches:
- main

env:
CARGO_TERM_COLOR: always
RUST_VERSION: 1.74.0
REGISTRY_IMAGE: ghcr.io/${{ github.repository }}

jobs:
prepare:
if: github.event.pull_request.merged == true && github.event.pull_request.head.ref == 'prepare-release'
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.release_info.outputs.tag_name }}
steps:
- uses: actions/checkout@v3
- name: Get version
id: release_info
run: |
cargo install cargo-get
echo "tag_name=$(cargo get workspace.package.version)" >> $GITHUB_OUTPUT
release:
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
needs: prepare
runs-on: ${{ matrix.job.os }}
env:
PLATFORM_NAME: ${{ matrix.job.platform }}
TARGET: ${{ matrix.job.target }}
ARCH: ${{ matrix.job.arch }}
strategy:
matrix:
job:
# The OS is used for the runner
# The platform is a generic platform name
# The target is used by Cargo
# The arch is either 386, arm64 or amd64
# The svm target platform to use for the binary https://github.com/roynalnaruto/svm-rs/blob/84cbe0ac705becabdc13168bae28a45ad2299749/svm-builds/build.rs#L4-L24
- os: ubuntu-20.04-4-cores
platform: linux
target: x86_64-unknown-linux-gnu
arch: amd64
- os: ubuntu-20.04-8-cores
platform: linux
target: aarch64-unknown-linux-gnu
arch: arm64
svm_target_platform: linux-aarch64
- os: macos-latest-xlarge
platform: darwin
target: x86_64-apple-darwin
arch: amd64
- os: macos-latest
platform: darwin
target: aarch64-apple-darwin
arch: arm64
- os: windows-latest
platform: win32
target: x86_64-pc-windows-msvc
arch: amd64

steps:
- uses: actions/checkout@v3

- uses: dtolnay/rust-toolchain@master
name: Rust Toolchain Setup
with:
targets: ${{ matrix.job.target }}
toolchain: ${{ env.RUST_VERSION }}

- uses: Swatinem/rust-cache@v1
with:
cache-on-failure: true

- uses: arduino/setup-protoc@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: "25.x"

- name: Apple M1 setup
if: ${{ matrix.job.target == 'aarch64-apple-darwin' }}
run: |
echo "SDKROOT=$(xcrun -sdk macosx --show-sdk-path)" >> $GITHUB_ENV
echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx --show-sdk-platform-version)" >> $GITHUB_ENV
- name: Linux ARM setup
if: ${{ matrix.job.target == 'aarch64-unknown-linux-gnu' }}
run: |
sudo apt-get update -y
sudo apt-get install -y gcc-aarch64-linux-gnu libssl-dev
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
- name: Build binaries
run: cargo build --release --bins --target ${{ matrix.job.target }}

- name: Archive binaries
id: artifacts
env:
VERSION_NAME: v${{ needs.prepare.outputs.tag_name }}
run: |
if [ "$PLATFORM_NAME" == "linux" ]; then
tar -czvf "dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" -C ./target/${TARGET}/release katana sozo torii dojo-language-server
echo "file_name=dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT
elif [ "$PLATFORM_NAME" == "darwin" ]; then
# We need to use gtar here otherwise the archive is corrupt.
# See: https://github.com/actions/virtual-environments/issues/2619
gtar -czvf "dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" -C ./target/${TARGET}/release katana sozo torii dojo-language-server
echo "file_name=dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT
else
cd ./target/${TARGET}/release
7z a -tzip "dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.zip" katana.exe sozo.exe torii.exe dojo-language-server.exe
mv "dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.zip" ../../../
echo "file_name=dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.tar.gz" >> $GITHUB_OUTPUT
fi
shell: bash

# We move binaries so they match $TARGETPLATFORM in the Docker build
- name: Move Binaries
if: ${{ env.PLATFORM_NAME == 'linux' }}
run: |
mkdir -p $PLATFORM_NAME/$ARCH
mv target/$TARGET/release/katana $PLATFORM_NAME/$ARCH
mv target/$TARGET/release/sozo $PLATFORM_NAME/$ARCH
mv target/$TARGET/release/torii $PLATFORM_NAME/$ARCH
shell: bash

# Upload these for use with the Docker build later
- name: Upload docker binaries
uses: actions/upload-artifact@v3
with:
name: binaries
path: ${{ env.PLATFORM_NAME }}
retention-days: 1

- name: Upload release artifacts
uses: actions/upload-artifact@v3
with:
name: artifacts
path: ${{ steps.artifacts.outputs.file_name }}
retention-days: 1

create-draft-release:
runs-on: ubuntu-20.04-4-cores
needs: [prepare, release]
env:
GITHUB_USER: ${{ github.repository_owner }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v3
with:
name: artifacts
path: artifacts
- id: version_info
run: |
cargo install cargo-get
echo "version=$(cargo get workspace.package.version)" >> $GITHUB_OUTPUT
- name: Display structure of downloaded files
run: ls -R artifacts
- run: gh release create v${{ steps.version_info.outputs.version }} ./artifacts/*.gz --generate-notes --draft

docker-build-and-push:
runs-on: ubuntu-20.04-4-cores
needs: [prepare, release]

steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Download binaries
uses: actions/download-artifact@v3
with:
name: binaries
path: artifacts/linux

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push docker image
uses: docker/build-push-action@v3
with:
push: true
tags: ghcr.io/${{ github.repository }}:latest,ghcr.io/${{ github.repository }}:v${{ needs.prepare.outputs.tag_name }}
platforms: linux/amd64,linux/arm64
build-contexts: |
artifacts=artifacts
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,5 @@ Cargo.lock

# Logs
**/log/

lcov.info
3 changes: 1 addition & 2 deletions crates/account_sdk/src/felt_ser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -395,8 +395,7 @@ mod tests {
let serialized = vec![val.a, val.i.into(), val.x.into()];
let seq = (0..100).map(|_| val.clone()).collect::<Vec<_>>();
let mut result = (0..100)
.map(|_| serialized.clone())
.flatten()
.flat_map(|_| serialized.clone())
.collect::<Vec<_>>();
result.insert(0, seq.len().into());
assert_eq!(to_felts(&seq), result);
Expand Down
21 changes: 10 additions & 11 deletions crates/account_sdk/src/tests/deployment_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ pub async fn create_account<'a>(
SigningKey,
) {
let provider = *from.provider();
let class_hash = declare(provider, &from).await;
let class_hash = declare(provider, from).await;
let private_key = SigningKey::from_random();
let deployed_address = deploy(
provider,
&from,
from,
private_key.verifying_key().scalar(),
class_hash,
)
Expand Down Expand Up @@ -53,13 +53,12 @@ pub async fn declare(
client: &JsonRpcClient<HttpTransport>,
account: &SingleOwnerAccount<&JsonRpcClient<HttpTransport>, LocalWallet>,
) -> FieldElement {
let DeclareTransactionResult { class_hash, .. } =
AccountDeclaration::cartridge_account(&client)
.declare(&account)
.await
.unwrap()
.wait_for_completion()
.await;
let DeclareTransactionResult { class_hash, .. } = AccountDeclaration::cartridge_account(client)
.declare(account)
.await
.unwrap()
.wait_for_completion()
.await;

class_hash
}
Expand All @@ -72,8 +71,8 @@ pub async fn deploy(
) -> FieldElement {
let DeployResult {
deployed_address, ..
} = AccountDeployment::new(&client)
.deploy(vec![public_key], FieldElement::ZERO, &account, class_hash)
} = AccountDeployment::new(client)
.deploy(vec![public_key], FieldElement::ZERO, account, class_hash)
.await
.unwrap()
.wait_for_completion()
Expand Down
8 changes: 4 additions & 4 deletions crates/account_sdk/src/tests/session/uitls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ use crate::{abigen::account::Call, tests::runners::TestnetRunner};

use crate::session_token::Session;

pub async fn create_session_account<'a, T>(
runner: &'a T,
pub async fn create_session_account<T>(
runner: &T,
) -> (
SessionAccount<&'a JsonRpcClient<HttpTransport>, LocalWallet>,
SessionAccount<&JsonRpcClient<HttpTransport>, LocalWallet>,
SigningKey,
SingleOwnerAccount<&'a JsonRpcClient<HttpTransport>, LocalWallet>,
SingleOwnerAccount<&JsonRpcClient<HttpTransport>, LocalWallet>,
)
where
T: TestnetRunner,
Expand Down
2 changes: 1 addition & 1 deletion crates/cartridge_account/src/lib.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ mod Account {
}

fn _execute_single_call(call: Call) -> Span<felt252> {
let Call{to, selector, calldata } = call;
let Call { to, selector, calldata } = call;
starknet::call_contract_syscall(to, selector, calldata).unwrap()
}
}
Loading

0 comments on commit f50dfff

Please sign in to comment.