From 7689d5bfb58803b7f42e012afbfec16a3a6645fc Mon Sep 17 00:00:00 2001 From: Clifton Palmer Date: Fri, 14 Mar 2025 06:07:30 -0500 Subject: [PATCH] Squashed commit of the following: * Added redis instance for builder to poll for jobs * Added nginx conf * Moved builder to its own folder --- Dockerfile => builder/Dockerfile | 4 +- builder/entrypoint.sh | 21 +++++++ entrypoint.sh => builder/godot-export.sh | 10 +++- docker-compose-prod.yml | 26 +++++++-- docker-compose.yml | 17 ++++-- nginx/conf.d/godot.conf | 70 ++++++++++++++++++++++++ 6 files changed, 133 insertions(+), 15 deletions(-) rename Dockerfile => builder/Dockerfile (50%) create mode 100755 builder/entrypoint.sh rename entrypoint.sh => builder/godot-export.sh (95%) create mode 100644 nginx/conf.d/godot.conf diff --git a/Dockerfile b/builder/Dockerfile similarity index 50% rename from Dockerfile rename to builder/Dockerfile index 49ef939..c0af21b 100644 --- a/Dockerfile +++ b/builder/Dockerfile @@ -1,7 +1,7 @@ FROM cjpalmer/godot:0.1.0 -RUN apt update -y && apt install -y zip +RUN apt update -y && apt install -y zip redis -ADD ./entrypoint.sh . +ADD ./*.sh ./ ENTRYPOINT [ "./entrypoint.sh" ] diff --git a/builder/entrypoint.sh b/builder/entrypoint.sh new file mode 100755 index 0000000..9db721d --- /dev/null +++ b/builder/entrypoint.sh @@ -0,0 +1,21 @@ +#!/bin/bash + + +function intr() { + echo Halting + exit +} + +trap intr SIGINT + +echo Starting builder polling... + +# polls a redis queue for jobs, starts the builder when it's got some +while true +do + SNAPSHOT_URI=$(redis-cli -h redis LPOP snapshots) + [[ -n "$SNAPSHOT_URI" ]] && ./godot-export.sh "$SNAPSHOT_URI" + sleep 1 +done + + diff --git a/entrypoint.sh b/builder/godot-export.sh similarity index 95% rename from entrypoint.sh rename to builder/godot-export.sh index db00882..e4aca6f 100755 --- a/entrypoint.sh +++ b/builder/godot-export.sh @@ -4,6 +4,8 @@ ################################################################################ # get project +URI_PROJECT_SNAPSHOT=$1 + [[ -z "$URI_PROJECT_SNAPSHOT" ]] && echo No URI_PROJECT_SNAPSHOT, exiting && exit 1 echo -------------------------------------------------------------------------------- @@ -12,7 +14,9 @@ echo Getting project - $URI_PROJECT_SNAPSHOT DIR_BUILD=/build DIR_PROJECT_ROOT=/project -wget $URI_PROJECT_SNAPSHOT && \ +# clean project root +rm -rf $DIR_PROJECT_ROOT/* && \ + wget $URI_PROJECT_SNAPSHOT && \ tar -xf *.tar.gz -C $DIR_PROJECT_ROOT && \ rm *.tar.gz @@ -35,9 +39,9 @@ echo Godot version - $($GODOT --headless --version) # iterate through all build types present in config file # if arg is given, override automated export discovery -if [[ -n "$1" ]] +if [[ -n "$2" ]] then - EXPORT_NAMES=$1 + EXPORT_NAMES=$2 else EXPORT_NAMES=$(awk -F= '$1=="name"{print $2}' $EXPORT_PRESETS_CFG | sed 's/"//g') fi diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 453c75a..db77db5 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,13 +1,29 @@ version: '3' +networks: + proxy: + external: true + backend: + driver: overlay services: - godot-builder: - build: . - image: cjpalmer/godot-builder:0.2.1 + web: + image: nginx:1.27-alpine + volumes: + - ./nginx/conf.d/:/etc/nginx/conf.d/ + - godot-build:/build + networks: + - proxy + - backend + redis: + image: redis:alpine + networks: + - backend + builder: + image: cjpalmer/godot-builder:0.3.0 volumes: - godot-build:/build - godot-project:/project - environment: - - URI_PROJECT_SNAPSHOT=https://git.purplebirdman.com/wolf-seeking-sheep.git/snapshot/refs/heads/big-rick.tar.gz + networks: + - backend volumes: godot-build: driver: local diff --git a/docker-compose.yml b/docker-compose.yml index af38aac..f13049e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,20 @@ version: '3' services: - godot-builder: - build: . - image: cjpalmer/godot-builder:0.2.1 + web: + image: nginx:1.27-alpine + volumes: + - ./nginx/conf.d/:/etc/nginx/conf.d/ + - godot-build-dev:/build + ports: + - 80:80 + redis: + image: redis:alpine + builder: + build: ./builder + image: cjpalmer/godot-builder:0.3.0 volumes: - godot-build-dev:/build - godot-project:/project - environment: - - URI_PROJECT_SNAPSHOT=https://git.purplebirdman.com/wolf-seeking-sheep.git/snapshot/refs/heads/big-rick.tar.gz volumes: godot-build-dev: driver: local diff --git a/nginx/conf.d/godot.conf b/nginx/conf.d/godot.conf new file mode 100644 index 0000000..3acaff1 --- /dev/null +++ b/nginx/conf.d/godot.conf @@ -0,0 +1,70 @@ +server { + listen 80; + root /build; + index index.html; + + location / { + autoindex on; + } + + #------------------------------------------------ + # Adds required support for Godot 4 WebGL Support + #------------------------------------------------ + location ~ .+/web/ { + add_header Cross-Origin-Resource-Policy same-origin; + add_header Cross-Origin-Opener-Policy same-origin; + add_header Cross-Origin-Embedder-Policy require-corp; + } + + #---------------------------------- + # Unity WebGL Support + #---------------------------------- + + # On-disk Brotli-precompressed data files should be served with compression enabled: + location ~ .+\.(data|symbols\.json)\.br$ { + # Because this file is already pre-compressed on disk, disable the on-demand compression on it. + # Otherwise nginx would attempt double compression. + gzip off; + add_header Content-Encoding br; + default_type application/octet-stream; + } + + # On-disk Brotli-precompressed JavaScript code files: + location ~ .+\.js\.br$ { + gzip off; # Do not attempt dynamic gzip compression on an already compressed file + add_header Content-Encoding br; + default_type application/javascript; + } + + # On-disk Brotli-precompressed WebAssembly files: + location ~ .+\.wasm\.br$ { + gzip off; # Do not attempt dynamic gzip compression on an already compressed file + add_header Content-Encoding br; + # Enable streaming WebAssembly compilation by specifying the correct MIME type for + # Wasm files. + default_type application/wasm; + } + + # On-disk gzip-precompressed data files should be served with compression enabled: + location ~ .+\.(data|symbols\.json)\.gz$ { + gzip off; # Do not attempt dynamic gzip compression on an already compressed file + add_header Content-Encoding gzip; + default_type application/octet-stream; + } + + # On-disk gzip-precompressed JavaScript code files: + location ~ .+\.js\.gz$ { + gzip off; # Do not attempt dynamic gzip compression on an already compressed file + add_header Content-Encoding gzip; + default_type application/javascript; + } + + # On-disk gzip-precompressed WebAssembly files: + location ~ .+\.wasm\.gz$ { + gzip off; # Do not attempt dynamic gzip compression on an already compressed file + add_header Content-Encoding gzip; + # Enable streaming WebAssembly compilation by specifying the correct MIME type for + # Wasm files. + default_type application/wasm; + } +} -- 2.47.2