Skip to content

Commit 71a7395

Browse files
authored
Merge pull request #637 from dagood/release/2.1
Merge v2.1.2-ga into release/2.1
2 parents 1dd84aa + 7f9bbac commit 71a7395

21 files changed

+283
-24
lines changed

.vsts-ci.yml

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
phases:
2+
- phase: source_build_ci
3+
variables:
4+
buildLoggingOptions: /clp:v=detailed /p:MinimalConsoleLogOutput=false
5+
buildConfiguration: Release
6+
buildOfflineTarball: false
7+
docker.runInRoot: docker run --rm -v $(rootDirectory):/root -w /root
8+
docker.runInSrc: docker run --rm -v $(Build.SourcesDirectory):/src -w /src
9+
docker.runInSourceBuild: docker run --rm -v $(rootDirectory)/sb/source-build:/src -w /src
10+
docker.runInTarball: docker run --rm -v $(rootDirectory)/sb/tarball/$(tarballName):/tb -w /tb
11+
dropDirectory: $(stagingDirectory)/drop
12+
rootDirectory: $(Build.SourcesDirectory)/..
13+
stagingDirectory: $(rootDirectory)/sb/staging
14+
tarballName: tarball_$(Build.BuildId)
15+
16+
queue:
17+
name: DotNet-Build
18+
demands: agent.os -equals linux
19+
timeoutInMinutes: 240
20+
parallel: 2
21+
matrix:
22+
centos71:
23+
imageName: microsoft/dotnet-buildtools-prereqs:centos711503_prereqs_2
24+
rhel7-unshared:
25+
imageName: microsoft/dotnet-buildtools-prereqs:rhel7_prereqs_2
26+
buildOfflineTarball: true
27+
28+
steps:
29+
- template: ./vsts-build-templates/docker-cleanup-linux.yml
30+
31+
# create working directory and copy source into it
32+
- script: |
33+
set -x
34+
$(docker.runInRoot) $(imageName) rm -rf /root/sb/
35+
$(docker.runInRoot) $(imageName) mkdir -p /root/sb/tarball
36+
$(docker.runInSrc) -v $(rootDirectory):/root $(imageName) cp -r . /root/sb/source-build
37+
displayName: Clean sb directory and copy source from cloned directory
38+
39+
# fetch vsts commits if building internally
40+
- script: |
41+
set -x
42+
# Ignore failure for the first command. It will intentionally fail if the commit is only
43+
# available in VSTS. "submodule update --init" is the simplest way to set up the submodule
44+
# directory. ("submodule init" only sets up .git/config, not the e.g. src/coreclr/.git and
45+
# .git/modules/src/coreclr/ directories.)
46+
$(docker.runInSourceBuild) $(imageName) git submodule update --init --recursive
47+
$(docker.runInSourceBuild) $(imageName) ./fetch-vsts-commits.sh $(user.PAT)
48+
displayName: Fetch internal vsts commits
49+
condition: and(succeeded(), ne(variables['user.PAT'], ''))
50+
51+
# init submodules
52+
- script: $(docker.runInSourceBuild) $(imageName) git submodule update --init --recursive
53+
displayName: Initialize submodules
54+
55+
# build source-build
56+
- script: $(docker.runInSourceBuild) $(imageName) ./build.sh /p:ArchiveDownloadedPackages=true /p:Configuration=$(buildConfiguration) /p:ProdConBlobFeedUrlPrefix=$(prodConBlobFeedUrlPrefix) $(buildLoggingOptions)
57+
displayName: Build source-build
58+
timeoutInMinutes: 90
59+
60+
# copy logs to working directory
61+
- script: |
62+
set -x
63+
$(docker.runInSourceBuild) -v $(dropDirectory)/logs:/logs $(imageName) /bin/bash -c "mkdir -p /logs/source-build/binlogs; find . -name '*.binlog' -exec cp {} /logs/source-build/binlogs \;"
64+
$(docker.runInSourceBuild) -v $(dropDirectory)/logs:/logs $(imageName) /bin/bash -c "mkdir -p /logs/source-build/logs; find ./bin/logs -name '*.log' -exec cp {} /logs/source-build/logs \;"
65+
displayName: Copy source-build logs
66+
condition: always()
67+
continueOnError: true
68+
69+
# run smoke tests
70+
- script: $(docker.runInSourceBuild) $(imageName) ./build.sh /t:RunSmokeTest /p:Configuration=$(buildConfiguration) /p:ProdConBlobFeedUrlPrefix=$(prodConBlobFeedUrlPrefix)
71+
displayName: Run smoke-test
72+
73+
# copy smoke test logs to working directory
74+
- script: $(docker.runInSourceBuild) -v $(dropDirectory)/logs:/logs $(imageName) /bin/bash -c "mkdir -p /logs/source-build/smoke-test; find ./testing-smoke -name '*.log' -exec cp {} /logs/source-build/smoke-test \;"
75+
displayName: Copy smoke-test logs
76+
condition: and(succeeded(), eq(variables['buildOfflineTarball'], false))
77+
continueOnError: true
78+
79+
# create tarball
80+
- script: $(docker.runInSourceBuild) -v $(rootDirectory)/sb/tarball:/tb $(imageName) ./build-source-tarball.sh /tb/$(tarballName) --skip-build
81+
displayName: Create tarball
82+
condition: and(succeeded(), eq(variables['buildOfflineTarball'], true))
83+
84+
# tar the tarball directory into the drop directory
85+
- script: $(docker.runInSourceBuild) -v $(rootDirectory)/sb/tarball:/tb -v $(dropDirectory):/drop $(imageName) tar -zcvf /drop/$(tarballName).tar.gz /tb/$(tarballName)
86+
displayName: Copy tarball to output
87+
condition: and(succeeded(), eq(variables['buildOfflineTarball'], true))
88+
89+
# build tarball
90+
- script: $(docker.runInTarball) --network='none' $(imageName) ./build.sh /p:Configuration=$(buildConfiguration) $(buildLoggingOptions)
91+
displayName: Build tarball
92+
timeoutInMinutes: 90
93+
condition: and(succeeded(), eq(variables['buildOfflineTarball'], true))
94+
95+
# run smoke tests
96+
- script: $(docker.runInTarball) $(imageName) ./smoke-test.sh --minimal --projectOutput --configuration $(buildConfiguration) --prodConBlobFeedUrl ''
97+
displayName: Run smoke-test in tarball
98+
condition: and(succeeded(), eq(variables['buildOfflineTarball'], true))
99+
100+
# copy all tarball logs to working directory
101+
- script: |
102+
set -x
103+
$(docker.runInTarball) -v $(dropDirectory)/logs:/logs $(imageName) /bin/bash -c "mkdir -p /logs/tarball/binlogs; find . -name '*.binlog' -exec cp {} /logs/tarball/binlogs \;"
104+
$(docker.runInTarball) -v $(dropDirectory)/logs:/logs $(imageName) /bin/bash -c "mkdir -p /logs/tarball/logs; find ./bin/logs -name '*.log' -exec cp {} /logs/tarball/logs \;"
105+
$(docker.runInTarball) -v $(dropDirectory)/logs:/logs $(imageName) /bin/bash -c "mkdir -p /logs/tarball/smoke-test; find ./testing-smoke -name '*.log' -exec cp {} /logs/tarball/smoke-test \;"
106+
# Copy prebuilt report
107+
$(docker.runInSourceBuild) -v $(dropDirectory)/logs:/logs $(imageName) /bin/bash -c "mkdir -p /logs/prebuilt-report/online; cp -r ./bin/prebuilt-report/* /logs/prebuilt-report/online"
108+
$(docker.runInTarball) -v $(dropDirectory)/logs:/logs $(imageName) /bin/bash -c "mkdir -p /logs/prebuilt-report/offline; cp -r ./bin/prebuilt-report/* /logs/prebuilt-report/offline"
109+
displayName: Copy tarball logs
110+
condition: eq(variables['buildOfflineTarball'], true)
111+
continueOnError: true
112+
113+
# copy artifacts to staging - Copy to VSTS owned folder is done outside of docker so copied files have correct ownership so VSTS can clean them up later.
114+
- task: CopyFiles@2
115+
condition: always()
116+
continueOnError: true
117+
inputs:
118+
sourceFolder: $(stagingDirectory)
119+
targetFolder: $(Build.ArtifactStagingDirectory)
120+
121+
# publish artifacts
122+
- task: PublishBuildArtifacts@1
123+
displayName: Publish artifacts
124+
condition: always()
125+
continueOnError: true
126+
inputs:
127+
PathtoPublish: $(Build.ArtifactStagingDirectory)/drop
128+
ArtifactName: drop
129+
ArtifactType: Container
130+
131+
- template: ./vsts-build-templates/docker-cleanup-linux.yml

