#!/bin/bash -e # acid-build [--self] # # (Re)build and deploy the service using the docker-compose configuration # in (usually, docker-compose.yml). # # In the typical case, this is a straightforward process and `docker compose up` # can properly recreate/start containers for the guest service. However, when # rebuilding cychedelic itself, `--self` must be given, which modifies this # script to support self-upgrade of the running compose service. # # In `--self` mode, we prepare and start the cychedelic service under an # alternate project name each time, before taking down the existing (old) # services. This is necessary because running `docker compose up` terminates # old containers before starting new ones. Termination of the ACID service # interrupts the `compose up` process before it can start the replacements. # Normally, `docker compose down` is then not needed. # # We take (from acid-source) so we may commit it to the cache iff the # deployment is successful. # # This file exits early on any failure (non-zero). On a successful run in # `--self` mode, this file does not exit (we are killed by `compose down`). cd "$CYCHE_SERVICE_DIR/$1" # For , no absolute paths and no '../' if ! echo "$2" | grep -Evq '\.\.|^/'; then echo "Bad file path: $2" exit 1 fi if [ "$4" == "--self" ]; then prev=$(cat '.git/previous_slug') [ -z "$prev" ] && prev="$1" name=$(echo -n "$1-"; tr -dc a-z .git/previous_hash if [ "$4" == "--self" ]; then echo "$name" >.git/previous_slug docker compose --project-name "$1" down docker compose --project-name "$prev" down fi