-
Notifications
You must be signed in to change notification settings - Fork 194
/
assemble
executable file
·146 lines (125 loc) · 4.14 KB
/
assemble
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/bin/bash
set -e
# Include filenames beginning with a '.' when installing the application source code.
shopt -s dotglob
if [ -n "${DOTNET_VERBOSITY}" ]; then
echo "--> Environment:"
env | sort
VERBOSITY_OPTION="-v ${DOTNET_VERBOSITY}"
else
VERBOSITY_OPTION=""
fi
echo "---> Installing application source ..."
if [ -d /tmp/src ]; then
mv /tmp/src/* ./
fi
# sdk version
DOTNET_SDK_VERSION="${DOTNET_SDK_VERSION:-$DOTNET_SDK_BASE_VERSION}"
if [ "$DOTNET_SDK_VERSION" != "latest" ]; then
cat >../global.json <<EOF
{
"sdk": {
"version": "$DOTNET_SDK_VERSION"
}
}
EOF
fi
echo "Using SDK: $(dotnet --version)"
# npm
if [ -n "${DOTNET_NPM_TOOLS}" ]; then
echo "---> Installing npm tools ..."
if [ ! -z $HTTP_PROXY ]; then
echo "---> Setting npm http proxy"
npm config set proxy $HTTP_PROXY
fi
if [ ! -z $HTTPS_PROXY ]; then
echo "---> Setting npm https proxy"
npm config set https-proxy $HTTPS_PROXY
fi
if [ ! -z $NPM_MIRROR ]; then
echo "---> Setting npm mirror"
npm config set registry $NPM_MIRROR
fi
pushd $HOME
npm install ${DOTNET_NPM_TOOLS}
popd
fi
if [ "$DEV_MODE" == true ]; then
# fix permissions
fix-permissions /opt/app-root
exit 0
fi
# User settable environment
DOTNET_CONFIGURATION="${DOTNET_CONFIGURATION:-Release}"
DOTNET_STARTUP_PROJECT="${DOTNET_STARTUP_PROJECT:-.}"
DOTNET_ASPNET_STORE="${DOTNET_ASPNET_STORE:-false}"
if [ "$DOTNET_ASPNET_STORE" != "false" ]; then
DOTNET_ASPNET_STORE="true"
fi
# Ensure there is a project file and derive assembly name from project name.
PROJFILES=(`find "${DOTNET_STARTUP_PROJECT}" -maxdepth 1 -name "*.??proj"`)
if [ ${#PROJFILES[@]} -eq 1 ]; then
PROJFILE=$(basename ${PROJFILES[0]})
APP_DLL_NAME="${PROJFILE: : -7}.dll"
else
if [ ${#PROJFILES[@]} -eq 0 ]; then
echo "error: DOTNET_STARTUP_PROJECT has no project file"
else
echo "error: DOTNET_STARTUP_PROJECT contains multiple project files"
fi
echo "You can specify the startup project by adding an '.s2i/environment' file to the source repository."
# find all projects and strip leading './'
PROJFILES=(`find -name "*.??proj" | sed "s|^\./||"`)
if [ ${#PROJFILES[@]} -eq 0 ]; then
echo "The source repository has no project files."
else
echo "The source repository contains the following projects:"
for PROJFILE in ${PROJFILES[@]}; do
echo "- ${PROJFILE}"
done
echo "Update the '.s2i/environment' file to specify the project you want to publish, for example DOTNET_STARTUP_PROJECT=${PROJFILES[0]}".
fi
exit 1
fi
# Override assembly name
if [ -n "$DOTNET_ASSEMBLY_NAME" ]; then
APP_DLL_NAME="${DOTNET_ASSEMBLY_NAME}.dll"
fi
# Build nuget sources list for when doing the restore
RESTORE_OPTIONS=""
for SOURCE in $DOTNET_RESTORE_SOURCES; do
RESTORE_OPTIONS="$RESTORE_OPTIONS --source $SOURCE"
done
# run tests
for TEST_PROJECT in $DOTNET_TEST_PROJECTS; do
echo "---> Restoring test project ($TEST_PROJECT) dependencies..."
dotnet restore "$TEST_PROJECT" $RESTORE_OPTIONS $VERBOSITY_OPTION
echo "---> Running test project: $TEST_PROJECT..."
dotnet test "$TEST_PROJECT" -f "$DOTNET_FRAMEWORK" $VERBOSITY_OPTION
done
# publish application
echo "---> Restoring application dependencies..."
dotnet restore "$DOTNET_STARTUP_PROJECT" $RESTORE_OPTIONS $VERBOSITY_OPTION
echo "---> Publishing application..."
dotnet publish "$DOTNET_STARTUP_PROJECT" -f "$DOTNET_FRAMEWORK" -c "$DOTNET_CONFIGURATION" $VERBOSITY_OPTION \
--self-contained false /p:PublishWithAspNetCoreTargetManifest=$DOTNET_ASPNET_STORE -o "$DOTNET_APP_PATH"
# check if the assembly used by the script exists
if [ ! -f "$DOTNET_APP_PATH/${APP_DLL_NAME}" ]; then
echo "error: Build output does not contain entrypoint assembly: ${APP_DLL_NAME}"
exit 1
fi
# Create run script in publish folder
cat << EOF >"$DOTNET_APP_PATH/$DOTNET_DEFAULT_CMD"
#!/bin/bash
exec dotnet ${APP_DLL_NAME} \$@
EOF
chmod +x "$DOTNET_APP_PATH/$DOTNET_DEFAULT_CMD"
if [ "$DOTNET_PACK" == "true" ]; then
echo "---> Packing application..."
fix-permissions $DOTNET_APP_PATH
tar -czf /opt/app-root/app.tar.gz -C $DOTNET_APP_PATH .
fi
# cleanup NuGet artifacts
rm -rf ~/{.local,.nuget}
# fix permissions
fix-permissions /opt/app-root