DotnetCLIVersion.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.1.300
1+
2.1.301

ProdConFeed.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
https://dotnetfeed.blob.core.windows.net/orchestrated-release-2-1/20180605-09/final/index.json
1+
https://dotnetfeed.blob.core.windows.net/orchestrated-release-2-1/20180628-02/final/index.json

build-source-tarball.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,20 @@ mkdir -p $TARBALL_ROOT/prebuilt/nuget-packages
8383
find $SCRIPT_ROOT/packages -name '*.nupkg' -exec cp {} $TARBALL_ROOT/prebuilt/nuget-packages/ \;
8484
find $SCRIPT_ROOT/bin/obj/x64/Release/nuget-packages -name '*.nupkg' -exec cp {} $TARBALL_ROOT/prebuilt/nuget-packages/ \;
8585

86+
if [ -e $SCRIPT_ROOT/testing-smoke/smoke-test-packages ]; then
87+
cp -rf $SCRIPT_ROOT/testing-smoke/smoke-test-packages $TARBALL_ROOT/prebuilt
88+
fi
89+
8690
echo 'Removing source-built packages from tarball prebuilts...'
8791

8892
for built_package in $(find $SCRIPT_ROOT/bin/obj/x64/Release/blob-feed/packages/ -name '*.nupkg' | tr '[:upper:]' '[:lower:]')
8993
do
9094
if [ -e $TARBALL_ROOT/prebuilt/nuget-packages/$(basename $built_package) ]; then
9195
rm $TARBALL_ROOT/prebuilt/nuget-packages/$(basename $built_package)
9296
fi
97+
if [ -e $TARBALL_ROOT/prebuilt/smoke-test-packages/$(basename $built_package) ]; then
98+
rm $TARBALL_ROOT/prebuilt/smoke-test-packages/$(basename $built_package)
99+
fi
93100
done
94101

