Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 45 additions & 6 deletions .github/workflows/release-dispatch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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")'
Expand Down Expand Up @@ -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
Expand Down
40 changes: 31 additions & 9 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ on:
type: choice
options:
- torii-tokens
- torii-arcade
- torii-server
- torii-erc20

env:
Expand All @@ -38,27 +40,47 @@ 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-<binary-name>"
exit 1
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
Expand Down
2 changes: 1 addition & 1 deletion bins/torii-introspect-bin/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
8 changes: 4 additions & 4 deletions bins/torii-introspect-bin/README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# 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
```

## Mixed Dojo + Token Indexing

```bash
cargo run -p torii-introspect-bin -- \
cargo run --bin torii-server -- \
--from-block 0 \
--contract 0x0000 \
--erc20 0x001,0x002 \
Expand All @@ -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 \
Expand Down
21 changes: 8 additions & 13 deletions bins/torii-introspect-bin/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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",
Expand All @@ -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
Expand All @@ -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);
Expand All @@ -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",
Expand All @@ -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",
Expand Down
6 changes: 3 additions & 3 deletions crates/torii-ecs-sink/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`
Expand All @@ -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
Expand Down Expand Up @@ -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

Expand Down
23 changes: 23 additions & 0 deletions docker/Dockerfile.torii-arcade
Original file line number Diff line number Diff line change
@@ -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", "--"]
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM debian:bookworm-slim
FROM debian:trixie-slim

# Install runtime dependencies
RUN apt-get update && \
Expand All @@ -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"

Expand Down
Loading