# Build a container which hosts Android apps through an F-Droid repository.

# Base Image #

FROM debian:trixie-slim

# Static Variables #

ENV DOWNLOAD="/root/Downloads"

ENV WEBROOT="/var/www/html"

ENV FDROID="/root/fdroid"
ENV METADATA="$FDROID/metadata"
ENV REPO="$FDROID/repo"
ENV CONFIG="$FDROID/config.yml"

# Create Directory Hierarchies #

RUN mkdir -pv "$DOWNLOAD" "$WEBROOT" \
      "$FDROID" "$METADATA" "$REPO"

# Install Packages#
# https://f-droid.org/en/docs/Installing_the_Server_and_Repo_Tools/#debianubuntumintetc

RUN apt-get update && apt-get install -y sudo bash curl git vim nginx
COPY files/debian-backports.sources /etc/apt/sources.list.d/
RUN apt-get update && apt-get install -y -t trixie-backports fdroidserver

# Generate F-Droid Repo #

USER root
WORKDIR "$FDROID"
RUN fdroid init

# This is where the image would get published on Docker Hub. #

RUN fdroid update

# Advanced Variables #

ARG FILE00
ENV FILE00="$FILE00"
ARG FILE01
ENV FILE01="$FILE01"
ARG FILE02
ENV FILE02="$FILE02"
ARG FILE03
ENV FILE03="$FILE03"
ARG FILE04
ENV FILE04="$FILE04"
ARG FILE05
ENV FILE05="$FILE05"
ARG FILE06
ENV FILE06="$FILE06"
ARG FILE07
ENV FILE07="$FILE07"
ARG FILE08
ENV FILE08="$FILE08"
ARG FILE09
ENV FILE09="$FILE09"
ARG FILE10
ENV FILE10="$FILE10"
ARG FILE11
ENV FILE11="$FILE11"
ARG FILE12
ENV FILE12="$FILE12"
ARG FILE13
ENV FILE13="$FILE13"
ARG FILE14
ENV FILE14="$FILE14"
ARG FILE15
ENV FILE15="$FILE15"
ARG FILE16
ENV FILE16="$FILE16"
ARG FILE17
ENV FILE17="$FILE17"
ARG FILE18
ENV FILE18="$FILE18"
ARG FILE19
ENV FILE19="$FILE19"
ARG FILE20
ENV FILE20="$FILE20"
ARG FILE21
ENV FILE21="$FILE21"
ARG FILE22
ENV FILE22="$FILE22"
ARG FILE23
ENV FILE23="$FILE23"
ARG FILE24
ENV FILE24="$FILE24"
ARG FILE25
ENV FILE25="$FILE25"
ARG FILE26
ENV FILE26="$FILE26"
ARG FILE27
ENV FILE27="$FILE27"
ARG FILE28
ENV FILE28="$FILE28"
ARG FILE29
ENV FILE29="$FILE29"
ARG FILE30
ENV FILE30="$FILE30"
ARG FILE31
ENV FILE31="$FILE31"
ARG FILE32
ENV FILE32="$FILE32"
ARG FILE33
ENV FILE33="$FILE33"
ARG FILE34
ENV FILE34="$FILE34"
ARG FILE35
ENV FILE35="$FILE35"
ARG FILE36
ENV FILE36="$FILE36"
ARG FILE37
ENV FILE37="$FILE37"
ARG FILE38
ENV FILE38="$FILE38"
ARG FILE39
ENV FILE39="$FILE39"

# Download Remote Files #

