Ctrl K
ComunidadGuías…

Makefile

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot

.EXPORT_ALL_VARIABLES:

AWS_PROFILE = clearflask

help:
	@echo "\tmake run-dev-frontend\n\tmake build-no-test && make run-dev\n\tmake build && make publish-jar && make prod-rolling-restart"

build:
	mvn install

build-no-test:
	mvn install -DskipTests

build-no-it:
	mvn install -DskipITs

build-server-no-test:
	cd clearflask-server && mvn install -DskipTests

frontend-start:
	cd clearflask-frontend && node/node_modules/pnpm/bin/pnpm.cjs start

connect-start:
	cd clearflask-frontend && node/node_modules/pnpm/bin/pnpm.cjs run start:connect

clearflask-release/target/run-docker-compose-local/docker-compose.yml: get-project-version
	test -f clearflask-release/target/clearflask-release-$(PROJECT_VERSION)-docker-compose-local.tar.gz
	rm -fr clearflask-release/target/run-docker-compose-local
	mkdir clearflask-release/target/run-docker-compose-local
	tar -xzf clearflask-release/target/clearflask-release-$(PROJECT_VERSION)-docker-compose-local.tar.gz -C clearflask-release/target/run-docker-compose-local
	cp -n clearflask-release/target/run-docker-compose-local/server/config-local-template.cfg ./config-local.cfg \
		&& echo IMPORTANT: Created config-local.cfg please adjust settings for local deployment || true
	cp ./config-local.cfg clearflask-release/target/run-docker-compose-local/server/config-local.cfg
	cp -n clearflask-release/target/run-docker-compose-local/connect/connect.config.local-template.json ./connect.config-local.json \
		&& echo IMPORTANT: Created connect.config.json please adjust settings for local deployment || true
	cp ./connect.config-local.json clearflask-release/target/run-docker-compose-local/connect/connect.config.json
local-up: clearflask-release/target/run-docker-compose-local/docker-compose.yml
	docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch up -d
	docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch logs -f
local-down: clearflask-release/target/run-docker-compose-local/docker-compose.yml
	docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch down -t 0
	docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch rm
local-full-up: clearflask-release/target/run-docker-compose-local/docker-compose.yml
	docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch,with-kaui,with-kabana up -d
	docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch,with-kaui,with-kabana logs -f
local-full-down: clearflask-release/target/run-docker-compose-local/docker-compose.yml
	docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch,with-kaui,with-kabana down -t 0
	docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch,with-kaui,with-kabana rm

clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml: get-project-version
	test -f clearflask-release/target/clearflask-release-$(PROJECT_VERSION)-docker-compose-self-host.tar.gz
	rm -fr clearflask-release/target/run-docker-compose-selfhost
	mkdir clearflask-release/target/run-docker-compose-selfhost
	tar -xzf clearflask-release/target/clearflask-release-$(PROJECT_VERSION)-docker-compose-self-host.tar.gz -C clearflask-release/target/run-docker-compose-selfhost
	sed -i'.original' 's,ghcr.io/clearflask,clearflask,g' clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml
	test -f clearflask-release/target/run-docker-compose-selfhost/.env || printf 'CLEARFLASK_CONNECT_TOKEN=%s\n' "$$(openssl rand -hex 16)" > clearflask-release/target/run-docker-compose-selfhost/.env
selfhost-up: clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml
	docker-compose --env-file clearflask-release/target/run-docker-compose-selfhost/.env -f clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml --profile with-deps up -d
	docker-compose --env-file clearflask-release/target/run-docker-compose-selfhost/.env -f clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml --profile with-deps logs -f
selfhost-down: clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml
	docker-compose --env-file clearflask-release/target/run-docker-compose-selfhost/.env -f clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml --profile with-deps down -t 0
	docker-compose --env-file clearflask-release/target/run-docker-compose-selfhost/.env -f clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml --profile with-deps rm

killbill-sleep-%:
	curl -v \
         -u admin:password \
         -H "X-Killbill-ApiKey: bob" \
         -H 'X-Killbill-ApiSecret: lazar' \
         -H "Content-Type: application/json" \
         -H 'X-Killbill-CreatedBy: admin' \
         -X PUT \
         "http://127.0.0.1:8082/1.0/kb/test/clock?days=$*"

get-project-version:
	$(eval PROJECT_VERSION := $(shell mvn -q -Dexec.executable=echo -Dexec.args='$${project.version}' --non-recursive exec:exec))
	echo "Project version is $(PROJECT_VERSION)"

