150 lines
6.1 KiB
Makefile
150 lines
6.1 KiB
Makefile
# KROW Workforce Project Makefile
|
|
# -------------------------------
|
|
# This Makefile provides a central place for common project commands.
|
|
# It is designed to be the main entry point for developers.
|
|
|
|
# Use .PHONY to declare targets that are not files, to avoid conflicts.
|
|
.PHONY: install dev build prepare-export help deploy-launchpad deploy-app
|
|
|
|
# The default command to run if no target is specified (e.g., just 'make').
|
|
.DEFAULT_GOAL := help
|
|
|
|
# --- Firebase & GCP Configuration ---
|
|
GCP_DEV_PROJECT_ID := krow-workforce-dev
|
|
GCP_STAGING_PROJECT_ID := krow-workforce-staging
|
|
|
|
# --- Environment Detection ---
|
|
ENV ?= dev
|
|
|
|
# --- Conditional Variables by Environment ---
|
|
ifeq ($(ENV),staging)
|
|
GCP_PROJECT_ID := $(GCP_STAGING_PROJECT_ID)
|
|
FIREBASE_ALIAS := staging
|
|
HOSTING_TARGET := app-staging
|
|
else
|
|
GCP_PROJECT_ID := $(GCP_DEV_PROJECT_ID)
|
|
FIREBASE_ALIAS := dev
|
|
HOSTING_TARGET := app-dev
|
|
endif
|
|
|
|
# Installs all project dependencies using npm.
|
|
install:
|
|
@echo "--> Installing web frontend dependencies..."
|
|
@cd frontend-web && npm install
|
|
|
|
# Starts the local development server.
|
|
dev:
|
|
@echo "--> Ensuring web frontend dependencies are installed..."
|
|
@cd frontend-web && npm install
|
|
@echo "--> Starting web frontend development server on http://localhost:5173 ..."
|
|
@cd frontend-web && npm run dev
|
|
|
|
# Builds the application for production.
|
|
build:
|
|
@echo "--> Building web frontend for production..."
|
|
@cd frontend-web && VITE_APP_ENV=$(ENV) npm run build
|
|
|
|
# Integrates a new Base44 export into the current project.
|
|
# It replaces the src directory and the index.html file in the frontend-web directory.
|
|
# Prerequisite: The new export must be in a folder named '../krow-workforce-export-latest'.
|
|
integrate-export:
|
|
@echo "--> Integrating new Base44 export into frontend-web/..."
|
|
@if [ ! -d "../krow-workforce-export-latest" ]; then \
|
|
echo "❌ Error: Export directory '../krow-workforce-export-latest' not found."; \
|
|
exit 1; \
|
|
fi
|
|
@echo " - Removing old src directory..."
|
|
@rm -rf frontend-web/src
|
|
@echo " - Copying new src directory..."
|
|
@cp -R ../krow-workforce-export-latest/src ./frontend-web/src
|
|
@echo " - Copying new index.html..."
|
|
@cp ../krow-workforce-export-latest/index.html ./frontend-web/index.html
|
|
@echo " - Patching base44Client.js for local development..."
|
|
@node scripts/patch-base44-client.js
|
|
@echo " - Patching queryKey in Layout.jsx for local development..."
|
|
@node scripts/patch-layout-query-key.js
|
|
@echo " - Patching Dashboard.jsx for environment label..."
|
|
@node scripts/patch-dashboard-for-env-label.js
|
|
@echo " - Patching index.html for title..."
|
|
@node scripts/patch-index-html.js
|
|
@echo "--> Integration complete. Next step: 'make prepare-export'."
|
|
|
|
# Applies all necessary patches to a fresh Base44 export to run it locally.
|
|
# This is the main command for the hybrid workflow.
|
|
prepare-export:
|
|
@echo "--> Preparing fresh Base44 export for local development..."
|
|
@node scripts/prepare-export.js
|
|
@echo "--> Preparation complete. You can now run 'make dev'."
|
|
|
|
# --- Data Connect / Backend ---
|
|
|
|
# Enable all required APIs for Firebase Data Connect + Cloud SQL
|
|
dataconnect-enable-apis:
|
|
@echo "--> Enabling Firebase & Data Connect APIs on project [$(GCP_PROJECT_ID)]..."
|
|
@gcloud services enable firebase.googleapis.com --project=$(GCP_PROJECT_ID)
|
|
@gcloud services enable firebasedataconnect.googleapis.com --project=$(GCP_PROJECT_ID)
|
|
@gcloud services enable sqladmin.googleapis.com --project=$(GCP_PROJECT_ID)
|
|
@gcloud services enable iam.googleapis.com --project=$(GCP_PROJECT_ID)
|
|
@gcloud services enable cloudresourcemanager.googleapis.com --project=$(GCP_PROJECT_ID)
|
|
@echo "✅ APIs enabled for project [$(GCP_PROJECT_ID)]."
|
|
|
|
# Initialize Firebase Data Connect (interactive wizard).
|
|
# This wraps the command so we remember how to run it for dev/staging/prod.
|
|
dataconnect-init:
|
|
@echo "--> Initializing Firebase Data Connect for alias [$(FIREBASE_ALIAS)] (project: $(GCP_PROJECT_ID))..."
|
|
@firebase init dataconnect --project $(FIREBASE_ALIAS)
|
|
@echo "✅ Data Connect initialization command executed. Follow the interactive steps in the CLI."
|
|
|
|
# Deploy Data Connect schemas (GraphQL → Cloud SQL)
|
|
dataconnect-deploy:
|
|
@echo "--> Deploying Firebase Data Connect schemas to [$(ENV)] (project: $(FIREBASE_ALIAS))..."
|
|
@firebase deploy --only dataconnect --project=$(FIREBASE_ALIAS)
|
|
@echo "✅ Data Connect deployment completed for [$(ENV)]."
|
|
|
|
# --- Firebase Deployment ---
|
|
deploy-launchpad:
|
|
@echo "--> Deploying Internal Launchpad to DEV project..."
|
|
@firebase deploy --only hosting:launchpad --project=dev
|
|
|
|
deploy-app: build
|
|
@echo "--> Deploying Frontend Web App to [$(ENV)] environment..."
|
|
@firebase deploy --only hosting:$(HOSTING_TARGET) --project=$(FIREBASE_ALIAS)
|
|
|
|
# Shows this help message.
|
|
help:
|
|
@echo "--------------------------------------------------"
|
|
@echo " KROW Workforce - Available Makefile Commands"
|
|
@echo "--------------------------------------------------"
|
|
@echo " make install - Installs web frontend dependencies."
|
|
@echo " make dev - Starts the local web frontend server."
|
|
@echo " make build - Builds the web frontend for production."
|
|
@echo " make integrate-export - Integrates a new Base44 export from '../krow-workforce-export-latest'."
|
|
@echo " make prepare-export - Prepares a fresh Base44 export for local use."
|
|
@echo ""
|
|
@echo " --- DEPLOYMENT ---"
|
|
@echo " make deploy-launchpad - Deploys the internal launchpad (always to dev)."
|
|
@echo " make deploy-app [ENV=staging] - Builds and deploys the main web app (default: dev)."
|
|
@echo ""
|
|
@echo " make help - Shows this help message."
|
|
@echo "--------------------------------------------------"
|
|
|
|
# --- Project Management ---
|
|
setup-labels:
|
|
@echo "--> Setting up GitHub labels..."
|
|
@./scripts/setup-github-labels.sh
|
|
|
|
export-issues:
|
|
@echo "--> Exporting GitHub issues to documentation..."
|
|
@./scripts/export_issues.sh
|
|
|
|
create-issues-from-file:
|
|
@echo "--> Creating GitHub issues from file..."
|
|
@./scripts/create_issues.py
|
|
|
|
# --- Development Tools ---
|
|
install-git-hooks:
|
|
@echo "--> Installing Git hooks..."
|
|
@ln -sf ../../scripts/git-hooks/pre-push .git/hooks/pre-push
|
|
@echo "✅ pre-push hook installed successfully. Direct pushes to 'main' and 'dev' are now blocked."
|
|
|