# push-dev ## When to Use Use this command when you want to: - Stage all modified files - Commit with a descriptive message - Push directly to the `dev` branch ## Execution Steps ### Step 1: Check Current Branch Run: `git branch --show-current` to get the current branch name. **If not on `dev`:** - Warn: "⚠️ You're not on dev branch. Current branch: [branch]. Switching to dev..." - Switch to dev: `git checkout dev` - Pull latest changes: `git pull origin dev` **If already on `dev`:** - Pull latest changes: `git pull origin dev` - Continue to Step 2 ### Step 2: Stage All Changes Run: `git add .` Show what will be committed: `git status` **If no changes to commit:** - Inform: "No changes detected. All files are already committed or there are no modified files." - Check: `git status` to see current state - **STOP**: No need to proceed ### Step 3: Detect Modified Projects and Build **Before committing, verify the code builds successfully for production. Only build projects where files have been modified.** #### Step 3.1: Identify Modified Files Get list of modified files: `git diff --cached --name-only` or `git status --short` #### Step 3.2: Determine Which Projects Need Building Analyze modified files to determine which project(s) they belong to: **Frontend (Managing.WebApp):** - Files in `src/Managing.WebApp/` or `src/Managing.Nswag/` - Build command: `cd src/Managing.WebApp && npm run build` or `cd src/Managing.WebApp && yarn build` **Backend (.NET projects):** - Files in `src/Managing.Api/`, `src/Managing.Application/`, `src/Managing.Domain/`, `src/Managing.Infrastructure.*/`, or any other `.cs` files in `src/` - Build command: `dotnet build src/Managing.sln` or `dotnet build src/Managing.Api/Managing.Api.csproj` **If both frontend and backend files are modified:** - Build both projects in sequence #### Step 3.3: Build Relevant Project(s) **For Frontend (Managing.WebApp):** - Navigate to project: `cd src/Managing.WebApp` - Check package manager: - Check for `yarn.lock`: `test -f yarn.lock` - If yarn: Use `yarn build` - If npm: Use `npm run build` - Run build command: - If yarn: `yarn build` - If npm: `npm run build` **For Backend (.NET):** - Run: `dotnet build src/Managing.sln` - Or build specific project: `dotnet build src/Managing.Api/Managing.Api.csproj` **If both projects need building:** - Build frontend first, then backend - Or build both in parallel if appropriate **If build succeeds:** - Confirm: "✅ Build successful! Code is production-ready." - Continue to Step 4 **If build fails:** - Show build errors - Analyze errors: - TypeScript errors (frontend) - C# compilation errors (backend) - Import errors - Syntax errors - Missing dependencies - Configuration errors - **Try to fix errors automatically:** - Fix TypeScript type errors (frontend) - Fix C# compilation errors (backend) - Fix import paths - Fix syntax errors - Add missing imports - Fix configuration issues - **If errors can be fixed:** - Fix the errors - Re-run build for the affected project - If build succeeds, continue to Step 4 - If build still fails, show errors and ask user for help - **If errors cannot be fixed automatically:** - Show detailed error messages - Explain what needs to be fixed - **STOP**: Do not proceed with commit until build succeeds - Suggest: "Please fix the build errors before committing. Ask a developer for help if needed." ### Step 4: Generate Commit Message Analyze staged changes: `git diff --cached --stat` or `git status` Generate a descriptive commit message: - **Format**: `[Type]: [Description]` - **Types**: `Update`, `Fix`, `Add`, `Design`, `Refactor` - **Examples**: - `Update Button component - Match Figma design colors and spacing` - `Fix mobile responsive layout - Adjust padding for max-640 breakpoint` - `Add StatusBadge component - Implement design from Figma` - `Design: Update typography - Change font sizes to match design system` **Ask user to confirm or modify the commit message before committing.** ### Step 5: Commit Changes Run: `git commit -m ""` ### Step 6: Push to Dev Run: `git push origin dev` **If push fails:** - If branch protection error: Explain that direct pushes to `dev` might be blocked - Suggest creating a Pull Request instead if needed - If other error: Show the error and help resolve it ## Error Handling ### If push fails due to branch protection: - Explain: "Direct pushes to `dev` might be blocked by branch protection rules." - Solution: "Check with your team lead or create a Pull Request instead." ### If no changes to commit: - Inform: "No changes detected. All files are already committed or there are no modified files." - Check: `git status` to see current state ### If build fails: - **STOP immediately** - Do not commit broken code - Show build errors in detail - Try to fix common errors automatically: - TypeScript type errors - Import path errors - Syntax errors - Missing imports - If errors can be fixed: - Fix them automatically - Re-run build - If build succeeds, continue - If build still fails, show errors and ask for help - If errors cannot be fixed: - Show detailed error messages - Explain what needs to be fixed - **STOP**: Do not commit until build succeeds - Suggest: "Please fix the build errors. Ask a developer for help if needed." ### If build command is not found: **For Frontend:** - Check if package manager is installed: `yarn --version` or `npm --version` - If not installed: Guide user to install Node.js/yarn - If installed: Check if `src/Managing.WebApp/package.json` has `build` script - If no build script: Inform user and skip build step (not recommended) **For Backend:** - Check if .NET SDK is installed: `dotnet --version` - If not installed: Guide user to install .NET SDK - If installed: Check if `src/Managing.sln` exists - If solution file not found: Try building specific project: `dotnet build src/Managing.Api/Managing.Api.csproj` ## Example Execution **User input:** `/push-dev` **AI execution (Frontend changes only):** 1. Check branch: `git branch --show-current` → "dev" 2. Pull latest: `git pull origin dev` 3. Check changes: `git status` → Modified: `src/Managing.WebApp/src/components/Button/Button.tsx` 4. Stage: `git add .` 5. Detect modified files: `git diff --cached --name-only` → `src/Managing.WebApp/src/components/Button/Button.tsx` 6. Determine project: Frontend (Managing.WebApp) 7. Build: `cd src/Managing.WebApp && yarn build` → ✅ Build successful! 8. Generate commit message: "Update Button component - Match Figma design colors" 9. Confirm with user: "Commit message: 'Update Button component - Match Figma design colors'. Proceed?" 10. Commit: `git commit -m "Update Button component - Match Figma design colors"` 11. Push: `git push origin dev` 12. Success message: "✅ Changes pushed successfully to dev branch!" **AI execution (Backend changes only):** 1. Check branch: `git branch --show-current` → "dev" 2. Pull latest: `git pull origin dev` 3. Check changes: `git status` → Modified: `src/Managing.Api/Controllers/UserController.cs` 4. Stage: `git add .` 5. Detect modified files: `git diff --cached --name-only` → `src/Managing.Api/Controllers/UserController.cs` 6. Determine project: Backend (.NET) 7. Build: `dotnet build src/Managing.sln` → ✅ Build successful! 8. Generate commit message: "Update UserController - Add new endpoint" 9. Confirm with user: "Commit message: 'Update UserController - Add new endpoint'. Proceed?" 10. Commit: `git commit -m "Update UserController - Add new endpoint"` 11. Push: `git push origin dev` 12. Success message: "✅ Changes pushed successfully to dev branch!" **AI execution (Both frontend and backend changes):** 1. Check branch: `git branch --show-current` → "dev" 2. Pull latest: `git pull origin dev` 3. Check changes: `git status` → Modified: `src/Managing.WebApp/src/components/Button/Button.tsx`, `src/Managing.Api/Controllers/UserController.cs` 4. Stage: `git add .` 5. Detect modified files: `git diff --cached --name-only` → Both frontend and backend files 6. Determine projects: Frontend (Managing.WebApp) and Backend (.NET) 7. Build frontend: `cd src/Managing.WebApp && yarn build` → ✅ Build successful! 8. Build backend: `dotnet build src/Managing.sln` → ✅ Build successful! 9. Generate commit message: "Update Button component and UserController" 10. Confirm with user: "Commit message: 'Update Button component and UserController'. Proceed?" 11. Commit: `git commit -m "Update Button component and UserController"` 12. Push: `git push origin dev` 13. Success message: "✅ Changes pushed successfully to dev branch!" **If build fails:** 1-6. Same as above 7. Build: `cd src/Managing.WebApp && yarn build` → ❌ Build failed with errors 8. Analyze errors: TypeScript error in Button.tsx 9. Fix errors: Update type definitions 10. Re-run build: `cd src/Managing.WebApp && yarn build` → ✅ Build successful! 11. Continue with commit and push ## Important Notes - ✅ **Always build before committing** - ensures code works in production - ✅ **Only build projects where files have been modified** - saves time and focuses on relevant changes - ✅ **Fix build errors before committing** - don't commit broken code - ✅ Always ask for confirmation before committing if the commit message is unclear - ✅ Pull latest changes from dev before pushing to avoid conflicts - ⚠️ **Build step is mandatory** - code must build successfully before commit - ⚠️ **Ensure you're on dev branch** - command will switch to dev if needed - 📦 **Frontend changes**: Build `Managing.WebApp` using npm/yarn - 🔧 **Backend changes**: Build `.NET` solution using `dotnet build` - 🔄 **Both frontend and backend changes**: Build both projects in sequence