Skip to content

Commit 4b31a10

Browse files
committed
chore(template): sync with dailydevops/template-dotnet [skip ci]
1 parent 473a171 commit 4b31a10

15 files changed

+278
-189
lines changed

decisions/2025-07-10-centralized-package-version-management.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ This approach ensures that all projects in the solution use consistent package v
6969

7070
**Description**: Allow each project to manage its own package versions independently.
7171

72-
**Why Not Chosen**:
72+
**Why Not Chosen**:
73+
7374
- Leads to version inconsistencies across the solution
7475
- Increases maintenance overhead
7576
- Higher risk of dependency conflicts
@@ -80,6 +81,7 @@ This approach ensures that all projects in the solution use consistent package v
8081
**Description**: Use shared `.props` files to define common package versions but still reference versions in individual projects.
8182

8283
**Why Not Chosen**:
84+
8385
- Still requires version references in each project file
8486
- More complex to implement and maintain
8587
- Doesn't leverage MSBuild's built-in central package management features
@@ -90,6 +92,7 @@ This approach ensures that all projects in the solution use consistent package v
9092
**Description**: Define package versions as MSBuild properties and reference them in individual projects.
9193

9294
**Why Not Chosen**:
95+
9396
- Verbose syntax in project files
9497
- No built-in tooling support
9598
- More error-prone than the centralized approach

