#!/bin/sh # script/docker: build the Docker image tagged with the project name. # Identical in all repos; the tag comes from script/projectname. The # Dockerfile's checks only actually run because CHECK_EPOCH is a fresh # nonce on every invocation; without it a warm cache turns this into a # green that proves nothing. set -eu SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)" main() { cd "$ROOT" # Both assignments on their own line: a failing command substitution # inside an argument does not trip `set -e`, so the inline form # degrades silently to an empty constant. `$$` because busybox `date` # drops %N without erroring. VERSION is computed here because # .dockerignore excludes .git, so `git describe` in a build stage # yields an empty version without failing. epoch="$(date +%s%N)$$" version="$(git describe --tags --always --dirty 2>/dev/null || true)" [ -n "$version" ] || version="unknown" docker build \ --build-arg CHECK_EPOCH="$epoch" \ --build-arg VERSION="$version" \ -t "$("$SCRIPT_DIR/projectname")" . } main "$@"