Skip to content

chore: bump to cairo 2.13 and update world constructor #1807

chore: bump to cairo 2.13 and update world constructor

chore: bump to cairo 2.13 and update world constructor #1807

Workflow file for this run

# Dojo release workflow.
#
# The main goal of this workflow is to build in release mode the Dojo binaries for all supported platforms.
# Those binaries are then uploaded to be available in `assets` section of the release.
#
# At the end of this workflow, a draft release is created on GitHub, which must be manually published by a maintainer.
# This ensure the release can be reviewed before it is published.
#
# The Dojo docker image is not built during this workflow, to decouple the release of the binaries from the docker image,
# which happens in the `docker.yml` workflow.
#
name: release
on:
workflow_dispatch:
pull_request:
types: [closed]
branches:
- main
env:
CARGO_TERM_COLOR: always
RUST_VERSION: 1.88.0
REGISTRY_IMAGE: ghcr.io/${{ github.repository }}
jobs:
prepare:
if: (github.event.pull_request.merged == true && github.event.pull_request.head.ref == 'prepare-release') || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.release_info.outputs.tag_name }}
steps:
- uses: actions/checkout@v4
- name: Get version
id: release_info
run: |
cargo install cargo-get
echo "tag_name=v$(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-latest-8-cores
platform: linux
target: x86_64-unknown-linux-gnu
arch: amd64
- os: ubuntu-latest-8-cores-arm64
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@v4
- 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: software-mansion/setup-scarb@v1
with:
scarb-version: "2.13.1"
- name: Build binaries
run: cargo build --release --locked --bin sozo --target ${{ matrix.job.target }}
- name: Archive binaries
id: artifacts
env:
VERSION_NAME: ${{ 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 sozo
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 sozo
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" sozo.exe
mv "dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.zip" ../../../
echo "file_name=dojo_${VERSION_NAME}_${PLATFORM_NAME}_${ARCH}.zip" >> $GITHUB_OUTPUT
fi
shell: bash
- name: Upload release artifacts
uses: actions/upload-artifact@v4
with:
name: artifacts-${{ matrix.job.target }}
path: ${{ steps.artifacts.outputs.file_name }}
retention-days: 1
publish-scarb-packages:
runs-on: ubuntu-latest
needs: [prepare]
steps:
- uses: actions/checkout@v4
- uses: software-mansion/setup-scarb@v1
with:
scarb-version: "2.13.1"
- name: Check if Dojo Cairo packages exist on Scarb registry
id: check_packages
run: |
VERSION_NO_V=${{ needs.prepare.outputs.tag_name }}
VERSION_NO_V=${VERSION_NO_V#v}
echo "Checking if Dojo Cairo packages v${VERSION_NO_V} exist on Scarb registry..."
# Check dojo core
if curl -f -s "https://scarbs.xyz/api/v1/dl/dojo/${VERSION_NO_V}" > /dev/null; then
echo "✅ dojo core v${VERSION_NO_V} already exists"
echo "core_exists=true" >> $GITHUB_OUTPUT
else
echo "❌ dojo core v${VERSION_NO_V} not found (404)"
echo "core_exists=false" >> $GITHUB_OUTPUT
fi
# Check dojo_cairo_test
if curl -f -s "https://scarbs.xyz/api/v1/dl/dojo_cairo_test/${VERSION_NO_V}" > /dev/null; then
echo "✅ dojo_cairo_test v${VERSION_NO_V} already exists"
echo "cairo_test_exists=true" >> $GITHUB_OUTPUT
else
echo "❌ dojo_cairo_test v${VERSION_NO_V} not found (404)"
echo "cairo_test_exists=false" >> $GITHUB_OUTPUT
fi
# Check dojo_snf_test
if curl -f -s "https://scarbs.xyz/api/v1/dl/dojo_snf_test/${VERSION_NO_V}" > /dev/null; then
echo "✅ dojo_snf_test v${VERSION_NO_V} already exists"
echo "snf_test_exists=true" >> $GITHUB_OUTPUT
else
echo "❌ dojo_snf_test v${VERSION_NO_V} not found (404)"
echo "snf_test_exists=false" >> $GITHUB_OUTPUT
fi
- name: Publish dojo core
if: steps.check_packages.outputs.core_exists == 'false'
run: |
cd ./crates/dojo/core
SCARB_REGISTRY_AUTH_TOKEN=${{ secrets.SCARB_REGISTRY_AUTH_TOKEN }} scarb publish
- name: Publish dojo_cairo_test
if: steps.check_packages.outputs.cairo_test_exists == 'false'
run: |
cd ./crates/dojo/dojo-cairo-test
SCARB_REGISTRY_AUTH_TOKEN=${{ secrets.SCARB_REGISTRY_AUTH_TOKEN }} scarb publish
- name: Publish dojo_snf_test
if: steps.check_packages.outputs.snf_test_exists == 'false'
run: |
cd ./crates/dojo/dojo-snf-test
SCARB_REGISTRY_AUTH_TOKEN=${{ secrets.SCARB_REGISTRY_AUTH_TOKEN }} scarb publish
create-draft-release:
runs-on: ubuntu-latest
needs: [prepare, release, publish-scarb-packages]
env:
GITHUB_USER: ${{ github.repository_owner }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: artifacts-*
path: artifacts
merge-multiple: true
- id: version_info
run: |
cargo install cargo-get
echo "version=v$(cargo get workspace.package.version)" >> $GITHUB_OUTPUT
- name: Display structure of downloaded files
run: ls -R artifacts
- run: gh release create ${{ steps.version_info.outputs.version }} ./artifacts/*.{gz,zip} --generate-notes --draft