decisions/2025-07-10-conventional-commits.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ The project already uses GitVersion (as evidenced by `GitVersion.MsBuild` in `Di
3737
We will adopt the [Conventional Commits 1.0.0 specification](https://www.conventionalcommits.org/en/v1.0.0/) for all commit messages in this project.
3838

3939
**Commit Message Structure:**
40-
```
40+
41+
```txt
4142
<type>[optional scope]: <description>
4243
4344
[optional body]
@@ -46,11 +47,13 @@ We will adopt the [Conventional Commits 1.0.0 specification](https://www.convent
4647
```
4748

4849
**Required Types:**
50+
4951
- `feat`: A new feature (correlates with MINOR in Semantic Versioning)
5052
- `fix`: A bug fix (correlates with PATCH in Semantic Versioning)
5153
- `BREAKING CHANGE`: Breaking API changes (correlates with MAJOR in Semantic Versioning)
5254

5355
**Recommended Additional Types:**
56+
5457
- `build`: Changes to build system or external dependencies
5558
- `chore`: Maintenance tasks that don't modify src or test files
5659
- `ci`: Changes to CI configuration files and scripts
@@ -61,6 +64,7 @@ We will adopt the [Conventional Commits 1.0.0 specification](https://www.convent
6164
- `test`: Adding or modifying tests
6265

6366
**Implementation Guidelines:**
67+
6468
- Commits MUST be prefixed with a type followed by an optional scope, optional `!`, and required terminal colon and space
6569
- Breaking changes MUST be indicated either by `!` after the type/scope or by including `BREAKING CHANGE:` in the footer
6670
- Scope MAY be provided to give additional context (e.g., `feat(api):`, `fix(parser):`)
@@ -70,6 +74,7 @@ We will adopt the [Conventional Commits 1.0.0 specification](https://www.convent
7074
## Consequences
7175

7276
**Positive Consequences:**
77+
7378
1. **Automated versioning**: GitVersion and other tools can automatically determine semantic version bumps based on commit types
7479
2. **Automated changelog generation**: Tools can automatically generate changelogs and release notes from structured commit messages
7580
3. **Improved communication**: Clear, structured commit messages help team members and stakeholders understand the nature and impact of changes
@@ -78,12 +83,14 @@ We will adopt the [Conventional Commits 1.0.0 specification](https://www.convent
7883
6. **Enhanced collaboration**: New contributors can quickly understand the commit convention and follow established patterns
7984

8085
**Potential Challenges:**
86+
8187
1. **Learning curve**: Team members need to learn and remember the conventional commit format
8288
2. **Enforcement overhead**: Initial effort required to establish tooling and processes to enforce the convention
8389
3. **Commit message length**: Some developers may need to adjust to writing more descriptive commit messages
8490
4. **Retroactive application**: Existing commit history will not follow the convention, creating inconsistency in historical data
8591

8692
**Risk Mitigation:**
93+
8794
- Implement commit message linting tools to validate format automatically
8895
- Provide training and documentation for team members
8996
- Use commit message templates in development environments

decisions/2025-07-10-decision-assets.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,23 @@ The current project structure includes a `decisions/` folder for storing archite
3131

3232
All decision-related assets MUST be stored in the `decisions/assets/` folder and MUST be directly linked within decision documents using relative paths.
3333

34-
### Storage Requirements:
34+
### Storage Requirements
35+
3536
- All assets supporting architectural decisions (diagrams, images, PDFs, etc.) MUST be placed in `decisions/assets/`
3637
- Asset filenames SHOULD use their original names without requiring any specific naming convention
3738
- Assets MAY be organized into subdirectories within `decisions/assets/` if needed for better organization
3839

39-
### Linking Requirements:
40+
### Linking Requirements
41+
4042
- All assets MUST be referenced using relative paths from the decision document
4143
- Links MUST use the format: `[Asset Description](assets/filename.extension)` for files in the root assets folder
4244
- For assets in subdirectories, use: `[Asset Description](assets/subdirectory/filename.extension)`
4345
- Assets MUST be directly embedded or linked within the relevant decision document
4446
- No external hosting or cloud storage links are permitted for decision assets
4547

46-
### Example Structure:
47-
```
48+
### Example Structure
49+
50+
```txt
4851
decisions/
4952
├── 2025-07-10-decision-assets.md
5053
├── 2025-07-10-database-architecture.md
@@ -53,7 +56,8 @@ decisions/
5356
├── performance-analysis.pdf
5457
```
5558

56-
### Example Linking:
59+
### Example Linking
60+
5761
```markdown
5862
The proposed database schema is illustrated in the following diagram:
5963

@@ -64,14 +68,16 @@ For detailed performance analysis, refer to the [Performance Analysis Report](as
6468

6569
## Consequences
6670

67-
### Positive Consequences:
71+
### Positive Consequences
72+
6873
- **Centralized Asset Management**: All decision-related assets are stored in a single, predictable location
6974
- **Version Control**: Assets are version-controlled alongside the decision documents
7075
- **Accessibility**: Assets remain accessible even when working offline or in different environments
7176
- **Maintenance**: Easier to maintain and update assets as they're co-located with decisions
7277
- **Documentation Integrity**: Direct linking ensures assets and decisions remain connected
7378

74-
### Potential Risks:
79+
### Potential Risks
80+
7581
- **Repository Size**: Large assets may increase repository size, though this is manageable with proper asset optimization
7682
- **Binary File Management**: Git may not handle large binary files efficiently, but this can be mitigated with Git LFS if needed
7783
- **Asset Duplication**: Same assets might be referenced by multiple decisions, though this ensures each decision remains self-contained

decisions/2025-07-10-dependabot-automated-dependency-updates.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ We have implemented Dependabot with the following configuration:
9191

9292
**Description**: Manually monitor and update dependencies on a periodic basis.
9393

94-
**Why Not Chosen**:
94+
**Why Not Chosen**:
95+
9596
- Time-consuming and error-prone
9697
- Inconsistent update frequency
9798
- Higher risk of missing critical security updates
@@ -102,6 +103,7 @@ We have implemented Dependabot with the following configuration:
102103
**Description**: Use tools that scan for vulnerabilities but don't automatically create updates.
103104

104105
**Why Not Chosen**:
106+
105107
- Provides visibility but still requires manual update process
106108
- Doesn't address the maintenance overhead of dependency updates
107109
- May lead to delayed responses to security issues
@@ -111,6 +113,7 @@ We have implemented Dependabot with the following configuration:
111113
**Description**: Configure Dependabot to run less frequently.
112114

113115
**Why Not Chosen**:
116+
114117
- Slower response to security vulnerabilities
115118
- Larger batch updates are more complex to review
116119
- May accumulate breaking changes over time
@@ -120,6 +123,7 @@ We have implemented Dependabot with the following configuration:
120123
**Description**: Use tools like WhiteSource, or Snyk for dependency management.
121124

122125
**Why Not Chosen**:
126+
123127
- Dependabot is native to GitHub and integrates seamlessly
124128
- No additional third-party service dependencies
125129
- Simpler configuration and maintenance

decisions/2025-07-10-folder-structure-and-naming-conventions.md

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ This decision establishes the standard folder structure for .NET projects and de
2323
## Context
2424

2525
As .NET projects grow in complexity, maintaining a clear and consistent folder structure becomes crucial for:
26+
2627
- Developer onboarding and navigation
2728
- Build automation and CI/CD pipelines
2829
- Separation of concerns between production and test code
2930
- Test categorization and execution strategies
3031
- IDE and tooling support
3132

3233
Without standardized conventions, teams may adopt inconsistent patterns that lead to:
34+
3335
- Confusion about where to place new code
3436
- Difficulty in setting up automated test execution
3537
- Unclear distinction between different types of tests
@@ -40,7 +42,8 @@ Without standardized conventions, teams may adopt inconsistent patterns that lea
4042
We will adopt the following folder structure and naming conventions:
4143

4244
### Root Folder Structure
43-
```
45+
46+
```txt
4447
/
4548
├── src/ # All production source code
4649
├── tests/ # All test projects
@@ -50,26 +53,32 @@ We will adopt the following folder structure and naming conventions:
5053
```
5154

5255
### Source Code Organization
56+
5357
- All production code MUST be placed under the `src/` folder
5458
- Project folders under `src/` MUST follow the namespace hierarchy
5559
- Each project MUST have its own folder directly under `src/`
5660
- The `SpixSpreed.` prefix is automatically applied to all projects through build automation in `Directory.Build.targets`
5761

5862
### Test Project Naming Conventions
63+
5964
Test projects MUST follow this naming pattern:
65+
6066
- **Unit Tests**: `{ProjectName}.Tests.Unit`
6167
- **Integration Tests**: `{ProjectName}.Tests.Integration`
6268

6369
Where `{ProjectName}` is the name of the production project being tested (the build system will automatically apply the `SpixSpreed.` prefix).
6470

6571
### Project Naming Convention
72+
6673
Project folder names follow a simple `{ComponentName}` pattern, where:
74+
6775
- `{ComponentName}` describes the functional area or component (e.g., Core, Data, Api, Web)
6876
- The `SpixSpreed.` prefix is automatically applied by the build system through `Directory.Build.targets`
6977
- This ensures consistent assembly names, namespaces, and package IDs without manual prefixing
7078

7179
### Examples
72-
```
80+
81+
```txt
7382
src/
7483
├── Api/ # Web API controllers, middleware, and HTTP-related logic
7584
├── Core/ # Domain models, business logic, interfaces, and shared utilities
@@ -87,6 +96,7 @@ tests/
8796
## Consequences
8897

8998
### Positive Consequences
99+
90100
- **Clear Separation**: Distinct separation between production and test code prevents accidental inclusion of test code in production builds
91101
- **Consistent Navigation**: Developers can quickly locate source code and corresponding tests
92102
- **Test Categorization**: Clear distinction between unit and integration tests enables selective test execution
@@ -95,6 +105,7 @@ tests/
95105
- **Scalability**: Structure scales well as projects grow in size and complexity
96106

97107
### Potential Drawbacks
108+
98109
- **Initial Setup**: Requires discipline to maintain the structure, especially in the early stages of a project
99110
- **Migration Effort**: Existing projects may need restructuring to adopt these conventions
100111
- **Tool Configuration**: Some tools may need configuration updates to work with the new structure
@@ -103,7 +114,7 @@ tests/
103114

104115
### Alternative 1: Flat Structure
105116

106-
```
117+
```txt
107118
/
108119
├── ProjectA/
109120
├── ProjectA.Tests/
@@ -115,7 +126,7 @@ tests/
115126

116127
### Alternative 2: Tests Alongside Source
117128

118-
```
129+
```txt
119130
src/
120131
├── ProjectA/
121132
│ ├── ProjectA.csproj

decisions/2025-07-10-gitversion-automated-semantic-versioning.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ The project currently uses .NET 10 with centralized package management and follo
3737
We will use **GitVersion** as the primary tool for automated semantic versioning with the following configuration:
3838

3939
**GitVersion Configuration (`GitVersion.yml`):**
40+
4041
```yaml
4142
mode: ManualDeployment
4243
major-version-bump-message: "^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\\([\\w\\s-,/\\\\]*\\))?(!:|:.*\\n\\n((.+\\n)+\\n)?BREAKING CHANGE:\\s.+)"
@@ -46,25 +47,29 @@ workflow: TrunkBased/preview1
4647
```
4748
4849
**Implementation Details:**
50+
4951
- **Mode**: `ManualDeployment` - Provides full control over when versions are incremented and tagged
5052
- **Workflow**: `TrunkBased/preview1` - Optimized for trunk-based development with feature previews
5153
- **MSBuild Integration**: `GitVersion.MsBuild` package automatically injects version information into all projects during build
5254
- **Conventional Commits Integration**: Version bump rules are configured to parse conventional commit messages and determine appropriate semantic version increments
5355
- **Target Framework Workaround**: Temporary configuration to use `net9.0` for GitVersion processing until full .NET 10 support is available
5456

5557
**Version Increment Rules:**
58+
5659
- **Major Version**: Triggered by breaking changes (commits with `!` or `BREAKING CHANGE:` footer)
5760
- **Minor Version**: Triggered by `feat:` commits (new features)
5861
- **Patch Version**: Triggered by `fix:`, `build:`, `chore:`, `ci:`, `docs:`, `perf:`, `refactor:`, `revert:`, `style:`, `test:` commits
5962

6063
**MSBuild Integration:**
64+
6165
- GitVersion.MsBuild automatically provides version properties to all projects
6266
- Version information is embedded in assemblies, packages, and other artifacts
6367
- No manual version management required in project files
6468

6569
## Consequences
6670

6771
**Positive Consequences:**
72+
6873
1. **Automated version calculation**: Version numbers are automatically calculated from git history and conventional commit messages, eliminating manual version management
6974
2. **Consistent versioning**: All project artifacts automatically use the same calculated version, ensuring consistency across builds and deployments
7075
3. **CI/CD integration**: Build pipelines can reliably access version information for package creation, tagging, and deployment processes
@@ -74,13 +79,15 @@ workflow: TrunkBased/preview1
7479
7. **Audit trail**: Version increments are directly traceable to specific commits and their semantic meaning
7580

7681
**Potential Challenges:**
82+
7783
1. **Learning curve**: Developers need to understand how conventional commits impact version calculation
7884
2. **Commit message discipline**: Incorrect commit message formats can lead to inappropriate version increments
7985
3. **Build complexity**: Additional dependency in the build process that requires understanding for troubleshooting
8086
4. **Preview versions**: Pre-release and preview version handling requires careful configuration and understanding
8187
5. **Rollback scenarios**: Complex version rollback situations may require manual intervention
8288

8389
**Risk Mitigation:**
90+
8491
- Implement commit message validation to ensure proper conventional commit format
8592
- Provide clear documentation and training on conventional commits and their version impact
8693
- Configure appropriate branch and tag patterns for different deployment scenarios

0 commit comments

Comments
 (0)