diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml
index caa6557d49..67d59a247f 100644
--- a/.azure/pipelines/ci.yml
+++ b/.azure/pipelines/ci.yml
@@ -29,7 +29,9 @@ variables:
- ${{ if or(eq(variables['System.TeamProject'], 'public'), in(variables['Build.Reason'], 'PullRequest')) }}:
- name: _BuildArgs
value: ''
+
jobs:
+# Code check
- template: jobs/default-build.yml
parameters:
jobName: Code_check
@@ -38,6 +40,10 @@ jobs:
steps:
- powershell: ./eng/scripts/CodeCheck.ps1 -ci
displayName: Run eng/scripts/CodeCheck.ps1
+ artifacts:
+ - name: Code_Check_Logs
+ path: artifacts/log/
+ publishOnError: true
# Build Windows (x64/x86)
- template: jobs/default-build.yml
@@ -171,6 +177,7 @@ jobs:
-bl:artifacts/log/build.macos.binlog
$(_BuildArgs)
installNodeJs: false
+ installJdk: false
artifacts:
- name: MacOS_x64_Packages
path: artifacts/packages/
@@ -191,7 +198,6 @@ jobs:
jobName: Linux_x64_build
jobDisplayName: "Build: Linux x64"
agentOs: Linux
- installNodeJs: false
steps:
- script: ./build.sh
--ci
@@ -211,6 +217,7 @@ jobs:
--arch x64 \
--build-installers \
--no-build-deps \
+ --no-build-nodejs \
-p:OnlyPackPlatformSpecificPackages=true \
-p:BuildRuntimeArchive=false \
-p:LinuxInstallerType=deb \
@@ -224,12 +231,15 @@ jobs:
--arch x64 \
--build-installers \
--no-build-deps \
+ --no-build-nodejs \
-p:OnlyPackPlatformSpecificPackages=true \
-p:BuildRuntimeArchive=false \
-p:LinuxInstallerType=rpm \
-bl:artifacts/log/build.rpm.binlog \
$(_BuildArgs)
displayName: Build RPM installers
+ installNodeJs: false
+ installJdk: false
artifacts:
- name: Linux_x64_Packages
path: artifacts/packages/
@@ -260,6 +270,7 @@ jobs:
-bl:artifacts/log/build.linux-arm.binlog
$(_BuildArgs)
installNodeJs: false
+ installJdk: false
artifacts:
- name: Linux_arm_Packages
path: artifacts/packages/
@@ -290,6 +301,7 @@ jobs:
-bl:artifacts/log/build.arm64.binlog
$(_BuildArgs)
installNodeJs: false
+ installJdk: false
artifacts:
- name: Linux_arm64_Packages
path: artifacts/packages/
@@ -323,6 +335,7 @@ jobs:
-bl:artifacts/log/build.musl.binlog
$(_BuildArgs)
installNodeJs: false
+ installJdk: false
artifacts:
- name: Linux_musl_x64_Packages
path: artifacts/packages/
@@ -337,7 +350,7 @@ jobs:
parameters:
inputName: Linux_musl_x64
-# Build Linux Musl arm64
+# Build Linux Musl ARM64
- template: jobs/default-build.yml
parameters:
jobName: Linux_musl_arm64_build
@@ -356,6 +369,7 @@ jobs:
-bl:artifacts/log/build.musl.binlog
$(_BuildArgs)
installNodeJs: false
+ installJdk: false
artifacts:
- name: Linux_musl_arm64_Packages
path: artifacts/packages/
@@ -499,7 +513,7 @@ jobs:
version: 3.0.x
installationPath: $(DotNetCoreSdkDir)
includePreviewVersions: true
- - script: ./eng/scripts/ci-source-build.sh --ci --configuration Release /p:BuildManaged=true
+ - script: ./eng/scripts/ci-source-build.sh --ci --configuration Release /p:BuildManaged=true /p:BuildNodeJs=false
displayName: Run ci-source-build.sh
- task: PublishBuildArtifacts@1
displayName: Upload logs
diff --git a/build.ps1 b/build.ps1
index 018c3970b7..17020044ed 100644
--- a/build.ps1
+++ b/build.ps1
@@ -183,7 +183,7 @@ elseif ($Projects) {
}
# When adding new sub-group build flags, add them to this check.
elseif((-not $BuildNative) -and (-not $BuildManaged) -and (-not $BuildNodeJS) -and (-not $BuildInstallers) -and (-not $BuildJava)) {
- Write-Warning "No default group of projects was specified, so building the 'managed' subsets of projects. Run ``build.cmd -help`` for more details."
+ Write-Warning "No default group of projects was specified, so building the 'managed' and its dependent subsets of projects. Run ``build.cmd -help`` for more details."
# This goal of this is to pick a sensible default for `build.cmd` with zero arguments.
# Now that we support subfolder invokations of build.cmd, we will be pushing to have build.cmd build everything (-all) by default
@@ -191,6 +191,25 @@ elseif((-not $BuildNative) -and (-not $BuildManaged) -and (-not $BuildNodeJS) -a
$BuildManaged = $true
}
+if ($BuildManaged -or ($All -and (-not $NoBuildManaged))) {
+ if ((-not $BuildNodeJS) -and (-not $NoBuildNodeJS)) {
+ $node = Get-Command node -ErrorAction Ignore -CommandType Application
+
+ if ($node) {
+ $nodeHome = Split-Path -Parent (Split-Path -Parent $node.Path)
+ Write-Host -f Magenta "Building of C# project is enabled and has dependencies on NodeJS projects. Building of NodeJS projects is enabled since node is detected in $nodeHome."
+ }
+ else {
+ Write-Host -f Magenta "Building of NodeJS projects is disabled since node is not detected on Path and no BuildNodeJs or NoBuildNodeJs setting is set explicitly."
+ $NoBuildNodeJS = $true
+ }
+ }
+
+ if ($NoBuildNodeJS){
+ Write-Warning "Some managed projects depend on NodeJS projects. Building NodeJS is disabled so the managed projects will fallback to using the output from previous builds. The output may not be correct or up to date."
+ }
+}
+
if ($BuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=true" }
if ($BuildManaged) { $MSBuildArguments += "/p:BuildManaged=true" }
if ($BuildNative) { $MSBuildArguments += "/p:BuildNative=true" }
diff --git a/build.sh b/build.sh
index c170ac1844..ad4ce2c1c8 100755
--- a/build.sh
+++ b/build.sh
@@ -213,7 +213,7 @@ elif [ ! -z "$build_projects" ]; then
elif [ -z "$build_managed" ] && [ -z "$build_nodejs" ] && [ -z "$build_java" ] && [ -z "$build_native" ] && [ -z "$build_installers" ]; then
# This goal of this is to pick a sensible default for `build.sh` with zero arguments.
# We believe the most common thing our contributors will work on is C#, so if no other build group was picked, build the C# projects.
- __warn "No default group of projects was specified, so building the 'managed' subset of projects. Run ``build.sh --help`` for more details."
+ __warn "No default group of projects was specified, so building the 'managed' and its dependent subset of projects. Run ``build.sh --help`` for more details."
build_managed=true
fi
@@ -221,6 +221,21 @@ if [ "$build_deps" = false ]; then
msbuild_args[${#msbuild_args[*]}]="-p:BuildProjectReferences=false"
fi
+if [ "$build_managed" = true ] || (["$build_all" = true ] && [ "$build_managed" != false ]); then
+ if [ -z "$build_nodejs" ]; then
+ if [ -x "$(command -v node)" ]; then
+ __warn "Building of C# project is enabled and has dependencies on NodeJS projects. Building of NodeJS projects is enabled since node is detected on PATH."
+ else
+ __warn "Building of NodeJS projects is disabled since node is not detected on Path and no BuildNodeJs or NoBuildNodeJs setting is set explicitly."
+ build_nodejs=false
+ fi
+ fi
+
+ if [ "$build_nodejs" = false ]; then
+ __warn "Some managed projects depend on NodeJS projects. Building NodeJS is disabled so the managed projects will fallback to using the output from previous builds. The output may not be correct or up to date."
+ fi
+fi
+
# Only set these MSBuild properties if they were explicitly set by build parameters.
[ ! -z "$build_java" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildJava=$build_java"
[ ! -z "$build_native" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildNative=$build_native"
diff --git a/docs/BuildFromSource.md b/docs/BuildFromSource.md
index 53938c189b..7740ec6140 100644
--- a/docs/BuildFromSource.md
+++ b/docs/BuildFromSource.md
@@ -97,14 +97,14 @@ The cause of this problem is that the solution you are using does not include th
```
### Common error: Unable to locate the .NET Core SDK
-
+
Executing `.\restore.cmd` or `.\build.cmd` may produce these errors:
> error : Unable to locate the .NET Core SDK. Check that it is installed and that the version specified in global.json (if any) matches the installed version.
> error MSB4236: The SDK 'Microsoft.NET.Sdk' specified could not be found.
In most cases, this is because the option _Use previews of the .NET Core SDK_ in VS2019 is not checked. Start Visual Studio, go to _Tools > Options_ and check _Use previews of the .NET Core SDK_ under _Environment > Preview Features_.
-
+
## Building with Visual Studio Code
Using Visual Studio Code with this repo requires setting environment variables on command line first.
@@ -138,6 +138,8 @@ On macOS/Linux:
./build.sh
```
+By default, all of the C# projects are built. Some C# projects requires NodeJS to be installed to compile JavaScript assets which are then checked in as source. If NodeJS is detected on the path, the NodeJS projects will be compiled as part of building C# projects. If NodeJS is not detected on the path, the JavaScript assets checked in previously will be used instead. To disable building NodeJS projects, specify /p:BuildNodeJs=false on the command line.
+
### Using `dotnet` on command line in this repo
Because we are using pre-release versions of .NET Core, you have to set a handful of environment variables
diff --git a/eng/Build.props b/eng/Build.props
index eba7a2ac91..ef1a7776b6 100644
--- a/eng/Build.props
+++ b/eng/Build.props
@@ -4,14 +4,16 @@
- true
- true
- true
- true
+ true
+ true
+ true
+ true
+
+
-
@@ -102,6 +104,7 @@
$([MSBuild]::NormalizeDirectory('$(BaseIntermediateOutputPath)'))$(Configuration)\
--frozen-lockfile
<_BackupPackageJson>$(IntermediateOutputPath)$(MSBuildProjectName).package.json.bak
+
+ PrepareForBuild;
+ ResolveProjectReferences;
+ _Build;
+
+ run build
+
+
+
+
+
+
+
@@ -36,13 +49,13 @@
BuildInParallel="true" />
-
+
-
+
diff --git a/src/Components/Blazor/testassets/MonoSanityClient/MonoSanityClient.csproj b/src/Components/Blazor/testassets/MonoSanityClient/MonoSanityClient.csproj
index e40ea493bd..b186c39194 100644
--- a/src/Components/Blazor/testassets/MonoSanityClient/MonoSanityClient.csproj
+++ b/src/Components/Blazor/testassets/MonoSanityClient/MonoSanityClient.csproj
@@ -11,7 +11,4 @@
true
-
-
-
diff --git a/src/Components/Directory.Build.targets b/src/Components/Directory.Build.targets
index bd6e405829..7afb3dc46f 100644
--- a/src/Components/Directory.Build.targets
+++ b/src/Components/Directory.Build.targets
@@ -5,6 +5,16 @@
+
+
+
+
diff --git a/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj b/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj
index 3f87bd43af..6d0ed26c20 100644
--- a/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj
+++ b/src/Components/Server/src/Microsoft.AspNetCore.Components.Server.csproj
@@ -21,6 +21,16 @@
+
+
+
+
@@ -53,12 +63,7 @@
-
- ..\..\Web.JS\dist\Release\blazor.server.js
- ..\..\Web.JS\dist\Debug\blazor.server.js
+ ..\..\Web.JS\dist\$(Configuration)\blazor.server.js
diff --git a/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj b/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
index f47ada3d4f..8e0a17ece0 100644
--- a/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
+++ b/src/Components/Web.JS/Microsoft.AspNetCore.Components.Web.JS.npmproj
@@ -7,8 +7,18 @@
-
-
+
+
diff --git a/src/Components/Web.JS/package.json b/src/Components/Web.JS/package.json
index ea59361494..327aaaafea 100644
--- a/src/Components/Web.JS/package.json
+++ b/src/Components/Web.JS/package.json
@@ -5,9 +5,12 @@
"description": "",
"main": "index.js",
"scripts": {
+ "preclean": "yarn install --mutex network",
+ "clean": "node node_modules/rimraf/bin.js ./dist/Debug ./dist/Release",
+ "prebuild": "yarn run clean && yarn install --mutex network",
"build": "yarn run build:debug && yarn run build:production",
- "build:debug": "cd src && webpack --mode development --config ./webpack.config.js",
- "build:production": "cd src && webpack --mode production --config ./webpack.config.js",
+ "build:debug": "cd src && node ../node_modules/webpack-cli/bin/cli.js --mode development --config ./webpack.config.js",
+ "build:production": "cd src && node ../node_modules/webpack-cli/bin/cli.js --mode production --config ./webpack.config.js",
"test": "jest"
},
"devDependencies": {
@@ -21,6 +24,7 @@
"@typescript-eslint/parser": "^1.5.0",
"eslint": "^5.16.0",
"jest": "^24.8.0",
+ "rimraf": "^2.6.2",
"ts-jest": "^24.0.0",
"ts-loader": "^4.4.1",
"typescript": "^3.5.3",
diff --git a/src/Components/Web.JS/tests/DefaultReconnectionHandler.test.ts b/src/Components/Web.JS/tests/DefaultReconnectionHandler.test.ts
index 62f207415e..d59e0fecfe 100644
--- a/src/Components/Web.JS/tests/DefaultReconnectionHandler.test.ts
+++ b/src/Components/Web.JS/tests/DefaultReconnectionHandler.test.ts
@@ -58,23 +58,24 @@ describe('DefaultReconnectionHandler', () => {
expect(reconnect).toHaveBeenCalledTimes(1);
});
- it('invokes failed if reconnect fails', async () => {
- const testDisplay = createTestDisplay();
- const reconnect = jest.fn().mockRejectedValue(null);
- const handler = new DefaultReconnectionHandler(NullLogger.instance, testDisplay, reconnect);
- window.console.error = jest.fn();
+ // Skipped while under investigation: https://github.com/aspnet/AspNetCore/issues/12578
+ // it('invokes failed if reconnect fails', async () => {
+ // const testDisplay = createTestDisplay();
+ // const reconnect = jest.fn().mockRejectedValue(null);
+ // const handler = new DefaultReconnectionHandler(NullLogger.instance, testDisplay, reconnect);
+ // window.console.error = jest.fn();
- handler.onConnectionDown({
- maxRetries: 3,
- retryIntervalMilliseconds: 20,
- dialogId: 'ignored'
- });
+ // handler.onConnectionDown({
+ // maxRetries: 3,
+ // retryIntervalMilliseconds: 20,
+ // dialogId: 'ignored'
+ // });
- await delay(100);
- expect(testDisplay.show).toHaveBeenCalled();
- expect(testDisplay.failed).toHaveBeenCalled();
- expect(reconnect).toHaveBeenCalledTimes(3);
- });
+ // await delay(500);
+ // expect(testDisplay.show).toHaveBeenCalled();
+ // expect(testDisplay.failed).toHaveBeenCalled();
+ // expect(reconnect).toHaveBeenCalledTimes(3);
+ // });
});
function attachUserSpecifiedUI(options: ReconnectionOptions): Element {
diff --git a/src/Components/Web.JS/yarn.lock b/src/Components/Web.JS/yarn.lock
index f49df8df7d..48b8058558 100644
--- a/src/Components/Web.JS/yarn.lock
+++ b/src/Components/Web.JS/yarn.lock
@@ -2141,7 +2141,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
-glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
+glob@^7.1.1, glob@^7.1.2:
version "7.1.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
@@ -2153,6 +2153,18 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
+glob@^7.1.3:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
global-modules@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
@@ -2402,16 +2414,21 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
inherits@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
diff --git a/src/Shared/E2ETesting/E2ETesting.targets b/src/Shared/E2ETesting/E2ETesting.targets
index fb3c80a3a3..48d8dad7a6 100644
--- a/src/Shared/E2ETesting/E2ETesting.targets
+++ b/src/Shared/E2ETesting/E2ETesting.targets
@@ -11,7 +11,7 @@
Importance="High"
Text="Prerequisites were not enforced at build time. Running Yarn or the E2E tests might fail as a result. Check /src/Shared/E2ETesting/Readme.md for instructions." />
-
+
--verbose --no-color --configuration $(Configuration) --sauce-user "$(SauceUser)" --sauce-key "$(SauceKey)"
<_TestSauceArgs Condition="'$(BrowserTestHostName)' != ''">$(_TestSauceArgs) --use-hostname "$(BrowserTestHostName)"
run test:inner --no-color --configuration $(Configuration)
+ run build:inner