diff --git a/.dockerignore b/.dockerignore index c795b054..8b83c831 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,2 @@ -build \ No newline at end of file +* +!firmware/tools/docker-entrypoint.sh \ No newline at end of file diff --git a/dockerize.sh b/dockerize.sh new file mode 100755 index 00000000..9f25d558 --- /dev/null +++ b/dockerize.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +################################################# +# This script aids building mayhem inside docker +# +# Basic usage: +# - Build dev container: ./dockerize.sh build +# - Build mayhem: ./dockerize.sh +# +# The image will be automatically build if it +# does not exist, but if the dockerfile changes +# it need to be rebuilt manually. +# +# Advanced parameters: +# - Get a shell inside the build image to +# inspect problems: ./dockerize.sh shell +# - Give additional parameters to the container: +# ./dockerize.sh -j10 +# ./dockerize.sh ninja -j10 +# - Use a different dockerfile: +# ./dockerize.sh build dockerfile-other +# - Use a different cpu architecture: +# ./dockerize.sh build dockerfile-nogit-arm arm64 +# +# Environment variables: +# - It is possible to override the default image +# name that is being used to build and run the +# build container using an environment variable. +# The default is 'portapack-dev' +# Override by setting the following environment +# variable: MAYHEM_DEV_DOCKER_IMAGE +# + +# +# Copyright (C) 2024 u-foka +# +# This file is part of PortaPack. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +set -e # exit immediatelly on any failure + +DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +IMAGE="${MAYHEM_DEV_DOCKER_IMAGE:-portapack-dev}" + +build_image() { + DOCKERFILE=${1:-dockerfile-nogit} + PLATFORM=${2:-amd64} + docker build --platform "linux/${PLATFORM}" -t "${IMAGE}" -f "${DOCKERFILE}" . +} + +start_docker() { + if [ -z "$(docker images -q ${IMAGE} 2> /dev/null)" ]; then + build_image + fi + + exec docker run -v "${DIR}:/havoc" -u "$(id -u):$(id -g)" -ti --rm "${IMAGE}" "$@" +} + +if [ "$1" = 'shell' ]; then # open a shell into the container + start_docker "bash -li" +elif [ "$1" = 'build' ]; then # build the default (or specified) target with ninja + shift # remove the first item from $@ as we consumed it, we can then pass the rest on to make + build_image "$@" + exit $? +fi + +start_docker "$@" diff --git a/firmware/tools/docker-entrypoint.sh b/firmware/tools/docker-entrypoint.sh index b564de0f..8c955dd9 100755 --- a/firmware/tools/docker-entrypoint.sh +++ b/firmware/tools/docker-entrypoint.sh @@ -1,5 +1,26 @@ #!/bin/bash +# +# Copyright (C) 2024 u-foka +# +# This file is part of PortaPack. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + set -e # exit immediatelly on any failure build_make() {