You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .github/copilot-instructions.md
+6-5Lines changed: 6 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,17 +11,18 @@
11
11
12
12
## 📚 Project Overview
13
13
This project is a .NET data provider for SQL Server, enabling .NET applications to interact with SQL Server databases. It supports various features like connection pooling, transaction management, and asynchronous operations.
14
-
The project builds from a **single unified project** at `src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj` that multi-targets `net462`, `net8.0`, and `net9.0`. The legacy `netfx/` and `netcore/` directories are being phased out — only their `ref/` folders (which define the public API surface) remain active.
14
+
The project builds from a **single unified project** at `src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj`. It targets `net8.0` and `net9.0` on all supported hosts, and adds `net462` only when building on Windows. The legacy `netfx/` and `netcore/` directories are being phased out — only their `ref/` folders (which define the public API surface) remain active.
15
15
The project includes:
16
16
-**Public APIs**: Defined in `netcore/ref/` and `netfx/ref/` directories.
17
17
-**Implementations**: All source code in `src/Microsoft.Data.SqlClient/src/`.
18
18
-**Tests**: Located in the `tests/` directory, covering unit and integration tests.
19
-
-**Unit Tests**: Located in `tests/UnitTests/` directory, which includes tests for individual components and methods.
20
-
-**Functional Tests**: Located in `tests/FunctionalTests/` directory, which includes tests for various features and functionalities that can be run without a SQL Server instance.
21
-
-**Manual Tests**: Located in `tests/ManualTests/` directory, which includes tests that require a SQL Server instance to run.
19
+
-**Unit Tests**: Located in `src/Microsoft.Data.SqlClient/tests/UnitTests/`.
20
+
-**Functional Tests**: Located in `src/Microsoft.Data.SqlClient/tests/FunctionalTests/`.
21
+
-**Manual Tests**: Located in `src/Microsoft.Data.SqlClient/tests/ManualTests/`.
22
+
-**Performance/Stress Tests**: Located in `src/Microsoft.Data.SqlClient/tests/PerformanceTests/` and `src/Microsoft.Data.SqlClient/tests/StressTests/`.
22
23
-**Documentation**: Found in the `doc/` directory, including API documentation, usage examples.
23
24
-**Policies**: Contribution guidelines, coding standards, and review policies in the `policy/` directory.
24
-
-**Building**: The project uses MSBuild for building and testing, with configurations and targets defined in the `build.proj` file, whereas instructions are provided in the `BUILDGUIDE.md`file.
25
+
-**Building**: The repo uses `build.proj` for orchestrated build/test/pack workflows, `src/Microsoft.Data.SqlClient.slnx` for solution-centric development tooling, and Azure DevOps YAML under `eng/pipelines/` plus `eng/pipelines/onebranch/` for CI and official release flows. See `BUILDGUIDE.md`for local build details.
25
26
-**CI/CD**: ADO Pipelines for CI/CD and Pull request validation are defined in the `eng/` directory, ensuring code quality and automated testing.
8.`ci_run_tests_stage` — Run MDS and AKV test suites
64
65
66
+
Stress testing is no longer a stage threaded through `dotnet-sqlclient-ci-core.yml`; it lives under `eng/pipelines/stress/` as a separate pipeline flow.
67
+
65
68
When adding a new build stage, respect the dependency graph and pass artifact names/versions to downstream stages.
66
69
67
70
## PR vs CI Pipeline Differences
@@ -70,12 +73,12 @@ PR pipelines:
70
73
- Trigger on PRs to `dev/*`, `feat/*`, `main`; exclude `eng/pipelines/onebranch/*` paths
71
74
- Use reduced TFM matrix: `[net462, net8.0, net9.0]` (excludes net10.0)
72
75
- Timeout: 90 minutes
73
-
- Package-ref PR disables Always Encrypted tests in Debug config
76
+
- Package-ref PR disables Always Encrypted tests in Debug config and also disables legacy SQL Server test legs to keep validation fast
74
77
75
78
CI pipelines:
76
79
- Trigger on push to `main` (GitHub) and `internal/main` (ADO) with `batch: true`
77
80
- Scheduled weekday builds (see individual pipeline files for cron times)
78
-
- Full TFM matrix including net10.0
81
+
- Full TFM matrix including net10.0 test legs and legacy SQL Server manual-test coverage
79
82
80
83
## Test Configuration
81
84
@@ -97,7 +100,7 @@ Flaky test quarantine:
97
100
98
101
SNI testing — `useManagedSNI` controls testing with native SNI (`false`) or managed SNI (`true`)
99
102
100
-
Test timeout — `--blame-hang-timeout 10m` (configured in `build.proj`); tests exceeding 10 minutes are killed
103
+
Test timeout — `--blame-hang-timeout 10m` (configured in `build.proj` and threaded through CI test steps); tests exceeding 10 minutes are killed
Copy file name to clipboardExpand all lines: .github/instructions/architecture.instructions.md
+10-5Lines changed: 10 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -34,10 +34,11 @@ src/
34
34
## Unified Project Model
35
35
36
36
### Architecture Goal
37
-
The driver is transitioning away from separate `netfx/` and `netcore/` project files toward a **single unified project** at `src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj`. This project multi-targets all supported frameworks from one codebase:
37
+
The driver is transitioning away from separate `netfx/` and `netcore/` project files toward a **single unified project** at `src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj`. This project targets the modern .NET TFMs on every host and conditionally adds .NET Framework on Windows:
-**`mds_package_validation`** — Validates signed SqlClient package; `dependsOn: build_dependent`; runs in parallel with Stage 4
37
+
-**`sqlclient_package_validation`** — Validates signed SqlClient package; `dependsOn: build_dependent`; runs in parallel with Stage 4
38
+
39
+
Each build job copies PDB files into `$(JOB_OUTPUT)/symbols/` so they are included in the auto-published pipeline artifact alongside the NuGet packages in `$(JOB_OUTPUT)/packages/`.
38
40
39
41
Stage conditional rules:
40
42
- Wrap stages/jobs in `${{ if }}` compile-time conditionals based on build parameters
-**`publish-nuget-package-job.yml`** — Reusable release job using OneBranch `templateContext.type: releaseJob` with `inputs` for artifact download; pushes via `NuGetCommand@2`
53
+
-**`publish-symbols-job.yml`** — Reusable symbols job: downloads a build artifact, locates PDBs under `symbols/`, and invokes `publish-symbols-step.yml`
52
54
53
-
When adding a new csproj-based package:
54
-
-Use`build-signed-csproj-package-job.yml` with appropriate `packageName`, `packageFullName`, `versionProperties`, and `downloadArtifacts`
55
-
- Add build and pack targets to`build.proj`
55
+
When adding a new package to the OneBranch flow:
56
+
-Extend`build-buildproj-job.yml`inputs with the new package metadata and dependency artifacts
57
+
- Add or update the corresponding build/pack targets in`build.proj`
56
58
- Add version variables to `variables/common-variables.yml`
57
-
- Add artifact name variable to `variables/onebranch-variables.yml`
59
+
- Add artifact name variables to `variables/onebranch-variables.yml`
60
+
61
+
## Symbols Publishing Stage
62
+
63
+
- Defined in `stages/publish-symbols-stage.yml`; produces stage `publish_symbols`
64
+
- Entire stage excluded at compile time when `publishSymbols` is false
65
+
-`dependsOn` is conditional based on which `build*` parameters are set, mirroring the build stage dependency graph
66
+
- One job per package (`publish-symbols-job.yml`), each downloading its build artifact and publishing PDBs from `symbols/`
67
+
- Each package's PDBs are published separately with unique artifact names and version information
68
+
- Build jobs copy PDBs into `$(JOB_OUTPUT)/symbols/` so they are included in the auto-published artifact
69
+
- The `publish-symbols-step.yml` accepts a `symbolsFolder` parameter to point at the downloaded PDB location
70
+
- The publish step calls an extracted `publish-symbols.ps1` script with structured error handling and diagnostic logging
71
+
- Symbols publishing credentials come from the `Symbols Publishing` variable group
72
+
- In the official pipeline, symbol server destination follows `releaseToProduction`: Production when true, PPE when false
73
+
- Non-official pipeline always targets the PPE symbol server
-`releaseToProduction` — push to NuGet Production feed (default `false`)
103
+
-`releaseToProduction` — controls both NuGet target feed and symbol server destination (default `false`):
104
+
-`true` → NuGet Production feed + Production symbol server
105
+
-`false` → NuGet Test feed + PPE symbol server
88
106
89
107
When `isPreview` is true, pipeline resolves `effective*Version` variables to preview versions; otherwise GA versions. All versions defined in `variables/common-variables.yml`.
90
108
@@ -98,32 +116,34 @@ When `isPreview` is true, pipeline resolves `effective*Version` variables to pre
98
116
- When adding a new package, add GA version, preview version, and assembly file version entries
99
117
100
118
Variable groups:
101
-
-`Release Variables` — release configuration (in `common-variables.yml`)
102
-
-`Symbols publishing` — symbol publishing credentials (in `common-variables.yml`)
119
+
-`Symbols Publishing` — symbol publishing credentials (in `onebranch-variables.yml`)
103
120
-`ESRP Federated Creds (AME)` — ESRP signing credentials (in `common-variables.yml`)
0 commit comments