Moved development stuff to docker-compose
This commit is contained in:
parent
00bf8501dd
commit
43e26191cc
5 changed files with 112 additions and 118 deletions
158
fejctl
158
fejctl
|
|
@ -2,121 +2,52 @@
|
|||
|
||||
image='chewingbever/fej'
|
||||
|
||||
# Creates the needed images
|
||||
# Small wrapper around the docker-compose command
|
||||
#
|
||||
# $1: wether to build the debug or the release image (default debug)
|
||||
function create_images() {
|
||||
# First, we build the builder
|
||||
DOCKER_BUILDKIT=1 docker build \
|
||||
-f docker/Dockerfile.builder \
|
||||
-t "$image-builder:latest" . || {
|
||||
>&2 echo "Failed to build builder.";
|
||||
exit 1;
|
||||
}
|
||||
# Flags:
|
||||
# -b: build the builder
|
||||
# -r: use the release image instead
|
||||
function dc() {
|
||||
while getopts ":br" c; do
|
||||
case $c in
|
||||
b ) build_builder=1 ;;
|
||||
r ) release=1 ;;
|
||||
esac
|
||||
done
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [[ "$1" = "rel" ]]; then
|
||||
if [[ "$build_builder" -eq 1 ]]; then
|
||||
# We always rebuild the builder before we run any compose command
|
||||
DOCKER_BUILDKIT=1 docker build \
|
||||
-t "$image:latest" \
|
||||
-f docker/Dockerfile.rel . || {
|
||||
>&2 echo "Failed to build release image.";
|
||||
-f docker/Dockerfile.builder \
|
||||
-t "$image-builder:latest" . || {
|
||||
>&2 echo "Failed to build builder.";
|
||||
exit 1;
|
||||
}
|
||||
fi
|
||||
|
||||
if [[ "$release" -eq 1 ]]; then
|
||||
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker-compose \
|
||||
--file docker/docker-compose.yml \
|
||||
--project-name fej \
|
||||
"$@"
|
||||
|
||||
else
|
||||
# Then, we create the debug image
|
||||
DOCKER_BUILDKIT=1 docker build \
|
||||
-t "$image:dev" \
|
||||
-f docker/Dockerfile.dev . || {
|
||||
>&2 echo "Failed to build debug image.";
|
||||
exit 1;
|
||||
}
|
||||
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker-compose \
|
||||
--file docker/docker-compose.yml \
|
||||
--file docker/docker-compose.dev.yml \
|
||||
--project-name fej-dev \
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Execute the debug image (must be built first)
|
||||
#
|
||||
# $@: the arguments to pass to the image (passed as arguments to cargo)
|
||||
function run_image() {
|
||||
docker volume create fej_build-cache > /dev/null
|
||||
docker volume create fej_registry-cache > /dev/null
|
||||
docker volume create fej_db-data > /dev/null
|
||||
|
||||
# Run the database image
|
||||
docker run --rm \
|
||||
--detach \
|
||||
--name fej_db \
|
||||
--network fej \
|
||||
-p 5432:5432 \
|
||||
-e 'POSTGRES_DB=fej' \
|
||||
-e 'POSTGRES_USER=fej' \
|
||||
-e 'POSTGRES_PASSWORD=fej' \
|
||||
-v 'fej_db-data:/var/lib/postgresql/data' \
|
||||
postgres:13-alpine
|
||||
|
||||
# Run the binary image
|
||||
docker run \
|
||||
--detach \
|
||||
--rm \
|
||||
--interactive \
|
||||
--tty \
|
||||
--publish 8000:8000 \
|
||||
--name fej \
|
||||
--env-file .env.container \
|
||||
--network fej \
|
||||
-v 'fej_build-cache:/app/target' \
|
||||
-v 'fej_registry-cache:/app/.cargo/registry' \
|
||||
"$image:dev" "$@"
|
||||
}
|
||||
|
||||
# Attach to the fej container
|
||||
function logs() {
|
||||
docker logs -f fej
|
||||
}
|
||||
|
||||
# Builds the given binary
|
||||
#
|
||||
# $1: the binary to build
|
||||
function build() {
|
||||
create_images
|
||||
run_image build --bin "$1"
|
||||
logs
|
||||
}
|
||||
|
||||
# Runs the given binary
|
||||
#
|
||||
# $1: the binary to run
|
||||
function run() {
|
||||
create_images
|
||||
run_image run --bin "$1"
|
||||
logs
|
||||
}
|
||||
|
||||
# Runs the tests
|
||||
function tests() {
|
||||
create_images
|
||||
run_image test --no-fail-fast
|
||||
logs
|
||||
}
|
||||
|
||||
# Stops both containers
|
||||
function stop() {
|
||||
docker stop fej_db
|
||||
docker stop -t 0 fej
|
||||
}
|
||||
|
||||
function run_release() {
|
||||
docker-compose \
|
||||
--file docker/docker-compose.yml \
|
||||
--project-name fej-release \
|
||||
up \
|
||||
--detach
|
||||
}
|
||||
|
||||
function stop_release() {
|
||||
docker-compose \
|
||||
--file docker/docker-compose.yml \
|
||||
--project-name fej-release \
|
||||
down
|
||||
function dcr() {
|
||||
CMD="$@" dc -b -- up \
|
||||
--build \
|
||||
--detach
|
||||
}
|
||||
|
||||
# Tags & pushes the release version to Docker Hub
|
||||
|
|
@ -128,7 +59,8 @@ function publish() {
|
|||
exit 2
|
||||
fi
|
||||
|
||||
create_images rel
|
||||
# Build the release images
|
||||
dc -br build
|
||||
|
||||
patch_version=`grep -Po '(?<=version = ").*(?=")' Cargo.toml | head -n1`
|
||||
major_version=`echo "$patch_version" | sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+)/\1/'`
|
||||
|
|
@ -159,26 +91,26 @@ function main() {
|
|||
|
||||
case $cmd in
|
||||
# Building
|
||||
b | build ) build "$bin" ;;
|
||||
br | build-release ) create_images rel ;;
|
||||
b | build ) dcr build --bin "$bin" && dc -- logs -f app ;;
|
||||
br | build-release ) dc -br build ;;
|
||||
|
||||
# Running
|
||||
r | run ) run "$bin" ;;
|
||||
rr | run-release ) run_release ;;
|
||||
s | stop ) stop ;;
|
||||
sr | stop-release ) stop_release ;;
|
||||
r | run ) dcr run --bin "$bin" && dc -- logs -f app ;;
|
||||
rr | run-release ) dc -br -- run --build --detach ;;
|
||||
s | stop ) dc down ;;
|
||||
sr | stop-release ) dc -r stop ;;
|
||||
|
||||
# Ease of life
|
||||
psql ) docker exec -it fej_db psql -U fej -d fej ;;
|
||||
sh ) docker exec -it fej sh ;;
|
||||
psql ) dc -- exec db psql -U fej -d fej ;;
|
||||
sh ) dc -- exec app sh ;;
|
||||
|
||||
# Misc
|
||||
docs ) cargo doc --no-deps ;;
|
||||
format ) cargo fmt ;;
|
||||
l | logs ) logs ;;
|
||||
l | logs ) dc -- logs -f app ;;
|
||||
lint ) cargo fmt -- --check ;;
|
||||
p | push | publish ) publish ;;
|
||||
t | test ) tests ;;
|
||||
t | test ) dc test --no-fail-fast ;;
|
||||
* ) >&2 echo "Invalid command."; exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue