# Dockerfile
FROM        086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:debian13-php84 AS base

USER        root

# Install and configure apache, php packages
RUN apt-get update \
    && apt-get -y upgrade \
    && apt-get -y install awscli git unzip zip \
    && apt-get clean all \
    && rm -rf /var/lib/apt/lists/*

USER        worker

ENV         APP_HOME=/var/gras
WORKDIR     $APP_HOME

RUN         mkdir -p $APP_HOME && \
            mkdir $APP_HOME/.ssh && \
            chmod 700 $APP_HOME/.ssh

RUN         mkdir ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
COPY        composer.json composer.lock $APP_HOME/

### Update lockfile ###
FROM        base AS update-lockfile

COPY        scripts/update-lockfile.sh $APP_HOME/scripts/update-lockfile.sh

ENTRYPOINT  ["/var/gras/scripts/update-lockfile.sh"]

### App ###
FROM        base AS app

USER        root

RUN         apt-get clean all && \
            rm -rf /var/lib/apt/lists/*

# Install the DataDog PHP tracer
RUN         curl -LO https://github.com/DataDog/dd-trace-php/releases/download/1.19.2/datadog-php-tracer_1.19.2_amd64.deb && \
            dpkg -i datadog-php-tracer_1.19.2_amd64.deb && \
            rm datadog-php-tracer_1.19.2_amd64.deb

COPY        deploy/apcu.ini /etc/php/8.4/cli/conf.d/20-apcu.ini

# Set PHP memory limit and timezone
RUN         sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/8.4/cli/php.ini && \
            sed -i "s/;date\.timezone =/date.timezone = \"America\/New_York\"/" /etc/php/8.4/cli/php.ini

USER        worker
RUN         --mount=type=secret,id=COMPOSER_AUTH,required=true,uid=1010 COMPOSER_AUTH=$(cat /run/secrets/COMPOSER_AUTH) COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --no-autoloader

USER        root
RUN         apt-get -y remove --purge git && \
            apt-get -y autoremove

USER        worker

COPY        bin ./bin
COPY        src ./src

RUN         composer dump-autoload --optimize

CMD         ["timeout", "600" , "/usr/bin/php", "/var/gras/bin/gras_lite_delivery.php"]

### Lint and test ###
FROM        base AS dev

USER        worker

RUN         --mount=type=secret,id=COMPOSER_AUTH,required=true,uid=1010 COMPOSER_AUTH=$(cat /run/secrets/COMPOSER_AUTH) COMPOSER_ALLOW_SUPERUSER=1 composer install --no-autoloader

USER        root

RUN         apt-get -y remove --purge git && \
            apt-get -y autoremove

USER        worker

COPY        phpstan.neon.dist phpcs.xml $APP_HOME/
COPY        bin ./bin
COPY        src ./src

RUN         composer dump-autoload --optimize

### Test ###
FROM        base AS lint-and-test

USER        root

RUN         apt-get update && \
            apt-get -y install python3-pip && \
            apt-get clean all && \
            rm -rf /var/lib/apt/lists/*

# Install yamllint
RUN         pip3 install --break-system-packages yamllint==1.35.1

USER        worker

WORKDIR     $APP_HOME

# Copy composer files and install all dependencies including dev
RUN         --mount=type=secret,id=COMPOSER_AUTH,required=true,uid=1010 COMPOSER_AUTH=$(cat /run/secrets/COMPOSER_AUTH) COMPOSER_ALLOW_SUPERUSER=1 composer install --no-autoloader

# Copy source code and test configurations
COPY        bin $APP_HOME/bin
COPY        src $APP_HOME/src
COPY        phpunit.xml phpcs.xml phpstan.neon.dist .yamllint docker-compose.yml software-catalog.yaml $APP_HOME/
COPY        scripts/lint-and-test.sh $APP_HOME/scripts/lint-and-test.sh
COPY        tests $APP_HOME/tests

RUN         composer dump-autoload --optimize

ENTRYPOINT  ["/var/gras/scripts/lint-and-test.sh"]

### Format ###
FROM        dev AS format

COPY        scripts/format.sh $APP_HOME/scripts/

ENTRYPOINT  ["/var/gras/scripts/format.sh"]