release-patch:
	mvn build-helper:parse-version \
	    -DreleaseVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.nextIncrementalVersion} \
	    -DdevelopmentVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
	    --batch-mode -Dresume=false -DskipITs -Darguments=-DskipITs release:prepare
	make release-perform
	make release-github-release

release-minor:
	mvn build-helper:parse-version \
	    -DreleaseVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.nextMinorVersion}.0 \
	    -DdevelopmentVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.nextMinorVersion}.0-SNAPSHOT \
	    --batch-mode -Dresume=false -DskipITs -Darguments=-DskipITs release:prepare
	make release-perform
	make release-github-release

release-major:
	mvn build-helper:parse-version \
	    -DreleaseVersion=\$${parsedVersion.nextMajorVersion}.0.0 \
	    -DdevelopmentVersion=\$${parsedVersion.nextMajorVersion}.0.0-SNAPSHOT \
	    --batch-mode -Dresume=false -DskipITs -Darguments=-DskipITs release:prepare
	make release-perform
	make release-github-release

release-perform:
	mvn -DskipTests -Darguments=-DskipTests --batch-mode release:perform

release-github-release:
	mvn build-helper:parse-version \
		-DgithubReleaseVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.incrementalVersion} \
		-Dgithub.draft=true --non-recursive github-release:release

# Hosts running the single-host stack, found by a dedicated tag rather than the
# display Name tag so renaming an instance cannot silently change the target set.
# Queried with --filters directly: handing an empty id list to --instance-ids
# makes describe-instances return every instance in the account, which turns a
# tag that matches nothing into a deploy against unrelated servers.
SINGLEHOST_TAG := cf-deploy
SINGLEHOST_TAG_VALUE := singlehost
SINGLEHOST_HOSTS = $(shell aws ec2 describe-instances --no-paginate --output text \
		--filters 'Name=tag:$(SINGLEHOST_TAG),Values=$(SINGLEHOST_TAG_VALUE)' 'Name=instance-state-name,Values=running' \
		--query "Reservations[].Instances[].PublicDnsName")
ASSERT_SINGLEHOST_HOSTS = test -n "$(strip $(SINGLEHOST_HOSTS))" \
		|| { echo "ERROR: no running instance tagged $(SINGLEHOST_TAG)=$(SINGLEHOST_TAG_VALUE); refusing to deploy"; exit 1; }

deploy-singlehost:
	@$(ASSERT_SINGLEHOST_HOSTS)
	$(eval TIMESTAMP := $(shell date +%Y%m%d%H%M%S))
	make $(foreach server, \
		$(SINGLEHOST_HOSTS), \
		deploy-singlehost-$(server) )
deploy-singlehost-%: get-project-version
	echo "Deploying to $*"
	scp ./clearflask-server/target/clearflask-server-$(PROJECT_VERSION).war $*:/home/ec2-user/clearflask-server-$(TIMESTAMP)-$(PROJECT_VERSION).war
	ssh $* "sudo cp /home/ec2-user/clearflask-server-$(TIMESTAMP)-$(PROJECT_VERSION).war /var/lib/tomcat/webapps/150clearflask/ROOT##$(TIMESTAMP)-$(PROJECT_VERSION).war && \
		ls -tp /home/ec2-user | grep '^clearflask-server-' | tail -n +6 | xargs -I {} rm -- {}"
	scp ./clearflask-frontend/target/clearflask-frontend-$(PROJECT_VERSION)-connect.tar.gz $*:/home/ec2-user/clearflask-frontend-0.1-connect.tar.gz
	ssh $* "sudo service connect stop && sudo rm -fr /srv/clearflask-connect/* && sudo tar -xzf /home/ec2-user/clearflask-frontend-0.1-connect.tar.gz -C /srv/clearflask-connect && sudo chmod go-rwx -R /srv/clearflask-connect && sudo chown connect:connect -R /srv/clearflask-connect && sudo service connect start"

deploy-connect-singlehost:
	@$(ASSERT_SINGLEHOST_HOSTS)
	make $(foreach server, \
		$(SINGLEHOST_HOSTS), \
		deploy-connect-singlehost-$(server) )
