diff --git a/image-resize/.dockerignore b/image-resize/.dockerignore new file mode 100644 index 0000000..d7f010f --- /dev/null +++ b/image-resize/.dockerignore @@ -0,0 +1,6 @@ +target/ +.git/ +*.md +docs/ +iii-launcher/ +.github/ diff --git a/image-resize/Cargo.lock b/image-resize/Cargo.lock index e0a1e89..208411a 100644 --- a/image-resize/Cargo.lock +++ b/image-resize/Cargo.lock @@ -773,7 +773,7 @@ dependencies = [ [[package]] name = "image-resize" -version = "0.1.1" +version = "0.1.2" dependencies = [ "anyhow", "clap", diff --git a/image-resize/Dockerfile b/image-resize/Dockerfile new file mode 100644 index 0000000..9dda02d --- /dev/null +++ b/image-resize/Dockerfile @@ -0,0 +1,51 @@ +FROM --platform=$BUILDPLATFORM rust:1.88-slim AS builder + +ARG TARGETARCH +ARG TARGETOS + +RUN apt-get update && apt-get install -y \ + pkg-config \ + libssl-dev \ + gcc-x86-64-linux-gnu \ + gcc-aarch64-linux-gnu \ + libc6-dev-amd64-cross \ + libc6-dev-arm64-cross \ + && rm -rf /var/lib/apt/lists/* + +RUN rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu + +WORKDIR /build +COPY Cargo.toml Cargo.lock ./ +COPY src/ src/ +COPY build.rs ./ + +RUN cargo run --release -- --manifest > /build/worker.yaml + +RUN case "${TARGETARCH}" in \ + amd64) \ + TARGET_TRIPLE="x86_64-unknown-linux-gnu"; \ + export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-linux-gnu-gcc; \ + ;; \ + arm64) \ + TARGET_TRIPLE="aarch64-unknown-linux-gnu"; \ + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc; \ + ;; \ + *) \ + echo "Unsupported TARGETARCH=${TARGETARCH}" >&2; \ + exit 1; \ + ;; \ + esac && \ + cargo build --release --target "${TARGET_TRIPLE}" && \ + cp "target/${TARGET_TRIPLE}/release/image-resize" /worker + +FROM debian:bookworm-slim + +RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* + +COPY --from=builder /worker /worker +COPY --from=builder /build/worker.yaml /iii/worker.yaml + +ENV III_ENGINE_URL=ws://host.containers.internal:49134 + +ENTRYPOINT ["/worker"] +CMD ["--url", "ws://host.containers.internal:49134"] diff --git a/image-resize/example/config.yaml b/image-resize/example/config.yaml index e193f38..d1c13af 100644 --- a/image-resize/example/config.yaml +++ b/image-resize/example/config.yaml @@ -1,34 +1,32 @@ -port: 49134 - workers: - - class: workers::image_resize::ImageResizeWorker + - name: iii-stream config: - width: 200 - height: 200 - strategy: scale-to-fit - quality: - jpeg: 85 - webp: 80 + port: ${STREAM_PORT:3112} + host: 127.0.0.1 + adapter: + name: kv + config: + store_method: file_based # Options: in_memory, file_based + file_path: ./data/stream_store -modules: - - class: modules::api::RestApiModule + - name: iii-http config: port: 3111 host: 127.0.0.1 default_timeout: 30000 + concurrency_request_limit: 1024 cors: allowed_origins: - - "*" + # To allow all origins, use '*': + - '*' allowed_methods: - GET - POST + - PUT + - DELETE + - OPTIONS - - class: modules::stream::StreamModule - config: - port: 3112 - host: 0.0.0.0 - - - class: modules::observability::OtelModule + - name: iii-observability config: # === Core Configuration (Required) === enabled: ${OTEL_ENABLED:true} diff --git a/image-resize/example/iii.toml b/image-resize/example/iii.toml deleted file mode 100644 index d6e7b34..0000000 --- a/image-resize/example/iii.toml +++ /dev/null @@ -1,2 +0,0 @@ -[workers] -image-resize = "0.1.0" diff --git a/image-resize/example/iii.worker.yaml b/image-resize/example/iii.worker.yaml new file mode 100644 index 0000000..74b766e --- /dev/null +++ b/image-resize/example/iii.worker.yaml @@ -0,0 +1,19 @@ +iii: v1 + +name: image-resize-demo +version: 1.0.0 + +env: + MY_CUSTOM_VAR: "hello222" + +runtime: + language: typescript + entry: src/index.ts + +resources: + memory: 512 + cpus: 1 + +scripts: + install: "npm install" + start: "npm run dev" diff --git a/image-resize/example/iii.workers.yaml b/image-resize/example/iii.workers.yaml new file mode 100644 index 0000000..b74e79f --- /dev/null +++ b/image-resize/example/iii.workers.yaml @@ -0,0 +1,10 @@ +workers: + image-resize: + image: docker.io/andersonofl/image-resize:latest + env: + III_ENGINE_URL: "ws://localhost:49134" + III_API_URL: "http://localhost:3111" + resources: + cpus: '0.5' + memory: 256Mi + \ No newline at end of file diff --git a/image-resize/example/package.json b/image-resize/example/package.json index dd2e648..61da4d3 100644 --- a/image-resize/example/package.json +++ b/image-resize/example/package.json @@ -1,14 +1,15 @@ { - "name": "@iii-hq/image-resize-demo", + "name": "@iii/image-resize-demo", "version": "1.0.0", "private": true, "scripts": { - "dev": "bun src/index.ts" + "dev": "node --import tsx src/index.ts" }, "dependencies": { "iii-sdk": "0.9.0" }, "devDependencies": { + "tsx": "^4.21.0", "@types/node": "^24.10.1", "typescript": "^5.9.3" } diff --git a/image-resize/example/src/iii.ts b/image-resize/example/src/iii.ts index dfe15f7..72a809a 100644 --- a/image-resize/example/src/iii.ts +++ b/image-resize/example/src/iii.ts @@ -8,3 +8,5 @@ export const iii = registerWorker(engineWsUrl, { serviceName: 'image-resize-demo', }, }) + +console.info('III worker started', { myCustomVar: process.env.MY_CUSTOM_VAR }) \ No newline at end of file diff --git a/image-resize/src/manifest.rs b/image-resize/src/manifest.rs index 8866885..5e1df87 100644 --- a/image-resize/src/manifest.rs +++ b/image-resize/src/manifest.rs @@ -41,7 +41,7 @@ mod tests { let parsed: serde_json::Value = serde_json::from_str(&json).unwrap(); assert!(parsed.is_object(), "Manifest must be valid JSON object"); assert_eq!(parsed["name"], "image-resize"); - assert_eq!(parsed["version"], "0.1.0"); + assert_eq!(parsed["version"], env!("CARGO_PKG_VERSION")); } #[test]