95102
if [ -z "${SOURCE_BUILD_SKIP_PREBUILT_REPORT:-}" ]; then

build.proj

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,19 @@
4747
<MSBuild Projects="repos\$(RootRepo).proj" Targets="ReportPrebuiltUsage" />
4848
</Target>
4949

50+
<Target Name="RunSmokeTest" DependsOnTargets="GetProdConBlobFeedUrl">
51+
<!--
52+
Pass prodConBlobFeedUrl via EnvironmentVariables because it has '//' in it, which is
53+
translated into '/' if it's passed in the Command arg.
54+
This is also a problem when passing CLI feeds: https://github.com/dotnet/source-build/issues/561
55+
-->
56+
<Exec Command="./smoke-test.sh --minimal --projectOutput --configuration $(Configuration) --archiveRestoredPackages"
57+
EnvironmentVariables="prodConBlobFeedUrl=$(ProdConBlobFeedUrl)" />
58+
</Target>
59+
5060
<Import Project="$(ProjectDir)dependencies.targets" />
5161

5262
<Import Project="$(ToolsDir)VersionTools.targets" />
63+
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))/dir.targets" />
5364

5465
</Project>

dependencies.props

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,17 @@
3838
<RawVersionsBaseUrl>https://raw.githubusercontent.com/dotnet/versions</RawVersionsBaseUrl>
3939
</DependencyBuildInfo>
4040

41-
<DependencyInfo Include="ProdCon">
41+
<DependencyInfo Include="ProdCon" Condition="'$(UpdateFromManifestFile)' == ''">
4242
<DependencyType>Orchestrated build</DependencyType>
4343
<BasePath>build-info/dotnet/product/cli/release/2.1</BasePath>
4444
<CurrentRef>$(ProdConCurrentRef)</CurrentRef>
4545
<VersionsRepoOwner>dotnet</VersionsRepoOwner>
4646
<VersionsRepo>versions</VersionsRepo>
4747
</DependencyInfo>
48-
49-
<UpdateStep Include="ProdCon">
50-
<UpdaterType>Orchestrated blob feed attribute</UpdaterType>
51-
<SingleLineFile>$(MSBuildThisFileDirectory)ProdConFeed.txt</SingleLineFile>
52-
<AttributeName>Url</AttributeName>
53-
</UpdateStep>
48+
<DependencyInfo Include="ProdCon" Condition="'$(UpdateFromManifestFile)' != ''">
49+
<DependencyType>Orchestrated build file</DependencyType>
50+
<Path>$(UpdateFromManifestFile)</Path>
51+
</DependencyInfo>
5452
</ItemGroup>
5553

5654
<ItemGroup Condition="'$(SkipBuildToolsUpdate)' != 'true'">