deploy-connect-singlehost-%: get-project-version
	echo "Deploying to $*"
	scp ./clearflask-frontend/target/clearflask-frontend-$(PROJECT_VERSION)-connect.tar.gz $*:/home/ec2-user/clearflask-frontend-0.1-connect.tar.gz
	ssh $* "sudo service connect stop && sudo rm -fr /srv/clearflask-connect/* && sudo tar -xzf /home/ec2-user/clearflask-frontend-0.1-connect.tar.gz -C /srv/clearflask-connect && sudo chmod go-rwx -R /srv/clearflask-connect && sudo chown connect:connect -R /srv/clearflask-connect && sudo service connect start"

deploy-server-singlehost:
	@$(ASSERT_SINGLEHOST_HOSTS)
	make $(foreach server, \
		$(SINGLEHOST_HOSTS), \
		deploy-server-singlehost-$(server) )
deploy-server-singlehost-%: get-project-version
	echo "Deploying to $*"
	scp ./clearflask-server/target/clearflask-server-$(PROJECT_VERSION).war $*:/home/ec2-user/clearflask-server-0.1.war
	ssh $* "sudo service tomcat stop && sudo rm -fr /var/lib/tomcat/webapps/150clearflask/ROOT.war /var/lib/tomcat/webapps/150clearflask/ROOT && sudo cp /home/ec2-user/clearflask-server-0.1.war /var/lib/tomcat/webapps/150clearflask/ROOT.war && sudo service tomcat start"

deploy-autoscale:
	make deploy-server
	make deploy-connect
	make deploy-rotate-instances
	make deploy-cloudfront-invalidate-all

deploy-server: get-project-version
	aws s3 cp ./clearflask-server/target/clearflask-server-$(PROJECT_VERSION).war s3://clearflask-secret/clearflask-server-0.1.war

deploy-logging: get-project-version
	aws s3 cp ./clearflask-logging/target/clearflask-logging-$(PROJECT_VERSION)-standalone.jar s3://killbill-secret/clearflask-logging-0.1-standalone.jar

deploy-connect: get-project-version
	aws s3 cp ./clearflask-frontend/target/clearflask-frontend-$(PROJECT_VERSION)-connect.tar.gz s3://clearflask-secret/clearflask-frontend-0.1-connect.tar.gz

deploy-static: ./clearflask-server/target/war-include/ROOT deploy-manifest deploy-files

deploy-rotate-instances:
	tools/instance-refresh-and-wait.sh clearflask-server
	aws autoscaling describe-auto-scaling-instances --no-paginate --output table --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server']"

