@khester/create-dynamics-app 1.0.8 → 1.1.0
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/bin/create-dynamics-app.js +1 -1
- package/dist/index.js +140 -15
- package/dist/index.js.map +1 -1
- package/dist/utils/consultingHelpers.d.ts +13 -0
- package/dist/utils/consultingHelpers.d.ts.map +1 -0
- package/dist/utils/consultingHelpers.js +569 -0
- package/dist/utils/consultingHelpers.js.map +1 -0
- package/dist/utils/copyTemplate.d.ts.map +1 -1
- package/dist/utils/copyTemplate.js.map +1 -1
- package/dist/utils/initGit.d.ts.map +1 -1
- package/dist/utils/initGit.js.map +1 -1
- package/dist/utils/installDependencies.d.ts.map +1 -1
- package/dist/utils/installDependencies.js +3 -2
- package/dist/utils/installDependencies.js.map +1 -1
- package/dist/utils/updatePackageJson.d.ts +1 -1
- package/dist/utils/updatePackageJson.d.ts.map +1 -1
- package/dist/utils/updatePackageJson.js +11 -1
- package/dist/utils/updatePackageJson.js.map +1 -1
- package/package.json +1 -1
- package/templates/dynamics-365-starter/INTEGRATION_TEST_RESULTS.md +302 -0
- package/templates/dynamics-365-starter/PHASE_4_COMPLETION_SUMMARY.md +305 -0
- package/templates/dynamics-365-starter/README.md +566 -137
- package/templates/dynamics-365-starter/deployment/QUICKSTART-MAC.md +507 -0
- package/templates/dynamics-365-starter/deployment/QUICKSTART-WINDOWS.md +372 -0
- package/templates/dynamics-365-starter/deployment/README.md +484 -0
- package/templates/dynamics-365-starter/deployment/pipelines/README.md +375 -0
- package/templates/dynamics-365-starter/deployment/pipelines/azure-pipelines.yml +330 -0
- package/templates/dynamics-365-starter/deployment/pipelines/github-actions.yml +422 -0
- package/templates/dynamics-365-starter/deployment/pipelines/jenkins.groovy +636 -0
- package/templates/dynamics-365-starter/deployment/scripts/deploy.ps1 +417 -0
- package/templates/dynamics-365-starter/deployment/scripts/deploy.sh +582 -0
- package/templates/dynamics-365-starter/deployment/scripts/team-onboarding.ps1 +486 -0
- package/templates/dynamics-365-starter/deployment/scripts/team-onboarding.sh +567 -0
- package/templates/dynamics-365-starter/deployment/scripts/validate-setup.ps1 +703 -0
- package/templates/dynamics-365-starter/deployment/scripts/validate-setup.sh +671 -0
- package/templates/dynamics-365-starter/docs/ARCHITECTURE_OVERVIEW.md +506 -0
- package/templates/dynamics-365-starter/docs/BEST_PRACTICES.md +723 -0
- package/templates/dynamics-365-starter/docs/MIGRATION_GUIDE.md +447 -0
- package/templates/dynamics-365-starter/docs/team-standards/README.md +273 -0
- package/templates/dynamics-365-starter/docs/team-standards/client-onboarding.md +577 -0
- package/templates/dynamics-365-starter/docs/team-standards/code-review-checklist.md +359 -0
- package/templates/dynamics-365-starter/docs/team-standards/coding-standards.md +700 -0
- package/templates/dynamics-365-starter/docs/team-standards/cross-platform-team-guide.md +736 -0
- package/templates/dynamics-365-starter/docs/team-standards/development-workflows.md +727 -0
- package/templates/dynamics-365-starter/docs/troubleshooting/common-errors.md +758 -0
- package/templates/dynamics-365-starter/docs/troubleshooting/platform-specific-issues.md +878 -0
- package/templates/dynamics-365-starter/package.json +22 -1
- package/templates/dynamics-365-starter/public/index.html +8 -11
- package/templates/dynamics-365-starter/scripts/custom-build.js +255 -0
- package/templates/dynamics-365-starter/src/client-project-template/README.md +234 -0
- package/templates/dynamics-365-starter/src/client-project-template/config/client.template.json +114 -0
- package/templates/dynamics-365-starter/src/client-project-template/config/environments/template.json +186 -0
- package/templates/dynamics-365-starter/src/client-project-template/scripts/client-setup.js +667 -0
- package/templates/dynamics-365-starter/src/components/AccountForm.css +71 -0
- package/templates/dynamics-365-starter/src/components/AccountForm.tsx +541 -0
- package/templates/dynamics-365-starter/src/components/AccountManagement.css +86 -0
- package/templates/dynamics-365-starter/src/components/AccountManagement.tsx +370 -0
- package/templates/dynamics-365-starter/src/components/ContactForm.tsx +149 -63
- package/templates/dynamics-365-starter/src/components/ContactManagement.tsx +153 -63
- package/templates/dynamics-365-starter/src/components/Logging/LogDialog.tsx +291 -0
- package/templates/dynamics-365-starter/src/components/Logging/LoggingContext.tsx +166 -0
- package/templates/dynamics-365-starter/src/components/Logging/LoggingDebugPanel.css +192 -0
- package/templates/dynamics-365-starter/src/components/Logging/LoggingDebugPanel.tsx +177 -0
- package/templates/dynamics-365-starter/src/components/Logging/LoggingProvider.tsx +3 -0
- package/templates/dynamics-365-starter/src/components/Logging/logger.ts +193 -0
- package/templates/dynamics-365-starter/src/constants/account.ts +410 -0
- package/templates/dynamics-365-starter/src/constants/contact.ts +362 -0
- package/templates/dynamics-365-starter/src/examples/README.md +52 -0
- package/templates/dynamics-365-starter/src/examples/component-examples/opportunity-management.tsx +625 -0
- package/templates/dynamics-365-starter/src/examples/entity-examples/opportunity-model.ts +545 -0
- package/templates/dynamics-365-starter/src/examples/integration-examples/custom-pcf-wrapper.tsx +722 -0
- package/templates/dynamics-365-starter/src/examples/workflow-examples/sales-workflow.ts +662 -0
- package/templates/dynamics-365-starter/src/index.tsx +107 -19
- package/templates/dynamics-365-starter/src/models/Account.ts +480 -0
- package/templates/dynamics-365-starter/src/models/BaseEntity.ts +204 -0
- package/templates/dynamics-365-starter/src/models/Contact.ts +580 -0
- package/templates/dynamics-365-starter/src/page-templates/EntityDashboard.tsx +519 -0
- package/templates/dynamics-365-starter/src/page-templates/EntityDetailPage.tsx +456 -0
- package/templates/dynamics-365-starter/src/page-templates/EntityListPage.tsx +406 -0
- package/templates/dynamics-365-starter/src/page-templates/RelatedEntitiesPage.tsx +578 -0
- package/templates/dynamics-365-starter/src/page-templates/SearchPage.tsx +629 -0
- package/templates/dynamics-365-starter/src/pcf/ContactControlWrapper.tsx +75 -22
- package/templates/dynamics-365-starter/src/pcf/MultiEntityControlWrapper.tsx +205 -0
- package/templates/dynamics-365-starter/src/providers/DynamicsProvider.tsx +297 -80
- package/templates/dynamics-365-starter/src/services/MockApiService.ts +260 -0
- package/templates/dynamics-365-starter/src/services/ServiceFactory.ts +65 -0
- package/templates/dynamics-365-starter/src/services/XrmApiService.ts +213 -0
- package/templates/dynamics-365-starter/src/styles/index.css +74 -7
- package/templates/dynamics-365-starter/tools/entity-generator/index.js +168 -0
- package/templates/dynamics-365-starter/tools/entity-generator/templates/constants.template.ts +124 -0
- package/templates/dynamics-365-starter/tools/entity-generator/templates/form.template.css +283 -0
- package/templates/dynamics-365-starter/tools/entity-generator/templates/form.template.tsx +275 -0
- package/templates/dynamics-365-starter/tools/entity-generator/templates/management.template.css +204 -0
- package/templates/dynamics-365-starter/tools/entity-generator/templates/management.template.tsx +413 -0
- package/templates/dynamics-365-starter/tools/entity-generator/templates/model.template.ts +250 -0
- package/templates/dynamics-365-starter/tools/metadata-sync/d365-client.js +410 -0
- package/templates/dynamics-365-starter/tools/metadata-sync/index.js +512 -0
- package/templates/dynamics-365-starter/tools/metadata-sync/type-generator.js +675 -0
- package/templates/dynamics-365-starter/tsconfig.json +11 -8
- package/templates/dynamics-365-starter/webpack.config.js +8 -9
- package/templates/power-pages-starter/README.md +7 -1
- package/templates/power-pages-starter/public/index.html +8 -11
- package/templates/power-pages-starter/src/components/ContactForm.tsx +60 -41
- package/templates/power-pages-starter/src/index.tsx +3 -3
- package/templates/power-pages-starter/src/providers/PowerPagesProvider.tsx +46 -23
- package/templates/power-pages-starter/tsconfig.json +3 -9
- package/templates/power-pages-starter/webpack.config.js +8 -3
|
@@ -0,0 +1,736 @@
|
|
|
1
|
+
# Cross-Platform Team Development Standards
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This guide establishes standards and best practices for mixed Windows/Mac development teams working
|
|
6
|
+
on Dynamics 365 projects. It ensures consistent workflows, compatible tooling, and seamless
|
|
7
|
+
collaboration across different platforms.
|
|
8
|
+
|
|
9
|
+
## Table of Contents
|
|
10
|
+
|
|
11
|
+
1. [Team Composition Guidelines](#team-composition-guidelines)
|
|
12
|
+
2. [Platform-Agnostic Standards](#platform-agnostic-standards)
|
|
13
|
+
3. [Development Environment Setup](#development-environment-setup)
|
|
14
|
+
4. [Git and Version Control](#git-and-version-control)
|
|
15
|
+
5. [Code Standards and Reviews](#code-standards-and-reviews)
|
|
16
|
+
6. [Communication and Collaboration](#communication-and-collaboration)
|
|
17
|
+
7. [CI/CD and Deployment](#cicd-and-deployment)
|
|
18
|
+
8. [Troubleshooting Cross-Platform Issues](#troubleshooting-cross-platform-issues)
|
|
19
|
+
9. [Team Onboarding Process](#team-onboarding-process)
|
|
20
|
+
10. [Best Practices and Guidelines](#best-practices-and-guidelines)
|
|
21
|
+
|
|
22
|
+
## Team Composition Guidelines
|
|
23
|
+
|
|
24
|
+
### 🎯 Recommended Team Structure
|
|
25
|
+
|
|
26
|
+
For optimal cross-platform collaboration, we recommend:
|
|
27
|
+
|
|
28
|
+
- **Mixed Platform Distribution**: 60/40 or 70/30 split (not 100% single platform)
|
|
29
|
+
- **Platform Champions**: At least one expert per platform who can help others
|
|
30
|
+
- **Shared Responsibilities**: All team members should understand both platforms
|
|
31
|
+
- **Documentation Leaders**: Dedicated maintainers for platform-specific docs
|
|
32
|
+
|
|
33
|
+
### 👥 Role-Platform Mapping
|
|
34
|
+
|
|
35
|
+
| Role | Windows Preference | Mac Preference | Platform Agnostic |
|
|
36
|
+
| ---------------------- | ----------------------- | --------------------- | ------------------------ |
|
|
37
|
+
| **DevOps Engineer** | ✅ PowerShell expertise | ⭐ Bash/Docker skills | ✅ Both valuable |
|
|
38
|
+
| **Backend Developer** | ✅ .NET/Azure focus | ⭐ Node.js/Linux | ✅ JavaScript/TypeScript |
|
|
39
|
+
| **Frontend Developer** | ⭐ VS Code/Chrome | ✅ Design tools | ✅ React/Web standards |
|
|
40
|
+
| **QA Engineer** | ✅ Windows testing | ⭐ Mobile testing | ✅ Web testing |
|
|
41
|
+
| **Technical Lead** | ✅ Enterprise systems | ⭐ Open source | ✅ Architecture focus |
|
|
42
|
+
|
|
43
|
+
## Platform-Agnostic Standards
|
|
44
|
+
|
|
45
|
+
### 🔧 Core Technology Stack
|
|
46
|
+
|
|
47
|
+
All team members use the same core technologies:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"runtime": "Node.js 18+",
|
|
52
|
+
"language": "TypeScript 5+",
|
|
53
|
+
"framework": "React 18+",
|
|
54
|
+
"styling": "Fluent UI v8",
|
|
55
|
+
"testing": "Jest + Testing Library",
|
|
56
|
+
"linting": "ESLint + Prettier",
|
|
57
|
+
"bundling": "Webpack 5+",
|
|
58
|
+
"version_control": "Git 2.40+"
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 📁 Project Structure Standards
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
project-root/
|
|
66
|
+
├── src/ # Cross-platform source code
|
|
67
|
+
├── config/ # Shared JSON configurations
|
|
68
|
+
├── deployment/
|
|
69
|
+
│ ├── scripts/
|
|
70
|
+
│ │ ├── *.sh # Bash scripts (Mac/Linux)
|
|
71
|
+
│ │ └── *.ps1 # PowerShell scripts (Windows)
|
|
72
|
+
│ ├── QUICKSTART-MAC.md # Mac-specific setup
|
|
73
|
+
│ └── QUICKSTART-WINDOWS.md # Windows-specific setup
|
|
74
|
+
├── docs/ # Platform-agnostic documentation
|
|
75
|
+
└── .vscode/ # Shared VS Code configuration
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 🔐 Configuration Management
|
|
79
|
+
|
|
80
|
+
#### Shared Configuration Files
|
|
81
|
+
|
|
82
|
+
All configuration uses JSON format (cross-platform compatible):
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
// config/environments/dev.json
|
|
86
|
+
{
|
|
87
|
+
"name": "Development",
|
|
88
|
+
"dynamics365": {
|
|
89
|
+
"orgUrl": "https://dev.crm.dynamics.com",
|
|
90
|
+
"webApiUrl": "https://dev.api.crm.dynamics.com/api/data/v9.2"
|
|
91
|
+
},
|
|
92
|
+
"authentication": {
|
|
93
|
+
"clientId": "${D365_CLIENT_ID}",
|
|
94
|
+
"clientSecret": "${D365_CLIENT_SECRET}"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### Platform-Specific Variables
|
|
100
|
+
|
|
101
|
+
Use environment variables for platform differences:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Mac/Linux (.env.local)
|
|
105
|
+
D365_CLIENT_ID=your-client-id
|
|
106
|
+
D365_CLIENT_SECRET=your-client-secret
|
|
107
|
+
NODE_ENV=development
|
|
108
|
+
PATH_SEPARATOR=/
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
```powershell
|
|
112
|
+
# Windows (.env.local)
|
|
113
|
+
D365_CLIENT_ID=your-client-id
|
|
114
|
+
D365_CLIENT_SECRET=your-client-secret
|
|
115
|
+
NODE_ENV=development
|
|
116
|
+
PATH_SEPARATOR=\
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Development Environment Setup
|
|
120
|
+
|
|
121
|
+
### 🚀 Quick Start by Platform
|
|
122
|
+
|
|
123
|
+
#### Windows Developers
|
|
124
|
+
|
|
125
|
+
```powershell
|
|
126
|
+
# 1. Run team onboarding script
|
|
127
|
+
.\deployment\scripts\team-onboarding.ps1
|
|
128
|
+
|
|
129
|
+
# 2. Follow Windows-specific guide
|
|
130
|
+
start deployment\QUICKSTART-WINDOWS.md
|
|
131
|
+
|
|
132
|
+
# 3. Validate setup
|
|
133
|
+
.\deployment\scripts\validate-setup.ps1
|
|
134
|
+
|
|
135
|
+
# 4. First deployment test
|
|
136
|
+
.\deployment\scripts\deploy.ps1 -Environment dev -DryRun
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
#### Mac Developers
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# 1. Run team onboarding script
|
|
143
|
+
./deployment/scripts/team-onboarding.sh
|
|
144
|
+
|
|
145
|
+
# 2. Follow Mac-specific guide
|
|
146
|
+
open deployment/QUICKSTART-MAC.md
|
|
147
|
+
|
|
148
|
+
# 3. Validate setup
|
|
149
|
+
./deployment/scripts/validate-setup.sh
|
|
150
|
+
|
|
151
|
+
# 4. First deployment test
|
|
152
|
+
./deployment/scripts/deploy.sh dev --dry-run
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 🛠️ Common Tool Requirements
|
|
156
|
+
|
|
157
|
+
All team members must have:
|
|
158
|
+
|
|
159
|
+
| Tool | Windows Installation | Mac Installation | Purpose |
|
|
160
|
+
| --------------- | ---------------------- | ---------------------------------------- | ------------------- |
|
|
161
|
+
| **Node.js 18+** | `choco install nodejs` | `brew install node` | Runtime environment |
|
|
162
|
+
| **Git** | `choco install git` | `brew install git` | Version control |
|
|
163
|
+
| **VS Code** | `choco install vscode` | `brew install --cask visual-studio-code` | IDE |
|
|
164
|
+
| **jq** | `choco install jq` | `brew install jq` | JSON processing |
|
|
165
|
+
|
|
166
|
+
### 🔧 Platform-Specific Tools
|
|
167
|
+
|
|
168
|
+
#### Windows-Only Tools
|
|
169
|
+
|
|
170
|
+
```powershell
|
|
171
|
+
# PowerShell modules for Dynamics 365
|
|
172
|
+
Install-Module Microsoft.PowerApps.Administration.PowerShell
|
|
173
|
+
Install-Module Microsoft.PowerApps.PowerShell
|
|
174
|
+
|
|
175
|
+
# Windows Subsystem for Linux (optional)
|
|
176
|
+
wsl --install
|
|
177
|
+
|
|
178
|
+
# Chocolatey package manager
|
|
179
|
+
Set-ExecutionPolicy Bypass -Scope Process -Force
|
|
180
|
+
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
#### Mac-Only Tools
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Homebrew package manager
|
|
187
|
+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
188
|
+
|
|
189
|
+
# Xcode Command Line Tools
|
|
190
|
+
xcode-select --install
|
|
191
|
+
|
|
192
|
+
# Docker Desktop for Mac
|
|
193
|
+
brew install --cask docker
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Git and Version Control
|
|
197
|
+
|
|
198
|
+
### 🌿 Branch Strategy
|
|
199
|
+
|
|
200
|
+
All team members follow the same Git workflow:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# Main branches (same for all platforms)
|
|
204
|
+
main # Production-ready code
|
|
205
|
+
develop # Integration branch
|
|
206
|
+
feature/* # Feature development
|
|
207
|
+
hotfix/* # Production fixes
|
|
208
|
+
release/* # Release preparation
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 📝 Commit Standards
|
|
212
|
+
|
|
213
|
+
#### Commit Message Format
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
type(scope): description
|
|
217
|
+
|
|
218
|
+
[optional body]
|
|
219
|
+
|
|
220
|
+
[optional footer]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
**Examples:**
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
feat(auth): add Azure AD authentication
|
|
227
|
+
fix(deploy): resolve PowerShell execution policy issue
|
|
228
|
+
docs(readme): update cross-platform setup instructions
|
|
229
|
+
style(format): apply prettier formatting
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
#### Cross-Platform Commit Hooks
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# .husky/pre-commit (works on both platforms)
|
|
236
|
+
#!/bin/sh
|
|
237
|
+
npm run lint
|
|
238
|
+
npm run typecheck
|
|
239
|
+
npm run test:staged
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### 🔄 Pull Request Process
|
|
243
|
+
|
|
244
|
+
#### Required Checks
|
|
245
|
+
|
|
246
|
+
All PRs must pass:
|
|
247
|
+
|
|
248
|
+
- ✅ **Cross-platform validation** (Windows + Linux CI)
|
|
249
|
+
- ✅ **Code review** (minimum 2 approvals)
|
|
250
|
+
- ✅ **Automated tests** (unit + integration)
|
|
251
|
+
- ✅ **Deployment simulation** (dry-run on both platforms)
|
|
252
|
+
|
|
253
|
+
#### Review Guidelines
|
|
254
|
+
|
|
255
|
+
1. **Platform Compatibility**: Reviewer checks both Windows and Mac workflows
|
|
256
|
+
2. **Script Validation**: If modifying deployment scripts, test both .ps1 and .sh
|
|
257
|
+
3. **Documentation Updates**: Update platform-specific docs when needed
|
|
258
|
+
4. **Configuration Changes**: Verify JSON configs work across platforms
|
|
259
|
+
|
|
260
|
+
## Code Standards and Reviews
|
|
261
|
+
|
|
262
|
+
### 📋 Code Style Standards
|
|
263
|
+
|
|
264
|
+
#### TypeScript/JavaScript
|
|
265
|
+
|
|
266
|
+
```json
|
|
267
|
+
// .eslintrc.json (shared across platforms)
|
|
268
|
+
{
|
|
269
|
+
"extends": ["@typescript-eslint/recommended", "prettier"],
|
|
270
|
+
"rules": {
|
|
271
|
+
"no-console": "error",
|
|
272
|
+
"prefer-const": "error",
|
|
273
|
+
"@typescript-eslint/no-unused-vars": "error"
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
#### File Path Handling
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
// ❌ Platform-specific (Windows-only)
|
|
282
|
+
const filePath = 'src\\components\\MyComponent.tsx';
|
|
283
|
+
|
|
284
|
+
// ✅ Cross-platform compatible
|
|
285
|
+
import path from 'path';
|
|
286
|
+
const filePath = path.join('src', 'components', 'MyComponent.tsx');
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
#### Environment Variables
|
|
290
|
+
|
|
291
|
+
```typescript
|
|
292
|
+
// ❌ Platform-specific
|
|
293
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
294
|
+
const separator = process.platform === 'win32' ? '\\' : '/';
|
|
295
|
+
|
|
296
|
+
// ✅ Cross-platform
|
|
297
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
298
|
+
const separator = path.sep; // Use Node.js path module
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### 🔍 Review Checklist
|
|
302
|
+
|
|
303
|
+
#### General Code Review
|
|
304
|
+
|
|
305
|
+
- [ ] Code follows TypeScript strict mode
|
|
306
|
+
- [ ] No hardcoded file paths (use path.join)
|
|
307
|
+
- [ ] Environment variables used for configuration
|
|
308
|
+
- [ ] Error handling includes platform context
|
|
309
|
+
- [ ] Logging uses centralized logger
|
|
310
|
+
- [ ] Comments explain platform-specific logic
|
|
311
|
+
|
|
312
|
+
#### Platform-Specific Review
|
|
313
|
+
|
|
314
|
+
- [ ] Windows: PowerShell scripts have proper error handling
|
|
315
|
+
- [ ] Mac: Bash scripts have proper permissions (chmod +x)
|
|
316
|
+
- [ ] Both: JSON configurations are valid
|
|
317
|
+
- [ ] Both: Build artifacts are identical
|
|
318
|
+
- [ ] Both: Deployment results are consistent
|
|
319
|
+
|
|
320
|
+
## Communication and Collaboration
|
|
321
|
+
|
|
322
|
+
### 💬 Communication Standards
|
|
323
|
+
|
|
324
|
+
#### Daily Standups
|
|
325
|
+
|
|
326
|
+
**Format:** Video call with shared screen
|
|
327
|
+
|
|
328
|
+
**Platform Considerations:**
|
|
329
|
+
|
|
330
|
+
- Windows team members share PowerShell deployment results
|
|
331
|
+
- Mac team members share Terminal/Bash deployment results
|
|
332
|
+
- All share VS Code debugging and development experience
|
|
333
|
+
- Focus on blockers that might be platform-specific
|
|
334
|
+
|
|
335
|
+
#### Platform-Specific Channels
|
|
336
|
+
|
|
337
|
+
**Slack/Teams Structure:**
|
|
338
|
+
|
|
339
|
+
```
|
|
340
|
+
#dynamics-general # All team communication
|
|
341
|
+
#dynamics-windows # Windows-specific issues
|
|
342
|
+
#dynamics-mac # Mac-specific issues
|
|
343
|
+
#dynamics-deployment # Cross-platform deployment
|
|
344
|
+
#dynamics-troubleshooting # Platform issues help
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### 📚 Knowledge Sharing
|
|
348
|
+
|
|
349
|
+
#### Weekly Platform Updates
|
|
350
|
+
|
|
351
|
+
**Every Friday 3:00 PM:**
|
|
352
|
+
|
|
353
|
+
- Windows team shares PowerShell tips and tricks
|
|
354
|
+
- Mac team shares Terminal/Bash improvements
|
|
355
|
+
- Both teams demo new tools and workflows
|
|
356
|
+
- Cross-platform troubleshooting session
|
|
357
|
+
|
|
358
|
+
#### Documentation Responsibilities
|
|
359
|
+
|
|
360
|
+
| Team Member | Responsibility |
|
|
361
|
+
| ---------------- | ----------------------------------------------- |
|
|
362
|
+
| **Windows Lead** | Maintain QUICKSTART-WINDOWS.md and .ps1 scripts |
|
|
363
|
+
| **Mac Lead** | Maintain QUICKSTART-MAC.md and .sh scripts |
|
|
364
|
+
| **DevOps Lead** | Ensure CI/CD works on both platforms |
|
|
365
|
+
| **All Members** | Update cross-platform compatibility notes |
|
|
366
|
+
|
|
367
|
+
### 🎯 Pair Programming Guidelines
|
|
368
|
+
|
|
369
|
+
#### Cross-Platform Pairing
|
|
370
|
+
|
|
371
|
+
**Best Practices:**
|
|
372
|
+
|
|
373
|
+
- Use VS Code Live Share for real-time collaboration
|
|
374
|
+
- Share terminal sessions for deployment testing
|
|
375
|
+
- Test deployments on both platforms during pairing
|
|
376
|
+
- Document any platform-specific discoveries
|
|
377
|
+
|
|
378
|
+
**Pairing Rotation:**
|
|
379
|
+
|
|
380
|
+
- Windows ↔ Mac pairing every sprint
|
|
381
|
+
- Senior ↔ Junior cross-platform mentoring
|
|
382
|
+
- DevOps ↔ Developer deployment knowledge sharing
|
|
383
|
+
|
|
384
|
+
## CI/CD and Deployment
|
|
385
|
+
|
|
386
|
+
### 🚀 Pipeline Strategy
|
|
387
|
+
|
|
388
|
+
Our CI/CD supports both platforms with optimized stage distribution:
|
|
389
|
+
|
|
390
|
+
```yaml
|
|
391
|
+
# Pipeline Strategy
|
|
392
|
+
Build: Linux (fastest performance)
|
|
393
|
+
Dev Deploy: Linux + Bash (Mac developer experience)
|
|
394
|
+
Test Deploy: Windows + PowerShell (Windows validation)
|
|
395
|
+
Prod Deploy: Flexible choice (team preference)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### 🔧 Deployment Commands
|
|
399
|
+
|
|
400
|
+
#### Command Equivalents
|
|
401
|
+
|
|
402
|
+
| Task | Windows PowerShell | Mac Bash | Result |
|
|
403
|
+
| ---------------- | --------------------------------------------------------- | ---------------------------------- | ---------- |
|
|
404
|
+
| **Deploy Dev** | `.\deploy.ps1 -Environment dev` | `./deploy.sh dev` | Identical |
|
|
405
|
+
| **Health Check** | `.\health-check.ps1 -Environment prod` | `./health-check.sh prod` | Same data |
|
|
406
|
+
| **Rollback** | `.\rollback.ps1 -Environment prod -BackupFile backup.zip` | `./rollback.sh prod backup.tar.gz` | Same state |
|
|
407
|
+
|
|
408
|
+
#### Local Development
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# All platforms use same npm commands
|
|
412
|
+
npm run build:dev # Development build
|
|
413
|
+
npm run build:prod # Production build
|
|
414
|
+
npm run lint # Code linting
|
|
415
|
+
npm run typecheck # TypeScript validation
|
|
416
|
+
npm run test # Unit tests
|
|
417
|
+
npm run deploy:dev # Deploy to development
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### 🏗️ Build Consistency
|
|
421
|
+
|
|
422
|
+
#### Shared Build Configuration
|
|
423
|
+
|
|
424
|
+
```json
|
|
425
|
+
// package.json (platform-agnostic scripts)
|
|
426
|
+
{
|
|
427
|
+
"scripts": {
|
|
428
|
+
"build:dev": "webpack --mode development",
|
|
429
|
+
"build:prod": "webpack --mode production",
|
|
430
|
+
"deploy:dev": "node scripts/deploy.js dev",
|
|
431
|
+
"deploy:test": "node scripts/deploy.js test",
|
|
432
|
+
"deploy:prod": "node scripts/deploy.js prod"
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
#### Platform-Specific Scripts
|
|
438
|
+
|
|
439
|
+
```javascript
|
|
440
|
+
// scripts/deploy.js (detects platform and runs appropriate script)
|
|
441
|
+
const os = require('os');
|
|
442
|
+
const { exec } = require('child_process');
|
|
443
|
+
|
|
444
|
+
const platform = os.platform();
|
|
445
|
+
const environment = process.argv[2];
|
|
446
|
+
|
|
447
|
+
const command =
|
|
448
|
+
platform === 'win32'
|
|
449
|
+
? `.\\deployment\\scripts\\deploy.ps1 -Environment ${environment}`
|
|
450
|
+
: `./deployment/scripts/deploy.sh ${environment}`;
|
|
451
|
+
|
|
452
|
+
exec(command, (error, stdout, stderr) => {
|
|
453
|
+
if (error) {
|
|
454
|
+
console.error(`Deployment failed: ${error}`);
|
|
455
|
+
process.exit(1);
|
|
456
|
+
}
|
|
457
|
+
console.log(stdout);
|
|
458
|
+
});
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
## Troubleshooting Cross-Platform Issues
|
|
462
|
+
|
|
463
|
+
### 🔧 Common Platform Issues
|
|
464
|
+
|
|
465
|
+
#### File Path Problems
|
|
466
|
+
|
|
467
|
+
**Issue:** Windows backslashes vs Unix forward slashes
|
|
468
|
+
|
|
469
|
+
**Solution:**
|
|
470
|
+
|
|
471
|
+
```typescript
|
|
472
|
+
// Use Node.js path module
|
|
473
|
+
import path from 'path';
|
|
474
|
+
|
|
475
|
+
// ❌ Wrong
|
|
476
|
+
const configPath = 'config\\environments\\dev.json';
|
|
477
|
+
|
|
478
|
+
// ✅ Correct
|
|
479
|
+
const configPath = path.join('config', 'environments', 'dev.json');
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
#### Script Execution Issues
|
|
483
|
+
|
|
484
|
+
**Windows PowerShell:**
|
|
485
|
+
|
|
486
|
+
```powershell
|
|
487
|
+
# Issue: Execution policy prevents script running
|
|
488
|
+
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
|
489
|
+
|
|
490
|
+
# Issue: Module not found
|
|
491
|
+
Install-Module Microsoft.PowerApps.PowerShell -Force -AllowClobber
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
**Mac/Linux Bash:**
|
|
495
|
+
|
|
496
|
+
```bash
|
|
497
|
+
# Issue: Script not executable
|
|
498
|
+
chmod +x deployment/scripts/*.sh
|
|
499
|
+
|
|
500
|
+
# Issue: Missing dependencies
|
|
501
|
+
brew install jq curl node npm
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
#### Environment Variables
|
|
505
|
+
|
|
506
|
+
**Windows:**
|
|
507
|
+
|
|
508
|
+
```powershell
|
|
509
|
+
# Set for session
|
|
510
|
+
$env:D365_CLIENT_ID = "your-client-id"
|
|
511
|
+
|
|
512
|
+
# Set permanently
|
|
513
|
+
[Environment]::SetEnvironmentVariable("D365_CLIENT_ID", "your-client-id", "User")
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
**Mac/Linux:**
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
# Set for session
|
|
520
|
+
export D365_CLIENT_ID="your-client-id"
|
|
521
|
+
|
|
522
|
+
# Set permanently
|
|
523
|
+
echo 'export D365_CLIENT_ID="your-client-id"' >> ~/.zshrc
|
|
524
|
+
source ~/.zshrc
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
### 🚨 Escalation Process
|
|
528
|
+
|
|
529
|
+
#### Level 1: Self-Help
|
|
530
|
+
|
|
531
|
+
1. Check platform-specific quick start guide
|
|
532
|
+
2. Review troubleshooting section in deployment README
|
|
533
|
+
3. Search team Slack channels for similar issues
|
|
534
|
+
4. Try the other platform's approach (if applicable)
|
|
535
|
+
|
|
536
|
+
#### Level 2: Team Support
|
|
537
|
+
|
|
538
|
+
1. Post in platform-specific Slack channel
|
|
539
|
+
2. Tag platform champion for assistance
|
|
540
|
+
3. Share complete error logs and environment info
|
|
541
|
+
4. Schedule pairing session if needed
|
|
542
|
+
|
|
543
|
+
#### Level 3: Architecture Review
|
|
544
|
+
|
|
545
|
+
1. Escalate to technical lead
|
|
546
|
+
2. Review if issue indicates larger architectural problem
|
|
547
|
+
3. Consider if platform-agnostic solution is needed
|
|
548
|
+
4. Update team standards if pattern emerges
|
|
549
|
+
|
|
550
|
+
### 📋 Debugging Checklist
|
|
551
|
+
|
|
552
|
+
#### When Things Don't Work
|
|
553
|
+
|
|
554
|
+
**Information to Gather:**
|
|
555
|
+
|
|
556
|
+
- [ ] Operating system and version
|
|
557
|
+
- [ ] Node.js and npm versions
|
|
558
|
+
- [ ] PowerShell version (Windows) or Shell version (Mac)
|
|
559
|
+
- [ ] Complete error message and stack trace
|
|
560
|
+
- [ ] Command that was executed
|
|
561
|
+
- [ ] Environment variables and configuration
|
|
562
|
+
- [ ] Recent changes to codebase
|
|
563
|
+
|
|
564
|
+
**Steps to Take:**
|
|
565
|
+
|
|
566
|
+
1. **Reproduce on other platform** - Does it work on Windows/Mac?
|
|
567
|
+
2. **Check recent changes** - What changed since it last worked?
|
|
568
|
+
3. **Validate environment** - Run validation script
|
|
569
|
+
4. **Compare configurations** - Are configs identical?
|
|
570
|
+
5. **Test in isolation** - Remove variables one by one
|
|
571
|
+
|
|
572
|
+
## Team Onboarding Process
|
|
573
|
+
|
|
574
|
+
### 🎯 New Team Member Checklist
|
|
575
|
+
|
|
576
|
+
#### Week 1: Platform Setup
|
|
577
|
+
|
|
578
|
+
**Day 1: Environment Setup**
|
|
579
|
+
|
|
580
|
+
- [ ] Clone project repository
|
|
581
|
+
- [ ] Run platform-specific onboarding script
|
|
582
|
+
- [ ] Complete environment validation
|
|
583
|
+
- [ ] Set up development tools (VS Code, Git, etc.)
|
|
584
|
+
- [ ] Join communication channels
|
|
585
|
+
|
|
586
|
+
**Day 2: Cross-Platform Awareness**
|
|
587
|
+
|
|
588
|
+
- [ ] Read both platform quick start guides
|
|
589
|
+
- [ ] Understand deployment command equivalents
|
|
590
|
+
- [ ] Review CI/CD pipeline documentation
|
|
591
|
+
- [ ] Learn about platform-specific troubleshooting
|
|
592
|
+
|
|
593
|
+
**Day 3: Development Environment**
|
|
594
|
+
|
|
595
|
+
- [ ] Set up local development environment
|
|
596
|
+
- [ ] Run first successful build
|
|
597
|
+
- [ ] Deploy to development environment
|
|
598
|
+
- [ ] Test health check commands
|
|
599
|
+
|
|
600
|
+
**Day 4: Code Standards and Git**
|
|
601
|
+
|
|
602
|
+
- [ ] Review coding standards document
|
|
603
|
+
- [ ] Set up Git hooks and commit templates
|
|
604
|
+
- [ ] Practice pull request workflow
|
|
605
|
+
- [ ] Complete first code review
|
|
606
|
+
|
|
607
|
+
**Day 5: Team Integration**
|
|
608
|
+
|
|
609
|
+
- [ ] Pair with team member from other platform
|
|
610
|
+
- [ ] Attend cross-platform knowledge sharing session
|
|
611
|
+
- [ ] Complete onboarding feedback survey
|
|
612
|
+
- [ ] Contribute to team documentation
|
|
613
|
+
|
|
614
|
+
#### Week 2: Project Deep Dive
|
|
615
|
+
|
|
616
|
+
**Focus Areas:**
|
|
617
|
+
|
|
618
|
+
- Client business requirements and context
|
|
619
|
+
- Technical architecture and patterns
|
|
620
|
+
- Integration points and external systems
|
|
621
|
+
- Testing strategies and quality processes
|
|
622
|
+
- Deployment procedures and troubleshooting
|
|
623
|
+
|
|
624
|
+
### 🤝 Buddy System
|
|
625
|
+
|
|
626
|
+
Each new team member is paired with:
|
|
627
|
+
|
|
628
|
+
1. **Platform Buddy** - Same platform expert for immediate help
|
|
629
|
+
2. **Cross-Platform Buddy** - Other platform expert for broader perspective
|
|
630
|
+
3. **Project Buddy** - Experienced team member for business context
|
|
631
|
+
|
|
632
|
+
### 📚 Training Resources
|
|
633
|
+
|
|
634
|
+
#### Required Reading
|
|
635
|
+
|
|
636
|
+
- [ ] Cross-Platform Team Development Standards (this document)
|
|
637
|
+
- [ ] Platform-specific quick start guide
|
|
638
|
+
- [ ] Project architecture overview
|
|
639
|
+
- [ ] Client requirements and business context
|
|
640
|
+
- [ ] Deployment and CI/CD documentation
|
|
641
|
+
|
|
642
|
+
#### Optional Learning
|
|
643
|
+
|
|
644
|
+
- [ ] Other platform's quick start guide
|
|
645
|
+
- [ ] Advanced debugging techniques
|
|
646
|
+
- [ ] Performance optimization strategies
|
|
647
|
+
- [ ] Security and compliance requirements
|
|
648
|
+
- [ ] Dynamics 365 platform deep dive
|
|
649
|
+
|
|
650
|
+
## Best Practices and Guidelines
|
|
651
|
+
|
|
652
|
+
### ✅ Do's
|
|
653
|
+
|
|
654
|
+
#### Development Practices
|
|
655
|
+
|
|
656
|
+
- **Use path.join()** for all file path operations
|
|
657
|
+
- **Test on both platforms** before submitting PR
|
|
658
|
+
- **Document platform differences** when they occur
|
|
659
|
+
- **Share learning** with the team regularly
|
|
660
|
+
- **Validate deployments** on both platforms in CI/CD
|
|
661
|
+
|
|
662
|
+
#### Collaboration Practices
|
|
663
|
+
|
|
664
|
+
- **Rotate pairing partners** across platforms weekly
|
|
665
|
+
- **Include both platforms** in architectural discussions
|
|
666
|
+
- **Share terminal sessions** during troubleshooting
|
|
667
|
+
- **Maintain platform-specific documentation** as first-class citizens
|
|
668
|
+
- **Celebrate platform diversity** as a team strength
|
|
669
|
+
|
|
670
|
+
#### Documentation Practices
|
|
671
|
+
|
|
672
|
+
- **Keep both guides updated** when making changes
|
|
673
|
+
- **Include command equivalents** in all procedural docs
|
|
674
|
+
- **Document platform-specific gotchas** immediately
|
|
675
|
+
- **Create searchable knowledge base** for common issues
|
|
676
|
+
- **Video record complex setup procedures** for both platforms
|
|
677
|
+
|
|
678
|
+
### ❌ Don'ts
|
|
679
|
+
|
|
680
|
+
#### Development Anti-Patterns
|
|
681
|
+
|
|
682
|
+
- **Don't hardcode file paths** with platform-specific separators
|
|
683
|
+
- **Don't assume single platform** in scripts or documentation
|
|
684
|
+
- **Don't ignore CI failures** on other platforms
|
|
685
|
+
- **Don't commit platform-specific** temporary files
|
|
686
|
+
- **Don't skip cross-platform validation** for "simple" changes
|
|
687
|
+
|
|
688
|
+
#### Collaboration Anti-Patterns
|
|
689
|
+
|
|
690
|
+
- **Don't create platform silos** or exclusive teams
|
|
691
|
+
- **Don't dismiss other platform approaches** without understanding
|
|
692
|
+
- **Don't let one platform dominate** architectural decisions
|
|
693
|
+
- **Don't ignore knowledge sharing** opportunities
|
|
694
|
+
- **Don't assume platform expertise** translates to superiority
|
|
695
|
+
|
|
696
|
+
### 🎯 Success Metrics
|
|
697
|
+
|
|
698
|
+
#### Team Performance Indicators
|
|
699
|
+
|
|
700
|
+
- **Cross-platform deployment success rate** > 95%
|
|
701
|
+
- **Platform-specific build failures** < 5%
|
|
702
|
+
- **Knowledge sharing sessions attendance** > 80%
|
|
703
|
+
- **Cross-platform code reviews** > 50%
|
|
704
|
+
- **Platform champion availability** < 4 hour response time
|
|
705
|
+
|
|
706
|
+
#### Quality Indicators
|
|
707
|
+
|
|
708
|
+
- **Identical deployment results** across platforms
|
|
709
|
+
- **Consistent development experience** regardless of platform
|
|
710
|
+
- **Comprehensive platform documentation** maintained
|
|
711
|
+
- **Zero platform bias** in architectural decisions
|
|
712
|
+
- **High team satisfaction** with cross-platform workflow
|
|
713
|
+
|
|
714
|
+
### 🔄 Continuous Improvement
|
|
715
|
+
|
|
716
|
+
#### Monthly Reviews
|
|
717
|
+
|
|
718
|
+
- **Platform-specific challenges** encountered and resolved
|
|
719
|
+
- **Documentation gaps** identified and addressed
|
|
720
|
+
- **Tool improvements** and workflow optimizations
|
|
721
|
+
- **Team satisfaction** and collaboration effectiveness
|
|
722
|
+
- **Knowledge sharing** quality and frequency
|
|
723
|
+
|
|
724
|
+
#### Quarterly Assessments
|
|
725
|
+
|
|
726
|
+
- **Architecture decisions** impact on cross-platform compatibility
|
|
727
|
+
- **CI/CD pipeline** effectiveness and optimization opportunities
|
|
728
|
+
- **Team skills development** in cross-platform competencies
|
|
729
|
+
- **Client satisfaction** with delivery consistency
|
|
730
|
+
- **Technology stack evolution** and platform implications
|
|
731
|
+
|
|
732
|
+
---
|
|
733
|
+
|
|
734
|
+
This cross-platform team development guide ensures that Windows and Mac developers can work together
|
|
735
|
+
effectively while leveraging the strengths of each platform. Regular updates and team feedback help
|
|
736
|
+
maintain and improve these standards over time.
|