Skip to content

Commit

Permalink
Move Docker rules to separate makefile
Browse files Browse the repository at this point in the history
By splitting these rules off from the main makefile, it makes it possible to watch for changes in to either the Dockerfiles or to the build rules in the `makefile` that generate Docker images from the Dockerfiles. This can be accomplished by watching for changes in the folder `docker/` to trigger builds of Docker images.

Having Docker images built using CI can potentially speed up the uplaod of large Docker images. Docker images can be quite large, particularly for the Mingw builds, which are close to 4GB. Having to upload them after a local build can take quite a bit of time.

It might make sense to use the GitHub Docker Registry rather than DockerHub, as that could allow for building and uploading all using GitHub infrastructure.
  • Loading branch information
DanRStevens committed Jul 16, 2024
1 parent fd0e0bf commit 4c19604
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 40 deletions.
40 changes: 40 additions & 0 deletions docker/makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Build rules relating to Docker images

DockerFolder := ${TopLevelFolder}/docker
DockerRunFlags := --volume ${TopLevelFolder}:/code --workdir=/code --rm --tty
DockerUserFlags = --user="$(shell id --user):$(shell id --group)"
DockerRepository := outpostuniverse

ImageVersion_gcc := 1.5
ImageVersion_clang := 1.4
ImageVersion_mingw := 1.10
ImageVersion_arch := 1.4

DockerFileName = ${DockerFolder}/nas2d-$*.Dockerfile

DockerImageName = ${DockerRepository}/nas2d-$*:${ImageVersion_$*}
DockerImageNameLatest = ${DockerRepository}/nas2d-$*:latest

DockerBuildRules := build-image-gcc build-image-clang build-image-mingw build-image-arch
DockerPushRules := push-image-gcc push-image-clang push-image-mingw push-image-arch
DockerRunRules := run-image-gcc run-image-clang run-image-mingw run-image-arch
DockerDebugRules := debug-image-gcc debug-image-clang debug-image-mingw debug-image-arch
DockerDebugRootRules := root-debug-image-gcc root-debug-image-clang root-debug-image-mingw root-debug-image-arch

.PHONY: ${DockerBuildRules} ${DockerPushRules} ${DockerRunRules} ${DockerDebugRules} ${DockerDebugRootRules}

${DockerBuildRules}: build-image-%:
docker build ${DockerFolder}/ --file ${DockerFileName} --tag ${DockerImageName} --tag ${DockerImageNameLatest}

${DockerPushRules}: push-image-%:
docker push ${DockerImageName}
docker push ${DockerImageNameLatest}

${DockerRunRules}: run-image-%:
docker run ${DockerRunFlags} ${DockerUserFlags} ${DockerImageName}

${DockerDebugRules}: debug-image-%:
docker run ${DockerRunFlags} --interactive ${DockerUserFlags} ${DockerImageName} bash

${DockerDebugRootRules}: root-debug-image-%:
docker run ${DockerRunFlags} --interactive ${DockerImageName} bash
41 changes: 1 addition & 40 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -237,46 +237,7 @@ install-dependencies-darwin:

#### Docker related build rules ####

# Build rules relating to Docker images

DockerFolder := ${TopLevelFolder}/docker
DockerRunFlags := --volume ${TopLevelFolder}:/code --workdir=/code --rm --tty
DockerUserFlags = --user="$(shell id --user):$(shell id --group)"
DockerRepository := outpostuniverse

ImageVersion_gcc := 1.5
ImageVersion_clang := 1.4
ImageVersion_mingw := 1.10
ImageVersion_arch := 1.4

DockerFileName = ${DockerFolder}/nas2d-$*.Dockerfile

DockerImageName = ${DockerRepository}/nas2d-$*:${ImageVersion_$*}
DockerImageNameLatest = ${DockerRepository}/nas2d-$*:latest

DockerBuildRules := build-image-gcc build-image-clang build-image-mingw build-image-arch
DockerPushRules := push-image-gcc push-image-clang push-image-mingw push-image-arch
DockerRunRules := run-image-gcc run-image-clang run-image-mingw run-image-arch
DockerDebugRules := debug-image-gcc debug-image-clang debug-image-mingw debug-image-arch
DockerDebugRootRules := root-debug-image-gcc root-debug-image-clang root-debug-image-mingw root-debug-image-arch

.PHONY: ${DockerBuildRules} ${DockerPushRules} ${DockerRunRules} ${DockerDebugRules} ${DockerDebugRootRules}

${DockerBuildRules}: build-image-%:
docker build ${DockerFolder}/ --file ${DockerFileName} --tag ${DockerImageName} --tag ${DockerImageNameLatest}

${DockerPushRules}: push-image-%:
docker push ${DockerImageName}
docker push ${DockerImageNameLatest}

${DockerRunRules}: run-image-%:
docker run ${DockerRunFlags} ${DockerUserFlags} ${DockerImageName}

${DockerDebugRules}: debug-image-%:
docker run ${DockerRunFlags} --interactive ${DockerUserFlags} ${DockerImageName} bash

${DockerDebugRootRules}: root-debug-image-%:
docker run ${DockerRunFlags} --interactive ${DockerImageName} bash
include docker/makefile

#### CircleCI related build rules ####

Expand Down

0 comments on commit 4c19604

Please sign in to comment.