Closed
Description
This repo is the last hold-out on using KoreBuild. We should convert it to use the Arcade SDK.
Benefits
- In the long run, reduces cost of maintaining build tools.
- Makes our repo look like the others which reduces friction in moving between repo
- Hopefully this will lead to improvements in Arcade which other teams will benefit from
Challenges
I've peered into my crystal ball 🔮 and have identified some differences that the implementer should be aware of:
- Arcade does not support a concept of "repo level targets". See build/repo.targets for what we currently do in our build which needs to find an new, unspecified home in the Arcade world.
- Arcade slightly changes the order in which packaging and tests run. Some of our tests, like template tests, depend on the existence of the .nupkg files
- Arcade has different conventions for detecting test projects. See ASP.NET functional test projects not detected by convention arcade#1646
- Arcade does not have support doing a 'dry run' of benchmarks projects during the 'Test' phase. See https://github.com/aspnet/BuildTools/blob/803fd176f1ae147aa8af08e49e76ffda7221a4cd/files/KoreBuild/modules/benchmarks/module.targets#L14-L37 for the korebuild implementation
- Arcade has many defaults which do not align with what aspnet does. We will need to carefully vet build outputs to make sure our product packages, binaries, installers, etc. do not substantially change as result of ripping our KoreBuild. (cref Too many defaults that are opt-out, and they are different from what MSbuild and the .NET Core SDK chose as defaults arcade#1912). Some particular areas of concern where Arcade's defaults may be different:
- Symbols and symbols packages
- Strong name keys
- Authenticode certs
- Localization tooling and resx code generation - tracked in Generating resx files is broken #11054
- Xunit dependency versions
- .NET Framework reference assemblies - global install vs package (affects MVC and runtime compilation)
- The location of
obj/
andbin/
directories - Settings for projects which produce a VSIX
- Custom project types not yet supported in KoreBuild. This repo has project files which are not Microsoft.NET.Sdk projects. E.g. .npmproj, .javaproj, .zipproj, and others. Arcade does not support these yet
- Toolset acquisition
- Arcade will put tools, such as dotnet.exe, in a different locations.
- Arcade does not yet support managing the versions of .NET Core runtimes via Versions.props (cref Support for installing .NET Core shared frameworks arcade#1441, workaround available, see https://github.com/aspnet/Extensions/blob/master/eng/Tools.props)
- Arcade does not appear yet to support x86 on Windows
- Ensure the servicing attribute is set correctly on assemblies: cref Missing [assembly: AssemblyMetadata("Serviceable", "True")] arcade#1526
- Arcade does not run SignCheck, so we need to add our own step verify all outputs are signed (cref Arcade SDK: Run signcheck against all build outputs of real-signed CI arcade#1444)
- Arcade does not have a good way to specify signcheck exclusions SignValidationExclusionList does not work arcade#2888
These probably don't need to be address right away, or at all.
- Need to find a replacement for API check
- Need to find a replacement for NuGet Package Verifier