From 8673ee50b41eaf160edd1c79c6d82873bbe4a50c Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Fri, 26 Jul 2019 09:04:14 -0700 Subject: [PATCH] Fixing symbol packages so that they contain the expected pdbs in the right locations (#624) * Fixing symbol packages so that they contain the expected pdbs in the right locations * Moving targets to Directory.Build.targets and plugging into DebugSymbolsProjectOutputGroup * Keeping the pdb for that not supported assembly * Migrate Azure pipelines yaml to stages to onboard symbol publishing and skipping flaky test * Updating the publish category --- .vsts-ci.yml | 380 +++++++++--------- Directory.Build.props | 3 +- Directory.Build.targets | 3 - .../Iot.Device.Bindings.csproj | 13 +- .../GpioControllerTestBase.cs | 10 +- src/System.Device.Gpio/Directory.Build.props | 1 - .../Directory.Build.targets | 61 +++ .../System.Device.Gpio.csproj | 21 - 8 files changed, 253 insertions(+), 239 deletions(-) create mode 100644 src/System.Device.Gpio/Directory.Build.targets diff --git a/.vsts-ci.yml b/.vsts-ci.yml index c247e68e67..8d298f133f 100644 --- a/.vsts-ci.yml +++ b/.vsts-ci.yml @@ -1,9 +1,25 @@ +trigger: + batch: true + branches: + include: + - master + +pr: + branches: + include: + - master + variables: -- name: Build.Repository.Clean - value: true -- name: _enableTelemetry - value: true -- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + # Cannot use key:value syntax in root defined variables + - name: Build.Repository.Clean + value: true + - name: _TeamName + value: DotNetCore + - name: _PublishUsingPipelines + value: true + - name: _DotNetArtifactsCategory + value: IOT + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - name: OfficialBuildId value: $(Build.BuildNumber) - name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE @@ -16,206 +32,170 @@ resources: - container: LinuxContainer image: microsoft/dotnet-buildtools-prereqs:ubuntu-14.04-cross-0cd4667-20170319080304 -trigger: - batch: true - branches: - include: - - master +stages: +- stage: build + displayName: Build + jobs: + - template: /eng/common/templates/jobs/jobs.yml + parameters: + enableMicrobuild: true + enablePublishBuildArtifacts: true + enablePublishBuildAssets: true + enablePublishUsingPipelines: $(_PublishUsingPipelines) + enableTelemetry: true + graphFileGeneration: + enabled: true + includeToolset: true + helixRepo: dotnet/iot + jobs: + - job: Windows_NT + timeoutInMinutes: 90 + pool: + # For public or PR jobs, use the hosted pool. For internal jobs use the internal pool. + # Will eventually change this to two BYOC pools. + ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: + name: Hosted VS2017 + ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + name: NetCoreInternal-Int-Pool + queue: buildpool.windows.10.amd64.vs2017 + variables: + - HelixApiAccessToken: '' + - _InternalBuildArgs: '' -pr: -- master + # Only enable publishing in non-public, non PR scenarios. + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + # DotNet-Blob-Feed provides: dotnetfeed-storage-access-key-1 + # Publish-Build-Assets provides: MaestroAccessToken, BotAccount-dotnet-maestro-bot-PAT + # DotNet-HelixApi-Access provides: HelixApiAccessToken + - group: DotNet-Blob-Feed + - group: Publish-Build-Assets + - group: DotNet-HelixApi-Access + - _PublishBlobFeedUrl: https://dotnetfeed.blob.core.windows.net/dotnet-iot/index.json + - _InternalBuildArgs: /p:DotNetSignType=$(_SignType) /p:TeamName=$(_TeamName) + /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) + /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + /p:DotNetPublishBlobFeedUrl=$(_PublishBlobFeedUrl) + /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) + /p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory) + /p:OfficialBuildId=$(BUILD.BUILDNUMBER) -jobs: -- template: /eng/common/templates/job/job.yml - parameters: - agentOs: Windows_NT - name: Windows_NT - enableTelemetry: $(_enableTelemetry) - enablePublishBuildArtifacts: true - helixRepo: dotnet/iot - pool: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - name: NetCoreInternal-Int-Pool - queue: buildpool.windows.10.amd64.vs2017 - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: - name: Hosted VS2017 - strategy: - matrix: - debug_configuration: - _BuildConfig: Debug - release_configuration: - _BuildConfig: Release - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - enableMicrobuild: true - steps: - - script: build.cmd -ci - -configuration $(_BuildConfig) - -prepareMachine - name: Build - displayName: Build - condition: succeeded() - - script: powershell -ExecutionPolicy ByPass -NoProfile eng\common\msbuild.ps1 -warnaserror:0 -ci - eng/sendToHelix.proj - /t:Test - /p:TestOS=Windows_NT - /p:Configuration=$(_BuildConfig) - /p:HelixBuild=$(Build.BuildNumber) - /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog - /p:HelixAccessToken=$(HelixApiAccessToken) - displayName: Send to Helix - condition: succeeded() - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - - task: PublishBuildArtifacts@1 - displayName: Publish Windows managed assets - inputs: - pathToPublish: $(Build.SourcesDirectory)/artifacts/bin - artifactName: bin - artifactType: container - condition: eq(variables['_BuildConfig'], 'Release') - variables: - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - _TeamName: DotNetCore - - _SignType: real - - group: DotNet-HelixApi-Access + strategy: + matrix: + Build_Release: + _BuildConfig: Release + # PRs or external builds are not signed. + ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: + _SignType: test + _DotNetPublishToBlobFeed : false + ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + _SignType: real + _DotNetPublishToBlobFeed : true + ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: + Build_Debug: + _BuildConfig: Debug + _SignType: test + _DotNetPublishToBlobFeed : false + steps: + - checkout: self + clean: true + # Use utility script to run script command dependent on agent OS. + - script: build.cmd -ci -sign + -configuration $(_BuildConfig) + -prepareMachine + -publish + /p:BuildPackages=true + $(_InternalBuildArgs) + displayName: Windows Build -- template: /eng/common/templates/job/job.yml - parameters: - agentOs: OSX - name: OSX - enableTelemetry: $(_enableTelemetry) - enablePublishBuildArtifacts: true - helixRepo: dotnet/iot - pool: - name: Hosted macOS - strategy: - matrix: - debug_configuration: - _BuildConfig: Debug - release_configuration: - _BuildConfig: Release - steps: - - script: ./build.sh --ci - --configuration $(_BuildConfig) - --prepareMachine - name: Build - displayName: Build - condition: succeeded() + - script: powershell -ExecutionPolicy ByPass -NoProfile eng\common\msbuild.ps1 -warnaserror:0 -ci + eng/sendToHelix.proj + /t:Test + /p:TestOS=Windows_NT + /p:Configuration=$(_BuildConfig) + /p:HelixBuild=$(Build.BuildNumber) + /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog + displayName: Run Helix Tests + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + HelixAccessToken: $(HelixApiAccessToken) -- template: /eng/common/templates/job/job.yml - parameters: - agentOs: Linux - name: Linux - enableTelemetry: $(_enableTelemetry) - enablePublishBuildArtifacts: true - helixRepo: dotnet/iot - pool: - name: Hosted Ubuntu 1604 - container: LinuxContainer - strategy: - matrix: - debug_configuration: - _BuildConfig: Debug - release_configuration: - _BuildConfig: Release - steps: - - script: ROOTFS_DIR=/crossrootfs/arm ./build.sh --ci - --configuration $(_BuildConfig) - --prepareMachine - name: Build - displayName: Build - condition: succeeded() - - script: ./eng/common/msbuild.sh --warnaserror false --ci - eng/sendToHelix.proj - /t:Test - /p:TestOS=Unix - /p:Configuration=$(_BuildConfig) - /p:HelixBuild=$(Build.BuildNumber) - /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog - /p:HelixAccessToken=$(HelixApiAccessToken) - displayName: Send to Helix - condition: succeeded() - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - variables: - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - group: DotNet-HelixApi-Access + - task: PublishBuildArtifacts@1 + displayName: Publish Windows package assets + inputs: + pathToPublish: $(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/Shipping + artifactName: BuiltPackageOutputs + artifactType: container + condition: eq(variables['_BuildConfig'], 'Release') + + - job: Linux + container: LinuxContainer + pool: + name: Hosted Ubuntu 1604 + variables: + - HelixApiAccessToken: '' + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - group: DotNet-HelixApi-Access + strategy: + matrix: + ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: + Build_Debug: + _BuildConfig: Debug + _PublishType: none + _SignType: none + _DotNetPublishToBlobFeed : false + Build_Release: + _BuildConfig: Release + _PublishType: none + _SignType: none + _DotNetPublishToBlobFeed : false + steps: + - checkout: self + clean: true + - script: ./build.sh --ci + --configuration $(_BuildConfig) + --prepareMachine + displayName: Unix Build + - script: ./eng/common/msbuild.sh --warnaserror false --ci + eng/sendToHelix.proj + /t:Test + /p:TestOS=Unix + /p:Configuration=$(_BuildConfig) + /p:HelixBuild=$(Build.BuildNumber) + /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog + /p:HelixAccessToken=$(HelixApiAccessToken) + displayName: Run Helix Tests + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + HelixAccessToken: $(HelixApiAccessToken) -- template: /eng/common/templates/job/job.yml - parameters: - dependsOn: - - Windows_NT - - OSX - - Linux - agentOs: Windows_NT - name: BuildPackages - enableTelemetry: $(_enableTelemetry) - enablePublishBuildArtifacts: true - helixRepo: dotnet/iot - pool: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - name: NetCoreInternal-Int-Pool - queue: buildpool.windows.10.amd64.vs2017 - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: - name: Hosted VS2017 - strategy: - matrix: - release_configuration: - _BuildConfig: Release - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - enableMicrobuild: true - enablePublishBuildAssets: true - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Built Managed Assets - inputs: - artifactName: bin - downloadPath: $(Build.SourcesDirectory)/artifacts - - script: build.cmd -ci -sign - -configuration $(_BuildConfig) - -prepareMachine - -publish - /p:ProductBuild=false - /p:ToolsBuild=false - /p:SampleBuild=false - /p:BuildTests=false - /p:BuildPackages=true - $(_InternalBuildArgs) - name: Build - displayName: Build - condition: succeeded() - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: PublishBuildArtifacts@1 - displayName: Publish Windows package assets - inputs: - pathToPublish: $(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/Shipping - artifactName: BuiltPackageOutputs - artifactType: container - condition: eq(variables['_BuildConfig'], 'Release') - variables: - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - _TeamName: DotNetCore - - _SignType: real - - _DotNetPublishToBlobFeed : true - # DotNet-Blob-Feed provides: dotnetfeed-storage-access-key-1 - # Publish-Build-Assets provides: MaestroAccessToken, BotAccount-dotnet-maestro-bot-PAT - - group: DotNet-Blob-Feed - - group: Publish-Build-Assets - - _PublishBlobFeedUrl: https://dotnetfeed.blob.core.windows.net/dotnet-iot/index.json - - _InternalBuildArgs: /p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed) - /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) - /p:DotNetPublishBlobFeedUrl=$(_PublishBlobFeedUrl) + - ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}: + - job: OSX + pool: + Hosted macOS + strategy: + matrix: + Build_Debug: + _BuildConfig: Debug + _PublishType: none + _SignType: none + _DotNetPublishToBlobFeed : false + Build_Release: + _BuildConfig: Release + _PublishType: none + _SignType: none + _DotNetPublishToBlobFeed : false + steps: + - checkout: self + clean: true + - script: ./build.sh --ci + --configuration $(_BuildConfig) + --prepareMachine + /p:Test=false + displayName: OSX Build - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - template: /eng/common/templates/job/publish-build-assets.yml + - template: eng\common\templates\post-build\post-build.yml parameters: - dependsOn: - - BuildPackages - agentOs: Windows_NT - name: PublishToBlobFeed - enableTelemetry: $(_enableTelemetry) - enablePublishBuildArtifacts: true - helixRepo: dotnet/iot - pool: - name: NetCoreInternal-Int-Pool - queue: buildpool.windows.10.amd64.vs2017 + # Symbol validation isn't being very reliable lately. This should be enabled back + # once this issue is resolved: https://github.com/dotnet/arcade/issues/2871 + enableSymbolValidation: false diff --git a/Directory.Build.props b/Directory.Build.props index fb364f6ee4..a3492cfa28 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -10,11 +10,12 @@ - false C# true true Latest + + true diff --git a/Directory.Build.targets b/Directory.Build.targets index c3fe833963..65731cce7d 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -17,9 +17,6 @@ - - true - snupkg true diff --git a/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj b/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj index 5f249a7c67..43da1d07ae 100644 --- a/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj +++ b/src/Iot.Device.Bindings/Iot.Device.Bindings.csproj @@ -8,7 +8,7 @@ $(MSBuildThisFileDirectory)../devices/ true true - $(TargetsForTfmSpecificContentInPackage);PackageRefAssemblyAndDocXml + $(TargetsForTfmSpecificContentInPackage) 8 @@ -27,15 +27,4 @@ - - - - ref/$(TargetFramework) - - - ref/$(TargetFramework) - - - - diff --git a/src/System.Device.Gpio.Tests/GpioControllerTestBase.cs b/src/System.Device.Gpio.Tests/GpioControllerTestBase.cs index 230b192f81..73ee473d58 100644 --- a/src/System.Device.Gpio.Tests/GpioControllerTestBase.cs +++ b/src/System.Device.Gpio.Tests/GpioControllerTestBase.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Device.Gpio.Drivers; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; @@ -220,10 +221,17 @@ void callback(object sender, PinValueChangedEventArgs e) [Fact] public void AddCallbackRemoveAllCallbackTest() { + GpioDriver testDriver = GetTestDriver(); + // Skipping the test for now when using the SysFsDriver or the RaspberryPi3Driver given that this test is flaky for those drivers. + // Issue tracking this problem is https://github.com/dotnet/iot/issues/629 + if (testDriver is SysFsDriver || testDriver is RaspberryPi3Driver) + { + return; + } RetryHelper.Execute(() => { int risingEventOccuredCount = 0, fallingEventOccuredCount = 0; - using (GpioController controller = new GpioController(GetTestNumberingScheme(), GetTestDriver())) + using (GpioController controller = new GpioController(GetTestNumberingScheme(), testDriver)) { controller.OpenPin(InputPin, PinMode.Input); controller.OpenPin(OutputPin, PinMode.Output); diff --git a/src/System.Device.Gpio/Directory.Build.props b/src/System.Device.Gpio/Directory.Build.props index 0638ea40a9..d2b684aa01 100644 --- a/src/System.Device.Gpio/Directory.Build.props +++ b/src/System.Device.Gpio/Directory.Build.props @@ -5,7 +5,6 @@ 1 The System.Device.Gpio preview package supports general-purpose I/O (GPIO) pins, PWM, I2C, SPI and related interfaces for interacting with low level hardware pins to control hardware sensors, displays and input devices on single-board-computers; Raspberry Pi, BeagleBoard, HummingBoard, ODROID, and other single-board-computers that are supported by Linux and Windows 10 IoT Core OS can be used with .NET Core and System.Device.Gpio. On Windows 10 IoT Core OS, the library wraps the Windows.Devices.Gpio.dll assembly. On Linux, the library supports three driver modes: libgpiod for fast full-featured GPIO access on all Linux distros since version 4.8 of the Linux kernel; slower and limited-functionality GPIO access via the deprecated Sysfs interface (/sys/class/gpio) when running on older Linux distro versions with a Linux kernel older than version 4.8; and lastly board-specific Linux drivers that access GPIO addresses in /dev/mem for fasted performance at the trade-off of being able to run on very specific versions of single-board-computers. In the future, the board-specific Linux drivers may be removed in favor of only supporting libgpiod and sysfs Linux interfaces. In addition to System.Device.Gpio, the optional IoT.Device.Bindings NuGet package contains device bindings for many sensors, displays, and input devices that can be used with System.Device.Gpio. - false .NET Core GPIO Pins SPI I2C PWM BCM2835 RPi IoT diff --git a/src/System.Device.Gpio/Directory.Build.targets b/src/System.Device.Gpio/Directory.Build.targets new file mode 100644 index 0000000000..87ddeedd2e --- /dev/null +++ b/src/System.Device.Gpio/Directory.Build.targets @@ -0,0 +1,61 @@ + + + + + $(OutDir)notsupported\ + $(OutDir)$(ProjectDepsFileName) + + + + + + + + + + + + + + + + + + $(TargetsForTfmSpecificBuildOutput);RemoveBuildOutputBeforePackaging + + + + + + + + + + + + $(DebugSymbolsProjectOutputGroupDependsOn);GetSymbolsForSnupkg + + + + + + + + ./../../runtimes/linux/lib/$(TargetFramework)/$(AssemblyName).pdb + $(TargetFramework) + + + ./../../runtimes/win/lib/$(TargetFramework)/$(AssemblyName).pdb + $(TargetFramework) + + + + + + diff --git a/src/System.Device.Gpio/System.Device.Gpio.csproj b/src/System.Device.Gpio/System.Device.Gpio.csproj index bd61d26f91..e73fa9c400 100644 --- a/src/System.Device.Gpio/System.Device.Gpio.csproj +++ b/src/System.Device.Gpio/System.Device.Gpio.csproj @@ -49,25 +49,4 @@ - - - $(OutDir)notsupported\ - $(OutDir)$(ProjectDepsFileName) - - - - - - - - - - - - - -