diff --git a/64bit-Fedora.dockerfile b/64bit-Fedora.dockerfile new file mode 100644 index 0000000..3ef73d3 --- /dev/null +++ b/64bit-Fedora.dockerfile @@ -0,0 +1,102 @@ +## +# Fully build and distribute Linux and Windows binaries for Project: Doodle. +# +# Artifact outputs will be in the dist/mw/ folder. +# +# Windows binary cross-compiled with mingw from the Fedora +# docker container. +## + +FROM fedora:latest +ENV GOPATH /go +ENV GOPROXY direct +ENV PATH /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/go/bin + +# Fedora: Update all software and get dependencies. +# RUN dnf -y update +RUN dnf -y install git zip tar golang SDL2-devel SDL2_ttf-devel \ + SDL2_mixer-devel mingw64-gcc make wget \ + flatpak-builder ruby-devel gcc rpm-build libffi-devel + +# Create a user to build the packages. +RUN useradd builder -u 1000 -m -G users && \ + mkdir /go /git && chown -R builder:users /go /git + +# Docker cache invalidation here. +# ADD . /home/builder + +# Git clone all the repos. XXX: passwords exposed here +RUN git clone https://doodle:hiRN6wp-XPDBc@git.kirsle.net/apps/doodle-rtp /git/rtp +RUN git clone https://doodle:hiRN6wp-XPDBc@git.kirsle.net/apps/doodle-vendor /git/vendor +RUN git clone https://doodle:hiRN6wp-XPDBc@git.kirsle.net/apps/doodle-masters /git/masters +RUN git clone https://doodle:hiRN6wp-XPDBc@git.kirsle.net/apps/doodle /go/src/git.kirsle.net/apps/doodle + +# MinGW setup for Windows executable cross-compile. +WORKDIR /git/vendor/mingw-libs +RUN for i in *.tar.gz; do tar -xzvf $i; done +RUN cp -rv SDL2-2.0.9/x86_64-w64-mingw32 /usr && \ + cp -rv SDL2_mixer-2.0.4/x86_64-w64-mingw32 /usr && \ + cp -rv SDL2_ttf-2.0.15/x86_64-w64-mingw32 /usr +RUN mkdir -p /usr/lib/golang/pkg/windows_amd64 && \ + chown -R builder:users /usr/lib/golang/pkg/windows_amd64 + +# Pre-download my Go render engine libraries +RUN git clone https://git.kirsle.net/go/ui /git/go/ui +RUN git clone https://git.kirsle.net/go/render /git/go/render +RUN git clone https://git.kirsle.net/go/audio /git/go/audio + +# Enter Doodle's directory, patch the go.mod and fetch the guidebook. +WORKDIR /go/src/git.kirsle.net/apps/doodle +RUN echo "replace git.kirsle.net/go/ui => /git/go/ui" >> go.mod && \ + echo "replace git.kirsle.net/go/render => /git/go/render" >> go.mod && \ + echo "replace git.kirsle.net/go/audio => /git/go/audio" >> go.mod && \ + cat go.mod && \ + wget -O - https://download.sketchymaze.com/guidebook.tar.gz | tar -xzvf - + +# Install Go dependencies and such. +RUN make setup + +# Copy default vendored assets in. +RUN cp -r /git/vendor/fonts ./assets/fonts && \ + cp -r /git/masters/levelpacks/levelpacks ./assets/levelpacks && \ + mkdir rtp && cp -r /git/rtp/* rtp/ + +RUN ls -hal && pwd +RUN mkdir -p bin && cp /git/vendor/DLL/*.dll bin/ + +# Package rpm and deb for Linux. +# TODO: fpm doesn't like to install in Docker right now +# RUN dnf -y install ruby-devel gcc rpm-build libffi-devel +RUN gem install fpm; exit 0 + +# Run the big mingw-release, which: +# - builds the doodads +# - embeds the bindata files +# - builds the program for Linux +# - builds for Windows via MinGW +# - runs `make dist/` creating an uber build for both OS's +# - runs release.sh to carve out the Linux and Windows versions and +# zip them all up nicely. +RUN make mingw-release + +### +# Build the Flatpak release for Linux. +# RUN git clone https://code.sketchymaze.com/game/flatpak /git/flatpak + +# # Fetch flatpak dependencies. +# RUN flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo && \ +# flatpak install -y org.freedesktop.Sdk//21.08 && \ +# flatpak install -y org.freedesktop.Sdk.Extension.golang//21.08 + +# # Path the go.mod `replace` directives to Flatpak's sandbox paths, +# # then build the Flatpak. +# RUN sed -i 's/=> \/git\/go\//=> \/run\/build\/sketchymaze\/deps\//g' go.mod && \ +# cat go.mod +# WORKDIR /git/flatpak +# RUN make bundle; exit 0 +# WORKDIR /go/src/git.kirsle.net/apps/doodle + +CMD ["sudo", "cp", "-r", "-v", \ + "/go/src/git.kirsle.net/apps/doodle/dist/release/", \ + # "/git/flatpak/*.flatpak", \ + "/mnt/export/"] diff --git a/64bit.dockerfile b/64bit.dockerfile index 3ef73d3..8b926ad 100644 --- a/64bit.dockerfile +++ b/64bit.dockerfile @@ -7,20 +7,27 @@ # docker container. ## -FROM fedora:latest +FROM debian:latest ENV GOPATH /go ENV GOPROXY direct -ENV PATH /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/go/bin +ENV PATH /opt/go/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/go/bin -# Fedora: Update all software and get dependencies. +# Debian: Update all software and get dependencies. # RUN dnf -y update -RUN dnf -y install git zip tar golang SDL2-devel SDL2_ttf-devel \ - SDL2_mixer-devel mingw64-gcc make wget \ - flatpak-builder ruby-devel gcc rpm-build libffi-devel +RUN apt update && apt -y upgrade && apt -y dist-upgrade +RUN apt -y install git zip tar libsdl2-dev libsdl2-ttf-dev \ + libsdl2-mixer-dev gcc-mingw-w64-x86-64 gcc make wget \ + flatpak-builder ruby-dev gcc rpm libffi-dev # Create a user to build the packages. RUN useradd builder -u 1000 -m -G users && \ - mkdir /go /git && chown -R builder:users /go /git + mkdir /go /git && chown -R builder:users /go /git + +# Download and install modern Go. +WORKDIR /root +RUN wget https://go.dev/dl/go1.17.7.linux-amd64.tar.gz -O go.tgz && \ + tar -xzvf go.tgz && \ + cp -r go /opt/go # Docker cache invalidation here. # ADD . /home/builder @@ -48,25 +55,27 @@ RUN git clone https://git.kirsle.net/go/audio /git/go/audio # Enter Doodle's directory, patch the go.mod and fetch the guidebook. WORKDIR /go/src/git.kirsle.net/apps/doodle RUN echo "replace git.kirsle.net/go/ui => /git/go/ui" >> go.mod && \ - echo "replace git.kirsle.net/go/render => /git/go/render" >> go.mod && \ - echo "replace git.kirsle.net/go/audio => /git/go/audio" >> go.mod && \ - cat go.mod && \ - wget -O - https://download.sketchymaze.com/guidebook.tar.gz | tar -xzvf - + echo "replace git.kirsle.net/go/render => /git/go/render" >> go.mod && \ + echo "replace git.kirsle.net/go/audio => /git/go/audio" >> go.mod && \ + cat go.mod && \ + wget -O - https://download.sketchymaze.com/guidebook.tar.gz | tar -xzvf - # Install Go dependencies and such. +RUN touch /tmp/bre +RUN find /opt/go/bin RUN make setup # Copy default vendored assets in. RUN cp -r /git/vendor/fonts ./assets/fonts && \ - cp -r /git/masters/levelpacks/levelpacks ./assets/levelpacks && \ - mkdir rtp && cp -r /git/rtp/* rtp/ + cp -r /git/masters/levelpacks/levelpacks ./assets/levelpacks && \ + mkdir rtp && cp -r /git/rtp/* rtp/ RUN ls -hal && pwd RUN mkdir -p bin && cp /git/vendor/DLL/*.dll bin/ # Package rpm and deb for Linux. # TODO: fpm doesn't like to install in Docker right now -# RUN dnf -y install ruby-devel gcc rpm-build libffi-devel +RUN apt -y install ruby-dev ruby-rubygems rpm libffi-dev RUN gem install fpm; exit 0 # Run the big mingw-release, which: @@ -79,24 +88,6 @@ RUN gem install fpm; exit 0 # zip them all up nicely. RUN make mingw-release -### -# Build the Flatpak release for Linux. -# RUN git clone https://code.sketchymaze.com/game/flatpak /git/flatpak - -# # Fetch flatpak dependencies. -# RUN flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo && \ -# flatpak install -y org.freedesktop.Sdk//21.08 && \ -# flatpak install -y org.freedesktop.Sdk.Extension.golang//21.08 - -# # Path the go.mod `replace` directives to Flatpak's sandbox paths, -# # then build the Flatpak. -# RUN sed -i 's/=> \/git\/go\//=> \/run\/build\/sketchymaze\/deps\//g' go.mod && \ -# cat go.mod -# WORKDIR /git/flatpak -# RUN make bundle; exit 0 -# WORKDIR /go/src/git.kirsle.net/apps/doodle - -CMD ["sudo", "cp", "-r", "-v", \ - "/go/src/git.kirsle.net/apps/doodle/dist/release/", \ - # "/git/flatpak/*.flatpak", \ - "/mnt/export/"] +CMD ["cp", "-r", "-v", \ + "/go/src/git.kirsle.net/apps/doodle/dist/release/", \ + "/mnt/export/"]