diff --git a/.config/TSAOptions.json b/.config/TSAOptions.json new file mode 100644 index 000000000..e6f1e8d35 --- /dev/null +++ b/.config/TSAOptions.json @@ -0,0 +1,10 @@ +{ + "codebaseName": "calculator.app", + "notificationAliases": [ + "eeappdevredfte@microsoft.com" + ], + "instanceUrl": "https://microsoft.visualstudio.com/DefaultCollection", + "projectName": "OS", + "areaPath": "OS\\Apps\\PAX\\Essential Experiences\\Apps\\Calculator", + "allTools": true +} diff --git a/.github/workflows/action-ci.yml b/.github/workflows/action-ci.yml index e19f0ffd9..f1e1468fe 100644 --- a/.github/workflows/action-ci.yml +++ b/.github/workflows/action-ci.yml @@ -9,7 +9,7 @@ on: jobs: defineBuilds: name: Define builds - runs-on: windows-latest + runs-on: windows-2025-vs2026 env: isPR: ${{ github.event_name == 'pull_request' }} outputs: @@ -51,7 +51,7 @@ jobs: build: needs: defineBuilds name: Build - runs-on: windows-latest + runs-on: windows-2025-vs2026 strategy: matrix: platform: ${{ fromJSON(needs.defineBuilds.outputs.platformList) }} @@ -65,8 +65,6 @@ jobs: name: Use nuget 6.x with: nuget-version: '6.x' - - run: nuget restore ./src/Calculator.sln - name: Restore nuget dependencies - run: | ./build/scripts/UpdateAppxManifestVersion.ps1 ` -AppxManifest ./src/Calculator/Package.appxmanifest ` @@ -74,7 +72,10 @@ jobs: shell: pwsh name: Set version number in AppxManifest - run: | - msbuild ./src/Calculator.sln ` + $env:CL = '/D_SILENCE_EXPERIMENTAL_COROUTINE_DEPRECATION_WARNINGS /wd9047' + msbuild ./src/Calculator.slnx ` + -restore ` + -p:RestorePackagesConfig=true ` -bl:${{ github.workspace }}/output/Calculator.binlog ` -p:OutDir=${{ github.workspace }}\output\ ` -p:Platform=${{ matrix.platform }} ` @@ -98,7 +99,7 @@ jobs: unitTests: needs: [defineBuilds, build] - runs-on: windows-latest + runs-on: windows-2025-vs2026 name: Run unit tests strategy: matrix: @@ -127,7 +128,7 @@ jobs: uiTests: needs: build - runs-on: windows-latest + runs-on: windows-2025-vs2026 name: Run UI tests (x64) env: appDir: ${{ github.workspace }}/download/Calculator/AppPackages/Calculator*_Test diff --git a/README.md b/README.md index 4182e8225..1039438af 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Prerequisites: git clone https://github.com/Microsoft/calculator.git ``` -- Open [src\Calculator.sln](/src/Calculator.sln) in Visual Studio to build and run the Calculator app. +- Open [src\Calculator.slnx](/src/Calculator.slnx) in Visual Studio to build and run the Calculator app. - For a general description of the Calculator project architecture see [ApplicationArchitecture.md](docs/ApplicationArchitecture.md). - To run the UI Tests, you need to make sure that [Windows Application Driver (WinAppDriver)](https://github.com/microsoft/WinAppDriver/releases/latest) diff --git a/build/pipelines/azure-pipelines.ci-internal.yaml b/build/pipelines/azure-pipelines.ci-internal.yaml index cf89be0c8..bbb76493c 100644 --- a/build/pipelines/azure-pipelines.ci-internal.yaml +++ b/build/pipelines/azure-pipelines.ci-internal.yaml @@ -12,27 +12,47 @@ pr: none name: 0.$(Date:yyMM).$(DayOfMonth)$(Rev:rr).0 +variables: + # Docker image which is used to build the project https://aka.ms/obpipelines/containers + WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2025/vse2026:latest' + + Codeql.Enabled: true + resources: repositories: - - repository: 1esPipelines - type: git - name: 1ESPipelineTemplates/1ESPipelineTemplates - ref: refs/tags/release + - repository: templates + type: git + name: OneBranch.Pipelines/GovernedTemplates + ref: refs/heads/main extends: - template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines + template: v2/Microsoft.NonOfficial.yml@templates # https://aka.ms/obpipelines/templates parameters: - pool: - name: EssentialExperiences-windows-2022 - image: MMSWindows2022-Secure - os: windows - sdl: + featureFlags: + EnableCDPxPAT: false + WindowsHostVersion: + Version: 2025 + + platform: + name: 'windows_undocked' + + globalSdl: + isNativeCode: true + enableCheckCFlags: false + enableXFGCheck: false + + tsa: + enabled: false + + suppression: + suppressionFile: $(Build.SourcesDirectory)\.gdn\.gdnsuppress + policheck: enabled: true exclusionsFile: '$(Build.SourcesDirectory)\build\config\PoliCheckExclusions.xml' stages: - - stage: + - stage: Calculator jobs: - template: /build/pipelines/templates/build-single-architecture.yaml@self parameters: @@ -40,12 +60,6 @@ extends: useReleaseAppxManifest: false platform: x64 - - template: /build/pipelines/templates/build-single-architecture.yaml@self - parameters: - isReleaseBuild: true - useReleaseAppxManifest: false - platform: x86 - - template: /build/pipelines/templates/build-single-architecture.yaml@self parameters: isReleaseBuild: true @@ -57,17 +71,8 @@ extends: platform: x64 runsettingsFileName: CalculatorUITests.ci-internal.runsettings - - template: /build/pipelines/templates/run-ui-tests.yaml@self - parameters: - platform: x86 - runsettingsFileName: CalculatorUITests.ci-internal.runsettings - - template: /build/pipelines/templates/run-unit-tests.yaml@self parameters: platform: x64 - - template: /build/pipelines/templates/run-unit-tests.yaml@self - parameters: - platform: x86 - - template: /build/pipelines/templates/package-msixbundle.yaml@self diff --git a/build/pipelines/azure-pipelines.release.yaml b/build/pipelines/azure-pipelines.release.yaml index f0cfd04c7..2994d5027 100644 --- a/build/pipelines/azure-pipelines.release.yaml +++ b/build/pipelines/azure-pipelines.release.yaml @@ -16,7 +16,11 @@ variables: value: $[counter(format('{0}.{1}.*', variables['versionMajor'], variables['versionMinor']), 0)] - name: versionPatch value: 0 - - group: CalculatorTSAConfig + # Docker image which is used to build the project https://aka.ms/obpipelines/containers + - name: WindowsContainerImage + value: 'onebranch.azurecr.io/windows/ltsc2025/vse2026:latest' + - name: Codeql.Enabled + value: true name: '$(versionMajor).$(versionMinor).$(versionBuild).$(versionPatch)' @@ -33,35 +37,38 @@ parameters: resources: repositories: - - repository: 1esPipelines - type: git - name: 1ESPipelineTemplates/1ESPipelineTemplates - ref: refs/tags/release + - repository: templates + type: git + name: OneBranch.Pipelines/GovernedTemplates + ref: refs/heads/main extends: - template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines + template: v2/Microsoft.Official.yml@templates # https://aka.ms/obpipelines/templates parameters: - pool: - name: EssentialExperiences-windows-2022 - image: MMSWindows2022-Secure - os: windows - sdl: + featureFlags: + EnableCDPxPAT: false + WindowsHostVersion: + Version: 2025 + + platform: + name: 'windows_undocked' + + globalSdl: + isNativeCode: true + enableCheckCFlags: false + enableXFGCheck: false + tsa: enabled: true - config: - codebaseName: $(TSA.CodebaseName) - notificationAliases: $(TSA.NotificationAliases) - instanceUrl: $(TSA.InstanceUrl) - projectName: $(TSA.ProjectName) - areaPath: $(TSA.AreaPath) - serviceTreeID: $(TSA.ServiceTreeID) - allTools: true - codeql: - tsaEnabled: true + configFile: '$(Build.SourcesDirectory)\.config\TSAOptions.json' + policheck: enabled: true exclusionsFile: '$(Build.SourcesDirectory)\build\config\PoliCheckExclusions.xml' + evidence: + enabled: false + stages: - stage: Calculator jobs: @@ -76,7 +83,6 @@ extends: platform: x86 isReleaseBuild: true useReleaseAppxmanifest: true - condition: not(eq(variables['Build.Reason'], 'PullRequest')) - template: /build/pipelines/templates/build-single-architecture.yaml@self parameters: @@ -106,9 +112,10 @@ extends: - template: /build/pipelines/templates/package-msixbundle.yaml@self parameters: signBundle: true - createStoreBrokerPackages: true + includeX86: true - - ${{ if eq(parameters.publishStore, true) }}: - - template: /build/pipelines/templates/release-store.yaml@self + - template: /build/pipelines/templates/release-store.yaml@self + parameters: + publishToStore: ${{ parameters.publishStore }} - ${{ if eq(parameters.publishVPack, true) }}: - template: /build/pipelines/templates/release-vpack.yaml@self diff --git a/build/pipelines/templates/build-single-architecture.yaml b/build/pipelines/templates/build-single-architecture.yaml index 77626d752..037db209d 100644 --- a/build/pipelines/templates/build-single-architecture.yaml +++ b/build/pipelines/templates/build-single-architecture.yaml @@ -10,37 +10,39 @@ jobs: - job: Build${{ parameters.platform }} displayName: Build ${{ parameters.platform }} condition: ${{ parameters.condition }} + pool: + type: windows variables: BuildConfiguration: Release BuildPlatform: ${{ parameters.platform }} + StageOutputFolder: $(Build.BinariesDirectory)\$(BuildConfiguration)\${{ parameters.platform }} ${{ if eq(parameters.isReleaseBuild, true) }}: ${{ if eq(parameters.useReleaseAppxManifest, true) }}: - ExtraMSBuildArgs: '/p:IsStoreBuild=true /p:UseReleaseAppxManifest=true' + ExtraMSBuildArgs: '/p:IsStoreBuild=true /p:UseReleaseAppxManifest=true /p:FeatureStagingBranchName=$(Build.SourceBranchName)' ${{ if eq(parameters.useReleaseAppxManifest, false) }}: - ExtraMSBuildArgs: '/p:IsStoreBuild=true' + ExtraMSBuildArgs: '/p:IsStoreBuild=true /p:FeatureStagingBranchName=$(Build.SourceBranchName)' ${{ if eq(parameters.isReleaseBuild, false) }}: ${{ if eq(parameters.useReleaseAppxManifest, true) }}: - ExtraMSBuildArgs: '/p:UseReleaseAppxManifest=true' + ExtraMSBuildArgs: '/p:UseReleaseAppxManifest=true /p:FeatureStagingBranchName=$(Build.SourceBranchName)' ${{ if eq(parameters.useReleaseAppxManifest, false) }}: - ExtraMSBuildArgs: '' + ExtraMSBuildArgs: '/p:FeatureStagingBranchName=$(Build.SourceBranchName)' ${{ if eq(parameters.useReleaseAppxManifest, false) }}: ManifestFileName: 'Package.appxmanifest' ${{ if eq(parameters.useReleaseAppxManifest, true) }}: ManifestFileName: 'Package.Release.appxmanifest' - templateContext: - sdl: - binskim: - analyzeTargetGlob: +:f|$(Agent.BuildDirectory)\binskim\**\* - outputs: - - output: pipelineArtifact - displayName: Publish drop artifact - targetPath: $(Build.BinariesDirectory)\$(BuildConfiguration)\${{ parameters.platform }} - artifactName: drop-${{ parameters.platform }} - steps: - - checkout: self - fetchDepth: 1 + # binaries scanning tools are run on this directory and + # this directory is uploaded to pipeline artifacts. More info at https://aka.ms/obpipelines/artifacts + ob_outputDirectory: $(StageOutputFolder) + ob_artifactBaseName: 'drop-${{ parameters.platform }}' + # Setting up SDL Tools + ob_sdl_prefast_enabled: true + ob_sdl_prefast_runDuring: 'Build' + ob_sdl_checkCompliantCompilerWarnings: true + # Scope BinSkim analysis to our built binaries, excluding third-party DLLs we don't produce PDBs for. + ob_sdl_binskim_target: '+:f|$(StageOutputFolder)\Calculator\**\*.dll;+:f|$(StageOutputFolder)\Calculator\**\*.exe;-:f|$(StageOutputFolder)\Calculator\**\clrcompression.dll;-:f|$(StageOutputFolder)\Calculator\**\WebView2Loader.dll;-:f|$(StageOutputFolder)\Calculator\**\Microsoft.Web.WebView2.Core.dll' + steps: - ${{ if eq(parameters.isReleaseBuild, true) }}: - task: UniversalPackages@0 displayName: Download internals package @@ -49,7 +51,10 @@ jobs: downloadDirectory: $(Build.SourcesDirectory) vstsFeed: WindowsInboxApps vstsFeedPackage: calculator-internals - vstsPackageVersion: 0.0.122 + vstsPackageVersion: 0.0.124 + + - task: NuGetAuthenticate@1 + displayName: NuGet Authenticate - task: NuGetToolInstaller@1 displayName: Use NuGet 6.x @@ -57,10 +62,13 @@ jobs: versionSpec: 6.x - task: NuGetCommand@2 - displayName: NuGet restore src/Calculator.sln + displayName: Restore packages.config NuGet packages inputs: - command: custom - arguments: restore src/Calculator.sln -Verbosity Detailed + command: restore + restoreSolution: 'src/**/*.vcxproj' + feedsToUse: config + nugetConfigPath: nuget.config + restoreDirectory: $(Build.SourcesDirectory)\src\packages - task: PowerShell@2 displayName: Set version number in AppxManifest @@ -69,47 +77,23 @@ jobs: arguments: '-AppxManifest $(Build.SourcesDirectory)\src\Calculator\$(ManifestFileName) -Version $(Build.BuildNumber)' - task: VSBuild@1 - displayName: 'Build solution src/Calculator.sln' + displayName: 'Build solution src/Calculator.slnx' inputs: - solution: src/Calculator.sln - vsVersion: 17.0 - msbuildArgs: /bl:$(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)\Calculator.binlog /p:OutDir=$(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)\ /p:GenerateProjectSpecificOutputFolder=true /p:Version=$(Build.BuildNumber) /t:Publish /p:PublishDir=$(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)\publish\ $(ExtraMSBuildArgs) + solution: src/Calculator.slnx + vsVersion: 18.0 + msbuildArgs: /restore /bl:$(StageOutputFolder)\Calculator.binlog /p:OutDir=$(StageOutputFolder)\ /p:GenerateProjectSpecificOutputFolder=true /p:Version=$(Build.BuildNumber) /t:Publish /p:PublishDir=$(StageOutputFolder)\publish\ $(ExtraMSBuildArgs) platform: $(BuildPlatform) configuration: $(BuildConfiguration) maximumCpuCount: true - ${{ if eq(parameters.isReleaseBuild, true) }}: - - task: CopyFiles@2 - displayName: Copy Files for BinSkim analysis - inputs: - SourceFolder: '$(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform)\Calculator\' - # Setting up a folder to store all the binary files that we need BinSkim to scan. - # If we put more things than we produce pdbs for and can index (such as nuget packages that ship without pdbs), binskim will fail. - # Below are ignored files - # - clrcompression.dll - # - WebView2Loader.dll - # - Microsoft.Web.WebView2.Core.dll - Contents: | - **\*.dll - **\*.exe - !**\clrcompression.dll - !**\WebView2Loader.dll - !**\Microsoft.Web.WebView2.Core.dll - TargetFolder: '$(Agent.BuildDirectory)\binskim' - CleanTargetFolder: true - OverWrite: true - flattenFolders: false - analyzeTarget: '$(Agent.BuildDirectory)\binskim\*' - - task: PublishSymbols@2 displayName: Publish symbols inputs: - symbolsFolder: $(Build.BinariesDirectory)\$(BuildConfiguration)\$(BuildPlatform) - searchPattern: '**/*.pdb' + symbolsFolder: $(StageOutputFolder) + searchPattern: | # index executables to avoid degraded debugging experience - Package ES + **/*.pdb + **/*.exe + **/*.dll symbolServerType: teamServices treatNotIndexedAsWarning: true - - - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@1 - displayName: Run PoliCheck - inputs: - targetType: F diff --git a/build/pipelines/templates/package-msixbundle.yaml b/build/pipelines/templates/package-msixbundle.yaml index 102cf6799..66857b0a3 100644 --- a/build/pipelines/templates/package-msixbundle.yaml +++ b/build/pipelines/templates/package-msixbundle.yaml @@ -1,61 +1,53 @@ # This template contains a job which takes .msix packages which were built separately for each -# architecture (arm64, x86, etc.) and combines them into a single .msixbundle. In release builds, -# this job also signs the bundle and creates StoreBroker packages. +# architecture (arm64, x64, etc.) and combines them into a single .msixbundle. In release builds, +# this job also signs the bundle. StoreBroker payload creation and submission live in +# release-store.yaml so the payload never needs to cross a job boundary. parameters: signBundle: false - createStoreBrokerPackages: false + includeX86: false + makeAppx: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\MakeAppx.exe jobs: - job: Package dependsOn: - Buildx64 - - Buildx86 - BuildARM64 - condition: | - and - ( - in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'), - in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'), - in(dependencies.BuildARM64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped') - ) + - ${{ if eq(parameters.includeX86, true) }}: + - Buildx86 + ${{ if eq(parameters.includeX86, true) }}: + condition: | + and + ( + in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'), + in(dependencies.BuildARM64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'), + in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues', 'Skipped') + ) + ${{ else }}: + condition: | + and + ( + in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'), + in(dependencies.BuildARM64.result, 'Succeeded', 'SucceededWithIssues', 'Skipped') + ) + pool: + type: windows variables: skipComponentGovernanceDetection: true - StoreBrokerMediaRootPath: $(TEMP)\SBMedia - StoreBrokerPackagePath: $(Build.ArtifactStagingDirectory)\storeBrokerPayload - PackageX86: $[in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues')] PackageX64: $[in(dependencies.Buildx64.result, 'Succeeded', 'SucceededWithIssues')] PackageARM64: $[in(dependencies.BuildARM64.result, 'Succeeded', 'SucceededWithIssues')] - templateContext: - outputs: - - ${{ if eq(parameters.signBundle, false) }}: - - output: pipelineArtifact - displayName: Publish MsixBundle artifact - targetPath: $(Build.ArtifactStagingDirectory)\msixBundle - artifactName: msixBundle - - ${{ else }}: - - output: pipelineArtifact - displayName: Publish MsixBundleSigned artifact - targetPath: $(Build.ArtifactStagingDirectory)\msixBundle - artifactName: msixBundleSigned - - ${{ if eq(parameters.createStoreBrokerPackages, true) }}: - - output: pipelineArtifact - displayName: Publish StoreBroker Payload artifact - targetPath: $(StoreBrokerPackagePath) - artifactName: storeBrokerPayload + ${{ if eq(parameters.includeX86, true) }}: + PackageX86: $[in(dependencies.Buildx86.result, 'Succeeded', 'SucceededWithIssues')] - steps: - - checkout: self - fetchDepth: 1 - - - task: DownloadPipelineArtifact@2 - displayName: Download all .msix artifacts (x86) - condition: and(succeeded(), eq(variables.PackageX86, 'true')) - inputs: - artifactName: drop-x86 - itemPattern: '**/*.msix' - targetPath: $(Build.ArtifactStagingDirectory)\drop\x86 + ob_outputDirectory: $(Build.ArtifactStagingDirectory)\msixBundle + ${{ if eq(parameters.signBundle, true) }}: + ob_artifactBaseName: msixBundleSigned + ${{ else }}: + ob_artifactBaseName: msixBundle + ob_sdl_binskim_enabled: false + ob_sdl_sbom_enabled: false + steps: - task: DownloadPipelineArtifact@2 displayName: Download all .msix artifacts (x64) condition: and(succeeded(), eq(variables.PackageX64, 'true')) @@ -64,6 +56,15 @@ jobs: itemPattern: '**/*.msix' targetPath: $(Build.ArtifactStagingDirectory)\drop\x64 + - ${{ if eq(parameters.includeX86, true) }}: + - task: DownloadPipelineArtifact@2 + displayName: Download all .msix artifacts (x86) + condition: and(succeeded(), eq(variables.PackageX86, 'true')) + inputs: + artifactName: drop-x86 + itemPattern: '**/*.msix' + targetPath: $(Build.ArtifactStagingDirectory)\drop\x86 + - task: DownloadPipelineArtifact@2 displayName: Download all .msix artifacts (ARM64) condition: and(succeeded(), eq(variables.PackageARM64, 'true')) @@ -72,7 +73,7 @@ jobs: itemPattern: '**/*.msix' targetPath: $(Build.ArtifactStagingDirectory)\drop\ARM64 - - ${{ if or(eq(parameters.createStoreBrokerPackages, true), eq(parameters.signBundle, true)) }}: + - ${{ if eq(parameters.signBundle, true) }}: - task: UniversalPackages@0 displayName: Download internals package inputs: @@ -80,7 +81,7 @@ jobs: downloadDirectory: $(Build.SourcesDirectory) vstsFeed: WindowsInboxApps vstsFeedPackage: calculator-internals - vstsPackageVersion: 0.0.122 + vstsPackageVersion: 0.0.124 - task: PowerShell@2 displayName: Generate MsixBundle mapping @@ -91,7 +92,7 @@ jobs: - powershell: | $buildVersion = [version]$Env:BUILDVERSION $bundleVersion = "2021.$($buildVersion.Minor).$($buildVersion.Build).$($buildVersion.Revision)" - & "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\MakeAppx.exe" bundle /v /bv $bundleVersion /f $Env:MAPPINGFILEPATH /p $Env:OUTPUTPATH + & "${{ parameters.makeAppx }}" bundle /v /bv $bundleVersion /f $Env:MAPPINGFILEPATH /p $Env:OUTPUTPATH displayName: Make MsixBundle env: BUILDVERSION: $(Build.BuildNumber) @@ -159,35 +160,3 @@ jobs: } ] - - ${{ if eq(parameters.createStoreBrokerPackages, true) }}: - - powershell: | - # Just modify this line to indicate where your en-us PDP file is. Leave the other lines alone. - $enUSPdpFilePath = "$(Build.SourcesDirectory)\PDP\en-US\PDP.xml" - - # This is going to save the release value from the PDP file to $(SBMediaReleaseVersion) - # which you can then refer to in the UniversalPackages task. - $release = ([xml](Get-Content $enUSPdpFilePath)).ProductDescription.Release.Trim() - Write-Host "##vso[task.setvariable variable=SBMediaReleaseVersion;]$release" - displayName: Determine the PDP Media release version from the en-us PDP file - - - task: UniversalPackages@0 - displayName: Download PDP media (screenshots, trailers) universal package - inputs: - command: download - downloadDirectory: $(StoreBrokerMediaRootPath)/$(SBMediaReleaseVersion) - vstsFeed: WindowsInboxApps - vstsFeedPackage: calculator-pdp-media - vstsPackageVersion: $(SBMediaReleaseVersion) - - - task: MS-RDX-MRO.windows-store-publish.package-task.store-package@3 - displayName: Create StoreBroker Payload - inputs: - serviceEndpoint: Calculator StoreBroker FC - sbConfigPath: Tools/Build/StoreBroker/SBCalculatorConfig.json - sourceFolder: $(Build.ArtifactStagingDirectory)/msixBundle - contents: Microsoft.WindowsCalculator_8wekyb3d8bbwe.msixbundle - pdpPath: $(Build.SourcesDirectory)\PDP - pdpInclude: PDP.xml - pdpMediaPath: $(StoreBrokerMediaRootPath) - outSBPackagePath: $(StoreBrokerPackagePath) - outSBName: SBCalculator diff --git a/build/pipelines/templates/release-store.yaml b/build/pipelines/templates/release-store.yaml index f47152d05..6145e55e1 100644 --- a/build/pipelines/templates/release-store.yaml +++ b/build/pipelines/templates/release-store.yaml @@ -1,44 +1,107 @@ # This template contains jobs to release the app to the Store. +# The signed msixbundle from the Package job is downloaded here, the StoreBroker +# payload is created (and published as an artifact for inspection), and then +# optionally flighted to the Store. Flight + Aero are gated by publishToStore so +# the pipeline can be queued with the "Publish and flight" checkbox unchecked +# to validate payload creation without actually shipping to the Store. + +parameters: + publishToStore: true jobs: - job: ReleaseStore dependsOn: Package - templateContext: - type: releaseJob - isProduction: true - inputs: - - input: pipelineArtifact - artifactName: storeBrokerPayload + pool: + type: windows variables: FlightId: 161f0975-cb5f-475b-8ef6-26383c37621f AppId: 9WZDNCRFHVN5 ProductId: 00009007199266248474 + StoreBrokerMediaRootPath: $(Pipeline.Workspace)\SBMedia + StoreBrokerPackagePath: $(Build.ArtifactStagingDirectory)\storeBrokerPayload + + ob_git_checkout: true + ob_outputDirectory: $(Build.ArtifactStagingDirectory)\storeBrokerPayload + ob_artifactBaseName: storeBrokerPayload + ob_sdl_binskim_enabled: false + ob_sdl_policheck_enabled: false + ob_sdl_eslint_enabled: false + ob_sdl_antimalwareScan_enabled: false + ob_sdl_credscan_enabled: false + ob_sdl_sbom_enabled: false + steps: - - checkout: none + - task: DownloadPipelineArtifact@2 + displayName: Download signed msixbundle + inputs: + artifactName: msixBundleSigned + targetPath: $(Build.ArtifactStagingDirectory)\msixBundle - - task: MS-RDX-MRO.windows-store-publish.flight-task.store-flight@3 - displayName: Flight StoreBroker Payload to team ring - name: StoreBrokerFlight + - task: UniversalPackages@0 + displayName: Download internals package inputs: - serviceEndpoint: Calculator StoreBroker FC - appId: $(AppId) - flightId: $(FlightId) - inputMethod: JsonAndZip - jsonPath: $(Pipeline.Workspace)\SBCalculator.json - zipPath: $(Pipeline.Workspace)\SBCalculator.zip - force: true - skipPolling: true - targetPublishMode: Immediate - logPath: $(Pipeline.Workspace)\StoreBroker.log - deletePackages: true - numberOfPackagesToKeep: 0 - - - task: APS-Aero-Package.aero-upload-task.AeroUploadTask.AeroUpload@2 - displayName: Aero Upload (FC) + command: download + downloadDirectory: $(Build.SourcesDirectory) + vstsFeed: WindowsInboxApps + vstsFeedPackage: calculator-internals + vstsPackageVersion: 0.0.124 + + - powershell: | + # Just modify this line to indicate where your en-us PDP file is. Leave the other lines alone. + $enUSPdpFilePath = "$(Build.SourcesDirectory)\PDP\en-US\PDP.xml" + + # This is going to save the release value from the PDP file to $(SBMediaReleaseVersion) + # which you can then refer to in the UniversalPackages task. + $release = ([xml](Get-Content $enUSPdpFilePath)).ProductDescription.Release.Trim() + Write-Host "##vso[task.setvariable variable=SBMediaReleaseVersion;]$release" + displayName: Determine the PDP Media release version from the en-us PDP file + + - task: UniversalPackages@0 + displayName: Download PDP media (screenshots, trailers) universal package + inputs: + command: download + downloadDirectory: $(StoreBrokerMediaRootPath)/$(SBMediaReleaseVersion) + vstsFeed: WindowsInboxApps + vstsFeedPackage: calculator-pdp-media + vstsPackageVersion: $(SBMediaReleaseVersion) + + - task: MS-RDX-MRO.windows-store-publish.package-task.store-package@3 + displayName: Create StoreBroker Payload inputs: - productId: $(ProductId) - flightId: $(FlightId) - submissionId: $(StoreBrokerFlight.WS_SubmissionId) - submissionDataPath: $(Pipeline.Workspace)\SBCalculator.json - packagePath: $(Pipeline.Workspace)\SBCalculator.zip - serviceEndpoint: AeroUpload-Calculator-FC + serviceEndpoint: Calculator StoreBroker FC + sbConfigPath: Tools/Build/StoreBroker/SBCalculatorConfig.json + sourceFolder: $(Build.ArtifactStagingDirectory)\msixBundle + contents: Microsoft.WindowsCalculator_8wekyb3d8bbwe.msixbundle + pdpPath: $(Build.SourcesDirectory)\PDP + pdpInclude: PDP.xml + pdpMediaPath: $(StoreBrokerMediaRootPath) + outSBPackagePath: $(StoreBrokerPackagePath) + outSBName: SBCalculator + + - ${{ if eq(parameters.publishToStore, true) }}: + - task: MS-RDX-MRO.windows-store-publish.flight-task.store-flight@3 + displayName: Flight StoreBroker Payload to team ring + name: StoreBrokerFlight + inputs: + serviceEndpoint: Calculator StoreBroker FC + appId: $(AppId) + flightId: $(FlightId) + inputMethod: JsonAndZip + jsonPath: $(StoreBrokerPackagePath)\SBCalculator.json + zipPath: $(StoreBrokerPackagePath)\SBCalculator.zip + force: true + skipPolling: true + targetPublishMode: Immediate + logPath: $(StoreBrokerPackagePath)\StoreBroker.log + deletePackages: true + numberOfPackagesToKeep: 0 + + - task: APS-Aero-Package.aero-upload-task.AeroUploadTask.AeroUpload@2 + displayName: Aero Upload (FC) + inputs: + productId: $(ProductId) + flightId: $(FlightId) + submissionId: $(StoreBrokerFlight.WS_SubmissionId) + submissionDataPath: $(StoreBrokerPackagePath)\SBCalculator.json + packagePath: $(StoreBrokerPackagePath)\SBCalculator.zip + serviceEndpoint: AeroUpload-Calculator-FC diff --git a/build/pipelines/templates/release-vpack.yaml b/build/pipelines/templates/release-vpack.yaml index b04525b8c..c97dabcbf 100644 --- a/build/pipelines/templates/release-vpack.yaml +++ b/build/pipelines/templates/release-vpack.yaml @@ -4,8 +4,19 @@ jobs: - job: ReleaseVPack dependsOn: Package + pool: + type: windows variables: skipComponentGovernanceDetection: true + + ob_git_checkout: true + ob_outputDirectory: $(Build.ArtifactStagingDirectory)\releaseVPack + ob_sdl_binskim_enabled: false + ob_sdl_policheck_enabled: false + ob_sdl_eslint_enabled: false + ob_sdl_antimalwareScan_enabled: false + ob_sdl_credscan_enabled: false + ob_sdl_sbom_enabled: false templateContext: outputs: - output: pipelineArtifact @@ -15,11 +26,11 @@ jobs: sbomEnabled: false steps: - - checkout: none - - - download: current - displayName: Download msixBundleSigned artifact - artifact: msixBundleSigned + - task: DownloadPipelineArtifact@2 + displayName: Download signed msixBundle + inputs: + artifactName: msixBundleSigned + targetPath: $(Pipeline.Workspace)\msixBundleSigned - task: CopyFiles@2 displayName: Copy signed MsixBundle to vpack staging folder @@ -44,7 +55,7 @@ jobs: downloadDirectory: $(Build.SourcesDirectory) vstsFeed: WindowsInboxApps vstsFeedPackage: calculator-internals - vstsPackageVersion: 0.0.122 + vstsPackageVersion: 0.0.124 - pwsh: | $configPath = "$(Build.SourcesDirectory)\Tools\Build\Signing\ESRP-auth.json" diff --git a/build/pipelines/templates/run-ui-tests.yaml b/build/pipelines/templates/run-ui-tests.yaml index 8801a9fbd..bb5b997c1 100644 --- a/build/pipelines/templates/run-ui-tests.yaml +++ b/build/pipelines/templates/run-ui-tests.yaml @@ -9,13 +9,26 @@ jobs: displayName: UITests ${{ parameters.platform }} dependsOn: Build${{ parameters.platform }} condition: succeeded() + pool: + type: windows + isCustom: true + name: EssentialExperiences-Win11 + image: Win11Enterprise-BuildTools2022 variables: skipComponentGovernanceDetection: true DropName: drop-${{ parameters.platform }} + # Test results are just log files, not release binaries — skip SDL scanning + ob_outputDirectory: '$(Common.TestResultsDirectory)' + ob_artifactBaseName: 'drop-ui-tests-${{ parameters.platform }}-Attempt$(System.JobAttempt)' + ob_sdl_binskim_enabled: false + ob_sdl_sbom_enabled: false steps: - - checkout: self - fetchDepth: 1 + - task: UseDotNet@2 + displayName: Install .NET 10 SDK + inputs: + packageType: 'sdk' + version: '10.x' - task: PowerShell@2 displayName: Turn off animation effects @@ -29,12 +42,14 @@ jobs: width: 1920 height: 1080 - - download: current + - task: DownloadPipelineArtifact@2 displayName: Download MsixBundle and CalculatorUITests - artifact: $(DropName) - patterns: | - Calculator/AppPackages/** - publish/** + inputs: + artifactName: $(DropName) + itemPattern: | + Calculator/AppPackages/** + publish/** + targetPath: $(Pipeline.Workspace)\$(DropName) - powershell: | $(Build.SourcesDirectory)/build/scripts/SignTestApp.ps1 -AppToSign '$(Pipeline.Workspace)/$(DropName)/Calculator/AppPackages/Calculator_*_Test/Calculator_*.msixbundle' diff --git a/build/pipelines/templates/run-unit-tests.yaml b/build/pipelines/templates/run-unit-tests.yaml index 84e76ec26..d31cc9349 100644 --- a/build/pipelines/templates/run-unit-tests.yaml +++ b/build/pipelines/templates/run-unit-tests.yaml @@ -9,17 +9,32 @@ jobs: displayName: UnitTests ${{ parameters.platform }} dependsOn: Build${{ parameters.platform }} condition: succeeded() + pool: + type: windows + isCustom: true + name: EssentialExperiences-windows-2022 variables: skipComponentGovernanceDetection: true UnitTestsDir: $(Pipeline.Workspace)\drop-${{ parameters.platform }}\CalculatorUnitTests\AppPackages\CalculatorUnitTests_Test + # Test results are just log files, not release binaries — skip SDL scanning + ob_outputDirectory: '$(Common.TestResultsDirectory)' + ob_artifactBaseName: 'drop-unit-tests-${{ parameters.platform }}-Attempt$(System.JobAttempt)' + ob_sdl_binskim_enabled: false + ob_sdl_sbom_enabled: false + steps: - - checkout: self - fetchDepth: 1 - - - download: current + - task: UseDotNet@2 + displayName: Install .NET 10 SDK + inputs: + packageType: 'sdk' + version: '10.x' + + - task: DownloadPipelineArtifact@2 displayName: Download CalculatorUnitTests - artifact: drop-${{ parameters.platform }} - patterns: '**/CalculatorUnitTests_Test/**' + inputs: + artifactName: drop-${{ parameters.platform }} + itemPattern: '**/CalculatorUnitTests_Test/**' + targetPath: $(Pipeline.Workspace)\drop-${{ parameters.platform }} - powershell: | $(Build.SourcesDirectory)/build/scripts/SignTestApp.ps1 -AppToSign '$(UnitTestsDir)\CalculatorUnitTests.msix' diff --git a/src/CalcManager/CalcManager.vcxproj b/src/CalcManager/CalcManager.vcxproj index ab8c22625..283154fcb 100644 --- a/src/CalcManager/CalcManager.vcxproj +++ b/src/CalcManager/CalcManager.vcxproj @@ -33,7 +33,7 @@ CalcManager false en-US - 15.0 + 18.0 true Windows Store 10.0 @@ -48,23 +48,23 @@ StaticLibrary true - v143 + v145 StaticLibrary true - v143 + v145 StaticLibrary true - v143 + v145 StaticLibrary false true - v143 + v145 NativeRecommendedRules.ruleset true @@ -72,7 +72,7 @@ StaticLibrary false true - v143 + v145 NativeRecommendedRules.ruleset true @@ -80,7 +80,7 @@ StaticLibrary false true - v143 + v145 NativeRecommendedRules.ruleset true diff --git a/src/CalcViewModel/CalcViewModel.vcxproj b/src/CalcViewModel/CalcViewModel.vcxproj index d94505a08..1df213e66 100644 --- a/src/CalcViewModel/CalcViewModel.vcxproj +++ b/src/CalcViewModel/CalcViewModel.vcxproj @@ -42,35 +42,35 @@ DynamicLibrary true - v143 + v145 DynamicLibrary true - v143 + v145 DynamicLibrary true - v143 + v145 DynamicLibrary false true - v143 + v145 DynamicLibrary false true - v143 + v145 DynamicLibrary false true - v143 + v145 diff --git a/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj b/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj index 961d2cae8..210c03af3 100644 --- a/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj +++ b/src/CalcViewModelCopyForUT/CalcViewModelCopyForUT.vcxproj @@ -42,35 +42,35 @@ StaticLibrary true - v143 + v145 StaticLibrary true - v143 + v145 StaticLibrary true - v143 + v145 StaticLibrary false true - v143 + v145 StaticLibrary false true - v143 + v145 StaticLibrary false true - v143 + v145 diff --git a/src/Calculator.ManagedViewModels/Calculator.ManagedViewModels.csproj b/src/Calculator.ManagedViewModels/Calculator.ManagedViewModels.csproj index bead07e33..1e1a04c7e 100644 --- a/src/Calculator.ManagedViewModels/Calculator.ManagedViewModels.csproj +++ b/src/Calculator.ManagedViewModels/Calculator.ManagedViewModels.csproj @@ -13,9 +13,10 @@ UAP 10.0.26100.0 10.0.17763.0 - 14 + 18 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 9.0 AnyCPU diff --git a/src/Calculator.sln b/src/Calculator.sln deleted file mode 100644 index dc3f48fa9..000000000 --- a/src/Calculator.sln +++ /dev/null @@ -1,189 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.0.0 -MinimumVisualStudioVersion = 17.0.0.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3A5DF651-B8A1-45CA-9135-964A6FC7F5D1}" - ProjectSection(SolutionItems) = preProject - ..\.clang-format = ..\.clang-format - nuget.config = nuget.config - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calculator", "Calculator\Calculator.csproj", "{3B773403-B0D6-4F9A-948E-512A7A5FB315}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalcManager", "CalcManager\CalcManager.vcxproj", "{311E866D-8B93-4609-A691-265941FEE101}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalcViewModel", "CalcViewModel\CalcViewModel.vcxproj", "{812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalculatorUnitTests", "CalculatorUnitTests\CalculatorUnitTests.vcxproj", "{D3BAED2C-4B07-4E1D-8807-9D6499450349}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CalculatorUITests", "CalculatorUITests\CalculatorUITests.csproj", "{B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CalculatorUITestFramework", "CalculatorUITestFramework\CalculatorUITestFramework.csproj", "{96454213-94AF-457D-9DF9-B14F80E7770F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GraphingImpl", "GraphingImpl\GraphingImpl.vcxproj", "{52E03A58-B378-4F50-8BFB-F659FB85E790}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GraphControl", "GraphControl\GraphControl.vcxproj", "{E727A92B-F149-492C-8117-C039A298719B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TraceLogging", "TraceLogging\TraceLogging.vcxproj", "{FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalcViewModelCopyForUT", "CalcViewModelCopyForUT\CalcViewModelCopyForUT.vcxproj", "{CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calculator.ManagedViewModels", "Calculator.ManagedViewModels\Calculator.ManagedViewModels.csproj", "{2179CFDE-CDED-4DF0-8C24-A0EF6B425771}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|ARM64 = Debug|ARM64 - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|ARM64 = Release|ARM64 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|ARM64.Build.0 = Debug|ARM64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|ARM64.Deploy.0 = Debug|ARM64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x64.ActiveCfg = Debug|x64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x64.Build.0 = Debug|x64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x64.Deploy.0 = Debug|x64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x86.ActiveCfg = Debug|x86 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x86.Build.0 = Debug|x86 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Debug|x86.Deploy.0 = Debug|x86 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|ARM64.ActiveCfg = Release|ARM64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|ARM64.Build.0 = Release|ARM64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|ARM64.Deploy.0 = Release|ARM64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x64.ActiveCfg = Release|x64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x64.Build.0 = Release|x64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x64.Deploy.0 = Release|x64 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x86.ActiveCfg = Release|x86 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x86.Build.0 = Release|x86 - {3B773403-B0D6-4F9A-948E-512A7A5FB315}.Release|x86.Deploy.0 = Release|x86 - {311E866D-8B93-4609-A691-265941FEE101}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {311E866D-8B93-4609-A691-265941FEE101}.Debug|ARM64.Build.0 = Debug|ARM64 - {311E866D-8B93-4609-A691-265941FEE101}.Debug|x64.ActiveCfg = Debug|x64 - {311E866D-8B93-4609-A691-265941FEE101}.Debug|x64.Build.0 = Debug|x64 - {311E866D-8B93-4609-A691-265941FEE101}.Debug|x86.ActiveCfg = Debug|Win32 - {311E866D-8B93-4609-A691-265941FEE101}.Debug|x86.Build.0 = Debug|Win32 - {311E866D-8B93-4609-A691-265941FEE101}.Release|ARM64.ActiveCfg = Release|ARM64 - {311E866D-8B93-4609-A691-265941FEE101}.Release|ARM64.Build.0 = Release|ARM64 - {311E866D-8B93-4609-A691-265941FEE101}.Release|x64.ActiveCfg = Release|x64 - {311E866D-8B93-4609-A691-265941FEE101}.Release|x64.Build.0 = Release|x64 - {311E866D-8B93-4609-A691-265941FEE101}.Release|x86.ActiveCfg = Release|Win32 - {311E866D-8B93-4609-A691-265941FEE101}.Release|x86.Build.0 = Release|Win32 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|ARM64.Build.0 = Debug|ARM64 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|x64.ActiveCfg = Debug|x64 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|x64.Build.0 = Debug|x64 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|x86.ActiveCfg = Debug|Win32 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Debug|x86.Build.0 = Debug|Win32 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|ARM64.ActiveCfg = Release|ARM64 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|ARM64.Build.0 = Release|ARM64 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|x64.ActiveCfg = Release|x64 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|x64.Build.0 = Release|x64 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|x86.ActiveCfg = Release|Win32 - {812D1A7B-B8AC-49E4-8E6D-AF5D59500D56}.Release|x86.Build.0 = Release|Win32 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x64.ActiveCfg = Debug|x64 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x64.Build.0 = Debug|x64 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x64.Deploy.0 = Debug|x64 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x86.ActiveCfg = Debug|Win32 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x86.Build.0 = Debug|Win32 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Debug|x86.Deploy.0 = Debug|Win32 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|ARM64.ActiveCfg = Release|ARM64 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x64.ActiveCfg = Release|x64 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x64.Build.0 = Release|x64 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x64.Deploy.0 = Release|x64 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x86.ActiveCfg = Release|Win32 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x86.Build.0 = Release|Win32 - {D3BAED2C-4B07-4E1D-8807-9D6499450349}.Release|x86.Deploy.0 = Release|Win32 - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|ARM64.Build.0 = Debug|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|x64.ActiveCfg = Debug|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|x64.Build.0 = Debug|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|x86.ActiveCfg = Debug|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Debug|x86.Build.0 = Debug|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|ARM64.ActiveCfg = Release|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|ARM64.Build.0 = Release|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|x64.ActiveCfg = Release|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|x64.Build.0 = Release|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|x86.ActiveCfg = Release|Any CPU - {B2C5ADFF-D6B5-48C1-BB8C-571BFD583D7F}.Release|x86.Build.0 = Release|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|ARM64.Build.0 = Debug|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|x64.ActiveCfg = Debug|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|x64.Build.0 = Debug|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|x86.ActiveCfg = Debug|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Debug|x86.Build.0 = Debug|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|ARM64.ActiveCfg = Release|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|ARM64.Build.0 = Release|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|x64.ActiveCfg = Release|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|x64.Build.0 = Release|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|x86.ActiveCfg = Release|Any CPU - {96454213-94AF-457D-9DF9-B14F80E7770F}.Release|x86.Build.0 = Release|Any CPU - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|ARM64.Build.0 = Debug|ARM64 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|x64.ActiveCfg = Debug|x64 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|x64.Build.0 = Debug|x64 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|x86.ActiveCfg = Debug|Win32 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Debug|x86.Build.0 = Debug|Win32 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|ARM64.ActiveCfg = Release|ARM64 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|ARM64.Build.0 = Release|ARM64 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|x64.ActiveCfg = Release|x64 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|x64.Build.0 = Release|x64 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|x86.ActiveCfg = Release|Win32 - {52E03A58-B378-4F50-8BFB-F659FB85E790}.Release|x86.Build.0 = Release|Win32 - {E727A92B-F149-492C-8117-C039A298719B}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {E727A92B-F149-492C-8117-C039A298719B}.Debug|ARM64.Build.0 = Debug|ARM64 - {E727A92B-F149-492C-8117-C039A298719B}.Debug|x64.ActiveCfg = Debug|x64 - {E727A92B-F149-492C-8117-C039A298719B}.Debug|x64.Build.0 = Debug|x64 - {E727A92B-F149-492C-8117-C039A298719B}.Debug|x86.ActiveCfg = Debug|Win32 - {E727A92B-F149-492C-8117-C039A298719B}.Debug|x86.Build.0 = Debug|Win32 - {E727A92B-F149-492C-8117-C039A298719B}.Release|ARM64.ActiveCfg = Release|ARM64 - {E727A92B-F149-492C-8117-C039A298719B}.Release|ARM64.Build.0 = Release|ARM64 - {E727A92B-F149-492C-8117-C039A298719B}.Release|x64.ActiveCfg = Release|x64 - {E727A92B-F149-492C-8117-C039A298719B}.Release|x64.Build.0 = Release|x64 - {E727A92B-F149-492C-8117-C039A298719B}.Release|x86.ActiveCfg = Release|Win32 - {E727A92B-F149-492C-8117-C039A298719B}.Release|x86.Build.0 = Release|Win32 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|ARM64.Build.0 = Debug|ARM64 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|x64.ActiveCfg = Debug|x64 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|x64.Build.0 = Debug|x64 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|x86.ActiveCfg = Debug|Win32 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Debug|x86.Build.0 = Debug|Win32 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|ARM64.ActiveCfg = Release|ARM64 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|ARM64.Build.0 = Release|ARM64 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|x64.ActiveCfg = Release|x64 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|x64.Build.0 = Release|x64 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|x86.ActiveCfg = Release|Win32 - {FC81FF41-02CD-4CD9-9BC5-45A1E39AC6ED}.Release|x86.Build.0 = Release|Win32 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|x64.ActiveCfg = Debug|x64 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|x64.Build.0 = Debug|x64 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|x86.ActiveCfg = Debug|Win32 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Debug|x86.Build.0 = Debug|Win32 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|ARM64.ActiveCfg = Release|ARM64 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|x64.ActiveCfg = Release|x64 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|x64.Build.0 = Release|x64 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|x86.ActiveCfg = Release|Win32 - {CC9B4FA7-D746-4F52-9401-0AD1B4D6B16D}.Release|x86.Build.0 = Release|Win32 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|ARM64.Build.0 = Debug|ARM64 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|x64.ActiveCfg = Debug|x64 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|x64.Build.0 = Debug|x64 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|x86.ActiveCfg = Debug|x86 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Debug|x86.Build.0 = Debug|x86 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|ARM64.ActiveCfg = Release|ARM64 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|ARM64.Build.0 = Release|ARM64 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|x64.ActiveCfg = Release|x64 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|x64.Build.0 = Release|x64 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|x86.ActiveCfg = Release|x86 - {2179CFDE-CDED-4DF0-8C24-A0EF6B425771}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {0EA53F83-5FA6-46A1-A290-A3C6962D2CAC} - EndGlobalSection -EndGlobal diff --git a/src/Calculator.slnx b/src/Calculator.slnx new file mode 100644 index 000000000..b8fdba1de --- /dev/null +++ b/src/Calculator.slnx @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Calculator/Calculator.csproj b/src/Calculator/Calculator.csproj index 4cdb87940..1ae72e081 100644 --- a/src/Calculator/Calculator.csproj +++ b/src/Calculator/Calculator.csproj @@ -18,7 +18,7 @@ false false - 14 + 18 10.0 black 512 @@ -35,6 +35,7 @@ $(Platform) 0 /disableStackTraceMetadata /disableExceptionMessages + 9.0 diff --git a/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj b/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj index 1614df729..5b737712c 100644 --- a/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj +++ b/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj @@ -1,6 +1,6 @@  - net8.0 + net10.0 AnyCPU diff --git a/src/CalculatorUITests/CalculatorUITests.csproj b/src/CalculatorUITests/CalculatorUITests.csproj index fcb245ea2..ab10816ec 100644 --- a/src/CalculatorUITests/CalculatorUITests.csproj +++ b/src/CalculatorUITests/CalculatorUITests.csproj @@ -1,6 +1,6 @@ - net8.0 + net10.0 false AnyCPU diff --git a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj index 2449b7624..cda490251 100644 --- a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj +++ b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj @@ -4,7 +4,7 @@ {d3baed2c-4b07-4e1d-8807-9d6499450349} CalculatorUnitTests en-US - 15.0 + 18.0 true Windows Store 10.0.26100.0 @@ -47,38 +47,38 @@ Application true - v143 + v145 Application true - v143 + v145 true Application true - v143 + v145 Application false true - v143 + v145 true Application false true - v143 + v145 true Application false true - v143 + v145 true diff --git a/src/GraphControl/Control/Grapher.cpp b/src/GraphControl/Control/Grapher.cpp index 20c16fad2..9ba431113 100644 --- a/src/GraphControl/Control/Grapher.cpp +++ b/src/GraphControl/Control/Grapher.cpp @@ -373,7 +373,8 @@ namespace GraphControl request += s_getGraphClosingTags; } - if (graphExpression = m_solver->ParseInput(request, m_errorCode, m_errorType)) + graphExpression = m_solver->ParseInput(request, m_errorCode, m_errorType); + if (graphExpression) { initResult = TryInitializeGraph(keepCurrentView, graphExpression.get()); diff --git a/src/GraphControl/GraphControl.vcxproj b/src/GraphControl/GraphControl.vcxproj index f00b2c652..f878b51dd 100644 --- a/src/GraphControl/GraphControl.vcxproj +++ b/src/GraphControl/GraphControl.vcxproj @@ -42,35 +42,35 @@ DynamicLibrary true - v143 + v145 DynamicLibrary true - v143 + v145 DynamicLibrary true - v143 + v145 DynamicLibrary false true - v143 + v145 DynamicLibrary false true - v143 + v145 DynamicLibrary false true - v143 + v145 diff --git a/src/GraphingImpl/GraphingImpl.vcxproj b/src/GraphingImpl/GraphingImpl.vcxproj index 75a729257..38f1865a2 100644 --- a/src/GraphingImpl/GraphingImpl.vcxproj +++ b/src/GraphingImpl/GraphingImpl.vcxproj @@ -42,35 +42,35 @@ DynamicLibrary true - v143 + v145 DynamicLibrary true - v143 + v145 DynamicLibrary true - v143 + v145 DynamicLibrary false true - v143 + v145 DynamicLibrary false true - v143 + v145 DynamicLibrary false true - v143 + v145 diff --git a/src/TraceLogging/TraceLogging.vcxproj b/src/TraceLogging/TraceLogging.vcxproj index 7fe46575b..dab89a73c 100644 --- a/src/TraceLogging/TraceLogging.vcxproj +++ b/src/TraceLogging/TraceLogging.vcxproj @@ -42,35 +42,35 @@ DynamicLibrary true - v143 + v145 DynamicLibrary true - v143 + v145 DynamicLibrary true - v143 + v145 DynamicLibrary false true - v143 + v145 DynamicLibrary false true - v143 + v145 DynamicLibrary false true - v143 + v145