Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
1213ae0
Build with .NET 8.0:
Thorium Sep 23, 2024
db210aa
try to run integration-tests with net6.0
Thorium Sep 24, 2024
fb51bc4
uninstall didn't seem to work well anyway
Thorium Sep 24, 2024
9439185
publish both test-artifacts, ensure test DirectorySeparatorChar
Thorium Sep 24, 2024
84a0da8
parentheses added
Thorium Sep 27, 2024
b759d73
integration tests back to 8
Thorium Sep 27, 2024
a240a3c
typo fix
Thorium Sep 27, 2024
690219e
fix merge
Numpsy Dec 24, 2024
cc41097
Try using the .NET 8 SDK for the resolver tests
Numpsy Dec 24, 2024
da660ae
Try to work around https://github.com/dotnet/sdk/issues/40655
Numpsy Dec 24, 2024
b18d105
Because the system uses FSharp.Compiler.Service v43.8, the fsdocs-too…
Thorium Jul 18, 2025
10718f9
Fix merge
Numpsy Oct 25, 2025
1a66975
Try to get the template integration tests working by making them use …
Numpsy Oct 27, 2025
49081ce
update
Numpsy Oct 29, 2025
ca58edb
Change SdkAssemblyResolver.SdkVersions to take an empty string to mea…
Numpsy Oct 30, 2025
ef9994b
In GetProductReleasesForSdk(), rename 'net60releases' to 'netReleases'
Numpsy Oct 30, 2025
8248283
Update the Microsoft.Build libraries from 17.11.4 to 17.11.48 to pick…
Numpsy Oct 30, 2025
1499e91
.NET 10.0 updates
Numpsy May 17, 2026
ed64fd9
Tweak naming around compiler calls to remove 'returnCode' now there i…
Numpsy Jul 25, 2026
f5dd6e8
Make recordProcess private to fix build errors:
Numpsy Oct 11, 2026
632b66f
Tweak the result code handling in FSC calls to more closely stick to …
Numpsy Oct 11, 2026
aad8567
Paket 11
Numpsy Oct 11, 2026
86272d4
Set version when publishing netcore tool
Numpsy Oct 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,36 @@
"version": "0.1.232",
"commands": [
"dotnet-deb"
]
],
"rollForward": true
},
"paket": {
"version": "9.0.2",
"version": "11.0.1",
"commands": [
"paket"
]
],
"rollForward": false
},
"fantomas": {
"version": "5.0.5",
"commands": [
"fantomas"
]
],
"rollForward": false
},
"fsdocs-tool": {
"version": "16.0.1",
"version": "22.1.0",
"commands": [
"fsdocs"
]
],
"rollForward": false
},
"fake-cli": {
"version": "6.1.5",
"commands": [
"fake"
]
],
"rollForward": false
}
}
}
6 changes: 3 additions & 3 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ jobs:
os: [ubuntu-22.04, windows-latest, macos-15-intel]
steps:
- uses: actions/checkout@v6
- name: Setup .NET 6
- name: Setup .NET 10
uses: actions/setup-dotnet@v5
with:
dotnet-version: '6.0.301'
dotnet-version: '10.0.100'
- name: Restore dotnet tools
run: dotnet tool restore
- name: Install mono (Mac)
Expand All @@ -39,7 +39,7 @@ jobs:
- name: Build fake runner
run: dotnet pack --version-suffix 1 src/app/fake-cli/fake-cli.fsproj
- name: add fake runner as a tool
run: dotnet tool install fake-cli --add-source "./src/app/fake-cli/bin/Debug" --version 1.0.0-1
run: dotnet tool install fake-cli --add-source "./src/app/fake-cli/bin/Debug" --add-source "./src/app/fake-cli/bin/Release" --version 1.0.0-1
- name: Build
run: dotnet fake -v build --parallel 3 -e FAKE_DETAILED_ERRORS=true
- name: publish build artifacts
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,18 @@ jobs:
environment: Production
steps:
- uses: actions/checkout@v6
- name: Setup .NET 6
- name: Setup .NET 10
uses: actions/setup-dotnet@v5
with:
dotnet-version: '6.0.301'
dotnet-version: '10.0.100'
- name: Restore dotnet tools
run: dotnet tool restore
- name: remove current fake runner tool
run: dotnet tool uninstall fake-cli
- name: Build fake runner
run: dotnet pack -p:PackageVersion=${{ github.event.inputs.releaseVersion }} src/app/fake-cli/fake-cli.fsproj
- name: add fake runner as a tool
run: dotnet tool install fake-cli --add-source "./src/app/fake-cli/bin/Debug" --version ${{ github.event.inputs.releaseVersion }}
run: dotnet tool install fake-cli --add-source "./src/app/fake-cli/bin/Debug" --add-source "./src/app/fake-cli/bin/Release" --version ${{ github.event.inputs.releaseVersion }}
- name: Build
run: dotnet fake build -t Release_BuildAndTest --parallel 3
- name: publish build artifacts
Expand Down
81 changes: 75 additions & 6 deletions .paket/Paket.Restore.targets
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,41 @@
<PaketRestoreRequired Condition=" '$(PaketRestoreReferencesFileHash)' == '$(PaketRestoreCachedHash)' ">false</PaketRestoreRequired>
</PropertyGroup>