ADD "$FILE00" "$DOWNLOAD"/
ADD "$FILE01" "$DOWNLOAD"/
ADD "$FILE02" "$DOWNLOAD"/
ADD "$FILE03" "$DOWNLOAD"/
ADD "$FILE04" "$DOWNLOAD"/
ADD "$FILE05" "$DOWNLOAD"/
ADD "$FILE06" "$DOWNLOAD"/
ADD "$FILE08" "$DOWNLOAD"/
ADD "$FILE09" "$DOWNLOAD"/
ADD "$FILE10" "$DOWNLOAD"/
ADD "$FILE11" "$DOWNLOAD"/
ADD "$FILE12" "$DOWNLOAD"/
ADD "$FILE13" "$DOWNLOAD"/
ADD "$FILE14" "$DOWNLOAD"/
ADD "$FILE15" "$DOWNLOAD"/
ADD "$FILE16" "$DOWNLOAD"/
ADD "$FILE17" "$DOWNLOAD"/
ADD "$FILE18" "$DOWNLOAD"/
ADD "$FILE19" "$DOWNLOAD"/
ADD "$FILE20" "$DOWNLOAD"/
ADD "$FILE21" "$DOWNLOAD"/
ADD "$FILE22" "$DOWNLOAD"/
ADD "$FILE23" "$DOWNLOAD"/
ADD "$FILE24" "$DOWNLOAD"/
ADD "$FILE25" "$DOWNLOAD"/
ADD "$FILE26" "$DOWNLOAD"/
ADD "$FILE27" "$DOWNLOAD"/
ADD "$FILE28" "$DOWNLOAD"/
ADD "$FILE29" "$DOWNLOAD"/
ADD "$FILE30" "$DOWNLOAD"/
ADD "$FILE31" "$DOWNLOAD"/
ADD "$FILE32" "$DOWNLOAD"/
ADD "$FILE33" "$DOWNLOAD"/
ADD "$FILE34" "$DOWNLOAD"/
ADD "$FILE35" "$DOWNLOAD"/
ADD "$FILE36" "$DOWNLOAD"/
ADD "$FILE37" "$DOWNLOAD"/
ADD "$FILE38" "$DOWNLOAD"/
ADD "$FILE39" "$DOWNLOAD"/

# Move Downloaded Files #

RUN rm -v "$DOWNLOAD"/docker-compose*yml

# Move any downloaded APK files to the repo folder.
RUN mv -v "$DOWNLOAD"/*.apk "$REPO"/ || \
      (echo "WARNING! No APK file(s) to copy." && sleep 10)

# Move any downloaded metadata files to the metadata folder.
RUN mv -v "$DOWNLOAD"/*.yml "$METADATA"/ || \
      (echo "WARNING! No YML file(s) to copy." && sleep 10)

# Move any downloaded icons to the main folder.
RUN mv -v "$DOWNLOAD"/*.png "$FDROID"/ || \
      (echo "WARNING! No PNG file(s) to copy." && sleep 10)

# Configure F-Droid Repo #

ARG REPO_DOMAIN
ENV REPO_DOMAIN="$REPO_DOMAIN"
ARG REPO_NAME
ENV REPO_NAME="$REPO_NAME"
ARG REPO_ICON
ENV REPO_ICON="$REPO_ICON"

RUN sed -i '/repo_url/d' "$CONFIG"
RUN sed -i '/repo_name/d' "$CONFIG"
RUN sed -i '/repo_icon/d' "$CONFIG"

RUN sed -i "$ a repo_url: $REPO_DOMAIN/fdroid/repo" "$CONFIG"
RUN sed -i "$ a repo_name: $REPO_NAME" "$CONFIG"
# If the icon variable is set, add it to the config file before updating.
RUN [ ! -z "$REPO_ICON" ] && \
      sed -i "$ a repo_icon: $REPO_ICON" "$FDROID/config.yml"

RUN fdroid update -c

# Publish Repo Contents to Web Root #

RUN cp -rv "$FDROID" "$WEBROOT/"

# The index files are in repo.
# TODO: Can NGINX be configured to serve REPO as the webroot while still
#       having the user's URL be fdroid/repo/? How do others handle this?
RUN cp -rv "$REPO"/* "$WEBROOT/"

# Start Command #

CMD tail -F /var/log/nginx/access.log & \
      tail -F /var/log/nginx/error.log & \
      nginx -g "daemon off;"
