diff --git a/.github/workflows/release-dispatch.yml b/.github/workflows/release-dispatch.yml index 70be538d..294d5a8d 100644 --- a/.github/workflows/release-dispatch.yml +++ b/.github/workflows/release-dispatch.yml @@ -9,6 +9,8 @@ on: type: choice options: - torii-tokens + - torii-arcade + - torii-server - torii-erc20 version: description: 'Release version (e.g., "1.0.0" or "v1.0.0")' @@ -40,19 +42,56 @@ jobs: echo "VERSION=$VERSION" >> $GITHUB_OUTPUT echo "Preparing release for ${{ inputs.binary }} version: $VERSION" + - name: Resolve release target + id: release-target + run: | + RELEASE_TARGET="${{ inputs.binary }}" + + case "$RELEASE_TARGET" in + torii-tokens) + PACKAGE_NAME="torii-tokens" + PACKAGE_ENTRY="bins/torii-tokens" + BINARY_NAME="torii-tokens" + ;; + torii-arcade) + PACKAGE_NAME="torii-arcade" + PACKAGE_ENTRY="bins/torii-arcade" + BINARY_NAME="torii-arcade" + ;; + torii-server) + PACKAGE_NAME="torii-introspect-bin" + PACKAGE_ENTRY="bins/torii-introspect-bin" + BINARY_NAME="torii-server" + ;; + torii-erc20) + PACKAGE_NAME="torii-erc20-bin" + PACKAGE_ENTRY="bins/torii-erc20" + BINARY_NAME="torii-erc20" + ;; + *) + echo "Error: Unknown release target: $RELEASE_TARGET" + exit 1 + ;; + esac + + echo "RELEASE_TARGET=$RELEASE_TARGET" >> $GITHUB_OUTPUT + echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_OUTPUT + echo "PACKAGE_ENTRY=$PACKAGE_ENTRY" >> $GITHUB_OUTPUT + echo "BINARY_NAME=$BINARY_NAME" >> $GITHUB_OUTPUT + - name: Bump binary version run: | - cargo release version ${{ steps.version.outputs.VERSION }} --execute --no-confirm -p ${{ inputs.binary }} - cargo release replace --execute --no-confirm -p ${{ inputs.binary }} + cargo release version ${{ steps.version.outputs.VERSION }} --execute --no-confirm -p ${{ steps.release-target.outputs.PACKAGE_NAME }} + cargo release replace --execute --no-confirm -p ${{ steps.release-target.outputs.PACKAGE_NAME }} - name: Extract new version id: release-info run: | - NEW_VERSION=$(cargo get package.version --entry bins/${{ inputs.binary }}) + NEW_VERSION=$(cargo get package.version --entry ${{ steps.release-target.outputs.PACKAGE_ENTRY }}) echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT - echo "BINARY=${{ inputs.binary }}" >> $GITHUB_OUTPUT - echo "BRANCH_NAME=prepare-release-${{ inputs.binary }}" >> $GITHUB_OUTPUT - echo "Version bumped to: $NEW_VERSION for ${{ inputs.binary }}" + echo "BINARY=${{ steps.release-target.outputs.BINARY_NAME }}" >> $GITHUB_OUTPUT + echo "BRANCH_NAME=prepare-release-${{ steps.release-target.outputs.RELEASE_TARGET }}" >> $GITHUB_OUTPUT + echo "Version bumped to: $NEW_VERSION for ${{ steps.release-target.outputs.BINARY_NAME }}" - name: Create Pull Request uses: peter-evans/create-pull-request@v7 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 901e11e6..5f55763d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,6 +12,8 @@ on: type: choice options: - torii-tokens + - torii-arcade + - torii-server - torii-erc20 env: @@ -38,18 +40,16 @@ jobs: - name: Extract release info id: release-info run: | - # Determine binary name + # Determine release target if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - # Manual trigger - use workflow input - BINARY_NAME="${{ inputs.binary }}" - echo "Manual trigger for binary: $BINARY_NAME" + RELEASE_TARGET="${{ inputs.binary }}" + echo "Manual trigger for binary: $RELEASE_TARGET" else - # PR-based trigger - extract from branch name BRANCH_REF="${{ github.event.pull_request.head.ref }}" if [[ "$BRANCH_REF" =~ ^prepare-release-(.+)$ ]]; then - BINARY_NAME="${BASH_REMATCH[1]}" - echo "PR-based trigger for binary: $BINARY_NAME" + RELEASE_TARGET="${BASH_REMATCH[1]}" + echo "PR-based trigger for binary: $RELEASE_TARGET" else echo "Error: Unknown release branch format: $BRANCH_REF" echo "Expected: prepare-release-" @@ -57,8 +57,30 @@ jobs: fi fi - # Always read version from Cargo.toml (already bumped by release-dispatch) - VERSION=$(cargo get package.version --entry bins/$BINARY_NAME) + case "$RELEASE_TARGET" in + torii-tokens) + PACKAGE_ENTRY="bins/torii-tokens" + BINARY_NAME="torii-tokens" + ;; + torii-arcade) + PACKAGE_ENTRY="bins/torii-arcade" + BINARY_NAME="torii-arcade" + ;; + torii-server) + PACKAGE_ENTRY="bins/torii-introspect-bin" + BINARY_NAME="torii-server" + ;; + torii-erc20) + PACKAGE_ENTRY="bins/torii-erc20" + BINARY_NAME="torii-erc20" + ;; + *) + echo "Error: Unknown release target: $RELEASE_TARGET" + exit 1 + ;; + esac + + VERSION=$(cargo get package.version --entry "$PACKAGE_ENTRY") TAG_NAME="${BINARY_NAME}-v${VERSION}" echo "VERSION=$VERSION" >> $GITHUB_OUTPUT diff --git a/bins/torii-introspect-bin/Cargo.toml b/bins/torii-introspect-bin/Cargo.toml index 06dd94e2..97bed8b2 100644 --- a/bins/torii-introspect-bin/Cargo.toml +++ b/bins/torii-introspect-bin/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" description = "Dojo introspect indexer for PostgreSQL or SQLite" [[bin]] -name = "torii-introspect-bin" +name = "torii-server" path = "src/main.rs" [dependencies] diff --git a/bins/torii-introspect-bin/README.md b/bins/torii-introspect-bin/README.md index 0c7198e1..590e4b9a 100644 --- a/bins/torii-introspect-bin/README.md +++ b/bins/torii-introspect-bin/README.md @@ -1,11 +1,11 @@ -# Torii Introspect Bin +# Torii Server Dojo introspect and token indexer backed by PostgreSQL or SQLite. ## Run ```bash -cargo run -p torii-introspect-bin -- \ +cargo run --bin torii-server -- \ --contract 0x123...,0x456... \ --storage-database-url postgres://torii:torii@localhost:5432/torii ``` @@ -13,7 +13,7 @@ cargo run -p torii-introspect-bin -- \ ## Mixed Dojo + Token Indexing ```bash -cargo run -p torii-introspect-bin -- \ +cargo run --bin torii-server -- \ --from-block 0 \ --contract 0x0000 \ --erc20 0x001,0x002 \ @@ -31,7 +31,7 @@ pipeline. The introspect indexer now exposes the same core ETL parallelism knobs as `torii-tokens`. ```bash -cargo run -p torii-introspect-bin -- \ +cargo run --bin torii-server -- \ --contract 0x123...,0x456... \ --storage-database-url postgres://torii:torii@localhost:5432/torii \ --rpc-parallelism 4 \ diff --git a/bins/torii-introspect-bin/src/config.rs b/bins/torii-introspect-bin/src/config.rs index cc638497..7cf2091f 100644 --- a/bins/torii-introspect-bin/src/config.rs +++ b/bins/torii-introspect-bin/src/config.rs @@ -14,7 +14,7 @@ pub enum StorageBackend { /// This binary targets explicitly configured Dojo contracts and persists the /// decoded introspect messages into SQL tables. #[derive(Parser, Debug)] -#[command(name = "torii-introspect-bin")] +#[command(name = "torii-server")] #[command( about = "Index Dojo introspect events and token transfers into PostgreSQL or SQLite", long_about = None @@ -175,25 +175,20 @@ mod tests { #[test] fn observability_defaults_to_disabled() { - let cfg = Config::parse_from(["torii-introspect-bin", "--contract", "0x1"]); + let cfg = Config::parse_from(["torii-server", "--contract", "0x1"]); assert!(!cfg.observability); } #[test] fn observability_flag_enables_metrics() { - let cfg = Config::parse_from([ - "torii-introspect-bin", - "--contract", - "0x1", - "--observability", - ]); + let cfg = Config::parse_from(["torii-server", "--contract", "0x1", "--observability"]); assert!(cfg.observability); } #[test] fn storage_database_url_accepts_sqlite() { let cfg = Config::parse_from([ - "torii-introspect-bin", + "torii-server", "--contract", "0x1", "--storage-database-url", @@ -205,7 +200,7 @@ mod tests { #[test] fn sqlite_is_default_when_storage_database_url_is_omitted() { - let cfg = Config::parse_from(["torii-introspect-bin", "--contract", "0x1"]); + let cfg = Config::parse_from(["torii-server", "--contract", "0x1"]); assert_eq!(cfg.storage_backend(), StorageBackend::Sqlite); assert!(cfg @@ -216,7 +211,7 @@ mod tests { #[test] fn contract_addresses_parse_from_hex() { - let cfg = Config::parse_from(["torii-introspect-bin", "--contract", "0x1,0x2"]); + let cfg = Config::parse_from(["torii-server", "--contract", "0x1,0x2"]); let contracts = cfg.contract_addresses().unwrap(); assert_eq!(contracts.len(), 2); @@ -227,7 +222,7 @@ mod tests { #[test] fn concurrency_flags_parse() { let cfg = Config::parse_from([ - "torii-introspect-bin", + "torii-server", "--contract", "0x1", "--chunk-size", @@ -249,7 +244,7 @@ mod tests { #[test] fn token_flags_parse() { let cfg = Config::parse_from([ - "torii-introspect-bin", + "torii-server", "--erc20", "0x1,0x2", "--erc721", diff --git a/crates/torii-ecs-sink/README.md b/crates/torii-ecs-sink/README.md index 21405d63..67cf3597 100644 --- a/crates/torii-ecs-sink/README.md +++ b/crates/torii-ecs-sink/README.md @@ -4,7 +4,7 @@ ## What It Serves -The sink mounts these legacy RPCs into `torii-introspect-bin` on the same gRPC port: +The sink mounts these legacy RPCs into `torii-server` on the same gRPC port: - `Worlds` - `RetrieveEntities` @@ -26,7 +26,7 @@ The read path is backed by: ## Manual Validation -With `torii-introspect-bin` running on the default port: +With `torii-server` running on the default port: ```bash grpcurl -plaintext localhost:3000 list @@ -58,7 +58,7 @@ By default the script: - autodiscovers one world that has both `entity` and `event_message` models - validates reflection, `Worlds`, `RetrieveEntities`, `RetrieveEventMessages`, and `RetrieveEvents` -For Postgres-backed deployments, set `DB_URL` or `DATABASE_URL` to the same storage database used by `torii-introspect-bin`. The script will use `psql` for metadata discovery instead of `sqlite3`. +For Postgres-backed deployments, set `DB_URL` or `DATABASE_URL` to the same storage database used by `torii-server`. The script will use `psql` for metadata discovery instead of `sqlite3`. ### Environment Overrides diff --git a/docker/Dockerfile.torii-arcade b/docker/Dockerfile.torii-arcade new file mode 100644 index 00000000..0d981679 --- /dev/null +++ b/docker/Dockerfile.torii-arcade @@ -0,0 +1,23 @@ +FROM debian:trixie-slim + +# Install runtime dependencies +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + ca-certificates \ + tini && \ + rm -rf /var/lib/apt/lists/* + +ARG TARGETPLATFORM +WORKDIR /app + +# Docker build context will have: linux/amd64/torii-arcade, linux/arm64/torii-arcade +COPY ${TARGETPLATFORM}/torii-arcade /usr/local/bin/torii-arcade +RUN chmod +x /usr/local/bin/torii-arcade + +# Labels +LABEL org.opencontainers.image.title="torii-arcade" \ + org.opencontainers.image.description="Arcade-dedicated Torii backend with Dojo introspect, ECS, and token services" \ + org.opencontainers.image.source="https://github.com/dojoengine/torii-core" \ + org.opencontainers.image.licenses="MIT" + +ENTRYPOINT ["/usr/bin/tini", "--"] diff --git a/docker/Dockerfile.torii-introspect b/docker/Dockerfile.torii-server similarity index 53% rename from docker/Dockerfile.torii-introspect rename to docker/Dockerfile.torii-server index d093211a..f3dcdcf6 100644 --- a/docker/Dockerfile.torii-introspect +++ b/docker/Dockerfile.torii-server @@ -1,4 +1,4 @@ -FROM debian:bookworm-slim +FROM debian:trixie-slim # Install runtime dependencies RUN apt-get update && \ @@ -11,13 +11,13 @@ ARG TARGETPLATFORM WORKDIR /app # Copy binary from build artifacts -# Docker build context will have: linux/amd64/torii-introspect, linux/arm64/torii-introspect -COPY ${TARGETPLATFORM}/torii-introspect /usr/local/bin/torii-introspect -RUN chmod +x /usr/local/bin/torii-introspect +# Docker build context will have: linux/amd64/torii-server, linux/arm64/torii-server +COPY ${TARGETPLATFORM}/torii-server /usr/local/bin/torii-server +RUN chmod +x /usr/local/bin/torii-server # Labels -LABEL org.opencontainers.image.title="torii-introspect" \ - org.opencontainers.image.description="Introspect event indexer" \ +LABEL org.opencontainers.image.title="torii-server" \ + org.opencontainers.image.description="Dojo introspect and token indexer" \ org.opencontainers.image.source="https://github.com/dojoengine/torii-core" \ org.opencontainers.image.licenses="MIT"