From 569e67bf9e043fd64f88438dbb09f8df49421e19 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Fri, 5 Apr 2019 13:16:33 -0700 Subject: [PATCH] Fedora Dockerfile for building --- .gitignore | 1 + Building.md | 34 ++++++++++++++++++++++++++++++++++ Makefile | 9 ++++++--- docker/Debian.dockerfile | 4 +--- docker/Fedora.dockerfile | 21 +++++++++++++++++++++ docker/Ubuntu.dockerfile | 15 +++++++-------- docker/dist-fedora.sh | 10 ++++++++++ render/point_test.go | 2 +- 8 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 Building.md create mode 100644 docker/Fedora.dockerfile create mode 100755 docker/dist-fedora.sh diff --git a/.gitignore b/.gitignore index 627c24c..2a3f98c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ bin/ dist/ docker/ubuntu docker/debian +docker/fedora screenshot-*.png map-*.json pkg/wallpaper/*.png diff --git a/Building.md b/Building.md new file mode 100644 index 0000000..1dec40f --- /dev/null +++ b/Building.md @@ -0,0 +1,34 @@ +# Building Doodle + +Makefile commands for Linux: + +* `make setup`: install Go dependencies and set up the build environment +* `make build`: build the Doodle and Doodad binaries to the `bin/` folder. +* `make run`: run a local dev build of Doodle in debug mode +* `make guitest`: run a local dev build in the GUITest scene +* `make test`: run the test suite +* `make dist`: produce a zipped release tarball and zip file for your current + environment and output into the `dist/` folder. +* `make docker`: run all the Dockerfiles from the `docker/` folder to produce + dist builds for Debian, Fedora and Ubuntu. You may also run these builds + individually: + * `make docker.ubuntu` + * `make docker.debian` + * `make docker.fedora` +* `make clean`: clean all build artifacts + +## Linux + +Dependencies are Go, SDL2 and SDL2_ttf: + +```bash +# Fedora +sudo dnf -y install golang SDL2-devel SDL2_ttf-devel + +# Ubuntu and Debian +sudo apt -y install golang libsdl2-dev libsdl2-ttf-dev +``` + +## Windows + +TBD. diff --git a/Makefile b/Makefile index 9c41c1d..56fdeb7 100644 --- a/Makefile +++ b/Makefile @@ -44,18 +44,21 @@ dist: build cd dist && zip -r doodle-$(VERSION).zip doodle-$(VERSION) # `make docker` to run the Docker builds -.PHONY: docker docker.ubuntu docker.debian __docker.dist +.PHONY: docker docker.ubuntu docker.debian docker.fedora __docker.dist docker.ubuntu: mkdir -p docker/ubuntu ./docker/dist-ubuntu.sh docker.debian: mkdir -p docker/debian ./docker/dist-debian.sh -docker: docker.ubuntu docker.debian +docker.fedora: + mkdir -p docker/fedora + ./docker/dist-fedora.sh +docker: docker.ubuntu docker.debian docker.fedora __docker.dist: dist cp dist/*.tar.gz dist/*.zip /mnt/export/ # `make clean` cleans everything up. .PHONY: clean clean: - rm -rf bin dist + rm -rf bin dist docker/ubuntu docker/debian docker/fedora diff --git a/docker/Debian.dockerfile b/docker/Debian.dockerfile index 2316a59..98bfb80 100644 --- a/docker/Debian.dockerfile +++ b/docker/Debian.dockerfile @@ -8,8 +8,7 @@ RUN apt update && apt -y upgrade && \ apt clean # Create a user to build the packages. -RUN useradd builder -u 1000 -m -G users && \ - echo "builder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers +RUN useradd builder -u 1000 -m -G users # Add the project to the GOPATH ADD . /home/builder/go/src/git.kirsle.net/apps/doodle @@ -19,5 +18,4 @@ RUN chown -R builder:builder /home/builder/go USER builder WORKDIR /home/builder/go/src/git.kirsle.net/apps/doodle RUN make setup -RUN make dist CMD ["make", "__docker.dist"] diff --git a/docker/Fedora.dockerfile b/docker/Fedora.dockerfile new file mode 100644 index 0000000..73c7d82 --- /dev/null +++ b/docker/Fedora.dockerfile @@ -0,0 +1,21 @@ +FROM fedora:latest +MAINTAINER Noah Petherbridge +ENV GOPATH /home/builder/go + +# Update all the software and then install Go, git, SDL2 and other dependencies +RUN dnf -y update && \ + dnf -y install git zip golang SDL2-devel SDL2_ttf-devel make && \ + dnf clean all + +# Create a user to build the packages. +RUN useradd builder -u 1000 -m -G users + +# Add the project to the GOPATH +ADD . /home/builder/go/src/git.kirsle.net/apps/doodle +WORKDIR /home/builder/go/src/git.kirsle.net/apps/doodle +RUN chown -R builder:builder /home/builder/go + +# Build the app as the `builder` user +USER builder +RUN make setup +CMD ["make", "__docker.dist"] diff --git a/docker/Ubuntu.dockerfile b/docker/Ubuntu.dockerfile index af25c0f..345efed 100644 --- a/docker/Ubuntu.dockerfile +++ b/docker/Ubuntu.dockerfile @@ -2,22 +2,21 @@ FROM ubuntu:latest MAINTAINER Noah Petherbridge ENV GOPATH /home/builder/go -RUN apt update && apt -y upgrade && \ - apt -y install git zip golang \ - libsdl2-dev libsdl2-ttf-dev make && \ +# Update all the software and then install Go, git, SDL2 and other dependencies +RUN apt update && \ + apt -y upgrade && \ + apt -y install git zip golang libsdl2-dev libsdl2-ttf-dev make && \ apt clean # Create a user to build the packages. -RUN useradd builder -u 1000 -m -G users && \ - echo "builder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers +RUN useradd builder -u 1000 -m -G users # Add the project to the GOPATH ADD . /home/builder/go/src/git.kirsle.net/apps/doodle +WORKDIR /home/builder/go/src/git.kirsle.net/apps/doodle RUN chown -R builder:builder /home/builder/go -# Build the app +# Build the app as the `builder` user USER builder -WORKDIR /home/builder/go/src/git.kirsle.net/apps/doodle RUN make setup -RUN make dist CMD ["make", "__docker.dist"] diff --git a/docker/dist-fedora.sh b/docker/dist-fedora.sh new file mode 100755 index 0000000..ec8dc00 --- /dev/null +++ b/docker/dist-fedora.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# Run this script from the root of the repo. +if [[ ! -f "./docker/dist-fedora.sh" ]]; then + echo "Run this script from the root of the doodle repo, i.e.: ./docker/dist-fedora.sh" + exit 1 +fi + +sudo docker build -t doodle_fedora -f ./docker/Fedora.dockerfile . +sudo docker run --rm -v "$(pwd)/docker/fedora:/mnt/export:z" doodle_fedora diff --git a/render/point_test.go b/render/point_test.go index d56a70a..dedb355 100644 --- a/render/point_test.go +++ b/render/point_test.go @@ -44,7 +44,7 @@ func TestPointInside(t *testing.T) { W: 490, }, p: render.NewPoint(509, 260), - shouldPass: true, + shouldPass: false, }, }