Skip to main content

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 the Makefile.
  • 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.
$ โ–ˆ