# syntax=docker/dockerfile:1.7

#############
## Builder ##
#############

FROM    python:3.13-slim-bookworm AS mysql-to-sqlite3-builder

RUN     --mount=type=cache,target=/var/cache/apt,sharing=locked \
        --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
        apt-get update \
        && apt-get install -y --no-install-recommends \
            build-essential \
            curl \
            default-libmysqlclient-dev \
            pkg-config \
        && rm -rf /var/lib/apt/lists/*

RUN     --mount=type=cache,target=/root/.cache/pip \
        pip install \
            "pip==25.2" \
            "setuptools==80.9.0" \
            "wheel==0.45.1" \
        && pip wheel \
            --wheel-dir /wheels \
            "mysql-to-sqlite3==2.4.5"

###############
## Liquibase ##
###############

FROM    python:3.13-slim-bookworm AS liquibase

ENV     APP_DIR=/var/liquibase \
        BUILD_ENV=$BUILD_ENV \
        LIQUIBASE_HOME=/opt/liquibase \
        MYSQL_CONNECTOR_VERSION=9.4.0 \
        PIP_DISABLE_PIP_VERSION_CHECK=on \
        PYTHONDONTWRITEBYTECODE=1 \
        RELEASE_LIQUIBASE_VERSION=4.33.0

WORKDIR ${APP_DIR}

# Add SQLite group
RUN     groupadd --system --gid 2000 sqlite

# --- Github ---
ARG     GITHUB_DEPLOY_TOKEN
ENV     GITHUB_DEPLOY_TOKEN=$GITHUB_DEPLOY_TOKEN

# --- OS installs ---
RUN     --mount=type=cache,target=/var/cache/apt,sharing=locked \
        --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
        apt-get update \
        && apt-get install -y --no-install-recommends \
            ca-certificates \
            curl \
            default-jre-headless \
            default-mysql-client \
            git \
            netcat-openbsd \
            sqlite3 \
            tar \
            unzip \
        && update-ca-certificates \
        && rm -rf /var/lib/apt/lists/*

# --- PIP installs ---

COPY    --from=mysql-to-sqlite3-builder /wheels/ /tmp/wheels/

RUN     --mount=type=cache,target=/root/.cache/pip \
        pip install \
            "pip==25.2" \
            "setuptools==80.9.0" \
            "wheel==0.45.1" \
        && pip install \
            --no-index \
            --find-links=/tmp/wheels \
            "mysql-to-sqlite3==2.4.5"

# --- Other Installs ---

# Install AWS CLI v2
RUN     curl -fsSLo /tmp/awscliv2.zip "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" \
        && unzip -q /tmp/awscliv2.zip -d /tmp \
        && /tmp/aws/install -i /usr/local/aws-cli -b /usr/local/bin \
        && rm -rf /tmp/aws /tmp/awscliv2.zip

# Install Liquibase
RUN     curl -fsSLo liquibase-${RELEASE_LIQUIBASE_VERSION}.tar.gz \
            "https://github.com/liquibase/liquibase/releases/download/v${RELEASE_LIQUIBASE_VERSION}/liquibase-${RELEASE_LIQUIBASE_VERSION}.tar.gz" \
        && mkdir -p "${LIQUIBASE_HOME}" \
        && tar -xzf liquibase-${RELEASE_LIQUIBASE_VERSION}.tar.gz -C "${LIQUIBASE_HOME}" \
        && chmod +x "${LIQUIBASE_HOME}/liquibase" \
        && ln -s "${LIQUIBASE_HOME}/liquibase" /usr/local/bin/ \
        && rm -rf "liquibase-${RELEASE_LIQUIBASE_VERSION}.tar.gz"

# Install MySQL Connector/J
RUN     curl -fsSLo mysql-connector-j-${MYSQL_CONNECTOR_VERSION}.tar.gz \
            "https://cdn.mysql.com/Downloads/Connector-J/mysql-connector-j-${MYSQL_CONNECTOR_VERSION}.tar.gz" \
        && tar -xzf mysql-connector-j-${MYSQL_CONNECTOR_VERSION}.tar.gz \
        && mv -f "mysql-connector-j-${MYSQL_CONNECTOR_VERSION}/mysql-connector-j-${MYSQL_CONNECTOR_VERSION}.jar" "mysql-connector-j.jar" \
        && chmod 0644 mysql-connector-j.jar \
        && rm -rf "mysql-connector-j-${MYSQL_CONNECTOR_VERSION}.tar.gz" "mysql-connector-j-${MYSQL_CONNECTOR_VERSION}"

# --- Entrypoint ---

COPY    --chmod=0755 entrypoint.sh .
COPY    --chmod=0755 src/ src/

ENTRYPOINT ["./entrypoint.sh"]
