2020-07-10 15:14:30 +00:00
#!/usr/bin/make -f
2020-09-25 20:36:46 +00:00
SHELL = bash
2020-07-10 15:14:30 +00:00
2020-09-25 20:36:46 +00:00
# Main environment configuration
2020-07-10 15:14:30 +00:00
i n c l u d e . e n v
2020-09-25 20:36:46 +00:00
2021-02-26 15:06:36 +00:00
# Optional variables with secrets
2020-07-10 15:14:30 +00:00
- i n c l u d e . s e c r e t s
2020-09-25 20:36:46 +00:00
# help target
2020-07-10 15:14:30 +00:00
i n c l u d e h e l p . m k
2022-12-21 12:34:14 +00:00
# update FrostFS global config targets
i n c l u d e f r o s t f s _ c o n f i g . m k
2021-04-16 10:57:21 +00:00
2020-09-25 20:36:46 +00:00
# Targets to get required artifacts and external resources for each service
2020-07-10 15:14:30 +00:00
i n c l u d e s e r v i c e s / * / a r t i f a c t s . m k
2020-10-23 15:59:21 +00:00
# Targets helpful to prepare service environment
i n c l u d e s e r v i c e s / * / p r e p a r e . m k
2020-09-25 20:36:46 +00:00
# List of services to run
2022-10-21 22:09:27 +00:00
START_SVCS = $( shell cat .services | grep -v '#' )
START_BASIC = $( shell cat .basic_services | grep -ve '#' )
START_BOOTSTRAP = $( shell cat .bootstrap_services | grep -v '#' )
STOP_SVCS = $( shell tac .services | grep -v '#' )
STOP_BASIC = $( shell tac .basic_services | grep -v '#' )
STOP_BOOTSTRAP = $( shell tac .bootstrap_services | grep -v '#' )
2020-07-10 15:14:30 +00:00
2022-10-14 09:39:30 +00:00
# Enabled services dirs
ENABLED_SVCS_DIRS = $( shell echo " ${ START_BOOTSTRAP } ${ START_BASIC } ${ START_SVCS } " | sed 's|[^ ]* *|./services/&|g' )
# Services that require artifacts
GET_SVCS = $( shell grep -Rl "get.*:" ./services/* | sort -u | grep artifacts.mk | xargs -I { } dirname { } | xargs basename -a)
# Services that require pulling images
PULL_SVCS = $( shell find ${ ENABLED_SVCS_DIRS } -type f -name 'docker-compose.yml' | sort -u | xargs -I { } dirname { } | xargs basename -a)
2020-09-25 20:36:46 +00:00
# List of hosts available in devenv
2020-07-10 15:14:30 +00:00
HOSTS_LINES = $( shell grep -Rl IPV4_PREFIX ./services/* | grep .hosts)
2021-04-29 14:34:23 +00:00
# Paths to protocol.privnet.yml
MORPH_CHAIN_PROTOCOL = './services/morph_chain/protocol.privnet.yml'
# List of grepped environment variables from *.env
2022-07-07 13:05:26 +00:00
GREP_DOTENV = $( shell find . -name '*.env' -exec grep -rhv -e '^\#' -e '^$$' { } + | sort -u )
2020-09-22 13:08:06 +00:00
2020-07-10 15:14:30 +00:00
# Pull all required Docker images
.PHONY : pull
pull :
$( foreach SVC, $( PULL_SVCS) , $( shell cd services/$( SVC) && docker-compose pull) )
@:
2022-10-12 14:04:37 +00:00
# Get all services artifacts
2020-07-10 15:14:30 +00:00
.PHONY : get
get : $( foreach SVC , $ ( GET_SVCS ) , get .$ ( SVC ) )
@:
2020-09-25 20:36:46 +00:00
# Start environment
2020-07-10 15:14:30 +00:00
.PHONY : up
2022-02-04 15:27:49 +00:00
up : up /basic
2021-06-29 19:53:09 +00:00
@$( foreach SVC, $( START_SVCS) , $( shell docker-compose -f services/$( SVC) /docker-compose.yml up -d) )
2022-12-21 12:34:14 +00:00
@echo "Full FrostFS Developer Environment is ready"
2022-02-04 15:27:49 +00:00
2022-12-21 12:34:14 +00:00
# Build up FrostFS
2022-02-04 15:27:49 +00:00
.PHONY : up /basic
2022-09-09 14:39:24 +00:00
up/basic : up /bootstrap
2022-02-04 15:27:49 +00:00
@$( foreach SVC, $( START_BASIC) , $( shell docker-compose -f services/$( SVC) /docker-compose.yml up -d) )
2021-06-29 19:53:09 +00:00
@./bin/tick.sh
2021-11-23 06:44:19 +00:00
@./bin/config.sh string SystemDNS container
2022-12-21 12:34:14 +00:00
@echo "Basic FrostFS Developer Environment is ready"
2022-02-04 15:27:49 +00:00
2022-09-09 14:39:24 +00:00
# Start bootstrap services
.PHONY : up /bootstrap
up/bootstrap : get vendor /hosts
@$( foreach SVC, $( START_BOOTSTRAP) , $( shell docker-compose -f services/$( SVC) /docker-compose.yml up -d) )
2022-11-03 12:13:05 +00:00
@source ./bin/helper.sh
2022-12-21 12:34:14 +00:00
@./vendor/frostfs-adm --config frostfs-adm.yml morph init --alphabet-wallets ./services/ir --contracts vendor/contracts || die "Failed to initialize Alphabet wallets"
@for f in ./services/storage/wallet*.json; do echo " Transfer GAS to wallet $$ {f} " && ./vendor/frostfs-adm -c frostfs-adm.yml morph refill-gas --storage-wallet $$ { f} --gas 10.0 --alphabet-wallets services/ir || die "Failed to transfer GAS to alphabet wallets" ; done
@echo "FrostFS sidechain environment is deployed"
2022-09-08 15:04:44 +00:00
2022-02-04 15:27:49 +00:00
# Build up certain service
.PHONY : up /%
up/% : get vendor /hosts
@docker-compose -f services/$* /docker-compose.yml up -d
@echo " Developer Environment for $* service is ready "
2020-07-10 15:14:30 +00:00
2020-09-25 20:36:46 +00:00
# Stop environment
2020-07-10 15:14:30 +00:00
.PHONY : down
2022-09-09 14:39:24 +00:00
down : down /add down /basic down /bootstrap
2022-12-21 12:34:14 +00:00
@echo "Full FrostFS Developer Environment is down"
2022-02-04 15:27:49 +00:00
.PHONY : down /add
down/add :
2020-07-10 15:14:30 +00:00
$( foreach SVC, $( STOP_SVCS) , $( shell docker-compose -f services/$( SVC) /docker-compose.yml down) )
2022-02-04 15:27:49 +00:00
# Stop basic environment
.PHONY : down /basic
down/basic :
$( foreach SVC, $( STOP_BASIC) , $( shell docker-compose -f services/$( SVC) /docker-compose.yml down) )
2022-09-09 14:39:24 +00:00
# Stop bootstrap services
.PHONY : down /bootstrap
down/bootstrap :
$( foreach SVC, $( STOP_BOOTSTRAP) , $( shell docker-compose -f services/$( SVC) /docker-compose.yml down) )
2022-09-08 15:04:44 +00:00
2022-02-04 15:27:49 +00:00
# Stop certain service
.PHONY : down /%
down/% :
@docker-compose -f services/$* /docker-compose.yml down
2022-10-12 14:04:37 +00:00
# Generate changes for /etc/hosts
2020-09-24 09:34:19 +00:00
.PHONY : vendor /hosts
2021-01-13 10:25:37 +00:00
.ONESHELL :
2020-09-24 09:34:19 +00:00
vendor/hosts :
2021-01-13 10:25:37 +00:00
@for file in $( HOSTS_LINES)
do
while read h
do
echo $$ { h} | \
sed 's|IPV4_PREFIX|$(IPV4_PREFIX)|g' | \
sed 's|LOCAL_DOMAIN|$(LOCAL_DOMAIN)|g'
done < $$ { file} ;
2020-09-24 09:34:19 +00:00
done > $@
2022-10-12 14:04:37 +00:00
# Generate and display changes for /etc/hosts
2020-09-24 09:34:19 +00:00
.PHONY : hosts
hosts : vendor /hosts
@cat vendor/hosts
2020-12-01 11:50:23 +00:00
2021-02-26 15:06:36 +00:00
# Clean-up the environment
2020-12-01 11:50:23 +00:00
.PHONY : clean
2021-01-13 10:28:19 +00:00
.ONESHELL :
2020-12-01 11:50:23 +00:00
clean :
2022-02-09 16:58:35 +00:00
@rm -rf vendor/* services/storage/s04tls.* services/nats/*.pem
2022-04-07 12:33:53 +00:00
@> .int_test.env
@for svc in $( PULL_SVCS)
2021-01-13 10:28:19 +00:00
do
vols = ` docker-compose -f services/$$ { svc} /docker-compose.yml config --volumes`
if [ [ ! -z " $$ {vols} " ] ] ; then
for vol in $$ { vols} ; do
2022-09-12 15:42:50 +00:00
docker volume rm -f " $$ {svc}_ $$ {vol} " 2> /dev/null
2021-01-13 10:28:19 +00:00
done
fi
done
2021-04-29 14:34:23 +00:00
# Generate environment
.PHONY : env
env :
@$( foreach envvar,$( GREP_DOTENV) ,echo $( envvar) ; )
@echo MORPH_BLOCK_TIME = $( shell grep 'SecondsPerBlock' $( MORPH_CHAIN_PROTOCOL) | awk '{print $$2}' ) s
2021-06-30 10:49:24 +00:00
@echo MORPH_MAGIC = $( shell grep 'Magic' $( MORPH_CHAIN_PROTOCOL) | awk '{print $$2}' )
2021-07-22 17:15:59 +00:00
# Restart storage nodes with clean volumes
.PHONY : restart .storage -clean
restart.storage-clean :
@docker-compose -f ./services/storage/docker-compose.yml down
@$( foreach vol, \
$( shell docker-compose -f services/storage/docker-compose.yml config --volumes) ,\
docker volume rm storage_$( vol) ; )
@docker-compose -f ./services/storage/docker-compose.yml up -d