<!-- Step 2 a-bis Detect changes in paket.lock since this project's
last per-project restore. Step 2a alone misses the case where
paket.references content is unchanged but paket.lock has been
updated (e.g. a merge that bumps a transitive package version).
Without this, the per-project paket.props under a redirected
BaseIntermediateOutputPath stays stale and NuGet keeps resolving
to the old version. The cache file recording the lock hash is
written after a successful per-project restore, see Step 3. -->
<PropertyGroup>
<PaketProjectLockHashCacheFilePath>$(PaketIntermediateOutputPath)\$(MSBuildProjectFile).paket.lock.hash</PaketProjectLockHashCacheFilePath>
</PropertyGroup>
<!-- Compute current paket.lock hash here even if Step 1 was disabled
(e.g. PaketDisableGlobalRestore=true) so the per-project check
still works. -->
<PropertyGroup Condition=" '$(PaketProjectLockHashCurrent)' == '' AND '$(PaketRestoreLockFileHash)' != '' ">
<PaketProjectLockHashCurrent>$(PaketRestoreLockFileHash)</PaketProjectLockHashCurrent>
</PropertyGroup>
<GetFileHash Condition=" '$(MSBuildSupportsHashing)' == 'true' AND Exists('$(PaketLockFilePath)') AND '$(PaketProjectLockHashCurrent)' == '' " Files="$(PaketLockFilePath)" Algorithm="SHA256" HashEncoding="hex">
<Output TaskParameter="Hash" PropertyName="PaketProjectLockHashCurrent" />
</GetFileHash>
<PropertyGroup Condition=" '$(MSBuildSupportsHashing)' == 'true' AND Exists('$(PaketLockFilePath)') AND Exists('$(PaketProjectLockHashCacheFilePath)') ">
<PaketProjectLockHashCached>$([System.IO.File]::ReadAllText('$(PaketProjectLockHashCacheFilePath)').Trim())</PaketProjectLockHashCached>
<PaketRestoreRequired Condition=" '$(PaketProjectLockHashCurrent)' != '' AND '$(PaketProjectLockHashCached)' != '$(PaketProjectLockHashCurrent)' ">true</PaketRestoreRequired>
<PaketRestoreRequiredReason Condition=" '$(PaketProjectLockHashCurrent)' != '' AND '$(PaketProjectLockHashCached)' != '$(PaketProjectLockHashCurrent)' ">paket.lock content changed since last per-project restore</PaketRestoreRequiredReason>
</PropertyGroup>
<!-- First encounter: hash file does not exist but paket.lock does.
This catches checkouts that have legacy per-project state from
before this check was introduced (so Step 2b may not fire) but
where paket.lock has since been bumped. After the per-project
restore runs, Step 3 a-bis writes the cache file. -->
<PropertyGroup Condition=" '$(MSBuildSupportsHashing)' == 'true' AND Exists('$(PaketLockFilePath)') AND !Exists('$(PaketProjectLockHashCacheFilePath)') ">
<PaketRestoreRequired>true</PaketRestoreRequired>
<PaketRestoreRequiredReason>per-project paket.lock hash cache missing</PaketRestoreRequiredReason>
</PropertyGroup>

