Makefile for project commands
Makefile is very useful to keep all of your project related commands in one place. Here's a sample Makefile
for a NextJS project.
Featuresโ
make
command scans and lists all commands in theMakefile
.- Includes examples with confirmation for sensitive operations.
Makefileโ
Makefile
# Constant Variables
NPX := pnpm dlx
# Commands
.PHONY: list
list:
@echo "๐ Available commands:"
@awk -F':.*?## ' '/^[a-zA-Z0-9_/-]+:/ && !/^[[:blank:]]*list|confirm:/ { if ($$2 == "") { printf " โข %s\n", $$1 } else { printf " โข %-20s %s\n", $$1, $$2 } }' $(MAKEFILE_LIST)
# Reusable confirm command. It won't get listed
.PHONY: confirm
confirm:
@echo -n 'Are you sure? [y/N] ' && read ans && [ $${ans:-N} = y ]
.PHONY: dev
dev: ## ๐ Starts NextJS dev environment
pnpm dev
.PHONY: generate
generate: ## ๐งฉ Generates prisma files
@echo "๐งฉ Generating prisma files"
$(NPX) prisma generate
.PHONY: db-push
db-push: ## ๐ค Pushes generated prisma files to database
@echo "๐ค Pushing to database"
$(NPX) prisma db push
.PHONY: reset
reset: ## ๐งจ Resets the database
@echo "๐งจ WARNING: This action will reset the database. Are you sure you want to proceed? [y/N]"
@read -p "" confirm; \
if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \
echo "Resetting database..."; \
$(NPX) prisma migrate reset; \
else \
echo "Database reset aborted."; \
fi
.PHONY: encrypt-env
encrypt-env: ## ๐ Encrypts the .env file
@stty -echo; \
read -p "Enter passphrase: " passphrase && echo; \
stty echo; \
openssl enc -aes-256-cbc -salt -in .env -out .env.enc -pass pass:$$passphrase -pbkdf2
@echo "๐ .env encrypted and saved to .env.enc"
.PHONY: decrypt-env
decrypt-env: ## ๐ Decrypts the .env.enc file
@echo "This will overwrite the .env file. Are you sure?[y/N]"
@read -p "" confirm; \
if [ "$$confirm" = "y" ] || [ "$$confirm" = "Y" ]; then \
stty -echo; \
read -p "Enter passphrase: " passphrase && echo; \
stty echo; \
if openssl enc -aes-256-cbc -d -in .env.enc -out .env -pass pass:$$passphrase -pbkdf2; then \
echo "๐ .env.enc successfully decrypted and saved to .env"; \
else \
echo "โ๏ธ Decryption failed. Please check the passphrase and try again."; \
rm -f .env; \
fi; \
else \
echo "Database reset aborted."; \
fi
List exampleโ
$ make
๐ Available commands:
โข dev ๐ Starts NextJS dev environment
โข generate ๐งฉ Generates prisma files
โข db-push ๐ค Pushes generated prisma files to database
โข reset ๐งจ Resets the database
โข encrypt-env ๐ Encrypts the .env file
โข decrypt-env ๐ Decrypts the .env.enc file
$ โ
Confirmation exampleโ
$ make reset
๐งจ WARNING: This action will reset the database. Are you sure you want to proceed? [y/N]
n
Database reset aborted.
$ โ