Skip to content
This repository was archived by the owner on Apr 20, 2023. It is now read-only.

Commit 878821a

Browse files
author
jbeisner
committed
Consider case and "target" as possibilities.
1 parent 12350c4 commit 878821a

File tree

2 files changed

+185
-2
lines changed

2 files changed

+185
-2
lines changed

run-build.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ if($Help)
3232
$ExtraParametersNoTargets = ""
3333
foreach ($param in $ExtraParameters.split())
3434
{
35-
if(-Not ($param.StartsWith("/t:")))
35+
if((-not $param.StartsWith("/t")) -and (-not $param.StartsWith("/T")))
3636
{
3737
$ExtraParametersNoTargets += " {0}" -f $param
3838
}

run-build.sh

Lines changed: 184 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,184 @@
1-
#!/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.#set -emachine_has() { hash "$1" > /dev/null 2>&1 return $?}check_min_reqs() { if ! machine_has "curl"; then echo "run-build: Error: curl is required to download dotnet. Install curl to proceed." >&2 return 1 fi return 0}# args:# remote_path - $1# [out_path] - $2 - stdout if not provideddownload() { eval $invocation local remote_path=$1 local out_path=${2:-} local failed=false if [ -z "$out_path" ]; then curl --retry 10 -sSL --create-dirs $remote_path || failed=true else curl --retry 10 -sSL --create-dirs -o $out_path $remote_path || failed=true fi if [ "$failed" = true ]; then echo "run-build: Error: Download failed" >&2 return 1 fi}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 locateddoneDIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"REPOROOT="$DIR"ARCHITECTURE="x64"STAGE0_SOURCE_DIR=source "$REPOROOT/scripts/common/_prettyprint.sh"BUILD=1LINUX_PORTABLE_INSTALL_ARGS=CUSTOM_BUILD_ARGS=# Set nuget package cache under the repo[ -z $NUGET_PACKAGES ] && export NUGET_PACKAGES="$REPOROOT/.nuget/packages"args=( )while [[ $# > 0 ]]; do lowerI="$(echo $1 | awk '{print tolower($0)}')" case $lowerI in -c|--configuration) export CONFIGURATION=$2 shift ;; --nopackage) export DOTNET_BUILD_SKIP_PACKAGING=1 ;; --skip-prereqs) # Allow CI to disable prereqs check since the CI has the pre-reqs but not ldconfig it seems export DOTNET_INSTALL_SKIP_PREREQS=1 ;; --nobuild) BUILD=0 ;; -a|--architecture) ARCHITECTURE=$2 shift ;; --runtime-id) CUSTOM_BUILD_ARGS="/p:Rid=\"$2\"" shift ;; # This is here just to eat away this parameter because CI still passes this in. --targets) shift ;; --linux-portable) LINUX_PORTABLE_INSTALL_ARGS="--runtime-id linux-x64" CUSTOM_BUILD_ARGS="/p:Rid=\"linux-x64\" /p:OSName=\"linux\" /p:IslinuxPortable=\"true\"" ;; --stage0) STAGE0_SOURCE_DIR=$2 shift ;; --help) echo "Usage: $0 [--configuration <CONFIGURATION>] [--architecture <ARCHITECTURE>] [--skip-prereqs] [--nopackage] [--nobuild ] [--help]" echo "" echo "Options:" echo " --configuration <CONFIGURATION> Build the specified Configuration (Debug or Release, default: Debug)" echo " --architecture <ARCHITECTURE> Build the specified architecture (x64 or x86 (supported only on Windows), default: x64)" echo " --skip-prereqs Skip checks for pre-reqs in dotnet_install" echo " --nopackage Skip packaging targets" echo " --nobuild Skip building, showing the command that would be used to build" echo " --help Display this help message" exit 0 ;; *) args=$@ break ;; esac shiftdone# The first 'pass' call to "dotnet msbuild build.proj" has a hard-coded "WriteDynamicPropsToStaticPropsFiles" target# therefore, this call should not have other targets defined. Remove all targets passed in as 'extra parameters'.argsnotargets=( )for element in ${args[@]} do if [[ $element != /t:* ]]; then argsnotargets+=($element) fidone# Create an install directory for the stage 0 CLI[ -z "$DOTNET_INSTALL_DIR" ] && export DOTNET_INSTALL_DIR=$REPOROOT/.dotnet_stage0/$ARCHITECTURE[ -d "$DOTNET_INSTALL_DIR" ] || mkdir -p $DOTNET_INSTALL_DIRexport DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1# Enable verbose VS Test Console loggingexport VSTEST_BUILD_TRACE=1export VSTEST_TRACE_BUILD=1# Don't resolve shared frameworks from user or global locationsexport DOTNET_MULTILEVEL_LOOKUP=0# Install a stage 0if [ "$STAGE0_SOURCE_DIR" == "" ]; then (set -x ; "$REPOROOT/scripts/obtain/dotnet-install.sh" --version "2.2.0-preview1-007799" --install-dir "$DOTNET_INSTALL_DIR" --architecture "$ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS)else echo "Copying bootstrap cli from $STAGE0_SOURCE_DIR" cp -r $STAGE0_SOURCE_DIR/* "$DOTNET_INSTALL_DIR"fiEXIT_CODE=$?if [ $EXIT_CODE != 0 ]; then echo "run-build: Error: installing stage0 with exit code $EXIT_CODE." >&2 exit $EXIT_CODEfi# Put stage 0 on the PATH (for this shell only)PATH="$DOTNET_INSTALL_DIR:$PATH"# Increases the file descriptors limit for this bash. It prevents an issue we were hitting during restoreFILE_DESCRIPTOR_LIMIT=$( ulimit -n )if [ $FILE_DESCRIPTOR_LIMIT -lt 1024 ]then echo "Increasing file description limit to 1024" ulimit -n 1024fi# Disable first run since we want to control all package sourcesexport DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1if [ $BUILD -eq 1 ]; then dotnet msbuild build.proj /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles $argsnotargets dotnet msbuild build.proj /m /v:normal /fl /flp:v=diag /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS $argselse echo "Not building due to --nobuild" echo "Command that would be run is: 'dotnet msbuild build.proj /m /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS $args'"fi
1+
#!/usr/bin/env bash
2+
#
3+
# Copyright (c) .NET Foundation and contributors. All rights reserved.
4+
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
5+
#
6+
7+
set -e
8+
9+
machine_has() {
10+
hash "$1" > /dev/null 2>&1
11+
return $?
12+
}
13+
14+
check_min_reqs() {
15+
if ! machine_has "curl"; then
16+
echo "run-build: Error: curl is required to download dotnet. Install curl to proceed." >&2
17+
return 1
18+
fi
19+
return 0
20+
}
21+
22+
# args:
23+
# remote_path - $1
24+
# [out_path] - $2 - stdout if not provided
25+
download() {
26+
eval $invocation
27+
28+
local remote_path=$1
29+
local out_path=${2:-}
30+
31+
local failed=false
32+
if [ -z "$out_path" ]; then
33+
curl --retry 10 -sSL --create-dirs $remote_path || failed=true
34+
else
35+
curl --retry 10 -sSL --create-dirs -o $out_path $remote_path || failed=true
36+
fi
37+
38+
if [ "$failed" = true ]; then
39+
echo "run-build: Error: Download failed" >&2
40+
return 1
41+
fi
42+
}
43+
44+
SOURCE="${BASH_SOURCE[0]}"
45+
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
46+
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
47+
SOURCE="$(readlink "$SOURCE")"
48+
[[ "$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
49+
done
50+
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
51+
REPOROOT="$DIR"
52+
53+
ARCHITECTURE="x64"
54+
STAGE0_SOURCE_DIR=
55+
56+
source "$REPOROOT/scripts/common/_prettyprint.sh"
57+
58+
BUILD=1
59+
60+
LINUX_PORTABLE_INSTALL_ARGS=
61+
CUSTOM_BUILD_ARGS=
62+
63+
# Set nuget package cache under the repo
64+
[ -z $NUGET_PACKAGES ] && export NUGET_PACKAGES="$REPOROOT/.nuget/packages"
65+
66+
args=( )
67+
68+
while [[ $# > 0 ]]; do
69+
lowerI="$(echo $1 | awk '{print tolower($0)}')"
70+
case $lowerI in
71+
-c|--configuration)
72+
export CONFIGURATION=$2
73+
shift
74+
;;
75+
--nopackage)
76+
export DOTNET_BUILD_SKIP_PACKAGING=1
77+
;;
78+
--skip-prereqs)
79+
# Allow CI to disable prereqs check since the CI has the pre-reqs but not ldconfig it seems
80+
export DOTNET_INSTALL_SKIP_PREREQS=1
81+
;;
82+
--nobuild)
83+
BUILD=0
84+
;;
85+
-a|--architecture)
86+
ARCHITECTURE=$2
87+
shift
88+
;;
89+
--runtime-id)
90+
CUSTOM_BUILD_ARGS="/p:Rid=\"$2\""
91+
shift
92+
;;
93+
# This is here just to eat away this parameter because CI still passes this in.
94+
--targets)
95+
shift
96+
;;
97+
--linux-portable)
98+
LINUX_PORTABLE_INSTALL_ARGS="--runtime-id linux-x64"
99+
CUSTOM_BUILD_ARGS="/p:Rid=\"linux-x64\" /p:OSName=\"linux\" /p:IslinuxPortable=\"true\""
100+
;;
101+
--stage0)
102+
STAGE0_SOURCE_DIR=$2
103+
shift
104+
;;
105+
--help)
106+
echo "Usage: $0 [--configuration <CONFIGURATION>] [--architecture <ARCHITECTURE>] [--skip-prereqs] [--nopackage] [--nobuild ] [--help]"
107+
echo ""
108+
echo "Options:"
109+
echo " --configuration <CONFIGURATION> Build the specified Configuration (Debug or Release, default: Debug)"
110+
echo " --architecture <ARCHITECTURE> Build the specified architecture (x64 or x86 (supported only on Windows), default: x64)"
111+
echo " --skip-prereqs Skip checks for pre-reqs in dotnet_install"
112+
echo " --nopackage Skip packaging targets"
113+
echo " --nobuild Skip building, showing the command that would be used to build"
114+
echo " --help Display this help message"
115+
exit 0
116+
;;
117+
*)
118+
args=$@
119+
break
120+
;;
121+
esac
122+
123+
shift
124+
done
125+
126+
# The first 'pass' call to "dotnet msbuild build.proj" has a hard-coded "WriteDynamicPropsToStaticPropsFiles" target
127+
# therefore, this call should not have other targets defined. Remove all targets passed in as 'extra parameters'.
128+
argsnotargets=( )
129+
for element in ${args[@]}
130+
do
131+
if [[ $element != '/t'* ]] && [[ $element != '/T'* ]]; then
132+
argsnotargets+=($element)
133+
fi
134+
done
135+
136+
# Create an install directory for the stage 0 CLI
137+
[ -z "$DOTNET_INSTALL_DIR" ] && export DOTNET_INSTALL_DIR=$REPOROOT/.dotnet_stage0/$ARCHITECTURE
138+
[ -d "$DOTNET_INSTALL_DIR" ] || mkdir -p $DOTNET_INSTALL_DIR
139+
140+
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
141+
142+
# Enable verbose VS Test Console logging
143+
export VSTEST_BUILD_TRACE=1
144+
export VSTEST_TRACE_BUILD=1
145+
146+
147+
# Don't resolve shared frameworks from user or global locations
148+
export DOTNET_MULTILEVEL_LOOKUP=0
149+
150+
# Install a stage 0
151+
if [ "$STAGE0_SOURCE_DIR" == "" ]; then
152+
(set -x ; "$REPOROOT/scripts/obtain/dotnet-install.sh" --version "2.2.0-preview1-007799" --install-dir "$DOTNET_INSTALL_DIR" --architecture "$ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS)
153+
else
154+
echo "Copying bootstrap cli from $STAGE0_SOURCE_DIR"
155+
cp -r $STAGE0_SOURCE_DIR/* "$DOTNET_INSTALL_DIR"
156+
fi
157+
158+
EXIT_CODE=$?
159+
if [ $EXIT_CODE != 0 ]; then
160+
echo "run-build: Error: installing stage0 with exit code $EXIT_CODE." >&2
161+
exit $EXIT_CODE
162+
fi
163+
164+
# Put stage 0 on the PATH (for this shell only)
165+
PATH="$DOTNET_INSTALL_DIR:$PATH"
166+
167+
# Increases the file descriptors limit for this bash. It prevents an issue we were hitting during restore
168+
FILE_DESCRIPTOR_LIMIT=$( ulimit -n )
169+
if [ $FILE_DESCRIPTOR_LIMIT -lt 1024 ]
170+
then
171+
echo "Increasing file description limit to 1024"
172+
ulimit -n 1024
173+
fi
174+
175+
# Disable first run since we want to control all package sources
176+
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
177+
178+
if [ $BUILD -eq 1 ]; then
179+
dotnet msbuild build.proj /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles $argsnotargets
180+
dotnet msbuild build.proj /m /v:normal /fl /flp:v=diag /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS $args
181+
else
182+
echo "Not building due to --nobuild"
183+
echo "Command that would be run is: 'dotnet msbuild build.proj /m /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS $args'"
184+
fi

0 commit comments

Comments
 (0)