parent
0133a9f354
commit
dae1717da8
6 changed files with 713 additions and 0 deletions
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
## Refactor
|
## Refactor
|
||||||
|
|
||||||
|
* Make setting up a development environment 9001% easier by adding a Docker-based setup [#7870](https://github.com/diaspora/diaspora/pull/7870)
|
||||||
|
|
||||||
## Bug fixes
|
## Bug fixes
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
|
||||||
62
docker/develop/Dockerfile
Normal file
62
docker/develop/Dockerfile
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
FROM ruby:2.4.4-slim-stretch
|
||||||
|
|
||||||
|
RUN DEBIAN_FRONTEND=noninteractive \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install -y -qq \
|
||||||
|
build-essential \
|
||||||
|
cmake \
|
||||||
|
curl \
|
||||||
|
ghostscript \
|
||||||
|
git \
|
||||||
|
imagemagick \
|
||||||
|
libcurl4-openssl-dev \
|
||||||
|
libidn11-dev \
|
||||||
|
libmagickwand-dev \
|
||||||
|
libmariadbclient-dev \
|
||||||
|
libpq-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
libxslt-dev \
|
||||||
|
nodejs \
|
||||||
|
gosu \
|
||||||
|
&& \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
|
||||||
|
ARG DIA_UID
|
||||||
|
ARG DIA_GID
|
||||||
|
|
||||||
|
ENV HOME="/home/diaspora" \
|
||||||
|
GEM_HOME="/diaspora/vendor/bundle"
|
||||||
|
|
||||||
|
RUN addgroup --gid $DIA_GID diaspora && \
|
||||||
|
adduser \
|
||||||
|
--no-create-home \
|
||||||
|
--disabled-password \
|
||||||
|
--gecos "" \
|
||||||
|
--uid $DIA_UID \
|
||||||
|
--gid $DIA_GID \
|
||||||
|
diaspora \
|
||||||
|
&& \
|
||||||
|
mkdir $HOME /diaspora && \
|
||||||
|
chown -R diaspora:diaspora $HOME /diaspora
|
||||||
|
|
||||||
|
|
||||||
|
RUN curl -L \
|
||||||
|
https://cifiles.diasporafoundation.org/phantomjs-2.1.1-linux-x86_64.tar.bz2 \
|
||||||
|
| tar -xj -C /usr/local/bin \
|
||||||
|
--transform='s#.*/##' \
|
||||||
|
phantomjs-2.1.1-linux-x86_64/bin/phantomjs
|
||||||
|
|
||||||
|
|
||||||
|
ENV BUNDLE_PATH="$GEM_HOME" \
|
||||||
|
BUNDLE_BIN="$GEM_HOME/bin" \
|
||||||
|
BUNDLE_APP_CONFIG="/diaspora/.bundle"
|
||||||
|
ENV PATH $BUNDLE_BIN:$PATH
|
||||||
|
|
||||||
|
|
||||||
|
COPY docker-entrypoint.sh /entrypoint.sh
|
||||||
|
COPY docker-exec-entrypoint.sh /exec-entrypoint.sh
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
|
||||||
|
CMD ["./script/server"]
|
||||||
41
docker/develop/docker-compose.yml
Normal file
41
docker/develop/docker-compose.yml
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
version: "3.4"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgresql_data:
|
||||||
|
mysql_data:
|
||||||
|
dia_data_tmp:
|
||||||
|
dia_data_bundle:
|
||||||
|
|
||||||
|
services:
|
||||||
|
diaspora:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
args:
|
||||||
|
DIA_UID: "${DIASPORA_ROOT_UID}"
|
||||||
|
DIA_GID: "${DIASPORA_ROOT_GID}"
|
||||||
|
image: diaspora:dev-latest
|
||||||
|
volumes:
|
||||||
|
- "${DIASPORA_ROOT}:/diaspora:rw"
|
||||||
|
- dia_data_tmp:/diaspora/tmp
|
||||||
|
- dia_data_bundle:/diaspora/vendor/bundle
|
||||||
|
ports:
|
||||||
|
- 8080:3000
|
||||||
|
depends_on:
|
||||||
|
- "${DIASPORA_DOCKER_DB}"
|
||||||
|
|
||||||
|
postgresql:
|
||||||
|
image: postgres:10.3
|
||||||
|
ports:
|
||||||
|
- 55432:5432
|
||||||
|
volumes:
|
||||||
|
- postgresql_data:/var/lib/postgresql
|
||||||
|
|
||||||
|
mysql:
|
||||||
|
image: mariadb:10.2
|
||||||
|
ports:
|
||||||
|
- 53306:3306
|
||||||
|
volumes:
|
||||||
|
- mysql_data:/var/lib/mysql
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: mysql
|
||||||
47
docker/develop/docker-entrypoint.sh
Executable file
47
docker/develop/docker-entrypoint.sh
Executable file
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ----- Ensure correct ownership of /diaspora -----
|
||||||
|
dia_home=/home/diaspora
|
||||||
|
|
||||||
|
HOST_UID=$(stat -c %u /diaspora)
|
||||||
|
HOST_GID=$(stat -c %g /diaspora)
|
||||||
|
|
||||||
|
if ! getent group $HOST_GID >/dev/null; then
|
||||||
|
groupmod --gid $HOST_GID diaspora
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! getent passwd $HOST_UID >/dev/null; then
|
||||||
|
usermod --uid $HOST_UID --gid $HOST_GID diaspora
|
||||||
|
fi
|
||||||
|
|
||||||
|
chown -R $HOST_UID:$HOST_GID /home/diaspora
|
||||||
|
mkdir -p /diaspora/tmp/pids
|
||||||
|
chown $HOST_UID:$HOST_GID /diaspora/tmp /diaspora/tmp/pids /diaspora/vendor/bundle
|
||||||
|
|
||||||
|
# ----- Wait for DB ----
|
||||||
|
if [ -z $DIA_NODB ] || [ ! $DIA_NODB -eq 1 ]; then
|
||||||
|
if grep -qFx " <<: *postgresql" /diaspora/config/database.yml; then
|
||||||
|
host=postgresql
|
||||||
|
port=5432
|
||||||
|
else
|
||||||
|
host=mysql
|
||||||
|
port=3306
|
||||||
|
fi
|
||||||
|
|
||||||
|
c=0
|
||||||
|
|
||||||
|
trap '{ exit 1; }' INT
|
||||||
|
while ! (< /dev/tcp/${host}/${port}) 2>/dev/null; do
|
||||||
|
printf "\rWaiting for $host:$port to become ready ... ${c}s"
|
||||||
|
sleep 1
|
||||||
|
((c++))
|
||||||
|
done
|
||||||
|
trap - INT
|
||||||
|
if [ ! -z $c ]; then
|
||||||
|
printf "\rWaiting for $host:$port to become ready ... done (${c}s)\n"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd /diaspora
|
||||||
|
|
||||||
|
gosu $HOST_UID:$HOST_GID "$@"
|
||||||
7
docker/develop/docker-exec-entrypoint.sh
Executable file
7
docker/develop/docker-exec-entrypoint.sh
Executable file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
HOST_UID=$(stat -c %u /diaspora)
|
||||||
|
HOST_GID=$(stat -c %g /diaspora)
|
||||||
|
|
||||||
|
cd /diaspora
|
||||||
|
gosu $HOST_UID:$HOST_GID "$@"
|
||||||
554
script/diaspora-dev
Executable file
554
script/diaspora-dev
Executable file
|
|
@ -0,0 +1,554 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
|
# ----- Usage information -----
|
||||||
|
|
||||||
|
print_usage() {
|
||||||
|
# Print help for the first argument
|
||||||
|
case "$1" in
|
||||||
|
# management
|
||||||
|
setup)
|
||||||
|
echo; echo "Set up the environment for diaspora*"
|
||||||
|
echo; echo "This command is an alias for the execution of the commands"
|
||||||
|
echo "build, config, bundle, migrate and setup-tests, in that order."
|
||||||
|
print_usage_header "setup [options]" \
|
||||||
|
" --force Rebuild image without using Docker's cache;" \
|
||||||
|
" overwrite existing configuration" \
|
||||||
|
" --mysql Use MySQL as database (PostgreSQL is default)"
|
||||||
|
;;
|
||||||
|
start)
|
||||||
|
echo; echo "Start diaspora* (includes database)"
|
||||||
|
print_usage_header "start [options]" \
|
||||||
|
"-d Run in background"
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
echo; echo "Stop diaspora* (includes database)"
|
||||||
|
print_usage_header "stop"
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
echo; echo "Restart diaspora* using bin/eye (fast restart)"
|
||||||
|
print_usage_header "restart [options]" \
|
||||||
|
" --full Restart entire container"
|
||||||
|
;;
|
||||||
|
logs)
|
||||||
|
echo; echo "Follow log output of the running diaspora* instance"
|
||||||
|
print_usage_header "logs [options]" \
|
||||||
|
"-a, --all Follow all containers, including databases"
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
echo; echo "Show currently running diaspora* Docker container(s) and related image(s)"
|
||||||
|
print_usage_header "status"
|
||||||
|
;;
|
||||||
|
clean)
|
||||||
|
echo; echo "Delete diaspora* Docker containers and volumes (includes database)"
|
||||||
|
print_usage_header "clean [options]" \
|
||||||
|
" --config Delete configuration files as well"
|
||||||
|
;;
|
||||||
|
# test & development
|
||||||
|
cucumber)
|
||||||
|
echo; echo "Run cucumber tests"
|
||||||
|
echo; echo "The specified cucumber tests will be executed. If none are given, all"
|
||||||
|
echo "tests are executed."
|
||||||
|
print_usage_header "cucumber [TEST...]"
|
||||||
|
;;
|
||||||
|
jasmine)
|
||||||
|
echo; echo "Run all jasmine tests"
|
||||||
|
print_usage_header "jasmine"
|
||||||
|
;;
|
||||||
|
rspec)
|
||||||
|
echo; echo "Run rspec tests"
|
||||||
|
echo; echo "The specified rspec tests will be executed. If none are given, all"
|
||||||
|
echo "tests will be executed."
|
||||||
|
print_usage_header "rspec"
|
||||||
|
;;
|
||||||
|
pronto)
|
||||||
|
echo; echo "Run pronto checks"
|
||||||
|
print_usage_header "pronto"
|
||||||
|
;;
|
||||||
|
migrate)
|
||||||
|
echo; echo "Execute pending migrations (incl. database setup)"
|
||||||
|
print_usage_header "migrate [options]" \
|
||||||
|
"-d Run in background"
|
||||||
|
;;
|
||||||
|
# misc
|
||||||
|
build)
|
||||||
|
echo; echo "(Re-)Build Docker image diaspora:dev-latest"
|
||||||
|
print_usage_header "build [options]" \
|
||||||
|
" --no-cache Rebuild image without using Docker's cache"
|
||||||
|
;;
|
||||||
|
bundle)
|
||||||
|
echo; echo "Install gems using bundle into $DIASPORA_ROOT"
|
||||||
|
print_usage_header "bundle [options]" \
|
||||||
|
"-d Run in background"
|
||||||
|
;;
|
||||||
|
config)
|
||||||
|
echo; echo "Create basic configuration files for usage with PostgreSQL (default)"
|
||||||
|
print_usage_header "config [options]" \
|
||||||
|
" --mysql Use MySQL as database (PostgreSQL is default)" \
|
||||||
|
" --overwrite Overwrite existing configuration"
|
||||||
|
;;
|
||||||
|
exec)
|
||||||
|
echo; echo "Execute a command in a diaspora* Docker container"
|
||||||
|
echo; echo "If there is no running diaspora* Docker container, a new one is created"
|
||||||
|
echo "and started."
|
||||||
|
print_usage_header "exec [options] COMMAND [ARGS...]" \
|
||||||
|
"-d Run in background"
|
||||||
|
;;
|
||||||
|
help)
|
||||||
|
echo; echo "Show help on a command"
|
||||||
|
print_usage_header "help COMMAND"
|
||||||
|
;;
|
||||||
|
setup-tests)
|
||||||
|
echo; echo "Prepare cached files and database contents for tests"
|
||||||
|
print_usage_header "setup-tests"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_usage_full
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
print_usage_header() {
|
||||||
|
# Print formatted usage information for COMMAND
|
||||||
|
# Usage: print_usage_header COMMAND [FLAG_DESCRIPTION...]
|
||||||
|
echo; echo "Usage: $1"
|
||||||
|
shift
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
echo; echo "Options:"
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
echo " $1"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_usage_full() {
|
||||||
|
# Print overview of available commands
|
||||||
|
# $SCRIPT_NAME [help|-h|--help] leads here
|
||||||
|
echo; echo "Setup and run a diaspora instance for development in no time."
|
||||||
|
print_usage_header "$SCRIPT_NAME COMMAND"
|
||||||
|
echo
|
||||||
|
echo "Management Commands:"
|
||||||
|
echo " setup Prepare diaspora* to run for development"
|
||||||
|
echo " start Start diaspora*"
|
||||||
|
echo " stop Stop diaspora*"
|
||||||
|
echo " restart Restart of diaspora*"
|
||||||
|
echo " logs Follow log output of diaspora*"
|
||||||
|
echo " status Show current instance status of diaspora*"
|
||||||
|
echo " clean Reset diaspora* instance"
|
||||||
|
echo
|
||||||
|
echo "Test and Development Commands:"
|
||||||
|
echo " cucumber Run cucumber tests"
|
||||||
|
echo " jasmine Run jasmine tests"
|
||||||
|
echo " rspec Run rspec tests"
|
||||||
|
echo " pronto Run pronto checks"
|
||||||
|
echo " migrate Execute pending migrations"
|
||||||
|
echo
|
||||||
|
echo "Misc. Commands:"
|
||||||
|
echo " build Build basic diaspora* environment"
|
||||||
|
echo " bundle (Re-)Install gems for diaspora*"
|
||||||
|
echo " config Configure diaspora*"
|
||||||
|
echo " exec Execute a command in the run environment (advanced)"
|
||||||
|
echo " help Show help for commands"
|
||||||
|
echo " setup-tests Prepare diaspora* test environment"
|
||||||
|
echo
|
||||||
|
echo "Run '$SCRIPT_NAME help COMMAND' for more information on a command."
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ----- Helper functions -----
|
||||||
|
|
||||||
|
dia_fetch_upstream() {
|
||||||
|
# Add and fetch upstream develop branch
|
||||||
|
if ! git remote show | grep -q '^upstream$'; then
|
||||||
|
git remote add upstream https://github.com/diaspora/diaspora.git
|
||||||
|
fi
|
||||||
|
git fetch upstream develop
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_is_configured() {
|
||||||
|
# Check if config files exist
|
||||||
|
[ -f "$DIASPORA_CONFIG_DB" ] && [ -f "$DIASPORA_CONFIG_DIA" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
exit_if_unconfigured() {
|
||||||
|
# Exit if config does not seem complete
|
||||||
|
if ! dia_is_configured; then
|
||||||
|
echo "Fatal: Config files missing. Run the 'setup' or 'config' command to configure."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_is_running() {
|
||||||
|
# Check if diaspora container is running
|
||||||
|
docker-compose ps --services --filter status=running | grep -qx 'diaspora'
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_is_db_running() {
|
||||||
|
# Check if db container is running
|
||||||
|
docker-compose ps --services --filter status=running | grep -qx $DIASPORA_DOCKER_DB
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_get_db() {
|
||||||
|
# Get currently configured or assumed db type
|
||||||
|
grep -q '^ <<: \*mysql' "$DIASPORA_CONFIG_DB" 2>/dev/null && echo mysql || echo postgresql
|
||||||
|
}
|
||||||
|
|
||||||
|
# ----- Command functions -----
|
||||||
|
|
||||||
|
dia_build() {
|
||||||
|
if [ $# -gt 0 ] && [ "$1" == "--no-cache" ]; then nocache="--no-cache"; fi
|
||||||
|
# Build the diaspora Docker container (diaspora:dev-latest)
|
||||||
|
docker-compose build $nocache diaspora
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_bundle() {
|
||||||
|
# Run bundle in order to install all gems into $DIASPORA_ROOT
|
||||||
|
# Do not start database, not required and sometimes not yet configured
|
||||||
|
echo "Installing gems via bundler ..."
|
||||||
|
docker-compose run \
|
||||||
|
--rm \
|
||||||
|
--no-deps $1 \
|
||||||
|
-e DIA_NODB=1 \
|
||||||
|
diaspora \
|
||||||
|
/bin/sh -c "gem install bundler && script/configure_bundler && bin/bundle install --full-index"
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_clean() {
|
||||||
|
# Delete all containers and volumes
|
||||||
|
for i in "$@"; do
|
||||||
|
case "$i" in
|
||||||
|
--config)
|
||||||
|
dia_config_delete=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
docker-compose down -v
|
||||||
|
if [ ! -z $dia_config_delete ]; then
|
||||||
|
rm "$DIASPORA_CONFIG_DIA" "$DIASPORA_CONFIG_DB"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_config() {
|
||||||
|
# Create rudimentary configuration files if they don't exist
|
||||||
|
echo "Configuring diaspora ..."
|
||||||
|
for i in "$@"; do
|
||||||
|
case "$i" in
|
||||||
|
--mysql)
|
||||||
|
dia_config_mysql=1
|
||||||
|
;;
|
||||||
|
--overwrite)
|
||||||
|
dia_config_delete=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
[ ! -f "$DIASPORA_ROOT"/public/source.tar.gz ] && touch "$DIASPORA_ROOT"/public/source.tar.gz
|
||||||
|
# Delete existing files if requested
|
||||||
|
if [ ! -z $dia_config_delete ]; then
|
||||||
|
rm "$DIASPORA_CONFIG_DIA" "$DIASPORA_CONFIG_DB"
|
||||||
|
fi
|
||||||
|
# Create new diaspora.yml if none exists
|
||||||
|
if [ ! -f "$DIASPORA_CONFIG_DIA" ]; then
|
||||||
|
cp "$DIASPORA_CONFIG_DIA".example "$DIASPORA_CONFIG_DIA"
|
||||||
|
fi
|
||||||
|
# Select database type
|
||||||
|
if [ -z $dia_config_mysql ]; then
|
||||||
|
export DIASPORA_DOCKER_DB=postgresql
|
||||||
|
else
|
||||||
|
export DIASPORA_DOCKER_DB=mysql
|
||||||
|
fi
|
||||||
|
# Create new database.yml if none exists
|
||||||
|
if [ ! -f "$DIASPORA_CONFIG_DB" ]; then
|
||||||
|
sed -E '
|
||||||
|
/^postgresql/,/^[[:alpha:]]/ {
|
||||||
|
s/host:.*/host: postgresql/
|
||||||
|
s/password.*/password: postgres/
|
||||||
|
}
|
||||||
|
/^mysql/,/^[[:alpha:]]/ {
|
||||||
|
s/host:.*/host: mysql/
|
||||||
|
s/password:.*/password: mysql/
|
||||||
|
}
|
||||||
|
/^common/,/^[[:alpha:]]/ {
|
||||||
|
s/^(\s+<<:).*/\1 *'$DIASPORA_DOCKER_DB'/
|
||||||
|
}' "$DIASPORA_CONFIG_DB".example > "$DIASPORA_CONFIG_DB"
|
||||||
|
fi
|
||||||
|
# Update exisiting database.yml to reflect correct database type
|
||||||
|
if [ "$(dia_get_db)" != "$DIASPORA_DOCKER_DB" ]; then
|
||||||
|
sed -E -i'' '
|
||||||
|
/^common/,/^[[:alpha:]]/ {
|
||||||
|
s/^(\s+<<:).*/\1 *'$DIASPORA_DOCKER_DB'/
|
||||||
|
}' "$DIASPORA_CONFIG_DB"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_cucumber() {
|
||||||
|
# Run cucumber tests
|
||||||
|
if [ "$1" == "-d" ]; then detach="-d"; shift; fi
|
||||||
|
docker-compose run \
|
||||||
|
--rm $detach \
|
||||||
|
diaspora \
|
||||||
|
bin/cucumber "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_exec() {
|
||||||
|
# Run a custom command inside a running diaspora container. Start a new one if necessary.
|
||||||
|
exit_if_unconfigured
|
||||||
|
if [ "$1" == "-d" ]; then detach="-d"; shift; fi
|
||||||
|
if dia_is_running; then
|
||||||
|
# Use a running container
|
||||||
|
docker-compose exec $detach diaspora /exec-entrypoint.sh "$@"
|
||||||
|
else
|
||||||
|
if ! dia_is_db_running; then not_running=1; fi
|
||||||
|
# Start a new container
|
||||||
|
echo "No running instance found, starting new one for command execution ..."
|
||||||
|
docker-compose run --rm $detach --service-ports diaspora "$@"
|
||||||
|
if [ ! -z $not_running ]; then
|
||||||
|
docker-compose stop $DIASPORA_DOCKER_DB
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_jasmine() {
|
||||||
|
# Run jasmine tests
|
||||||
|
docker-compose run \
|
||||||
|
--rm $1 \
|
||||||
|
-e RAILS_ENV=test \
|
||||||
|
diaspora \
|
||||||
|
bin/rake jasmine:ci
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_logs() {
|
||||||
|
# Show logs of running diaspora* instance
|
||||||
|
dia_follow=diaspora
|
||||||
|
for i in "$@"; do
|
||||||
|
case "$i" in
|
||||||
|
-a|--all)
|
||||||
|
dia_follow=""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
docker-compose logs -f --tail=100 $dia_follow
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_migrate() {
|
||||||
|
# Run migrations if configured
|
||||||
|
echo "Creating and/or migrating database ..."
|
||||||
|
exit_if_unconfigured
|
||||||
|
docker-compose run \
|
||||||
|
--rm $1 \
|
||||||
|
diaspora \
|
||||||
|
bin/rake db:create db:migrate
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_pronto() {
|
||||||
|
# Run pronto checks
|
||||||
|
exit_if_unconfigured
|
||||||
|
cd "$DIASPORA_ROOT"
|
||||||
|
if git diff-index --quiet HEAD --; then
|
||||||
|
dia_fetch_upstream
|
||||||
|
fi
|
||||||
|
cd - >/dev/null
|
||||||
|
docker-compose run \
|
||||||
|
--rm \
|
||||||
|
--no-deps \
|
||||||
|
diaspora \
|
||||||
|
bin/pronto run --unstaged -c upstream/develop
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_restart() {
|
||||||
|
# Restart diaspora inside container if already running; start new container otherwise
|
||||||
|
for i in "$@"; do
|
||||||
|
case "$i" in
|
||||||
|
--full)
|
||||||
|
dia_restart_full=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
if dia_is_running; then
|
||||||
|
if [ -z $dia_restart_full ]; then
|
||||||
|
docker-compose exec \
|
||||||
|
diaspora \
|
||||||
|
bin/eye restart diaspora
|
||||||
|
else
|
||||||
|
docker-compose restart
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dia_start
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_rspec() {
|
||||||
|
# Run rspec tests
|
||||||
|
exit_if_unconfigured
|
||||||
|
assets=""
|
||||||
|
# Assumption: If (and only if) the tested file is not available, assets need be regenerated
|
||||||
|
[ -f "$DIASPORA_ROOT"/public/404.html ] && assets="assets:generate_error_pages"
|
||||||
|
# Prepare database (and assets if necessary)
|
||||||
|
docker-compose run \
|
||||||
|
--rm \
|
||||||
|
-e RAILS_ENV=test \
|
||||||
|
diaspora \
|
||||||
|
bin/rake db:create db:migrate $assets
|
||||||
|
# Run tests
|
||||||
|
docker-compose run \
|
||||||
|
--rm \
|
||||||
|
diaspora \
|
||||||
|
bin/rspec "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_setup() {
|
||||||
|
for i in "$@"; do
|
||||||
|
case "$i" in
|
||||||
|
--force)
|
||||||
|
build="$build --no-cache"
|
||||||
|
config="$config --overwrite"
|
||||||
|
;;
|
||||||
|
--mysql)
|
||||||
|
config="$config --mysql"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# Prepare the entire environment for development
|
||||||
|
(
|
||||||
|
set -e
|
||||||
|
dia_build $build
|
||||||
|
dia_config $config
|
||||||
|
dia_bundle $bundle
|
||||||
|
dia_migrate $migrate
|
||||||
|
dia_setup_tests $setup_tests
|
||||||
|
)
|
||||||
|
# stop db afterwards as it is not needed while dia is not running
|
||||||
|
docker-compose stop $DIASPORA_DOCKER_DB
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_setup_tests() {
|
||||||
|
# Prepare all possible tests
|
||||||
|
# stop db if it was not running before
|
||||||
|
echo "Setting up environment for tests ..."
|
||||||
|
if ! dia_is_db_running; then stopdb="docker-compose stop $DIASPORA_DOCKER_DB"; fi
|
||||||
|
docker-compose run \
|
||||||
|
--rm \
|
||||||
|
-e RAILS_ENV=test \
|
||||||
|
diaspora \
|
||||||
|
bin/rake db:create db:migrate tests:generate_fixtures assets:generate_error_pages
|
||||||
|
$stopdb
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_start() {
|
||||||
|
# Start all containers if config appears to exist
|
||||||
|
exit_if_unconfigured
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
options=--abort-on-container-exit
|
||||||
|
else
|
||||||
|
options=$1
|
||||||
|
fi
|
||||||
|
docker-compose up $options diaspora
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_status() {
|
||||||
|
# Print running containers and current images
|
||||||
|
docker-compose ps
|
||||||
|
echo
|
||||||
|
docker-compose images
|
||||||
|
}
|
||||||
|
|
||||||
|
dia_stop() {
|
||||||
|
# Stop all containers
|
||||||
|
docker-compose stop
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ----- Variables -----
|
||||||
|
# Symlinks are treated as files
|
||||||
|
export SCRIPT_NAME=$(basename "${BASH_SOURCE[0]}")
|
||||||
|
export SCRIPT_ROOT=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
|
||||||
|
|
||||||
|
# Assumption: The script is in the "script" subfolder of the diaspora root folder
|
||||||
|
export DIASPORA_ROOT=$(dirname "$SCRIPT_ROOT")
|
||||||
|
export DIASPORA_ROOT_UID=1001
|
||||||
|
export DIASPORA_ROOT_GID=1001
|
||||||
|
export DIASPORA_CONFIG_DIA=$DIASPORA_ROOT/config/diaspora.yml
|
||||||
|
export DIASPORA_CONFIG_DB=$DIASPORA_ROOT/config/database.yml
|
||||||
|
export DIASPORA_DOCKER_DB=$(dia_get_db)
|
||||||
|
|
||||||
|
export COMPOSE_FILE=$DIASPORA_ROOT/docker/develop/docker-compose.yml
|
||||||
|
export COMPOSE_PROJECT_NAME=diasporadev
|
||||||
|
|
||||||
|
# ----- Arg parsing -----
|
||||||
|
if [ $# -lt 1 ]; then
|
||||||
|
print_usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dia_command=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
case "$dia_command" in
|
||||||
|
--help|-h)
|
||||||
|
print_usage_full
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
help)
|
||||||
|
if [ $# -lt 1 ]; then
|
||||||
|
print_usage_full
|
||||||
|
else
|
||||||
|
print_usage "$1"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
build)
|
||||||
|
dia_build "$@"
|
||||||
|
;;
|
||||||
|
bundle)
|
||||||
|
dia_bundle "$1"
|
||||||
|
;;
|
||||||
|
clean)
|
||||||
|
dia_clean "$@"
|
||||||
|
;;
|
||||||
|
config)
|
||||||
|
dia_config "$@"
|
||||||
|
;;
|
||||||
|
cucumber)
|
||||||
|
dia_cucumber "$@"
|
||||||
|
;;
|
||||||
|
exec)
|
||||||
|
dia_exec "$@"
|
||||||
|
;;
|
||||||
|
jasmine)
|
||||||
|
dia_jasmine
|
||||||
|
;;
|
||||||
|
logs)
|
||||||
|
dia_logs "$@"
|
||||||
|
;;
|
||||||
|
migrate)
|
||||||
|
dia_migrate "$@"
|
||||||
|
;;
|
||||||
|
pronto)
|
||||||
|
dia_pronto
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
dia_restart "$@"
|
||||||
|
;;
|
||||||
|
rspec)
|
||||||
|
dia_rspec "$@"
|
||||||
|
;;
|
||||||
|
setup)
|
||||||
|
dia_setup "$@"
|
||||||
|
;;
|
||||||
|
setup-tests)
|
||||||
|
dia_setup_tests
|
||||||
|
;;
|
||||||
|
start)
|
||||||
|
dia_start "$1"
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
dia_status
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
dia_stop
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Loading…
Reference in a new issue