<PropertyGroup Condition="!Exists('$(PaketOriginalReferencesFilePath)') AND !Exists('$(PaketReferencesCachedFilePath)') ">
<!-- If both don't exist there is nothing to do. -->
<PaketRestoreRequired>false</PaketRestoreRequired>
Expand All @@ -218,6 +253,11 @@
<Exec Command='$(PaketCommand) restore --project "$(MSBuildProjectFullPath)" --output-path "$(PaketIntermediateOutputPath)" --target-framework "$(TargetFrameworks)"' Condition=" '$(PaketRestoreRequired)' == 'true' AND '$(TargetFramework)' == '' " ContinueOnError="false" />
<Exec Command='$(PaketCommand) restore --project "$(MSBuildProjectFullPath)" --output-path "$(PaketIntermediateOutputPath)" --target-framework "$(TargetFramework)"' Condition=" '$(PaketRestoreRequired)' == 'true' AND '$(TargetFramework)' != '' " ContinueOnError="false" />

<!-- Step 3 a-bis After a successful per-project restore, stamp the
paket.lock hash next to the per-project paket files. Step 2 a-bis
reads this on the next call to detect lock-content changes. -->
<WriteLinesToFile Condition=" '$(MSBuildSupportsHashing)' == 'true' AND '$(PaketRestoreRequired)' == 'true' AND '$(PaketProjectLockHashCurrent)' != '' " File="$(PaketProjectLockHashCacheFilePath)" Lines="$(PaketProjectLockHashCurrent)" Overwrite="true" />

