diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30bcfa4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.build/ diff --git a/README.md b/README.md index d6d6370..b6f1b8f 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,41 @@ Collection of Dockerfiles created to build & pack various tools.
-- [1. Tools](#1-tools) +- [1. How to use](#1-how-to-use) + - [1.1. CLI](#11-cli) +- [2. Tools](#2-tools)
-# 1. Tools +# 1. How to use + +Run the build-script `script/build.sh` with the path to the tool you want to build. + +
+ +The docker-image will be tagged with `default` and the detected version/commit-hash. + +You can add more tags or change the existing tag-naming-scheme using the environment-variable `TAG`. + +
+ +## 1.1. CLI + +`script/build.sh [extra-args for docker build ..]` + +
+ +### 1.1.1. Environment-Variables + +Variable | Description | Default +-|-|- +`TAG` | Tag for Docker-building | `TAGPREFIX` + `NAME` +`TAGPREFIX` | Set a prefix to the default-tag | - +`NAME` | Change the name used in the tag | *FolderName* + +
+ +# 2. Tools Nothing yet diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..10ff367 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +scriptPath_file=$(dirname "${BASH_SOURCE[0]}") +scriptPath_folder=$(realpath "${scriptPath_file}") +utils_path="${scriptPath_folder}/utils" + +WORKDIR=${1:-$PWD} +WORKDIR=$(realpath "$WORKDIR") + +# -- VARIABLES -- +# Store original path +ORIGINALDIR=$PWD + +# Get args without path +EXTRA_ARGS="${@:2}" + +TAG=${TAG:-"${TAG_PREFIX}${NAME}"} + + +# Call prepare +printf "# PREPARE\n" +source ${utils_path}/prepare.sh + +# Call build +printf "# BUILD\n" +build_type=${BUILD:-"ownarch"} +source ${utils_path}/build-${build_type}.sh + + +# Switch back to original path +cd $ORIGINALDIR diff --git a/scripts/utils/build-multiarch.sh b/scripts/utils/build-multiarch.sh new file mode 100755 index 0000000..56794c4 --- /dev/null +++ b/scripts/utils/build-multiarch.sh @@ -0,0 +1,9 @@ +#!/bin/bash +PLATFORM=${PLATFORM:-"linux/amd64,linux/arm64/v8,linux/arm/v7"} + +docker buildx build \ +--platform $PLATFORM \ +--tag $TAG:latest \ +--tag "${TAG}:${VERSION}" \ +$EXTRA_ARGS \ +$WORKDIR diff --git a/scripts/utils/build-ownarch.sh b/scripts/utils/build-ownarch.sh new file mode 100755 index 0000000..1f43303 --- /dev/null +++ b/scripts/utils/build-ownarch.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +docker build \ +--tag $TAG:latest \ +--tag $TAG:$VERSION \ +$EXTRA_ARGS \ +"$WORKDIR" diff --git a/scripts/utils/prepare.sh b/scripts/utils/prepare.sh new file mode 100755 index 0000000..19fad32 --- /dev/null +++ b/scripts/utils/prepare.sh @@ -0,0 +1,55 @@ +#!/bin/sh + +# --- VARIABLES --- +# Load variables +source $WORKDIR/info.env + +# Check if certain vars are overwritten, set them if missing +if [ "${NAME}" = "" ]; then + NAME="$(basename $WORKDIR)" +fi +export NAME +printf "Name: ${NAME}\n" + +repositoryFolder="$WORKDIR/.build/repository" + +# --- SOURCES --- +# Get sources locally +if ! [ -d "$repositoryFolder" ]; then + git clone "${GIT_REPOSITORY}" . + cloned=True +fi + +# Change into repository +cd "$repositoryFolder" + +if [ "$cloned" != True ]; then + # Checkout default-branch in case GIT_CHECKOUT was different + defaultBranch=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@') + git checkout "${defaultBranch}" + + git pull # Get changes +fi + +# Checkout when set +if [ "$GIT_CHECKOUT" != "" ]; then + # Handle special directives + if [ "$GIT_CHECKOUT" = "latest-tag" ]; then + GIT_CHECKOUT=$(git describe --tags `git rev-list --tags --max-count=1`) # Get latest tag + fi + + git checkout $GIT_CHECKOUT +fi + + +# --- VERSION --- +# Get current version to build +VERSION=$(git describe --tags --long) +if [ $? -ne 0 ]; then + VERSION=$(git rev-parse HEAD) +fi +export VERSION +printf "Version: ${VERSION}\n" + +TAG=${TAG:-"${TAG_PREFIX}${NAME}"} +printf "> ${TAG}\n"