Merge pull request #7605 from dsplaisted/dev-guide

Add build and test environment setup scripts, update developer guide
This commit is contained in:
Daniel Plaisted 2017-09-11 14:47:08 -07:00 committed by GitHub
commit 6fdc98c23b
8 changed files with 86 additions and 64 deletions

View file

@ -27,8 +27,7 @@ In order to build .NET Command Line Interface, you need the following installed
## Building/Running
1. Run `build.cmd` or `build.sh` from the root depending on your OS. If you don't want to execute tests, run `build.cmd /t:Compile` or `./build.sh /t:Compile`.
- To build the CLI in macOS Sierra, you need to set the DOTNET_RUNTIME_ID environment variable by running `export DOTNET_RUNTIME_ID=osx.10.11-x64`.
2. Use `artifacts/{RID}/stage2/dotnet` to try out the `dotnet` command. You can also add `artifacts/{os}-{arch}/stage2` to the PATH if you want to use the build output when invoking `dotnet` from the current console.
2. The CLI that is built (we call it stage 2) will be laid out in the `bin\2\{RID}\dotnet` folder. You can run `dotnet.exe` or `dotnet` from that folder to try out the `dotnet` command.
## A simple test
Using the `dotnet` built in the previous step:
@ -40,8 +39,12 @@ Using the `dotnet` built in the previous step:
## Running tests
1. To run all tests invoke `build.cmd` or `build.sh` which will build the product and run the tests.
2. To run a specific test, cd into that test's directory and execute `dotnet test`. If using this approach, make sure to add `artifacts/{RID}/stage2` to your `PATH` and set the `NUGET_PACKAGES` environment variable to point to the repo's `.nuget/packages` directory.
1. To run all tests, invoke `build.cmd` or `build.sh` which will build the product and run the tests.
2. To run a specific test project:
- Run `scripts\cli-test-env.bat` on Windows, or [source](https://en.wikipedia.org/wiki/Source_(command)) `scripts/cli-test-env.sh` on Linux or OS X. This will add the stage 2 `dotnet` folder to your path and set up other environment variables which are used for running tests.
- `cd` into the test's directory
- Run `dotnet test`
- Refer to the command-line help for `dotnet test` if you want to run a specific test in the test project
## Adding a Command

17
scripts/cli-build-env.bat Normal file
View file

@ -0,0 +1,17 @@
@echo off
REM Copyright (c) .NET Foundation and contributors. All rights reserved.
REM Licensed under the MIT license. See LICENSE file in the project root for full license information.
REM Get normalized version of parent path
for %%i in (%~dp0..\) DO (
SET CLI_REPO_ROOT=%%~dpi
)
title CLI Build (%CLI_REPO_ROOT%)
REM Add Stage 0 CLI to path
set PATH=%CLI_REPO_ROOT%.dotnet_stage0\x64;%PATH%
set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
set DOTNET_MULTILEVEL_LOOKUP=0
set NUGET_PACKAGES=%CLI_REPO_ROOT%.nuget\packages

20
scripts/dev-dotnet.sh → scripts/cli-build-env.sh Executable file → Normal file
View file

@ -4,22 +4,20 @@
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
set -e
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
source "$DIR/common/_common.sh"
REPO_ROOT="$( cd -P "$( dirname "$SOURCE" )/../" && pwd )"
if [ -d "$STAGE2_DIR" ]; then
PATH=$STAGE2_DIR/bin:$PATH
dotnet "$@"
else
echo "You don't have a dev build!" 1>&2
exit 1
fi
STAGE0_DIR=$REPO_ROOT.dotnet_stage0/x64
export PATH=$STAGE0_DIR:$PATH
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
export DOTNET_MULTILEVEL_LOOKUP=0
export NUGET_PACKAGES=$REPO_ROOT/.nuget/packages

20
scripts/cli-test-env.bat Normal file
View file

@ -0,0 +1,20 @@
@echo off
REM Copyright (c) .NET Foundation and contributors. All rights reserved.
REM Licensed under the MIT license. See LICENSE file in the project root for full license information.
REM Get normalized version of parent path
for %%i in (%~dp0..\) DO (
SET CLI_REPO_ROOT=%%~dpi
)
title CLI Test (%CLI_REPO_ROOT%)
REM Add Stage 2 CLI to path
set PATH=%CLI_REPO_ROOT%bin\2\win10-x64\dotnet
set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
set DOTNET_MULTILEVEL_LOOKUP=0
set NUGET_PACKAGES=%CLI_REPO_ROOT%.nuget\packages
set TEST_PACKAGES=%CLI_REPO_ROOT%bin\2\win10-x64\test\packages
set TEST_ARTIFACTS=%CLI_REPO_ROOT%bin\2\win10-x64\test\artifacts
set PreviousStageProps=%CLI_REPO_ROOT%bin\2\win10-x64\PreviousStage.props

33
scripts/cli-test-env.sh Normal file
View file

@ -0,0 +1,33 @@
#!/usr/bin/env bash
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
REPO_ROOT="$( cd -P "$( dirname "$SOURCE" )/../" && pwd )"
if [ "$uname" = "Darwin" ]
then
RID=osx-x64
else
RID=linux-x64
fi
STAGE2_DIR=$REPO_ROOT/bin/2/$RID/dotnet
export PATH=$STAGE2_DIR:$PATH
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
export DOTNET_MULTILEVEL_LOOKUP=0
export NUGET_PACKAGES=$REPO_ROOT/.nuget/packages
export TEST_PACKAGES=$REPO_ROOT/bin/2/$RID/test/packages
export TEST_ARTIFACTS=$REPO_ROOT/bin/2/$RID/test/artifacts
export PreviousStageProps=$REPO_ROOT/bin/2/$RID/PreviousStage.props

View file

@ -1,24 +0,0 @@
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
$oldPath = $env:PATH
try {
# Put the stage2 output on the front of the path
if(!(Get-Command dotnet -ErrorAction SilentlyContinue)) {
throw "You need to have a version of 'dotnet' on your path so we can determine the RID"
}
$rid = dotnet --version | where { $_ -match "^ Runtime Id:\s*(.*)$" } | foreach { $matches[1] }
$stage2 = "$PSScriptRoot\..\artifacts\$rid\stage2\bin"
if (Test-Path $stage2) {
$env:PATH="$stage2;$env:PATH"
} else {
Write-Host "You don't have a dev build in the 'artifacts\$rid\stage2' folder!"
}
dotnet @args
} finally {
$env:PATH = $oldPath
}

View file

@ -1,9 +0,0 @@
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
# Remove the stage2 output from the path
$splat = $env:PATH.Split(";")
$stripped = @($splat | where { $_ -notlike "*artifacts\win7-x64\stage2*" })
$env:PATH = [string]::Join(";", $stripped)

View file

@ -1,16 +0,0 @@
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
# Put the stage2 output on the front of the path
$stage2 = "$PSScriptRoot\..\artifacts\win10-x64\stage2"
if (Test-Path $stage2) {
$splat = $env:PATH.Split(";")
$stage2 = Convert-Path $stage2
if ($splat -notcontains $stage2) {
$env:PATH="$stage2;$env:PATH"
}
} else {
Write-Host "You don't have a dev build in the 'artifacts\win10-x64\stage2' folder!"
}