chore: bump to cairo 2.13 and update world constructor #1807
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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 |