#!/usr/bin/env bash # This is a shim for developing and dogfooding Coder so that we don't # overwrite an existing session in ~/.config/coderv2 set -euo pipefail SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}") # shellcheck disable=SC1091,SC1090 source "${SCRIPT_DIR}/lib.sh" GOOS="$(go env GOOS)" GOARCH="$(go env GOARCH)" BINARY_TYPE=coder-slim if [[ $1 == server ]]; then BINARY_TYPE=coder fi RELATIVE_BINARY_PATH="build/${BINARY_TYPE}_${GOOS}_${GOARCH}" # To preserve the CWD when running the binary, we need to use pushd and popd to # get absolute paths to everything. pushd "$PROJECT_ROOT" mkdir -p ./.coderv2 CODER_DEV_BIN="$(realpath "$RELATIVE_BINARY_PATH")" CODER_DEV_DIR="$(realpath ./.coderv2)" popd case $BINARY_TYPE in coder-slim) # Ensure the coder slim binary is always up-to-date with local # changes, this simplifies usage of this script for development. make -j "${RELATIVE_BINARY_PATH}" ;; coder) if [[ ! -x "${CODER_DEV_BIN}" ]]; then # A feature requiring the full binary was requested and the # binary is missing, normally it's built by `develop.sh`, but # it's an expensive operation, so we require manual action here. echo "Running \"coder $1\" requires the full binary, please run \"develop.sh\" first or build the binary manually:" 1>&2 echo " make $RELATIVE_BINARY_PATH" 1>&2 exit 1 fi ;; *) echo "Unknown binary type: $BINARY_TYPE" exit 1 ;; esac exec "${CODER_DEV_BIN}" --global-config "${CODER_DEV_DIR}" "$@"