deploy-running-configs:
	make $(foreach server, \
		$(shell aws ec2 describe-instances --no-paginate --output text \
			--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server'].InstanceId") \
			--query "Reservations[].Instances[].{Host:PublicDnsName}"), \
		deploy-running-config-$(server) )

deploy-running-config-%:
	echo "Syncing config to $*"
	ssh $* "sudo aws s3 cp s3://clearflask-secret/config-prod.cfg /opt/clearflask/config-prod.cfg && sudo aws s3 cp s3://clearflask-secret/connect.config.json /opt/clearflask/connect.config.json && sudo service connect restart"

deploy-running-servers:
	make $(foreach server, \
		$(shell aws ec2 describe-instances --no-paginate --output text \
			--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server'].InstanceId") \
			--query "Reservations[].Instances[].{Host:PublicDnsName}"), \
		deploy-running-server-$(server) )

deploy-running-server-%: get-project-version
	echo "Deploying to $*"
	scp ./clearflask-server/target/clearflask-server-$(PROJECT_VERSION).war $*:/home/ec2-user/clearflask-server-0.1.war
	ssh $* "sudo service tomcat stop && sudo rm -fr /var/lib/tomcat/webapps/ROOT.war /var/lib/tomcat/webapps/ROOT && sudo cp /home/ec2-user/clearflask-server-0.1.war /var/lib/tomcat/webapps/ROOT.war && sudo service tomcat start"


deploy-running-connects:
	make $(foreach server, \
		$(shell aws ec2 describe-instances --no-paginate --output text \
			--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server'].InstanceId") \
			--query "Reservations[].Instances[].{Host:PublicDnsName}"), \
		deploy-running-connect-$(server) )

deploy-running-connect-%: get-project-version
	echo "Deploying to $*"
	scp ./clearflask-frontend/target/clearflask-frontend-$(PROJECT_VERSION)-connect.tar.gz $*:/home/ec2-user/clearflask-frontend-0.1-connect.tar.gz
	ssh $* "sudo service connect stop && sudo rm -fr /srv/clearflask-connect/* && sudo tar -xzf /home/ec2-user/clearflask-frontend-0.1-connect.tar.gz -C /srv/clearflask-connect && sudo chmod go-rwx -R /srv/clearflask-connect && sudo chown connect:connect -R /srv/clearflask-connect && sudo service connect start"

deploy-cloudfront-invalidate:
	aws cloudfront create-invalidation --distribution-id EQHBQLQZXVKCU --paths /index.html /service-worker.js /sw.js /asset-manifest.json

deploy-cloudfront-invalidate-all:
	aws cloudfront create-invalidation --distribution-id EQHBQLQZXVKCU --paths "/*"

deploy-emergency:
	make deploy-running-configs
	make deploy-running-servers
	make deploy-running-connects
	make deploy-cloudfront-invalidate-all
	make deploy-server
	make deploy-connect

autoscale-server-suspend:
	aws autoscaling suspend-processes --auto-scaling-group-name clearflask-server --scaling-processes Launch Terminate

autoscale-server-resume:
	aws autoscaling resume-processes --auto-scaling-group-name clearflask-server --scaling-processes Launch Terminate

autoscale-killbill-suspend:
	aws autoscaling suspend-processes --auto-scaling-group-name killbill-webserver --scaling-processes Launch Terminate

autoscale-killbill-resume:
	aws autoscaling resume-processes --auto-scaling-group-name killbill-webserver --scaling-processes Launch Terminate

list-instances-singlehost:
	aws ec2 describe-instances --no-paginate --output table \
		--filters 'Name=tag:$(SINGLEHOST_TAG),Values=$(SINGLEHOST_TAG_VALUE)' \
		--query "Reservations[].Instances[].{Host:PublicDnsName,Id:InstanceId,AZ:Placement.AvailabilityZone,Type:InstanceType,State:State.Name,Name:Tags[?Key=='Name']|[0].Value}"

list-instances-clearflask:
	aws ec2 describe-instances --no-paginate --output table \
		--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server'].InstanceId") \
		--query "Reservations[].Instances[].{Host:PublicDnsName,Id:InstanceId,AZ:Placement.AvailabilityZone,Type:InstanceType,State:State.Name,Name:Tags[?Key=='Name']|[0].Value}"

list-instances-killbill:
	aws ec2 describe-instances --no-paginate --output table \
		--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='killbill-webserver'].InstanceId") \
		--query "Reservations[].Instances[].{Host:PublicDnsName,Id:InstanceId,AZ:Placement.AvailabilityZone,Type:InstanceType,State:State.Name,Name:Tags[?Key=='Name']|[0].Value}"

.PHONY: \
	build \
	build-no-test \
	killbill-sleep-% \
	get-project-version

# Platform-hosting stack (single-tenant one-click appliance): server + connect + MariaDB,
# embedded file-backed DynamoDB, local-disk content. Works like local-up but for the
# PRODUCTION_PLATFORM deployment: build local images first (mvn install), then platform-up.
# The server runs under linux/amd64 emulation (embedded DynamoDB sqlite4java has no arm64
# linux build). Once up, open http://localhost and sign up as admin@localhost.
clearflask-release/target/run-docker-compose-platform/docker-compose.yml:
	rm -fr clearflask-release/target/run-docker-compose-platform
	mkdir -p clearflask-release/target/run-docker-compose-platform
	cp clearflask-release/src/main/docker/compose/docker-compose.platform.yml clearflask-release/target/run-docker-compose-platform/docker-compose.yml
	sed -i'.original' s,ghcr.io/clearflask,clearflask,g clearflask-release/target/run-docker-compose-platform/docker-compose.yml
	test -f clearflask-release/target/run-docker-compose-platform/.env || printf 'CLEARFLASK_CONNECT_TOKEN=%s\nCLEARFLASK_FORCE_REDIRECT_HTTPS=0\nCLEARFLASK_DISABLE_AUTO_FETCH_CERTIFICATE=1\n' "$$(openssl rand -hex 16)" > clearflask-release/target/run-docker-compose-platform/.env
platform-up: clearflask-release/target/run-docker-compose-platform/docker-compose.yml
	docker-compose --env-file clearflask-release/target/run-docker-compose-platform/.env -f clearflask-release/target/run-docker-compose-platform/docker-compose.yml up -d
	docker-compose --env-file clearflask-release/target/run-docker-compose-platform/.env -f clearflask-release/target/run-docker-compose-platform/docker-compose.yml logs -f
platform-down: clearflask-release/target/run-docker-compose-platform/docker-compose.yml
	docker-compose --env-file clearflask-release/target/run-docker-compose-platform/.env -f clearflask-release/target/run-docker-compose-platform/docker-compose.yml down -t 0