dependencies.targets

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,14 @@
8484
UpdaterType="Build attribute from orchestrated build"
8585
AttributeName="BuildId"
8686
Path="%(RepoProjectWithProperties.Identity)"
87-
ElementName="OfficialBuildId" />
87+
ElementName="OfficialBuildId"
88+
SkipIfNoReplacementFound="true" />
89+
90+
<UpdateStep
91+
Include="ProdCon"
92+
UpdaterType="Orchestrated blob feed attribute"
93+
SingleLineFile="$(MSBuildThisFileDirectory)ProdConFeed.txt"
94+
AttributeName="Url" />
8895
</ItemGroup>
8996
</Target>
9097
</Project>

dir.targets

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
4+
<Target Name="GetProdConBlobFeedUrl">
5+
<PropertyGroup>
6+
<ProdConBlobFeedUrl>$([System.IO.File]::ReadAllText('$(ProdConFeedPath)').Trim())</ProdConBlobFeedUrl>
7+
<ProdConBlobFeedUrl Condition="'$(ProdConBlobFeedUrlPrefix)' != ''">$(ProdConBlobFeedUrl.Replace('https://dotnetfeed.blob.core.windows.net/', '$(ProdConBlobFeedUrlPrefix)'))</ProdConBlobFeedUrl>
8+
</PropertyGroup>
9+
</Target>
10+
</Project>

fetch-vsts-commits.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
IFS=$'\n\t'
4+
SCRIPT_ROOT="$(cd -P "$( dirname "$0" )" && pwd)"
5+
6+
remote_ref_name=${remote_ref_name:-vsts}
7+
8+
pat="${1:-}"
9+
10+
if [ -z "$pat" ]; then
11+
echo "usage: $0 <pat>"
12+
echo ""
13+
echo "The PAT should be a devdiv.visualstudio.com VSTS PAT."
14+
echo "Get one at https://devdiv.visualstudio.com/_details/security/tokens."
15+
echo ""
16+
exit 1
17+
fi
18+
19+
get_vsts_url() {
20+
name=$1
21+
instance=${2:-devdiv.visualstudio.com}
22+
project=${3:-DevDiv}
23+
24+
echo "https://usernameplaceholder:${pat}@${instance}/${project}/_git/${name}/"
25+
}
26+
27+
fetch() {
28+
name=$1
29+
remote=$2
30+
31+
(
32+
cd "$SCRIPT_ROOT/src/$name"
33+
git fetch "$remote" +refs/heads/*:refs/remotes/${remote_ref_name}/*
34+
)
35+
}
36+
37+
fetch_vsts() {
38+
name=$1
39+
url=${2:-$(get_vsts_url "DotNet-$name-Trusted")}
40+
41+
fetch "$name" "$url"
42+
}
43+
44+
set -x
45+
46+
fetch_vsts cli
47+
fetch_vsts core-setup
48+
fetch_vsts coreclr
49+
fetch_vsts corefx

repos/cli.proj

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,11 @@
4848
<ExtraPackageVersionPropsPackageInfo
4949
Include="
5050
Microsoft.AspNetCore.All;
51-
Microsoft.AspNetCore.App;
52-
Microsoft.NET.Sdk.Razor"
51+
Microsoft.AspNetCore.App"
52+
Version="2.1.2" />
53+
<!-- This package wasn't built in latest 2.1.2 build: stick with what we had from 2.1.1. -->
54+
<ExtraPackageVersionPropsPackageInfo
55+
Include="Microsoft.NET.Sdk.Razor"
5356
Version="2.1.1" />
5457
</ItemGroup>
5558

@@ -101,10 +104,8 @@
101104
<EnvironmentVariables Include="DropSuffix=true" />
102105
</ItemGroup>
103106

104-
<Target Name="AddProdConFeed" BeforeTargets="Build">
107+
<Target Name="AddProdConFeed" BeforeTargets="Build" DependsOnTargets="GetProdConBlobFeedUrl">
105108
<PropertyGroup>
106-
<ProdConBlobFeedUrl>$([System.IO.File]::ReadAllText('$(ProdConFeedPath)').Trim())</ProdConBlobFeedUrl>
107-
108109
<NugetConfigTargetsFile>$(ProjectDirectory)build\NugetConfigFile.targets</NugetConfigTargetsFile>
109110
<ReplacementEndMark>&lt;/ItemGroup&gt;</ReplacementEndMark>
110111
<InsertItemLine>&lt;NugetConfigPrivateFeeds Include="$(ProdConBlobFeedUrl)" /&gt;$(ReplacementEndMark)</InsertItemLine>

0 commit comments

Comments
 (0)