FROM swift:6.2-noble # Make sure all system packages are up to date, and install only essential packages. RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ && apt-get -q update \ && apt-get -q dist-upgrade -y \ && apt-get -q install -y \ libjemalloc2 \ ca-certificates \ tzdata \ # If your app or its dependencies import FoundationNetworking, also install `libcurl4`. libcurl4 \ # If your app or its dependencies import FoundationXML, also install `libxml2`. # libxml2 \ sqlite3 \ nodejs \ npm \ build-essential \ curl \ && rm -r /var/lib/apt/lists/* # Set up a build area WORKDIR /app # First just resolve dependencies. # This creates a cached layer that can be reused # as long as your Package.swift/Package.resolved # files do not change. COPY ./Package.* ./ RUN swift package resolve \ $([ -f ./Package.resolved ] && echo "--force-resolved-versions" || true) # Copy entire repo into container COPY . . RUN curl -L https://github.com/watchexec/watchexec/releases/download/v2.3.2/watchexec-2.3.2-aarch64-unknown-linux-gnu.tar.xz --output watchexec.tar.xz \ && tar -xvf watchexec.tar.xz \ && cp ./watchexec-2.3.2-aarch64-unknown-linux-gnu/watchexec /bin RUN npm install -g browser-sync ENV SWIFT_BACKTRACE=enable=no ENV LOG_LEVEL=debug CMD ["swift", "run", "App", "serve", "--hostname", "0.0.0.0", "--port", "8080"]