diff --git a/.azure-pipelines/build-job.yml b/.azure-pipelines/build-job.yml index 9137d159fd..02c5233de2 100644 --- a/.azure-pipelines/build-job.yml +++ b/.azure-pipelines/build-job.yml @@ -13,6 +13,9 @@ parameters: - name: container type: string +- name: targetFramework + type: string + - name: timeoutInMinutes type: number @@ -78,6 +81,14 @@ jobs: displayName: ${{ parameters.displayName }} pool: ${{ parameters.pool }} timeoutInMinutes: ${{ parameters.timeoutInMinutes }} + ${{ if eq(parameters.targetFramework, 'all') }}: + strategy: + matrix: + NET6.0: + targetFramework: 'net6.0' + NET8.0: + targetFramework: 'net8.0' + ${{ if ne(parameters.container, '') }}: container: ${{ parameters.container }} @@ -100,6 +111,8 @@ jobs: DisableDockerDetector: true nugetMultiFeedWarnLevel: none CheckoutBranch: ${{ parameters.branch }} + ${{ if ne(parameters.targetFramework, 'all') }}: + targetFramework: ${{ parameters.targetFramework }} templateContext: outputs: - ${{ if or(parameters.unitTests, parameters.functionalTests) }}: @@ -150,7 +163,7 @@ jobs: - task: NuGetAuthenticate@1 # Build agent layout - - script: ${{ variables.devCommand }} layout Release ${{ parameters.os }}-${{ parameters.arch }} + - script: ${{ variables.devCommand }} layout $(targetFramework) Release ${{ parameters.os }}-${{ parameters.arch }} workingDirectory: src displayName: Build & Layout Release retryCountOnTaskFailure: 5 @@ -175,7 +188,7 @@ jobs: installationPath: 'C:\Program Files (x86)\dotnet' env: PROCESSOR_ARCHITECTURE: x86 - - script: ${{ variables.devCommand }} testl0 Debug ${{ parameters.os }}-${{ parameters.arch }} + - script: ${{ variables.devCommand }} testl0 $(targetFramework) Debug ${{ parameters.os }}-${{ parameters.arch }} workingDirectory: src displayName: Unit tests timeoutInMinutes: 5 @@ -189,7 +202,7 @@ jobs: version: '6.0.424' packageType: sdk performMultiLevelLookup: true - - script: ${{ variables.devCommand }} testl1 Debug ${{ parameters.os }}-${{ parameters.arch }} + - script: ${{ variables.devCommand }} testl1 $(targetFramework) Debug ${{ parameters.os }}-${{ parameters.arch }} workingDirectory: src displayName: Functional tests @@ -242,11 +255,11 @@ jobs: flavor: ${{ parameters.arch }} # Create agent package zip - - script: "${{ variables.devCommand }} package Release ${{ parameters.os }}-${{ parameters.arch }}" + - script: "${{ variables.devCommand }} package $(targetFramework) Release ${{ parameters.os }}-${{ parameters.arch }}" workingDirectory: src displayName: Package Release - - script: "${{ variables.devCommand }} hash Release ${{ parameters.os }}-${{ parameters.arch }}" + - script: "${{ variables.devCommand }} hash $(targetFramework) Release ${{ parameters.os }}-${{ parameters.arch }}" workingDirectory: src displayName: Hash Package diff --git a/.azure-pipelines/build-jobs.yml b/.azure-pipelines/build-jobs.yml index 22d58112b9..9ad597440f 100644 --- a/.azure-pipelines/build-jobs.yml +++ b/.azure-pipelines/build-jobs.yml @@ -15,6 +15,9 @@ parameters: type: string default: '' +- name: targetFramework + type: string + - name: timeoutInMinutes type: number default: 120 @@ -81,6 +84,7 @@ jobs: verifySigning: ${{ parameters.verifySigning }} publishArtifact: ${{ parameters.publishArtifacts }} packageType: agent + targetFramework: ${{ parameters.targetFramework }} - ${{ if parameters.buildAlternatePackage }}: - template: /.azure-pipelines/build-job.yml@self @@ -99,4 +103,5 @@ jobs: sign: ${{ parameters.sign }} verifySigning: ${{ parameters.verifySigning }} publishArtifact: ${{ parameters.publishArtifacts }} - packageType: pipelines-agent \ No newline at end of file + packageType: pipelines-agent + targetFramework: ${{ parameters.targetFramework }} \ No newline at end of file diff --git a/.azure-pipelines/pipeline.yml b/.azure-pipelines/pipeline.yml index efe5230421..cdb2d004ce 100644 --- a/.azure-pipelines/pipeline.yml +++ b/.azure-pipelines/pipeline.yml @@ -1,6 +1,9 @@ # This Yaml Document has been converted by ESAI Yaml Pipeline Conversion Tool. # This pipeline will be extended to the OneESPT template parameters: +- name: targetFramework + type: string + default: all - name: preBuildStages type: stageList default: [] @@ -102,6 +105,13 @@ extends: - ${{ if parameters.testProxyAgent }}: - job: test_proxy_agent displayName: Test Proxy Agent + ${{ if eq(parameters.targetFramework, 'all') }}: + strategy: + matrix: + NET6.0: + targetFramework: 'net6.0' + NET8.0: + targetFramework: 'net8.0' pool: name: 1ES-ABTT-Shared-Pool image: abtt-ubuntu-2204 @@ -109,6 +119,8 @@ extends: variables: DisableDockerDetector: true nugetMultiFeedWarnLevel: none + ${{ if ne(parameters.targetFramework, 'all') }}: + targetFramework: ${{ parameters.targetFramework }} timeoutInMinutes: 300 steps: - template: /.azure-pipelines/get-pat.yml@self @@ -120,12 +132,13 @@ extends: sourceBranch="$(Build.SourceBranch)" branch="${releaseBranch:-"${sourceBranch}"}" echo "Canary \"branch\" parameter: \"${branch}\"" + echo "Canary \"target_framework\" parameter: \"$(targetFramework)\"" node ./run-and-verify.js \ --projectUrl "$(CANARY_PROJECT_URL)" \ --pipelineId "$(CANARY_PIPELINE_ID)" \ --token "$(ACCESS_TOKEN)" \ - --templateParameters "{ \"branch\": \"${branch}\" }" + --templateParameters "{ \"branch\": \"${branch}\", \"target_framework\": \"$(targetFramework)\"}" displayName: Test Proxy Agent # Windows (x64) @@ -148,6 +161,7 @@ extends: verifySigning: ${{ parameters.sign }} publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: ${{ parameters.buildAlternatePackage }} + targetFramework: ${{ parameters.targetFramework }} # Windows (x86) - ${{ if parameters.win_x86 }}: @@ -167,6 +181,7 @@ extends: sign: ${{ parameters.sign }} publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: ${{ parameters.buildAlternatePackage }} + targetFramework: ${{ parameters.targetFramework }} # Linux (x64) - ${{ if parameters.linux_x64 }}: @@ -186,6 +201,7 @@ extends: sign: ${{ parameters.sign }} publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: ${{ parameters.buildAlternatePackage }} + targetFramework: ${{ parameters.targetFramework }} # Linux (ARM) - ${{ if parameters.linux_arm }}: @@ -206,6 +222,7 @@ extends: sign: false publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: ${{ parameters.buildAlternatePackage }} + targetFramework: ${{ parameters.targetFramework }} # Linux (ARM64) - ${{ if parameters.linux_arm64 }}: @@ -226,6 +243,7 @@ extends: sign: false publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: ${{ parameters.buildAlternatePackage }} + targetFramework: ${{ parameters.targetFramework }} # Alpine (x64) - ${{ if parameters.alpine_x64 }}: @@ -246,6 +264,7 @@ extends: sign: false publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: false + targetFramework: ${{ parameters.targetFramework }} # Alpine (ARM64) - ${{ if parameters.alpine_arm64 }}: @@ -266,6 +285,7 @@ extends: sign: false publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: false + targetFramework: ${{ parameters.targetFramework }} # macOS (x64) - ${{ if parameters.macOS_x64 }}: @@ -286,6 +306,7 @@ extends: sign: ${{ parameters.sign }} publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: ${{ parameters.buildAlternatePackage }} + targetFramework: ${{ parameters.targetFramework }} # macOS (ARM64) - ${{ if parameters.macOS_arm64 }}: @@ -306,4 +327,5 @@ extends: sign: ${{ parameters.sign }} publishArtifacts: ${{ parameters.publishArtifacts }} buildAlternatePackage: ${{ parameters.buildAlternatePackage }} + targetFramework: ${{ parameters.targetFramework }} - ${{ parameters.postBuildStages }} \ No newline at end of file diff --git a/.vsts.release.yml b/.vsts.release.yml index 2004fe1be6..cede4fbfac 100644 --- a/.vsts.release.yml +++ b/.vsts.release.yml @@ -31,6 +31,13 @@ parameters: type: string displayName: Version default: 'NotSet' +- name: targetFramework + displayName: Target framework + type: string + default: net6.0 + values: + - net6.0 + - net8.0 - name: derivedFrom type: string displayName: Derived From Version @@ -73,6 +80,7 @@ extends: test: ${{ not(parameters.skipTests) }} sign: true publishArtifacts: true + targetFramework: ${{ parameters.targetFramework }} testProxyAgent: ${{ parameters.testProxyAgent }} stageDependencies: - Verify_release @@ -138,6 +146,13 @@ extends: if ($agentVersion -eq 'NotSet') { Write-Error "Version parameter is required for manual release." -ErrorAction Stop } + + ## Verify target framework for specified version + $majorVersion = $agentVersion.Split('.')[0] + if ((${{ parameters.targetFramework }} -eq "net6.0" -and $majorVersion -ne "3") -or + (${{ parameters.targetFramework }} -eq "net8.0" -and $majorVersion -ne "4")) { + Write-Error "The major version should be 3 for net6.0 and 4 for net8.0" -ErrorAction Stop + } } if ($isTestRun) { $agentVersion = '3.000.999' diff --git a/src/Agent.Listener/ValidationHelper/VerificationException.cs b/src/Agent.Listener/ValidationHelper/VerificationException.cs index 155c6a2774..29a4ccb46c 100644 --- a/src/Agent.Listener/ValidationHelper/VerificationException.cs +++ b/src/Agent.Listener/ValidationHelper/VerificationException.cs @@ -19,9 +19,11 @@ public VerificationException(string message, Exception ex) { } +#if NET6_0 protected VerificationException(SerializationInfo info, StreamingContext context) : base(info, context) { } +#endif } } diff --git a/src/Common.props b/src/Common.props index 0649f145b5..50f75de900 100644 --- a/src/Common.props +++ b/src/Common.props @@ -1,7 +1,7 @@ - net6 - 6.0.32 + $(NetTargetFramework) + $(RuntimeVersion) $(PackageRuntime) true true diff --git a/src/dev.sh b/src/dev.sh index 1877a8f775..96a4c90b99 100755 --- a/src/dev.sh +++ b/src/dev.sh @@ -8,21 +8,27 @@ set -eo pipefail +# .NET version for agent build. +NET_VERSIONS=" +net6.0-sdk=6.0.424 +net6.0-runtime=6.0.32 + +net8.0-sdk=8.0.401 +net8.0-runtime=8.0.8" + ALL_ARGS=("$@") DEV_CMD=$1 -DEV_CONFIG=$2 -DEV_RUNTIME_ID=$3 -DEV_TEST_FILTERS=$4 -DEV_ARGS=("${ALL_ARGS[@]:4}") +TARGET_FRAMEWORK=$2 +DEV_CONFIG=$3 +DEV_RUNTIME_ID=$4 +DEV_TEST_FILTERS=$5 +DEV_ARGS=("${ALL_ARGS[@]:5}") SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/.helpers.sh" REPO_ROOT="${SCRIPT_DIR}/.." -DOTNETSDK_ROOT="${REPO_ROOT}/_dotnetsdk" -DOTNETSDK_VERSION="6.0.424" -DOTNETSDK_INSTALLDIR="$DOTNETSDK_ROOT/$DOTNETSDK_VERSION" AGENT_VERSION=$(cat "$SCRIPT_DIR/agentversion" | head -n 1 | tr -d "\n\r") DOTNET_ERROR_PREFIX="##vso[task.logissue type=error]" @@ -36,6 +42,27 @@ fi pushd "$SCRIPT_DIR" +DEFAULT_TARGET_FRAMEWORK="net6.0" + +if [[ $TARGET_FRAMEWORK == "" ]]; then + TARGET_FRAMEWORK=$DEFAULT_TARGET_FRAMEWORK +fi + +function get_net_version () +{ + echo "$NET_VERSIONS" | grep -o "$1=[^ ]*" | cut -d '=' -f2 +} + +DOTNETSDK_VERSION=$(get_net_version "${TARGET_FRAMEWORK}-sdk") +DOTNETRUNTIME_VERSION=$(get_net_version "${TARGET_FRAMEWORK}-runtime") + +if [[ ($DOTNETSDK_VERSION == "") || ($DOTNETRUNTIME_VERSION == "") ]]; then + failed "Incorrect target framework is specified" +fi + +DOTNETSDK_ROOT="${REPO_ROOT}/_dotnetsdk" +DOTNETSDK_INSTALLDIR="$DOTNETSDK_ROOT/$DOTNETSDK_VERSION" + BUILD_CONFIG="Debug" if [[ "$DEV_CONFIG" == "Release" ]]; then BUILD_CONFIG="Release" @@ -97,12 +124,12 @@ function make_build (){ if [[ "$ADO_ENABLE_LOGISSUE" == "true" ]]; then - dotnet msbuild -t:"${TARGET}" -p:PackageRuntime="${RUNTIME_ID}" -p:PackageType="${PACKAGE_TYPE}" -p:BUILDCONFIG="${BUILD_CONFIG}" -p:AgentVersion="${AGENT_VERSION}" -p:LayoutRoot="${LAYOUT_DIR}" -p:CodeAnalysis="true" \ + dotnet msbuild -t:"${TARGET}" -p:PackageRuntime="${RUNTIME_ID}" -p:PackageType="${PACKAGE_TYPE}" -p:BUILDCONFIG="${BUILD_CONFIG}" -p:AgentVersion="${AGENT_VERSION}" -p:LayoutRoot="${LAYOUT_DIR}" -p:CodeAnalysis="true" -p:NetTargetFramework="${TARGET_FRAMEWORK}" -p:RuntimeVersion="${DOTNETRUNTIME_VERSION}" \ | sed -e "/\: warning /s/^/${DOTNET_WARNING_PREFIX} /;" \ | sed -e "/\: error /s/^/${DOTNET_ERROR_PREFIX} /;" \ || failed build else - dotnet msbuild -t:"${TARGET}" -p:PackageRuntime="${RUNTIME_ID}" -p:PackageType="${PACKAGE_TYPE}" -p:BUILDCONFIG="${BUILD_CONFIG}" -p:AgentVersion="${AGENT_VERSION}" -p:LayoutRoot="${LAYOUT_DIR}" -p:CodeAnalysis="true" \ + dotnet msbuild -t:"${TARGET}" -p:PackageRuntime="${RUNTIME_ID}" -p:PackageType="${PACKAGE_TYPE}" -p:BUILDCONFIG="${BUILD_CONFIG}" -p:AgentVersion="${AGENT_VERSION}" -p:LayoutRoot="${LAYOUT_DIR}" -p:CodeAnalysis="true" -p:NetTargetFramework="${TARGET_FRAMEWORK}" -p:RuntimeVersion="${DOTNETRUNTIME_VERSION}" \ || failed build fi @@ -149,7 +176,7 @@ function cmd_test_l0 () TestFilters="$TestFilters&$DEV_TEST_FILTERS" fi - dotnet msbuild -t:testl0 -p:PackageRuntime="${RUNTIME_ID}" -p:PackageType="${PACKAGE_TYPE}" -p:BUILDCONFIG="${BUILD_CONFIG}" -p:AgentVersion="${AGENT_VERSION}" -p:LayoutRoot="${LAYOUT_DIR}" -p:TestFilters="${TestFilters}" "${DEV_ARGS[@]}" || failed "failed tests" + dotnet msbuild -t:testl0 -p:PackageRuntime="${RUNTIME_ID}" -p:PackageType="${PACKAGE_TYPE}" -p:BUILDCONFIG="${BUILD_CONFIG}" -p:AgentVersion="${AGENT_VERSION}" -p:LayoutRoot="${LAYOUT_DIR}" -p:TestFilters="${TestFilters}" -p:NetTargetFramework="${TARGET_FRAMEWORK}" "${DEV_ARGS[@]}" || failed "failed tests" } function cmd_test_l1 () @@ -171,7 +198,7 @@ function cmd_test_l1 () TestFilters="$TestFilters&$DEV_TEST_FILTERS" fi - dotnet msbuild -t:testl1 -p:PackageRuntime="${RUNTIME_ID}" -p:PackageType="${PACKAGE_TYPE}" -p:BUILDCONFIG="${BUILD_CONFIG}" -p:AgentVersion="${AGENT_VERSION}" -p:LayoutRoot="${LAYOUT_DIR}" -p:TestFilters="${TestFilters}" "${DEV_ARGS[@]}" || failed "failed tests" + dotnet msbuild -t:testl1 -p:PackageRuntime="${RUNTIME_ID}" -p:PackageType="${PACKAGE_TYPE}" -p:BUILDCONFIG="${BUILD_CONFIG}" -p:AgentVersion="${AGENT_VERSION}" -p:LayoutRoot="${LAYOUT_DIR}" -p:TestFilters="${TestFilters}" -p:NetTargetFramework="${TARGET_FRAMEWORK}" -p:RuntimeVersion="${DOTNETRUNTIME_VERSION}" "${DEV_ARGS[@]}" || failed "failed tests" } function cmd_test () diff --git a/src/dir.proj b/src/dir.proj index b6b7f2fad9..8d8395eedb 100644 --- a/src/dir.proj +++ b/src/dir.proj @@ -78,9 +78,9 @@ - - - + + + @@ -100,9 +100,9 @@ StopOnFirstFailure="true" Properties="Configuration=$(BUILDCONFIG);PackageRuntime=$(PackageRuntime);Version=1.0.0.0;RuntimeIdentifier=$(PackageRuntime);PublishDir=$(L1Root)/bin" /> - - - + + +