alopex-sql 0.6.0

SQL parser components for the Alopex DB dialect
# ==============================================================
# Stage 1: Nim でパーサーを共有ライブラリとしてビルド
#   非 root ユーザーでビルドする(ビルドに root 権限は不要)
# ==============================================================
FROM nimlang/nim:2.2 AS nim-builder

# 非 root ビルドユーザーを作成(UID/GID は build-arg で上書き可能。
# マウントビルド時にホストの UID と一致させて生成物の所有者を揃えるため)
ARG NIM_UID=1000
ARG NIM_GID=1000
RUN groupadd -g "${NIM_GID}" builder 2>/dev/null || true \
  && useradd -m -u "${NIM_UID}" -g "${NIM_GID}" builder 2>/dev/null || true

USER builder
ENV HOME=/home/builder
WORKDIR /home/builder/build

# 依存パッケージのインストール
COPY --chown=builder:builder nim_sql_parser.nimble ./
RUN nimble install -y --depsOnly

# ソースコードのコピーとビルド
COPY --chown=builder:builder src/ ./src/

# 共有ライブラリ (.so) としてビルド — Rust から FFI で呼び出す
RUN nim c \
  -d:release \
  --app:lib \
  --noMain \
  --mm:orc \
  --opt:speed \
  -o:/home/builder/build/libalopex_sql_parser.so \
  src/alopex_sql_parser.nim

# ヘッダファイルの生成(Rust FFI 用)
RUN nim c \
  -d:release \
  --header:alopex_sql_parser.h \
  --noMain \
  --app:lib \
  src/alopex_sql_parser.nim

# ==============================================================
# Stage 2: テスト実行(非 root)
# ==============================================================
FROM nim-builder AS nim-test

COPY --chown=builder:builder tests/ ./tests/
RUN nim c -r tests/test_parser.nim

# ==============================================================
# Stage 3: Rust プロジェクトに統合
# ==============================================================
FROM rust:1.87-alpine AS rust-builder

RUN apk add --no-cache musl-dev

WORKDIR /app

# Nim でビルドした共有ライブラリをコピー
COPY --from=nim-builder /home/builder/build/libalopex_sql_parser.so /usr/local/lib/
COPY --from=nim-builder /home/builder/build/alopex_sql_parser.h /usr/local/include/

# Rust プロジェクトのビルド(alopex-sql クレートがある場合)
# COPY alopex/ ./
# RUN cargo build --release

# ==============================================================
# Stage 4: 最小ランタイムイメージ(非 root 実行)
# ==============================================================
FROM alpine:3.21

RUN addgroup -S alopex && adduser -S -G alopex alopex

COPY --from=nim-builder /home/builder/build/libalopex_sql_parser.so /usr/local/lib/
RUN ldconfig /usr/local/lib 2>/dev/null || true

USER alopex
ENTRYPOINT ["/bin/sh"]