@atlashub/smartstack-cli 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.documentation/css/styles.css +2168 -2168
- package/.documentation/js/app.js +794 -794
- package/config/default-config.json +86 -86
- package/config/settings.json +53 -53
- package/config/settings.local.example.json +16 -16
- package/dist/index.js +0 -0
- package/dist/index.js.map +1 -1
- package/package.json +88 -88
- package/templates/agents/action.md +36 -36
- package/templates/agents/efcore/conflicts.md +84 -84
- package/templates/agents/efcore/db-deploy.md +51 -51
- package/templates/agents/efcore/db-reset.md +59 -59
- package/templates/agents/efcore/db-seed.md +56 -56
- package/templates/agents/efcore/db-status.md +64 -64
- package/templates/agents/efcore/migration.md +85 -85
- package/templates/agents/efcore/rebase-snapshot.md +62 -62
- package/templates/agents/efcore/scan.md +90 -90
- package/templates/agents/efcore/squash.md +67 -67
- package/templates/agents/explore-codebase.md +65 -65
- package/templates/agents/explore-docs.md +97 -97
- package/templates/agents/fix-grammar.md +49 -49
- package/templates/agents/gitflow/abort.md +45 -45
- package/templates/agents/gitflow/cleanup.md +85 -85
- package/templates/agents/gitflow/commit.md +40 -40
- package/templates/agents/gitflow/exec.md +48 -48
- package/templates/agents/gitflow/finish.md +92 -92
- package/templates/agents/gitflow/init.md +139 -139
- package/templates/agents/gitflow/merge.md +62 -62
- package/templates/agents/gitflow/plan.md +42 -42
- package/templates/agents/gitflow/pr.md +78 -78
- package/templates/agents/gitflow/review.md +49 -49
- package/templates/agents/gitflow/start.md +61 -61
- package/templates/agents/gitflow/status.md +32 -32
- package/templates/agents/snipper.md +36 -36
- package/templates/agents/websearch.md +46 -46
- package/templates/commands/_resources/formatting-guide.md +124 -124
- package/templates/commands/ai-prompt.md +315 -315
- package/templates/commands/apex/1-analyze.md +100 -100
- package/templates/commands/apex/2-plan.md +145 -145
- package/templates/commands/apex/3-execute.md +171 -171
- package/templates/commands/apex/4-examine.md +116 -116
- package/templates/commands/apex/5-tasks.md +209 -209
- package/templates/commands/apex.md +76 -76
- package/templates/commands/application/create.md +362 -362
- package/templates/commands/application/templates-backend.md +463 -463
- package/templates/commands/application/templates-frontend.md +517 -517
- package/templates/commands/application/templates-i18n.md +478 -478
- package/templates/commands/application/templates-seed.md +362 -362
- package/templates/commands/application.md +303 -303
- package/templates/commands/business-analyse/0-orchestrate.md +640 -640
- package/templates/commands/business-analyse/1-init.md +269 -269
- package/templates/commands/business-analyse/2-discover.md +520 -520
- package/templates/commands/business-analyse/3-analyse.md +408 -408
- package/templates/commands/business-analyse/4-specify.md +598 -598
- package/templates/commands/business-analyse/5-validate.md +326 -326
- package/templates/commands/business-analyse/6-handoff.md +746 -746
- package/templates/commands/business-analyse/7-doc-html.md +602 -602
- package/templates/commands/business-analyse/bug.md +325 -325
- package/templates/commands/business-analyse/change-request.md +368 -368
- package/templates/commands/business-analyse/hotfix.md +200 -200
- package/templates/commands/business-analyse.md +640 -640
- package/templates/commands/controller/create.md +216 -216
- package/templates/commands/controller/postman-templates.md +528 -528
- package/templates/commands/controller/templates.md +600 -600
- package/templates/commands/controller.md +337 -337
- package/templates/commands/create/agent.md +138 -138
- package/templates/commands/create/command.md +166 -166
- package/templates/commands/create/hook.md +234 -234
- package/templates/commands/create/plugin.md +329 -329
- package/templates/commands/create/project.md +507 -507
- package/templates/commands/create/skill.md +199 -199
- package/templates/commands/create.md +220 -220
- package/templates/commands/debug.md +95 -95
- package/templates/commands/documentation/module.md +202 -202
- package/templates/commands/documentation/templates.md +432 -432
- package/templates/commands/documentation.md +190 -190
- package/templates/commands/efcore/_env-check.md +153 -153
- package/templates/commands/efcore/conflicts.md +186 -186
- package/templates/commands/efcore/db-deploy.md +193 -193
- package/templates/commands/efcore/db-reset.md +426 -426
- package/templates/commands/efcore/db-seed.md +326 -326
- package/templates/commands/efcore/db-status.md +226 -226
- package/templates/commands/efcore/migration.md +400 -400
- package/templates/commands/efcore/rebase-snapshot.md +264 -264
- package/templates/commands/efcore/scan.md +198 -198
- package/templates/commands/efcore/squash.md +298 -298
- package/templates/commands/efcore.md +224 -224
- package/templates/commands/epct.md +69 -69
- package/templates/commands/explain.md +186 -186
- package/templates/commands/explore.md +45 -45
- package/templates/commands/feature-full.md +267 -267
- package/templates/commands/gitflow/1-init.md +1038 -1038
- package/templates/commands/gitflow/10-start.md +768 -768
- package/templates/commands/gitflow/11-finish.md +457 -457
- package/templates/commands/gitflow/12-cleanup.md +276 -276
- package/templates/commands/gitflow/13-sync.md +216 -216
- package/templates/commands/gitflow/14-rebase.md +251 -251
- package/templates/commands/gitflow/2-status.md +277 -277
- package/templates/commands/gitflow/3-commit.md +344 -344
- package/templates/commands/gitflow/4-plan.md +145 -145
- package/templates/commands/gitflow/5-exec.md +147 -147
- package/templates/commands/gitflow/6-abort.md +344 -344
- package/templates/commands/gitflow/7-pull-request.md +453 -355
- package/templates/commands/gitflow/8-review.md +240 -176
- package/templates/commands/gitflow/9-merge.md +451 -365
- package/templates/commands/gitflow.md +128 -128
- package/templates/commands/implement.md +663 -663
- package/templates/commands/init.md +567 -567
- package/templates/commands/mcp-integration.md +330 -330
- package/templates/commands/notification.md +129 -129
- package/templates/commands/oneshot.md +57 -57
- package/templates/commands/quick-search.md +72 -72
- package/templates/commands/ralph-loop/cancel-ralph.md +18 -18
- package/templates/commands/ralph-loop/help.md +126 -126
- package/templates/commands/ralph-loop/ralph-loop.md +18 -18
- package/templates/commands/review.md +106 -106
- package/templates/commands/utils/test-web-config.md +160 -160
- package/templates/commands/utils/test-web.md +151 -151
- package/templates/commands/validate.md +233 -233
- package/templates/commands/workflow.md +193 -193
- package/templates/gitflow/config.json +138 -138
- package/templates/hooks/ef-migration-check.md +139 -139
- package/templates/hooks/hooks.json +25 -25
- package/templates/hooks/stop-hook.sh +177 -177
- package/templates/skills/ai-prompt/SKILL.md +778 -778
- package/templates/skills/application/SKILL.md +563 -563
- package/templates/skills/application/templates-backend.md +450 -450
- package/templates/skills/application/templates-frontend.md +531 -531
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +647 -647
- package/templates/skills/business-analyse/SKILL.md +191 -191
- package/templates/skills/business-analyse/questionnaire.md +283 -283
- package/templates/skills/business-analyse/templates-frd.md +477 -477
- package/templates/skills/business-analyse/templates-react.md +580 -580
- package/templates/skills/controller/SKILL.md +240 -240
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/templates.md +1468 -1468
- package/templates/skills/documentation/SKILL.md +133 -133
- package/templates/skills/documentation/templates.md +476 -476
- package/templates/skills/feature-full/SKILL.md +838 -838
- package/templates/skills/notification/SKILL.md +555 -555
- package/templates/skills/ui-components/SKILL.md +870 -870
- package/templates/skills/workflow/SKILL.md +582 -582
- package/templates/test-web/api-health.json +38 -38
- package/templates/test-web/minimal.json +19 -19
- package/templates/test-web/npm-package.json +46 -46
- package/templates/test-web/seo-check.json +54 -54
|
@@ -1,264 +1,264 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Rebase ModelSnapshot on develop and regenerate migration
|
|
3
|
-
agent: efcore-rebase-snapshot
|
|
4
|
-
model: sonnet
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# EF Core Rebase-Snapshot - Resync with Develop
|
|
8
|
-
|
|
9
|
-
Rebases the ModelSnapshot on develop and regenerates a consolidated migration. Used when conflict is detected.
|
|
10
|
-
|
|
11
|
-
**USAGE:** After `/efcore:conflicts` signals a HIGH conflict.
|
|
12
|
-
|
|
13
|
-
**WARNING:** This operation modifies migration files. A backup is created automatically.
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## STEP 1: Check prerequisites
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
CURRENT_BRANCH=$(git branch --show-current)
|
|
21
|
-
echo "Current branch: $CURRENT_BRANCH"
|
|
22
|
-
|
|
23
|
-
# Check that it's a feature/release/hotfix branch
|
|
24
|
-
if [[ ! $CURRENT_BRANCH =~ ^(feature|release|hotfix)/ ]]; then
|
|
25
|
-
echo "ERROR: This command can only be executed from a GitFlow branch"
|
|
26
|
-
exit 1
|
|
27
|
-
fi
|
|
28
|
-
|
|
29
|
-
# Check that working directory is clean
|
|
30
|
-
if [ -n "$(git status --porcelain)" ]; then
|
|
31
|
-
echo "ERROR: Working directory not clean"
|
|
32
|
-
echo "Commit or stash your changes first"
|
|
33
|
-
exit 1
|
|
34
|
-
fi
|
|
35
|
-
|
|
36
|
-
# Find EF Core project
|
|
37
|
-
CSPROJ=$(find . -name "*.csproj" -exec grep -l "Microsoft.EntityFrameworkCore" {} \; 2>/dev/null | head -1)
|
|
38
|
-
if [ -z "$CSPROJ" ]; then
|
|
39
|
-
echo "ERROR: No EF Core project found"
|
|
40
|
-
exit 1
|
|
41
|
-
fi
|
|
42
|
-
|
|
43
|
-
PROJECT_DIR=$(dirname "$CSPROJ")
|
|
44
|
-
MIGRATIONS_DIR="$PROJECT_DIR/Migrations"
|
|
45
|
-
echo "Project: $PROJECT_DIR"
|
|
46
|
-
echo "Migrations: $MIGRATIONS_DIR"
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## STEP 2: Backup current migrations
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
BACKUP_DIR=".claude/gitflow/backup/migrations/rebase_$(date +%Y%m%d_%H%M%S)"
|
|
55
|
-
mkdir -p "$BACKUP_DIR"
|
|
56
|
-
|
|
57
|
-
echo ""
|
|
58
|
-
echo "BACKUP"
|
|
59
|
-
echo "======"
|
|
60
|
-
cp "$MIGRATIONS_DIR"/*.cs "$BACKUP_DIR/" 2>/dev/null
|
|
61
|
-
BACKUP_COUNT=$(ls -1 "$BACKUP_DIR" | wc -l)
|
|
62
|
-
echo " $BACKUP_COUNT files backed up to $BACKUP_DIR"
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## STEP 3: Identify this branch's migrations
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# Find migrations added on this branch (not on develop)
|
|
71
|
-
echo ""
|
|
72
|
-
echo "THIS BRANCH'S MIGRATIONS"
|
|
73
|
-
echo "==========================="
|
|
74
|
-
|
|
75
|
-
# Get migration list on develop
|
|
76
|
-
DEVELOP_MIGRATIONS=$(git show develop:$MIGRATIONS_DIR 2>/dev/null | grep "\.cs$" | grep -v "Designer" | grep -v "Snapshot")
|
|
77
|
-
|
|
78
|
-
# Local migrations
|
|
79
|
-
LOCAL_MIGRATIONS=$(ls -1 "$MIGRATIONS_DIR"/*.cs 2>/dev/null | xargs -n1 basename | grep -v "Designer" | grep -v "Snapshot")
|
|
80
|
-
|
|
81
|
-
# New migrations (on this branch but not on develop)
|
|
82
|
-
BRANCH_MIGRATIONS=""
|
|
83
|
-
for migration in $LOCAL_MIGRATIONS; do
|
|
84
|
-
if ! echo "$DEVELOP_MIGRATIONS" | grep -q "$migration"; then
|
|
85
|
-
BRANCH_MIGRATIONS="$BRANCH_MIGRATIONS $migration"
|
|
86
|
-
echo " + $migration"
|
|
87
|
-
fi
|
|
88
|
-
done
|
|
89
|
-
|
|
90
|
-
if [ -z "$BRANCH_MIGRATIONS" ]; then
|
|
91
|
-
echo " No migration specific to this branch"
|
|
92
|
-
echo " Nothing to rebase"
|
|
93
|
-
exit 0
|
|
94
|
-
fi
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## STEP 4: Reset ModelSnapshot on develop
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
echo ""
|
|
103
|
-
echo "RESET MODELSNAPSHOT"
|
|
104
|
-
echo "==================="
|
|
105
|
-
|
|
106
|
-
# Get develop's ModelSnapshot
|
|
107
|
-
git fetch origin develop
|
|
108
|
-
SNAPSHOT_FILE=$(find "$MIGRATIONS_DIR" -name "*ModelSnapshot.cs" | head -1)
|
|
109
|
-
SNAPSHOT_NAME=$(basename "$SNAPSHOT_FILE")
|
|
110
|
-
|
|
111
|
-
git checkout origin/develop -- "$MIGRATIONS_DIR/$SNAPSHOT_NAME"
|
|
112
|
-
echo " ModelSnapshot reset on develop"
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## STEP 5: Delete this branch's migrations
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
echo ""
|
|
121
|
-
echo "DELETE BRANCH MIGRATIONS"
|
|
122
|
-
echo "=============================="
|
|
123
|
-
|
|
124
|
-
for migration in $BRANCH_MIGRATIONS; do
|
|
125
|
-
BASE_NAME="${migration%.cs}"
|
|
126
|
-
rm -f "$MIGRATIONS_DIR/$BASE_NAME.cs"
|
|
127
|
-
rm -f "$MIGRATIONS_DIR/$BASE_NAME.Designer.cs"
|
|
128
|
-
echo " - $BASE_NAME"
|
|
129
|
-
done
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## STEP 6: Regenerate consolidated migration
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
echo ""
|
|
138
|
-
echo "REGENERATE MIGRATION"
|
|
139
|
-
echo "======================"
|
|
140
|
-
|
|
141
|
-
# Extract branch info for name
|
|
142
|
-
BRANCH_TYPE=$(echo "$CURRENT_BRANCH" | cut -d'/' -f1)
|
|
143
|
-
BRANCH_NAME=$(echo "$CURRENT_BRANCH" | cut -d'/' -f2 | sed 's/-/_/g' | sed 's/.*/\u&/')
|
|
144
|
-
|
|
145
|
-
# Version
|
|
146
|
-
VERSION=$(grep -oP '(?<=<Version>).*(?=</Version>)' "$CSPROJ" 2>/dev/null | head -1 || echo "1.0.0")
|
|
147
|
-
VERSION_CLEAN=$(echo "$VERSION" | sed 's/\./_/g')
|
|
148
|
-
|
|
149
|
-
# Migration name
|
|
150
|
-
case $BRANCH_TYPE in
|
|
151
|
-
"feature")
|
|
152
|
-
MIGRATION_NAME="Feature_${VERSION_CLEAN}_${BRANCH_NAME}_Consolidated"
|
|
153
|
-
;;
|
|
154
|
-
"hotfix")
|
|
155
|
-
MIGRATION_NAME="Hotfix_${VERSION_CLEAN}_${BRANCH_NAME}_Fix"
|
|
156
|
-
;;
|
|
157
|
-
"release")
|
|
158
|
-
MIGRATION_NAME="Release_${VERSION_CLEAN}_Consolidated"
|
|
159
|
-
;;
|
|
160
|
-
*)
|
|
161
|
-
MIGRATION_NAME="Branch_${VERSION_CLEAN}_${BRANCH_NAME}"
|
|
162
|
-
;;
|
|
163
|
-
esac
|
|
164
|
-
|
|
165
|
-
echo "Name: $MIGRATION_NAME"
|
|
166
|
-
|
|
167
|
-
cd "$PROJECT_DIR"
|
|
168
|
-
dotnet ef migrations add "$MIGRATION_NAME" --verbose
|
|
169
|
-
|
|
170
|
-
if [ $? -eq 0 ]; then
|
|
171
|
-
echo " Migration created successfully"
|
|
172
|
-
else
|
|
173
|
-
echo " ERROR: Failed to create migration"
|
|
174
|
-
echo " Restoring backup..."
|
|
175
|
-
cp "$BACKUP_DIR"/*.cs "$MIGRATIONS_DIR/"
|
|
176
|
-
exit 1
|
|
177
|
-
fi
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## STEP 7: Validation
|
|
183
|
-
|
|
184
|
-
```bash
|
|
185
|
-
echo ""
|
|
186
|
-
echo "VALIDATION"
|
|
187
|
-
echo "=========="
|
|
188
|
-
|
|
189
|
-
# Build
|
|
190
|
-
dotnet build --no-restore
|
|
191
|
-
if [ $? -ne 0 ]; then
|
|
192
|
-
echo " ERROR: Build failed"
|
|
193
|
-
echo " Restoring backup..."
|
|
194
|
-
cp "$BACKUP_DIR"/*.cs "$MIGRATIONS_DIR/"
|
|
195
|
-
exit 1
|
|
196
|
-
fi
|
|
197
|
-
echo " Build: OK"
|
|
198
|
-
|
|
199
|
-
# Check that migration can generate script
|
|
200
|
-
dotnet ef migrations script --no-build > /dev/null 2>&1
|
|
201
|
-
if [ $? -ne 0 ]; then
|
|
202
|
-
echo " ERROR: Script generation failed"
|
|
203
|
-
exit 1
|
|
204
|
-
fi
|
|
205
|
-
echo " Script: OK"
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## STEP 8: Summary
|
|
211
|
-
|
|
212
|
-
```
|
|
213
|
-
================================================================================
|
|
214
|
-
REBASE-SNAPSHOT COMPLETE
|
|
215
|
-
================================================================================
|
|
216
|
-
|
|
217
|
-
BRANCH: {current_branch}
|
|
218
|
-
BACKUP: {backup_dir}
|
|
219
|
-
|
|
220
|
-
BEFORE:
|
|
221
|
-
Migrations: {old_migrations}
|
|
222
|
-
ModelSnapshot: {old_hash}
|
|
223
|
-
|
|
224
|
-
AFTER:
|
|
225
|
-
Migration: {new_migration_name}
|
|
226
|
-
ModelSnapshot: {new_hash} (= develop)
|
|
227
|
-
|
|
228
|
-
================================================================================
|
|
229
|
-
NEXT STEPS
|
|
230
|
-
================================================================================
|
|
231
|
-
|
|
232
|
-
1. Check migration content
|
|
233
|
-
2. Test: /efcore:db-reset && /efcore:db-deploy
|
|
234
|
-
3. Commit: /gitflow:3-commit
|
|
235
|
-
|
|
236
|
-
================================================================================
|
|
237
|
-
RESTORE (if needed)
|
|
238
|
-
================================================================================
|
|
239
|
-
|
|
240
|
-
cp {backup_dir}/*.cs {migrations_dir}/
|
|
241
|
-
|
|
242
|
-
================================================================================
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## Options
|
|
248
|
-
|
|
249
|
-
| Option | Description |
|
|
250
|
-
|--------|-------------|
|
|
251
|
-
| `--no-backup` | Don't create backup (dangerous) |
|
|
252
|
-
| `--name <name>` | Force a specific migration name |
|
|
253
|
-
| `--dry-run` | Show what would be done without executing |
|
|
254
|
-
|
|
255
|
-
---
|
|
256
|
-
|
|
257
|
-
## When to use
|
|
258
|
-
|
|
259
|
-
| Situation | Action |
|
|
260
|
-
|-----------|--------|
|
|
261
|
-
| `/efcore:conflicts` returns HIGH | Use rebase-snapshot |
|
|
262
|
-
| Merge conflict on ModelSnapshot | Use rebase-snapshot |
|
|
263
|
-
| Multiple migrations to consolidate | Use rebase-snapshot |
|
|
264
|
-
| Broken migration | Use rebase-snapshot |
|
|
1
|
+
---
|
|
2
|
+
description: Rebase ModelSnapshot on develop and regenerate migration
|
|
3
|
+
agent: efcore-rebase-snapshot
|
|
4
|
+
model: sonnet
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# EF Core Rebase-Snapshot - Resync with Develop
|
|
8
|
+
|
|
9
|
+
Rebases the ModelSnapshot on develop and regenerates a consolidated migration. Used when conflict is detected.
|
|
10
|
+
|
|
11
|
+
**USAGE:** After `/efcore:conflicts` signals a HIGH conflict.
|
|
12
|
+
|
|
13
|
+
**WARNING:** This operation modifies migration files. A backup is created automatically.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## STEP 1: Check prerequisites
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
CURRENT_BRANCH=$(git branch --show-current)
|
|
21
|
+
echo "Current branch: $CURRENT_BRANCH"
|
|
22
|
+
|
|
23
|
+
# Check that it's a feature/release/hotfix branch
|
|
24
|
+
if [[ ! $CURRENT_BRANCH =~ ^(feature|release|hotfix)/ ]]; then
|
|
25
|
+
echo "ERROR: This command can only be executed from a GitFlow branch"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# Check that working directory is clean
|
|
30
|
+
if [ -n "$(git status --porcelain)" ]; then
|
|
31
|
+
echo "ERROR: Working directory not clean"
|
|
32
|
+
echo "Commit or stash your changes first"
|
|
33
|
+
exit 1
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# Find EF Core project
|
|
37
|
+
CSPROJ=$(find . -name "*.csproj" -exec grep -l "Microsoft.EntityFrameworkCore" {} \; 2>/dev/null | head -1)
|
|
38
|
+
if [ -z "$CSPROJ" ]; then
|
|
39
|
+
echo "ERROR: No EF Core project found"
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
PROJECT_DIR=$(dirname "$CSPROJ")
|
|
44
|
+
MIGRATIONS_DIR="$PROJECT_DIR/Migrations"
|
|
45
|
+
echo "Project: $PROJECT_DIR"
|
|
46
|
+
echo "Migrations: $MIGRATIONS_DIR"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## STEP 2: Backup current migrations
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
BACKUP_DIR=".claude/gitflow/backup/migrations/rebase_$(date +%Y%m%d_%H%M%S)"
|
|
55
|
+
mkdir -p "$BACKUP_DIR"
|
|
56
|
+
|
|
57
|
+
echo ""
|
|
58
|
+
echo "BACKUP"
|
|
59
|
+
echo "======"
|
|
60
|
+
cp "$MIGRATIONS_DIR"/*.cs "$BACKUP_DIR/" 2>/dev/null
|
|
61
|
+
BACKUP_COUNT=$(ls -1 "$BACKUP_DIR" | wc -l)
|
|
62
|
+
echo " $BACKUP_COUNT files backed up to $BACKUP_DIR"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## STEP 3: Identify this branch's migrations
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Find migrations added on this branch (not on develop)
|
|
71
|
+
echo ""
|
|
72
|
+
echo "THIS BRANCH'S MIGRATIONS"
|
|
73
|
+
echo "==========================="
|
|
74
|
+
|
|
75
|
+
# Get migration list on develop
|
|
76
|
+
DEVELOP_MIGRATIONS=$(git show develop:$MIGRATIONS_DIR 2>/dev/null | grep "\.cs$" | grep -v "Designer" | grep -v "Snapshot")
|
|
77
|
+
|
|
78
|
+
# Local migrations
|
|
79
|
+
LOCAL_MIGRATIONS=$(ls -1 "$MIGRATIONS_DIR"/*.cs 2>/dev/null | xargs -n1 basename | grep -v "Designer" | grep -v "Snapshot")
|
|
80
|
+
|
|
81
|
+
# New migrations (on this branch but not on develop)
|
|
82
|
+
BRANCH_MIGRATIONS=""
|
|
83
|
+
for migration in $LOCAL_MIGRATIONS; do
|
|
84
|
+
if ! echo "$DEVELOP_MIGRATIONS" | grep -q "$migration"; then
|
|
85
|
+
BRANCH_MIGRATIONS="$BRANCH_MIGRATIONS $migration"
|
|
86
|
+
echo " + $migration"
|
|
87
|
+
fi
|
|
88
|
+
done
|
|
89
|
+
|
|
90
|
+
if [ -z "$BRANCH_MIGRATIONS" ]; then
|
|
91
|
+
echo " No migration specific to this branch"
|
|
92
|
+
echo " Nothing to rebase"
|
|
93
|
+
exit 0
|
|
94
|
+
fi
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## STEP 4: Reset ModelSnapshot on develop
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
echo ""
|
|
103
|
+
echo "RESET MODELSNAPSHOT"
|
|
104
|
+
echo "==================="
|
|
105
|
+
|
|
106
|
+
# Get develop's ModelSnapshot
|
|
107
|
+
git fetch origin develop
|
|
108
|
+
SNAPSHOT_FILE=$(find "$MIGRATIONS_DIR" -name "*ModelSnapshot.cs" | head -1)
|
|
109
|
+
SNAPSHOT_NAME=$(basename "$SNAPSHOT_FILE")
|
|
110
|
+
|
|
111
|
+
git checkout origin/develop -- "$MIGRATIONS_DIR/$SNAPSHOT_NAME"
|
|
112
|
+
echo " ModelSnapshot reset on develop"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## STEP 5: Delete this branch's migrations
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
echo ""
|
|
121
|
+
echo "DELETE BRANCH MIGRATIONS"
|
|
122
|
+
echo "=============================="
|
|
123
|
+
|
|
124
|
+
for migration in $BRANCH_MIGRATIONS; do
|
|
125
|
+
BASE_NAME="${migration%.cs}"
|
|
126
|
+
rm -f "$MIGRATIONS_DIR/$BASE_NAME.cs"
|
|
127
|
+
rm -f "$MIGRATIONS_DIR/$BASE_NAME.Designer.cs"
|
|
128
|
+
echo " - $BASE_NAME"
|
|
129
|
+
done
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## STEP 6: Regenerate consolidated migration
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
echo ""
|
|
138
|
+
echo "REGENERATE MIGRATION"
|
|
139
|
+
echo "======================"
|
|
140
|
+
|
|
141
|
+
# Extract branch info for name
|
|
142
|
+
BRANCH_TYPE=$(echo "$CURRENT_BRANCH" | cut -d'/' -f1)
|
|
143
|
+
BRANCH_NAME=$(echo "$CURRENT_BRANCH" | cut -d'/' -f2 | sed 's/-/_/g' | sed 's/.*/\u&/')
|
|
144
|
+
|
|
145
|
+
# Version
|
|
146
|
+
VERSION=$(grep -oP '(?<=<Version>).*(?=</Version>)' "$CSPROJ" 2>/dev/null | head -1 || echo "1.0.0")
|
|
147
|
+
VERSION_CLEAN=$(echo "$VERSION" | sed 's/\./_/g')
|
|
148
|
+
|
|
149
|
+
# Migration name
|
|
150
|
+
case $BRANCH_TYPE in
|
|
151
|
+
"feature")
|
|
152
|
+
MIGRATION_NAME="Feature_${VERSION_CLEAN}_${BRANCH_NAME}_Consolidated"
|
|
153
|
+
;;
|
|
154
|
+
"hotfix")
|
|
155
|
+
MIGRATION_NAME="Hotfix_${VERSION_CLEAN}_${BRANCH_NAME}_Fix"
|
|
156
|
+
;;
|
|
157
|
+
"release")
|
|
158
|
+
MIGRATION_NAME="Release_${VERSION_CLEAN}_Consolidated"
|
|
159
|
+
;;
|
|
160
|
+
*)
|
|
161
|
+
MIGRATION_NAME="Branch_${VERSION_CLEAN}_${BRANCH_NAME}"
|
|
162
|
+
;;
|
|
163
|
+
esac
|
|
164
|
+
|
|
165
|
+
echo "Name: $MIGRATION_NAME"
|
|
166
|
+
|
|
167
|
+
cd "$PROJECT_DIR"
|
|
168
|
+
dotnet ef migrations add "$MIGRATION_NAME" --verbose
|
|
169
|
+
|
|
170
|
+
if [ $? -eq 0 ]; then
|
|
171
|
+
echo " Migration created successfully"
|
|
172
|
+
else
|
|
173
|
+
echo " ERROR: Failed to create migration"
|
|
174
|
+
echo " Restoring backup..."
|
|
175
|
+
cp "$BACKUP_DIR"/*.cs "$MIGRATIONS_DIR/"
|
|
176
|
+
exit 1
|
|
177
|
+
fi
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## STEP 7: Validation
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
echo ""
|
|
186
|
+
echo "VALIDATION"
|
|
187
|
+
echo "=========="
|
|
188
|
+
|
|
189
|
+
# Build
|
|
190
|
+
dotnet build --no-restore
|
|
191
|
+
if [ $? -ne 0 ]; then
|
|
192
|
+
echo " ERROR: Build failed"
|
|
193
|
+
echo " Restoring backup..."
|
|
194
|
+
cp "$BACKUP_DIR"/*.cs "$MIGRATIONS_DIR/"
|
|
195
|
+
exit 1
|
|
196
|
+
fi
|
|
197
|
+
echo " Build: OK"
|
|
198
|
+
|
|
199
|
+
# Check that migration can generate script
|
|
200
|
+
dotnet ef migrations script --no-build > /dev/null 2>&1
|
|
201
|
+
if [ $? -ne 0 ]; then
|
|
202
|
+
echo " ERROR: Script generation failed"
|
|
203
|
+
exit 1
|
|
204
|
+
fi
|
|
205
|
+
echo " Script: OK"
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## STEP 8: Summary
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
================================================================================
|
|
214
|
+
REBASE-SNAPSHOT COMPLETE
|
|
215
|
+
================================================================================
|
|
216
|
+
|
|
217
|
+
BRANCH: {current_branch}
|
|
218
|
+
BACKUP: {backup_dir}
|
|
219
|
+
|
|
220
|
+
BEFORE:
|
|
221
|
+
Migrations: {old_migrations}
|
|
222
|
+
ModelSnapshot: {old_hash}
|
|
223
|
+
|
|
224
|
+
AFTER:
|
|
225
|
+
Migration: {new_migration_name}
|
|
226
|
+
ModelSnapshot: {new_hash} (= develop)
|
|
227
|
+
|
|
228
|
+
================================================================================
|
|
229
|
+
NEXT STEPS
|
|
230
|
+
================================================================================
|
|
231
|
+
|
|
232
|
+
1. Check migration content
|
|
233
|
+
2. Test: /efcore:db-reset && /efcore:db-deploy
|
|
234
|
+
3. Commit: /gitflow:3-commit
|
|
235
|
+
|
|
236
|
+
================================================================================
|
|
237
|
+
RESTORE (if needed)
|
|
238
|
+
================================================================================
|
|
239
|
+
|
|
240
|
+
cp {backup_dir}/*.cs {migrations_dir}/
|
|
241
|
+
|
|
242
|
+
================================================================================
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Options
|
|
248
|
+
|
|
249
|
+
| Option | Description |
|
|
250
|
+
|--------|-------------|
|
|
251
|
+
| `--no-backup` | Don't create backup (dangerous) |
|
|
252
|
+
| `--name <name>` | Force a specific migration name |
|
|
253
|
+
| `--dry-run` | Show what would be done without executing |
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## When to use
|
|
258
|
+
|
|
259
|
+
| Situation | Action |
|
|
260
|
+
|-----------|--------|
|
|
261
|
+
| `/efcore:conflicts` returns HIGH | Use rebase-snapshot |
|
|
262
|
+
| Merge conflict on ModelSnapshot | Use rebase-snapshot |
|
|
263
|
+
| Multiple migrations to consolidate | Use rebase-snapshot |
|
|
264
|
+
| Broken migration | Use rebase-snapshot |
|