# 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 #

RUN bash -c '[[ -n "$FILE00" ]] && wget -P "$DOWNLOAD" "$FILE00"'
RUN bash -c '[[ -n "$FILE01" ]] && wget -P "$DOWNLOAD" "$FILE01"'
RUN bash -c '[[ -n "$FILE02" ]] && wget -P "$DOWNLOAD" "$FILE02"'
RUN bash -c '[[ -n "$FILE03" ]] && wget -P "$DOWNLOAD" "$FILE03"'
RUN bash -c '[[ -n "$FILE04" ]] && wget -P "$DOWNLOAD" "$FILE04"'
RUN bash -c '[[ -n "$FILE05" ]] && wget -P "$DOWNLOAD" "$FILE05"'
RUN bash -c '[[ -n "$FILE06" ]] && wget -P "$DOWNLOAD" "$FILE06"'
RUN bash -c '[[ -n "$FILE08" ]] && wget -P "$DOWNLOAD" "$FILE08"'
RUN bash -c '[[ -n "$FILE09" ]] && wget -P "$DOWNLOAD" "$FILE09"'
RUN bash -c '[[ -n "$FILE10" ]] && wget -P "$DOWNLOAD" "$FILE10"'
RUN bash -c '[[ -n "$FILE11" ]] && wget -P "$DOWNLOAD" "$FILE11"'
RUN bash -c '[[ -n "$FILE12" ]] && wget -P "$DOWNLOAD" "$FILE12"'
RUN bash -c '[[ -n "$FILE13" ]] && wget -P "$DOWNLOAD" "$FILE13"'
RUN bash -c '[[ -n "$FILE14" ]] && wget -P "$DOWNLOAD" "$FILE14"'
RUN bash -c '[[ -n "$FILE15" ]] && wget -P "$DOWNLOAD" "$FILE15"'
RUN bash -c '[[ -n "$FILE16" ]] && wget -P "$DOWNLOAD" "$FILE16"'
RUN bash -c '[[ -n "$FILE17" ]] && wget -P "$DOWNLOAD" "$FILE17"'
RUN bash -c '[[ -n "$FILE18" ]] && wget -P "$DOWNLOAD" "$FILE18"'
RUN bash -c '[[ -n "$FILE19" ]] && wget -P "$DOWNLOAD" "$FILE19"'
RUN bash -c '[[ -n "$FILE20" ]] && wget -P "$DOWNLOAD" "$FILE20"'
RUN bash -c '[[ -n "$FILE21" ]] && wget -P "$DOWNLOAD" "$FILE21"'
RUN bash -c '[[ -n "$FILE22" ]] && wget -P "$DOWNLOAD" "$FILE22"'
RUN bash -c '[[ -n "$FILE23" ]] && wget -P "$DOWNLOAD" "$FILE23"'
RUN bash -c '[[ -n "$FILE24" ]] && wget -P "$DOWNLOAD" "$FILE24"'
RUN bash -c '[[ -n "$FILE25" ]] && wget -P "$DOWNLOAD" "$FILE25"'
RUN bash -c '[[ -n "$FILE26" ]] && wget -P "$DOWNLOAD" "$FILE26"'
RUN bash -c '[[ -n "$FILE27" ]] && wget -P "$DOWNLOAD" "$FILE27"'
RUN bash -c '[[ -n "$FILE28" ]] && wget -P "$DOWNLOAD" "$FILE28"'
RUN bash -c '[[ -n "$FILE29" ]] && wget -P "$DOWNLOAD" "$FILE29"'
RUN bash -c '[[ -n "$FILE30" ]] && wget -P "$DOWNLOAD" "$FILE30"'
RUN bash -c '[[ -n "$FILE31" ]] && wget -P "$DOWNLOAD" "$FILE31"'
RUN bash -c '[[ -n "$FILE32" ]] && wget -P "$DOWNLOAD" "$FILE32"'
RUN bash -c '[[ -n "$FILE33" ]] && wget -P "$DOWNLOAD" "$FILE33"'
RUN bash -c '[[ -n "$FILE34" ]] && wget -P "$DOWNLOAD" "$FILE34"'
RUN bash -c '[[ -n "$FILE35" ]] && wget -P "$DOWNLOAD" "$FILE35"'
RUN bash -c '[[ -n "$FILE36" ]] && wget -P "$DOWNLOAD" "$FILE36"'
RUN bash -c '[[ -n "$FILE37" ]] && wget -P "$DOWNLOAD" "$FILE37"'
RUN bash -c '[[ -n "$FILE38" ]] && wget -P "$DOWNLOAD" "$FILE38"'
RUN bash -c '[[ -n "$FILE39" ]] && wget -P "$DOWNLOAD" "$FILE39"'

# Move Downloaded Files #

# 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;"