<!-- This shouldn't actually happen, but just to be sure. -->
<PropertyGroup>
<DoAllResolvedFilesExist>false</DoAllResolvedFilesExist>
Expand All @@ -235,23 +275,27 @@
<Splits>$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length)</Splits>
<PackageName>$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0])</PackageName>
<PackageVersion>$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1])</PackageVersion>
<Reference>$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[2])</Reference>
<AllPrivateAssets>$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4])</AllPrivateAssets>
<CopyLocal Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 6">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5])</CopyLocal>
<OmitContent Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 7">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[6])</OmitContent>
<ImportTargets Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 8">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[7])</ImportTargets>
<Aliases Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 9">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[8])</Aliases>
<ReferenceCondition Condition="%(PaketReferencesFileLinesInfo.Splits) &gt;= 10">$([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[9])</ReferenceCondition>
</PaketReferencesFileLinesInfo>
<PackageReference Include="%(PaketReferencesFileLinesInfo.PackageName)">
<Version>%(PaketReferencesFileLinesInfo.PackageVersion)</Version>
<PackageReference Condition=" ('$(ManagePackageVersionsCentrally)' != 'true' Or '%(PaketReferencesFileLinesInfo.Reference)' == 'Direct') AND ('%(PaketReferencesFileLinesInfo.ReferenceCondition)' == 'true' Or $(%(PaketReferencesFileLinesInfo.ReferenceCondition)) == 'true')" Include="%(PaketReferencesFileLinesInfo.PackageName)">
<Version Condition=" '$(ManagePackageVersionsCentrally)' != 'true' ">%(PaketReferencesFileLinesInfo.PackageVersion)</Version>
<PrivateAssets Condition=" ('%(PaketReferencesFileLinesInfo.AllPrivateAssets)' == 'true') Or ('$(PackAsTool)' == 'true') ">All</PrivateAssets>
<ExcludeAssets Condition=" %(PaketReferencesFileLinesInfo.CopyLocal) == 'false' or %(PaketReferencesFileLinesInfo.AllPrivateAssets) == 'exclude'">runtime</ExcludeAssets>
<ExcludeAssets Condition=" %(PaketReferencesFileLinesInfo.OmitContent) == 'true'">$(ExcludeAssets);contentFiles</ExcludeAssets>
<ExcludeAssets Condition=" %(PaketReferencesFileLinesInfo.ImportTargets) == 'false'">$(ExcludeAssets);build;buildMultitargeting;buildTransitive</ExcludeAssets>
<Aliases Condition=" %(PaketReferencesFileLinesInfo.Aliases) != ''">%(PaketReferencesFileLinesInfo.Aliases)</Aliases>
<Publish Condition=" '$(PackAsTool)' == 'true' ">true</Publish>
<AllowExplicitVersion>true</AllowExplicitVersion>

</PackageReference>
<PackageVersion Condition="('$(ManagePackageVersionsCentrally)' != 'true' Or '%(PaketReferencesFileLinesInfo.Reference)' == 'Direct') AND ('%(PaketReferencesFileLinesInfo.ReferenceCondition)' == 'true' Or $(%(PaketReferencesFileLinesInfo.ReferenceCondition)) == 'true')" Include="%(PaketReferencesFileLinesInfo.PackageName)">
<Version>%(PaketReferencesFileLinesInfo.PackageVersion)</Version>
</PackageVersion>
</ItemGroup>

<PropertyGroup>
Expand Down Expand Up @@ -311,13 +355,35 @@

<ItemGroup>
<_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.$(PackageVersion.Split(`+`)[0]).nuspec"/>
<!-- When include-symbols/include-source packing options are used, the SDK's GenerateNuspec
target also produces a "*.symbols.nuspec" file alongside the regular nuspec. _NuspecFiles
would then contain both files, and MSBuild joins multiple items with ";" when they are
consumed as a single property (NuspecFileAbsolutePath below), producing an invalid path
that later fails PackTask/dotnet pack with a "syntax is incorrect" error. _PrimaryNuspecFile
picks the non-symbols nuspec to use for packing, while fix-nuspecs above still runs
against all of them so both nuspecs get corrected. -->
<_PrimaryNuspecFile Include="@(_NuspecFiles)" Exclude="$(AdjustedNuspecOutputPath)\*.symbols.nuspec" Condition="@(_NuspecFiles) != ''" />
<_PrimaryNuspecFile Include="@(_NuspecFiles)" Condition="@(_PrimaryNuspecFile) == '' And @(_NuspecFiles) != ''" />
</ItemGroup>

<Error Text="Error Because of PAKET_ERROR_ON_MSBUILD_EXEC (not calling fix-nuspecs)" Condition=" '$(PAKET_ERROR_ON_MSBUILD_EXEC)' == 'true' " />
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) fix-nuspecs files "@(_NuspecFiles)" project-file "$(PaketProjectFile)" ' />
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) show-conditions -s' ConsoleToMSBuild="true" StandardOutputImportance="low">
<Output TaskParameter="ConsoleOutput" ItemName="_ConditionProperties"/>
</Exec>
<ItemGroup>
<_DefinedConditionProperties Include="@(_ConditionProperties)" Condition="$(%(Identity)) == 'true'"/>
</ItemGroup>
<PropertyGroup>
<_ConditionsParameter></_ConditionsParameter>
<!-- Quoted like "@(_NuspecFiles)" below, and for the same reason: MSBuild joins an item
list with ";", and Exec runs its command through /bin/sh on Unix, where ";" ends the
command. Unquoted, a second condition was run as a shell command of its own. -->
<_ConditionsParameter Condition="@(_DefinedConditionProperties) != ''">--conditions "@(_DefinedConditionProperties)"</_ConditionsParameter>
</PropertyGroup>
<Exec Condition="@(_NuspecFiles) != ''" Command='$(PaketCommand) fix-nuspecs files "@(_NuspecFiles)" project-file "$(PaketProjectFile)" $(_ConditionsParameter)' />
<Error Condition="@(_NuspecFiles) == ''" Text='Could not find nuspec files in "$(AdjustedNuspecOutputPath)" (Version: "$(PackageVersion)"), therefore we cannot call "paket fix-nuspecs" and have to error out!' />

<ConvertToAbsolutePath Condition="@(_NuspecFiles) != ''" Paths="@(_NuspecFiles)">
<ConvertToAbsolutePath Condition="@(_PrimaryNuspecFile) != ''" Paths="@(_PrimaryNuspecFile)">
<Output TaskParameter="AbsolutePaths" PropertyName="NuspecFileAbsolutePath" />
</ConvertToAbsolutePath>

Expand Down Expand Up @@ -369,7 +435,10 @@
PackageLicenseExpression="$(PackageLicenseExpression)"
PackageLicenseExpressionVersion="$(PackageLicenseExpressionVersion)"
Readme="$(PackageReadmeFile)"
NoDefaultExcludes="$(NoDefaultExcludes)"/>
NoDefaultExcludes="$(NoDefaultExcludes)"
NoWarn="$(NoWarn)"
TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
WarningsAsErrors="$(WarningsAsErrors)"/>

<PackTask Condition="$(UseMSBuild16_0_Pack)"
PackItem="$(PackProjectInputFile)"
Expand Down
110 changes: 0 additions & 110 deletions .paket/PaketRestoreTask.deps.json

This file was deleted.

Binary file removed .paket/PaketRestoreTask.dll
Binary file not shown.
Loading
Loading