Skip to content

Commit eac3185

Browse files
authored
Integrate dotnet/fsharp from 48f932c to 0859851 (#916)
Integrate dotnet/fsharp from 48f932c to 0859851 Features: allowing '_' as a self-identifier events for FSI evaluation lifecycle events enhancements to FSI return-values fixed parsing for langversion CLI arguments allow cancellation of FSI interactions ToString fixes for value options Fixes for code generation in autogenerated members for very large records make ranges of member declarations capture the entire member improve error recovery in the parser improve logic for auto-detecting 'framework' assemblies for FSI
2 parents 1471a68 + 2c90c61 commit eac3185

File tree

186 files changed

+3669
-1805
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

186 files changed

+3669
-1805
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ source_link.json
223223
.vs/
224224
System.ValueTuple.dll
225225
tests/fsharpqa/testenv/bin/System.ValueTuple.dll
226+
**/.fake
226227
lib/netcore/fsc/bin/
227228
!lib/bootstrap/signed/**/*
228-
*/.fake
229229
/fcs/packages/
230230
*/paket-files/
231231
/fcs/TestResult.xml
@@ -237,3 +237,4 @@ msbuild.binlog
237237

238238
.ionide
239239
.vscode
240+
**/.DS_Store

FSharpBuild.Directory.Build.props

+2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
<!-- nuget -->
2020
<PropertyGroup>
21+
<PackageIconFullPath>$(MSBuildThisFileDirectory)icon.png</PackageIconFullPath>
22+
2123
<!-- Point to artifacts folder as an additional nuget package source -->
2224
<RestoreAdditionalProjectSources Condition = "Exists('$(ArtifactsPackagesDir)') and '$(RestoreAdditionalProjectSources)' != ''">$(RestoreAdditionalProjectSources);$(ArtifactsPackagesDir)</RestoreAdditionalProjectSources>
2325
<RestoreAdditionalProjectSources Condition = "Exists('$(ArtifactsPackagesDir)') and '$(RestoreAdditionalProjectSources)' == ''">$(ArtifactsPackagesDir)</RestoreAdditionalProjectSources>

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ interactive service that can be used for embedding F# scripting into your applic
1111
1212
This repo exists as a downstream packaging repository for the [FSharp.Compiler.Service](https://www.nuget.org/packages/FSharp.Compiler.Service) NuGet Package. It serves the following purposes _only_:
1313

14+
1415
* Release packaging
1516
* Hosting [public documentation](http://fsharp.github.io/FSharp.Compiler.Service/)
1617
* Serving as a stable base for Fable

eng/Build.ps1

+3-1
Original file line numberDiff line numberDiff line change
@@ -359,14 +359,16 @@ try {
359359
$resultsLog = "test-net40-fsharpqa-results.log"
360360
$errorLog = "test-net40-fsharpqa-errors.log"
361361
$failLog = "test-net40-fsharpqa-errors"
362-
$perlExe = "$env:USERPROFILE\.nuget\packages\StrawberryPerl64\5.22.2.1\Tools\perl\bin\perl.exe"
362+
$perlPackageRoot = "$env:USERPROFILE\.nuget\packages\StrawberryPerl\5.28.0.1";
363+
$perlExe = "$perlPackageRoot\bin\perl.exe"
363364
Create-Directory $resultsRoot
364365
UpdatePath
365366
$env:HOSTED_COMPILER = 1
366367
$env:CSC_PIPE = "$env:USERPROFILE\.nuget\packages\Microsoft.Net.Compilers\2.7.0\tools\csc.exe"
367368
$env:FSCOREDLLPATH = "$ArtifactsDir\bin\fsc\$configuration\net472\FSharp.Core.dll"
368369
$env:LINK_EXE = "$RepoRoot\tests\fsharpqa\testenv\bin\link\link.exe"
369370
$env:OSARCH = $env:PROCESSOR_ARCHITECTURE
371+
$env:PERL5LIB = "$perlPackageRoot\vendor\lib"
370372
Exec-Console $perlExe """$RepoRoot\tests\fsharpqa\testenv\bin\runall.pl"" -resultsroot ""$resultsRoot"" -results $resultsLog -log $errorLog -fail $failLog -cleanup:no -procs:$env:NUMBER_OF_PROCESSORS"
371373
Pop-Location
372374
}

eng/Version.Details.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
<ProductDependencies>
44
</ProductDependencies>
55
<ToolsetDependencies>
6-
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.19476.6">
6+
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.19557.20">
77
<Uri>https://github.com/dotnet/arcade</Uri>
8-
<Sha>b449f372df1a3374ebdc85f42ff137dcda08776b</Sha>
8+
<Sha>b62f1617f2c453497fd55697c04dd8021a38dc17</Sha>
99
</Dependency>
1010
</ToolsetDependencies>
1111
</Dependencies>

eng/Versions.props

+1-1
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@
182182
<NUnitLiteVersion>3.11.0</NUnitLiteVersion>
183183
<NunitXmlTestLoggerVersion>2.1.36</NunitXmlTestLoggerVersion>
184184
<RoslynToolsSignToolVersion>1.0.0-beta2-dev3</RoslynToolsSignToolVersion>
185-
<StrawberryPerl64Version>5.22.2.1</StrawberryPerl64Version>
185+
<StrawberryPerlVersion>5.28.0.1</StrawberryPerlVersion>
186186
<StreamJsonRpcVersion>2.0.187</StreamJsonRpcVersion>
187187
</PropertyGroup>
188188
</Project>

eng/build.sh

+7-1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ force_bootstrap=false
6060
ci=false
6161
skip_analyzers=false
6262
prepare_machine=false
63+
source_build=false
6364
properties=""
6465

6566
docker=false
@@ -131,6 +132,9 @@ while [[ $# > 0 ]]; do
131132
;;
132133
/p:*)
133134
properties="$properties $1"
135+
if [[ "$1" == "/p:dotnetbuildfromsource=true" ]]; then
136+
source_build=true
137+
fi
134138
;;
135139
*)
136140
echo "Invalid argument: $1"
@@ -277,7 +281,9 @@ function BuildSolution {
277281
InitializeDotNetCli $restore
278282

279283
# enable us to build netcoreapp2.1 binaries
280-
InstallDotNetSdk $_InitializeDotNetCli 2.1.503
284+
if [[ "$source_build" != true ]]; then
285+
InstallDotNetSdk $_InitializeDotNetCli 2.1.503
286+
fi
281287

282288
BuildSolution
283289

eng/common/PublishToSymbolServers.proj

+4-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
<PropertyGroup>
3838
<DotNetSymbolExpirationInDays Condition="'$(DotNetSymbolExpirationInDays)' == ''">3650</DotNetSymbolExpirationInDays>
3939
<PublishToSymbolServer>true</PublishToSymbolServer>
40+
<PublishToSymWeb Condition="'$(PublishToSymWeb)' == ''">true</PublishToSymWeb>
41+
<PublishToMSDL Condition="'$(PublishToMSDL)' == ''">true</PublishToMSDL>
4042
<PublishToSymbolServer Condition="'@(FilesToPublishToSymbolServer)' == '' and '@(PackagesToPublishToSymbolServer)' == ''">false</PublishToSymbolServer>
4143
</PropertyGroup>
4244

@@ -56,7 +58,7 @@
5658
DryRun="false"
5759
ConvertPortablePdbsToWindowsPdbs="false"
5860
PdbConversionTreatAsWarning=""
59-
Condition="$(PublishToSymbolServer)"/>
61+
Condition="$(PublishToSymbolServer) and $(PublishToMSDL)"/>
6062

6163
<!--
6264
Symbol Uploader: SymWeb
@@ -73,7 +75,7 @@
7375
DryRun="false"
7476
ConvertPortablePdbsToWindowsPdbs="false"
7577
PdbConversionTreatAsWarning=""
76-
Condition="$(PublishToSymbolServer)"/>
78+
Condition="$(PublishToSymbolServer) and $(PublishToSymWeb)"/>
7779
</Target>
7880

7981
<ItemGroup>

eng/common/SetupNugetSources.ps1

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# This file is a temporary workaround for internal builds to be able to restore from private AzDO feeds.
2+
# This file should be removed as part of this issue: https://github.com/dotnet/arcade/issues/4080
3+
#
4+
# What the script does is iterate over all package sources in the pointed NuGet.config and add a credential entry
5+
# under <packageSourceCredentials> for each Maestro managed private feed. Two additional credential
6+
# entries are also added for the two private static internal feeds: dotnet3-internal and dotnet3-internal-transport.
7+
#
8+
# This script needs to be called in every job that will restore packages and which the base repo has
9+
# private AzDO feeds in the NuGet.config.
10+
#
11+
# See example YAML call for this script below. Note the use of the variable `$(dn-bot-dnceng-artifact-feeds-rw)`
12+
# from the AzureDevOps-Artifact-Feeds-Pats variable group.
13+
#
14+
# - task: PowerShell@2
15+
# displayName: Setup Private Feeds Credentials
16+
# condition: eq(variables['Agent.OS'], 'Windows_NT')
17+
# inputs:
18+
# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1
19+
# arguments: -ConfigFile ${Env:BUILD_SOURCESDIRECTORY}/NuGet.config -Password $Env:Token
20+
# env:
21+
# Token: $(dn-bot-dnceng-artifact-feeds-rw)
22+
23+
[CmdletBinding()]
24+
param (
25+
[Parameter(Mandatory = $true)][string]$ConfigFile,
26+
[Parameter(Mandatory = $true)][string]$Password
27+
)
28+
29+
$ErrorActionPreference = "Stop"
30+
Set-StrictMode -Version 2.0
31+
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
32+
33+
. $PSScriptRoot\tools.ps1
34+
35+
# Add source entry to PackageSources
36+
function AddPackageSource($sources, $SourceName, $SourceEndPoint, $creds, $Username, $Password) {
37+
$packageSource = $sources.SelectSingleNode("add[@key='$SourceName']")
38+
39+
if ($packageSource -eq $null)
40+
{
41+
$packageSource = $doc.CreateElement("add")
42+
$packageSource.SetAttribute("key", $SourceName)
43+
$packageSource.SetAttribute("value", $SourceEndPoint)
44+
$sources.AppendChild($packageSource) | Out-Null
45+
}
46+
else {
47+
Write-Host "Package source $SourceName already present."
48+
}
49+
50+
AddCredential -Creds $creds -Source $SourceName -Username $Username -Password $Password
51+
}
52+
53+
# Add a credential node for the specified source
54+
function AddCredential($creds, $source, $username, $password) {
55+
# Looks for credential configuration for the given SourceName. Create it if none is found.
56+
$sourceElement = $creds.SelectSingleNode($Source)
57+
if ($sourceElement -eq $null)
58+
{
59+
$sourceElement = $doc.CreateElement($Source)
60+
$creds.AppendChild($sourceElement) | Out-Null
61+
}
62+
63+
# Add the <Username> node to the credential if none is found.
64+
$usernameElement = $sourceElement.SelectSingleNode("add[@key='Username']")
65+
if ($usernameElement -eq $null)
66+
{
67+
$usernameElement = $doc.CreateElement("add")
68+
$usernameElement.SetAttribute("key", "Username")
69+
$sourceElement.AppendChild($usernameElement) | Out-Null
70+
}
71+
$usernameElement.SetAttribute("value", $Username)
72+
73+
# Add the <ClearTextPassword> to the credential if none is found.
74+
# Add it as a clear text because there is no support for encrypted ones in non-windows .Net SDKs.
75+
# -> https://github.com/NuGet/Home/issues/5526
76+
$passwordElement = $sourceElement.SelectSingleNode("add[@key='ClearTextPassword']")
77+
if ($passwordElement -eq $null)
78+
{
79+
$passwordElement = $doc.CreateElement("add")
80+
$passwordElement.SetAttribute("key", "ClearTextPassword")
81+
$sourceElement.AppendChild($passwordElement) | Out-Null
82+
}
83+
$passwordElement.SetAttribute("value", $Password)
84+
}
85+
86+
function InsertMaestroPrivateFeedCredentials($Sources, $Creds, $Password) {
87+
$maestroPrivateSources = $Sources.SelectNodes("add[contains(@key,'darc-int')]")
88+
89+
Write-Host "Inserting credentials for $($maestroPrivateSources.Count) Maestro's private feeds."
90+
91+
ForEach ($PackageSource in $maestroPrivateSources) {
92+
Write-Host "`tInserting credential for Maestro's feed:" $PackageSource.Key
93+
AddCredential -Creds $creds -Source $PackageSource.Key -Username $Username -Password $Password
94+
}
95+
}
96+
97+
if (!(Test-Path $ConfigFile -PathType Leaf)) {
98+
Write-Host "Couldn't find the file NuGet config file: $ConfigFile"
99+
ExitWithExitCode 1
100+
}
101+
102+
# Load NuGet.config
103+
$doc = New-Object System.Xml.XmlDocument
104+
$filename = (Get-Item $ConfigFile).FullName
105+
$doc.Load($filename)
106+
107+
# Get reference to <PackageSources> or create one if none exist already
108+
$sources = $doc.DocumentElement.SelectSingleNode("packageSources")
109+
if ($sources -eq $null) {
110+
$sources = $doc.CreateElement("packageSources")
111+
$doc.DocumentElement.AppendChild($sources) | Out-Null
112+
}
113+
114+
# Looks for a <PackageSourceCredentials> node. Create it if none is found.
115+
$creds = $doc.DocumentElement.SelectSingleNode("packageSourceCredentials")
116+
if ($creds -eq $null) {
117+
$creds = $doc.CreateElement("packageSourceCredentials")
118+
$doc.DocumentElement.AppendChild($creds) | Out-Null
119+
}
120+
121+
# Insert credential nodes for Maestro's private feeds
122+
InsertMaestroPrivateFeedCredentials -Sources $sources -Creds $creds -Password $Password
123+
124+
AddPackageSource -Sources $sources -SourceName "dotnet3-internal" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
125+
AddPackageSource -Sources $sources -SourceName "dotnet3-internal-transport" -SourceEndPoint "https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v2" -Creds $creds -Username "dn-bot" -Password $Password
126+
127+
$doc.Save($filename)

eng/common/SetupNugetSources.sh

+117
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#!/usr/bin/env bash
2+
3+
# This file is a temporary workaround for internal builds to be able to restore from private AzDO feeds.
4+
# This file should be removed as part of this issue: https://github.com/dotnet/arcade/issues/4080
5+
#
6+
# What the script does is iterate over all package sources in the pointed NuGet.config and add a credential entry
7+
# under <packageSourceCredentials> for each Maestro's managed private feed. Two additional credential
8+
# entries are also added for the two private static internal feeds: dotnet3-internal and dotnet3-internal-transport.
9+
#
10+
# This script needs to be called in every job that will restore packages and which the base repo has
11+
# private AzDO feeds in the NuGet.config.
12+
#
13+
# See example YAML call for this script below. Note the use of the variable `$(dn-bot-dnceng-artifact-feeds-rw)`
14+
# from the AzureDevOps-Artifact-Feeds-Pats variable group.
15+
#
16+
# - task: Bash@3
17+
# displayName: Setup Private Feeds Credentials
18+
# inputs:
19+
# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh
20+
# arguments: $BUILD_SOURCESDIRECTORY/NuGet.config $Token
21+
# condition: ne(variables['Agent.OS'], 'Windows_NT')
22+
# env:
23+
# Token: $(dn-bot-dnceng-artifact-feeds-rw)
24+
25+
ConfigFile=$1
26+
CredToken=$2
27+
NL='\n'
28+
TB=' '
29+
30+
source="${BASH_SOURCE[0]}"
31+
32+
# resolve $source until the file is no longer a symlink
33+
while [[ -h "$source" ]]; do
34+
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
35+
source="$(readlink "$source")"
36+
# if $source was a relative symlink, we need to resolve it relative to the path where the
37+
# symlink file was located
38+
[[ $source != /* ]] && source="$scriptroot/$source"
39+
done
40+
scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
41+
42+
. "$scriptroot/tools.sh"
43+
44+
if [ ! -f "$ConfigFile" ]; then
45+
echo "Couldn't find the file NuGet config file: $ConfigFile"
46+
ExitWithExitCode 1
47+
fi
48+
49+
if [[ `uname -s` == "Darwin" ]]; then
50+
NL=$'\\\n'
51+
TB=''
52+
fi
53+
54+
# Ensure there is a <packageSources>...</packageSources> section.
55+
grep -i "<packageSources>" $ConfigFile
56+
if [ "$?" != "0" ]; then
57+
echo "Adding <packageSources>...</packageSources> section."
58+
ConfigNodeHeader="<configuration>"
59+
PackageSourcesTemplate="${TB}<packageSources>${NL}${TB}</packageSources>"
60+
61+
sed -i.bak "s|$ConfigNodeHeader|$ConfigNodeHeader${NL}$PackageSourcesTemplate|" NuGet.config
62+
fi
63+
64+
# Ensure there is a <packageSourceCredentials>...</packageSourceCredentials> section.
65+
grep -i "<packageSourceCredentials>" $ConfigFile
66+
if [ "$?" != "0" ]; then
67+
echo "Adding <packageSourceCredentials>...</packageSourceCredentials> section."
68+
69+
PackageSourcesNodeFooter="</packageSources>"
70+
PackageSourceCredentialsTemplate="${TB}<packageSourceCredentials>${NL}${TB}</packageSourceCredentials>"
71+
72+
sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourcesNodeFooter${NL}$PackageSourceCredentialsTemplate|" NuGet.config
73+
fi
74+
75+
# Ensure dotnet3-internal and dotnet3-internal-transport is in the packageSources
76+
grep -i "<add key=\"dotnet3-internal\">" $ConfigFile
77+
if [ "$?" != "0" ]; then
78+
echo "Adding dotnet3-internal to the packageSources."
79+
80+
PackageSourcesNodeFooter="</packageSources>"
81+
PackageSourceTemplate="${TB}<add key=\"dotnet3-internal\" value=\"https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v2\" />"
82+
83+
sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" NuGet.config
84+
fi
85+
86+
# Ensure dotnet3-internal and dotnet3-internal-transport is in the packageSources
87+
grep -i "<add key=\"dotnet3-internal-transport\">" $ConfigFile
88+
if [ "$?" != "0" ]; then
89+
echo "Adding dotnet3-internal-transport to the packageSources."
90+
91+
PackageSourcesNodeFooter="</packageSources>"
92+
PackageSourceTemplate="${TB}<add key=\"dotnet3-internal-transport\" value=\"https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v2\" />"
93+
94+
sed -i.bak "s|$PackageSourcesNodeFooter|$PackageSourceTemplate${NL}$PackageSourcesNodeFooter|" NuGet.config
95+
fi
96+
97+
# I want things split line by line
98+
PrevIFS=$IFS
99+
IFS=$'\n'
100+
PackageSources=$(grep -oh '"darc-int-[^"]*"' $ConfigFile | tr -d '"')
101+
IFS=$PrevIFS
102+
103+
PackageSources+=('dotnet3-internal')
104+
PackageSources+=('dotnet3-internal-transport')
105+
106+
for FeedName in ${PackageSources[@]} ; do
107+
# Check if there is no existing credential for this FeedName
108+
grep -i "<$FeedName>" $ConfigFile
109+
if [ "$?" != "0" ]; then
110+
echo "Adding credentials for $FeedName."
111+
112+
PackageSourceCredentialsNodeFooter="</packageSourceCredentials>"
113+
NewCredential="${TB}${TB}<$FeedName>${NL}<add key=\"Username\" value=\"dn-bot\" />${NL}<add key=\"ClearTextPassword\" value=\"$CredToken\" />${NL}</$FeedName>"
114+
115+
sed -i.bak "s|$PackageSourceCredentialsNodeFooter|$NewCredential${NL}$PackageSourceCredentialsNodeFooter|" NuGet.config
116+
fi
117+
done

0 commit comments

Comments
 (0)