mirror of
https://github.com/actions/runner.git
synced 2025-12-10 12:36:23 +00:00
Compare commits
10 Commits
v2.160.2
...
users/tihu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d28a57680 | ||
|
|
999800031d | ||
|
|
cadc68ab01 | ||
|
|
ec9cb6c68d | ||
|
|
bcac4557a0 | ||
|
|
19580bdaf8 | ||
|
|
96d3288553 | ||
|
|
5b6f9d3b93 | ||
|
|
51581ac865 | ||
|
|
e7dd2c6cc2 |
@@ -1,12 +1,12 @@
|
|||||||
# Contribute (Dev)
|
# Contribution guide for developers
|
||||||
|
|
||||||
## Dev Dependencies
|
## Required Dev Dependencies
|
||||||
|
|
||||||
 Git for Windows [Install Here](https://git-scm.com/downloads) (needed for dev sh script)
|
 Git for Windows [Install Here](https://git-scm.com/downloads) (needed for dev sh script)
|
||||||
|
|
||||||
## Build, Test, Layout
|
## To Build, Test, Layout
|
||||||
|
|
||||||
From src:
|
Navigate to the `src` directory and run the following command:
|
||||||
|
|
||||||
 `dev {command}`
|
 `dev {command}`
|
||||||
|
|
||||||
@@ -14,13 +14,12 @@ From src:
|
|||||||
|
|
||||||
**Commands:**
|
**Commands:**
|
||||||
|
|
||||||
`layout` (`l`): Run first time to create a full agent layout in {root}/_layout
|
* `layout` (`l`): Run first time to create a full agent layout in `{root}/_layout`
|
||||||
|
* `build` (`b`): Build everything and update agent layout folder
|
||||||
|
* `test` (`t`): Build agent binaries and run unit tests
|
||||||
|
|
||||||
`build` (`b`): build everything and update agent layout folder
|
Sample developer flow:
|
||||||
|
|
||||||
`test` (`t`): build agent binaries and run unit tests
|
|
||||||
|
|
||||||
Normal dev flow:
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/actions/runner
|
git clone https://github.com/actions/runner
|
||||||
cd ./src
|
cd ./src
|
||||||
@@ -37,5 +36,5 @@ cd ./src
|
|||||||
|
|
||||||
## Styling
|
## Styling
|
||||||
|
|
||||||
We use the dotnet foundation and CoreCLR style guidelines [located here](
|
We use the .NET Foundation and CoreCLR style guidelines [located here](
|
||||||
https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md)
|
https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md)
|
||||||
|
|||||||
91
src/Misc/dotnet-install.ps1
vendored
91
src/Misc/dotnet-install.ps1
vendored
@@ -37,10 +37,7 @@
|
|||||||
.PARAMETER SharedRuntime
|
.PARAMETER SharedRuntime
|
||||||
This parameter is obsolete and may be removed in a future version of this script.
|
This parameter is obsolete and may be removed in a future version of this script.
|
||||||
The recommended alternative is '-Runtime dotnet'.
|
The recommended alternative is '-Runtime dotnet'.
|
||||||
|
|
||||||
Default: false
|
|
||||||
Installs just the shared runtime bits, not the entire SDK.
|
Installs just the shared runtime bits, not the entire SDK.
|
||||||
This is equivalent to specifying `-Runtime dotnet`.
|
|
||||||
.PARAMETER Runtime
|
.PARAMETER Runtime
|
||||||
Installs just a shared runtime, not the entire SDK.
|
Installs just a shared runtime, not the entire SDK.
|
||||||
Possible values:
|
Possible values:
|
||||||
@@ -77,11 +74,15 @@
|
|||||||
Skips installing non-versioned files if they already exist, such as dotnet.exe.
|
Skips installing non-versioned files if they already exist, such as dotnet.exe.
|
||||||
.PARAMETER NoCdn
|
.PARAMETER NoCdn
|
||||||
Disable downloading from the Azure CDN, and use the uncached feed directly.
|
Disable downloading from the Azure CDN, and use the uncached feed directly.
|
||||||
|
.PARAMETER JSonFile
|
||||||
|
Determines the SDK version from a user specified global.json file
|
||||||
|
Note: global.json must have a value for 'SDK:Version'
|
||||||
#>
|
#>
|
||||||
[cmdletbinding()]
|
[cmdletbinding()]
|
||||||
param(
|
param(
|
||||||
[string]$Channel="LTS",
|
[string]$Channel="LTS",
|
||||||
[string]$Version="Latest",
|
[string]$Version="Latest",
|
||||||
|
[string]$JSonFile,
|
||||||
[string]$InstallDir="<auto>",
|
[string]$InstallDir="<auto>",
|
||||||
[string]$Architecture="<auto>",
|
[string]$Architecture="<auto>",
|
||||||
[ValidateSet("dotnet", "aspnetcore", "windowsdesktop", IgnoreCase = $false)]
|
[ValidateSet("dotnet", "aspnetcore", "windowsdesktop", IgnoreCase = $false)]
|
||||||
@@ -258,7 +259,6 @@ function GetHTTPResponse([Uri] $Uri)
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel, [bool]$Coherent) {
|
function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel, [bool]$Coherent) {
|
||||||
Say-Invocation $MyInvocation
|
Say-Invocation $MyInvocation
|
||||||
|
|
||||||
@@ -304,20 +304,64 @@ function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel, [bool]$Co
|
|||||||
return $VersionInfo
|
return $VersionInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Parse-Jsonfile-For-Version([string]$JSonFile) {
|
||||||
function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel, [string]$Version) {
|
|
||||||
Say-Invocation $MyInvocation
|
Say-Invocation $MyInvocation
|
||||||
|
|
||||||
switch ($Version.ToLower()) {
|
If (-Not (Test-Path $JSonFile)) {
|
||||||
{ $_ -eq "latest" } {
|
throw "Unable to find '$JSonFile'"
|
||||||
$LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $False
|
exit 0
|
||||||
return $LatestVersionInfo.Version
|
}
|
||||||
|
try {
|
||||||
|
$JSonContent = Get-Content($JSonFile) -Raw | ConvertFrom-Json | Select-Object -expand "sdk" -ErrorAction SilentlyContinue
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
throw "Json file unreadable: '$JSonFile'"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
if ($JSonContent) {
|
||||||
|
try {
|
||||||
|
$JSonContent.PSObject.Properties | ForEach-Object {
|
||||||
|
$PropertyName = $_.Name
|
||||||
|
if ($PropertyName -eq "version") {
|
||||||
|
$Version = $_.Value
|
||||||
|
Say-Verbose "Version = $Version"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
{ $_ -eq "coherent" } {
|
catch {
|
||||||
$LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $True
|
throw "Unable to parse the SDK node in '$JSonFile'"
|
||||||
return $LatestVersionInfo.Version
|
exit 0
|
||||||
}
|
}
|
||||||
default { return $Version }
|
}
|
||||||
|
else {
|
||||||
|
throw "Unable to find the SDK node in '$JSonFile'"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
If ($Version -eq $null) {
|
||||||
|
throw "Unable to find the SDK:version node in '$JSonFile'"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
return $Version
|
||||||
|
}
|
||||||
|
|
||||||
|
function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel, [string]$Version, [string]$JSonFile) {
|
||||||
|
Say-Invocation $MyInvocation
|
||||||
|
|
||||||
|
if (-not $JSonFile) {
|
||||||
|
switch ($Version.ToLower()) {
|
||||||
|
{ $_ -eq "latest" } {
|
||||||
|
$LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $False
|
||||||
|
return $LatestVersionInfo.Version
|
||||||
|
}
|
||||||
|
{ $_ -eq "coherent" } {
|
||||||
|
$LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $True
|
||||||
|
return $LatestVersionInfo.Version
|
||||||
|
}
|
||||||
|
default { return $Version }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return Parse-Jsonfile-For-Version $JSonFile
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,23 +426,6 @@ function Resolve-Installation-Path([string]$InstallDir) {
|
|||||||
return $InstallDir
|
return $InstallDir
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-Version-Info-From-Version-File([string]$InstallRoot, [string]$RelativePathToVersionFile) {
|
|
||||||
Say-Invocation $MyInvocation
|
|
||||||
|
|
||||||
$VersionFile = Join-Path -Path $InstallRoot -ChildPath $RelativePathToVersionFile
|
|
||||||
Say-Verbose "Local version file: $VersionFile"
|
|
||||||
|
|
||||||
if (Test-Path $VersionFile) {
|
|
||||||
$VersionText = cat $VersionFile
|
|
||||||
Say-Verbose "Local version file text: $VersionText"
|
|
||||||
return Get-Version-Info-From-Version-Text $VersionText
|
|
||||||
}
|
|
||||||
|
|
||||||
Say-Verbose "Local version file not found."
|
|
||||||
|
|
||||||
return $null
|
|
||||||
}
|
|
||||||
|
|
||||||
function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) {
|
function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) {
|
||||||
Say-Invocation $MyInvocation
|
Say-Invocation $MyInvocation
|
||||||
|
|
||||||
@@ -534,7 +561,7 @@ function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot, [string]$BinFolde
|
|||||||
}
|
}
|
||||||
|
|
||||||
$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
|
$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
|
||||||
$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version
|
$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version -JSonFile $JSonFile
|
||||||
$DownloadLink = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
$DownloadLink = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
||||||
$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
||||||
|
|
||||||
|
|||||||
125
src/Misc/dotnet-install.sh
vendored
125
src/Misc/dotnet-install.sh
vendored
@@ -435,11 +435,52 @@ get_latest_version_info() {
|
|||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# args:
|
||||||
|
# json_file - $1
|
||||||
|
parse_jsonfile_for_version() {
|
||||||
|
eval $invocation
|
||||||
|
|
||||||
|
local json_file="$1"
|
||||||
|
if [ ! -f "$json_file" ]; then
|
||||||
|
say_err "Unable to find \`$json_file\`"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sdk_section=$(cat $json_file | awk '/"sdk"/,/}/')
|
||||||
|
if [ -z "$sdk_section" ]; then
|
||||||
|
say_err "Unable to parse the SDK node in \`$json_file\`"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sdk_list=$(echo $sdk_section | awk -F"[{}]" '{print $2}')
|
||||||
|
sdk_list=${sdk_list//[\" ]/}
|
||||||
|
sdk_list=${sdk_list//,/$'\n'}
|
||||||
|
sdk_list="$(echo -e "${sdk_list}" | tr -d '[[:space:]]')"
|
||||||
|
|
||||||
|
local version_info=""
|
||||||
|
while read -r line; do
|
||||||
|
IFS=:
|
||||||
|
while read -r key value; do
|
||||||
|
if [[ "$key" == "version" ]]; then
|
||||||
|
version_info=$value
|
||||||
|
fi
|
||||||
|
done <<< "$line"
|
||||||
|
done <<< "$sdk_list"
|
||||||
|
if [ -z "$version_info" ]; then
|
||||||
|
say_err "Unable to find the SDK:version node in \`$json_file\`"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$version_info"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# args:
|
# args:
|
||||||
# azure_feed - $1
|
# azure_feed - $1
|
||||||
# channel - $2
|
# channel - $2
|
||||||
# normalized_architecture - $3
|
# normalized_architecture - $3
|
||||||
# version - $4
|
# version - $4
|
||||||
|
# json_file - $5
|
||||||
get_specific_version_from_version() {
|
get_specific_version_from_version() {
|
||||||
eval $invocation
|
eval $invocation
|
||||||
|
|
||||||
@@ -447,27 +488,35 @@ get_specific_version_from_version() {
|
|||||||
local channel="$2"
|
local channel="$2"
|
||||||
local normalized_architecture="$3"
|
local normalized_architecture="$3"
|
||||||
local version="$(to_lowercase "$4")"
|
local version="$(to_lowercase "$4")"
|
||||||
|
local json_file="$5"
|
||||||
|
|
||||||
case "$version" in
|
if [ -z "$json_file" ]; then
|
||||||
latest)
|
case "$version" in
|
||||||
local version_info
|
latest)
|
||||||
version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" false)" || return 1
|
local version_info
|
||||||
say_verbose "get_specific_version_from_version: version_info=$version_info"
|
version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" false)" || return 1
|
||||||
echo "$version_info" | get_version_from_version_info
|
say_verbose "get_specific_version_from_version: version_info=$version_info"
|
||||||
return 0
|
echo "$version_info" | get_version_from_version_info
|
||||||
;;
|
return 0
|
||||||
coherent)
|
;;
|
||||||
local version_info
|
coherent)
|
||||||
version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" true)" || return 1
|
local version_info
|
||||||
say_verbose "get_specific_version_from_version: version_info=$version_info"
|
version_info="$(get_latest_version_info "$azure_feed" "$channel" "$normalized_architecture" true)" || return 1
|
||||||
echo "$version_info" | get_version_from_version_info
|
say_verbose "get_specific_version_from_version: version_info=$version_info"
|
||||||
return 0
|
echo "$version_info" | get_version_from_version_info
|
||||||
;;
|
return 0
|
||||||
*)
|
;;
|
||||||
echo "$version"
|
*)
|
||||||
return 0
|
echo "$version"
|
||||||
;;
|
return 0
|
||||||
esac
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
local version_info
|
||||||
|
version_info="$(parse_jsonfile_for_version "$json_file")" || return 1
|
||||||
|
echo "$version_info"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# args:
|
# args:
|
||||||
@@ -558,24 +607,6 @@ resolve_installation_path() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# args:
|
|
||||||
# install_root - $1
|
|
||||||
get_installed_version_info() {
|
|
||||||
eval $invocation
|
|
||||||
|
|
||||||
local install_root="$1"
|
|
||||||
local version_file="$(combine_paths "$install_root" "$local_version_file_relative_path")"
|
|
||||||
say_verbose "Local version file: $version_file"
|
|
||||||
if [ ! -z "$version_file" ] | [ -r "$version_file" ]; then
|
|
||||||
local version_info="$(cat "$version_file")"
|
|
||||||
echo "$version_info"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
say_verbose "Local version file not found."
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# args:
|
# args:
|
||||||
# relative_or_absolute_path - $1
|
# relative_or_absolute_path - $1
|
||||||
get_absolute_path() {
|
get_absolute_path() {
|
||||||
@@ -724,7 +755,7 @@ calculate_vars() {
|
|||||||
normalized_architecture="$(get_normalized_architecture_from_architecture "$architecture")"
|
normalized_architecture="$(get_normalized_architecture_from_architecture "$architecture")"
|
||||||
say_verbose "normalized_architecture=$normalized_architecture"
|
say_verbose "normalized_architecture=$normalized_architecture"
|
||||||
|
|
||||||
specific_version="$(get_specific_version_from_version "$azure_feed" "$channel" "$normalized_architecture" "$version")"
|
specific_version="$(get_specific_version_from_version "$azure_feed" "$channel" "$normalized_architecture" "$version" "$json_file")"
|
||||||
say_verbose "specific_version=$specific_version"
|
say_verbose "specific_version=$specific_version"
|
||||||
if [ -z "$specific_version" ]; then
|
if [ -z "$specific_version" ]; then
|
||||||
say_err "Could not resolve version information."
|
say_err "Could not resolve version information."
|
||||||
@@ -826,6 +857,7 @@ temporary_file_template="${TMPDIR:-/tmp}/dotnet.XXXXXXXXX"
|
|||||||
|
|
||||||
channel="LTS"
|
channel="LTS"
|
||||||
version="Latest"
|
version="Latest"
|
||||||
|
json_file=""
|
||||||
install_dir="<auto>"
|
install_dir="<auto>"
|
||||||
architecture="<auto>"
|
architecture="<auto>"
|
||||||
dry_run=false
|
dry_run=false
|
||||||
@@ -912,6 +944,10 @@ do
|
|||||||
runtime_id="$1"
|
runtime_id="$1"
|
||||||
non_dynamic_parameters+=" $name "\""$1"\"""
|
non_dynamic_parameters+=" $name "\""$1"\"""
|
||||||
;;
|
;;
|
||||||
|
--jsonfile|-[Jj][Ss]on[Ff]ile)
|
||||||
|
shift
|
||||||
|
json_file="$1"
|
||||||
|
;;
|
||||||
--skip-non-versioned-files|-[Ss]kip[Nn]on[Vv]ersioned[Ff]iles)
|
--skip-non-versioned-files|-[Ss]kip[Nn]on[Vv]ersioned[Ff]iles)
|
||||||
override_non_versioned_files=false
|
override_non_versioned_files=false
|
||||||
non_dynamic_parameters+=" $name"
|
non_dynamic_parameters+=" $name"
|
||||||
@@ -953,22 +989,25 @@ do
|
|||||||
echo " Possible values:"
|
echo " Possible values:"
|
||||||
echo " - dotnet - the Microsoft.NETCore.App shared runtime"
|
echo " - dotnet - the Microsoft.NETCore.App shared runtime"
|
||||||
echo " - aspnetcore - the Microsoft.AspNetCore.App shared runtime"
|
echo " - aspnetcore - the Microsoft.AspNetCore.App shared runtime"
|
||||||
echo " --skip-non-versioned-files Skips non-versioned files if they already exist, such as the dotnet executable."
|
|
||||||
echo " -SkipNonVersionedFiles"
|
|
||||||
echo " --dry-run,-DryRun Do not perform installation. Display download link."
|
echo " --dry-run,-DryRun Do not perform installation. Display download link."
|
||||||
echo " --no-path, -NoPath Do not set PATH for the current process."
|
echo " --no-path, -NoPath Do not set PATH for the current process."
|
||||||
echo " --verbose,-Verbose Display diagnostics information."
|
echo " --verbose,-Verbose Display diagnostics information."
|
||||||
echo " --azure-feed,-AzureFeed Azure feed location. Defaults to $azure_feed, This parameter typically is not changed by the user."
|
echo " --azure-feed,-AzureFeed Azure feed location. Defaults to $azure_feed, This parameter typically is not changed by the user."
|
||||||
echo " --uncached-feed,-UncachedFeed Uncached feed location. This parameter typically is not changed by the user."
|
echo " --uncached-feed,-UncachedFeed Uncached feed location. This parameter typically is not changed by the user."
|
||||||
echo " --no-cdn,-NoCdn Disable downloading from the Azure CDN, and use the uncached feed directly."
|
|
||||||
echo " --feed-credential,-FeedCredential Azure feed shared access token. This parameter typically is not specified."
|
echo " --feed-credential,-FeedCredential Azure feed shared access token. This parameter typically is not specified."
|
||||||
|
echo " --skip-non-versioned-files Skips non-versioned files if they already exist, such as the dotnet executable."
|
||||||
|
echo " -SkipNonVersionedFiles"
|
||||||
|
echo " --no-cdn,-NoCdn Disable downloading from the Azure CDN, and use the uncached feed directly."
|
||||||
|
echo " --jsonfile <JSONFILE> Determines the SDK version from a user specified global.json file."
|
||||||
|
echo " Note: global.json must have a value for 'SDK:Version'"
|
||||||
echo " --runtime-id Installs the .NET Tools for the given platform (use linux-x64 for portable linux)."
|
echo " --runtime-id Installs the .NET Tools for the given platform (use linux-x64 for portable linux)."
|
||||||
echo " -RuntimeId"
|
echo " -RuntimeId"
|
||||||
echo " -?,--?,-h,--help,-Help Shows this help message"
|
echo " -?,--?,-h,--help,-Help Shows this help message"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Obsolete parameters:"
|
echo "Obsolete parameters:"
|
||||||
echo " --shared-runtime The recommended alternative is '--runtime dotnet'."
|
echo " --shared-runtime The recommended alternative is '--runtime dotnet'."
|
||||||
echo " -SharedRuntime Installs just the shared runtime bits, not the entire SDK."
|
echo " This parameter is obsolete and may be removed in a future version of this script."
|
||||||
|
echo " Installs just the shared runtime bits, not the entire SDK."
|
||||||
echo ""
|
echo ""
|
||||||
echo "Install Location:"
|
echo "Install Location:"
|
||||||
echo " Location is chosen in following order:"
|
echo " Location is chosen in following order:"
|
||||||
|
|||||||
@@ -146,3 +146,9 @@ fi
|
|||||||
if [[ "$PACKAGERUNTIME" == "linux-arm" ]]; then
|
if [[ "$PACKAGERUNTIME" == "linux-arm" ]]; then
|
||||||
acquireExternalTool "$NODE_URL/v${NODE12_VERSION}/node-v${NODE12_VERSION}-linux-armv7l.tar.gz" node12 fix_nested_dir
|
acquireExternalTool "$NODE_URL/v${NODE12_VERSION}/node-v${NODE12_VERSION}-linux-armv7l.tar.gz" node12 fix_nested_dir
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$PACKAGERUNTIME" == "linux-arm64" ]]; then
|
||||||
|
acquireExternalTool "$NODE_URL/v${NODE12_VERSION}/node-v${NODE12_VERSION}-linux-arm64.tar.gz" node12 fix_nested_dir
|
||||||
|
|
||||||
|
## TODO: alpine arm64 version node.js
|
||||||
|
fi
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;linux-arm64;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
||||||
<NoWarn>NU1701;NU1603</NoWarn>
|
<NoWarn>NU1701;NU1603</NoWarn>
|
||||||
@@ -57,6 +57,9 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
||||||
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -66,4 +69,7 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;DEBUG;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ namespace GitHub.Runner.Common.Util
|
|||||||
return "X64";
|
return "X64";
|
||||||
case Constants.Architecture.Arm:
|
case Constants.Architecture.Arm:
|
||||||
return "ARM";
|
return "ARM";
|
||||||
|
case Constants.Architecture.Arm64:
|
||||||
|
return "ARM64";
|
||||||
default:
|
default:
|
||||||
throw new NotSupportedException(); // Should never reach here.
|
throw new NotSupportedException(); // Should never reach here.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;linux-arm64;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
||||||
<NoWarn>NU1701;NU1603</NoWarn>
|
<NoWarn>NU1701;NU1603</NoWarn>
|
||||||
@@ -60,6 +60,9 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
||||||
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -69,4 +72,7 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;DEBUG;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;linux-arm64;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
||||||
<NoWarn>NU1701;NU1603</NoWarn>
|
<NoWarn>NU1701;NU1603</NoWarn>
|
||||||
@@ -53,6 +53,9 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
||||||
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -62,4 +65,7 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;DEBUG;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;linux-arm64;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
||||||
<NoWarn>NU1701;NU1603</NoWarn>
|
<NoWarn>NU1701;NU1603</NoWarn>
|
||||||
@@ -49,6 +49,9 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
||||||
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -58,4 +61,7 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;DEBUG;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;linux-arm64;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
||||||
<NoWarn>NU1701;NU1603</NoWarn>
|
<NoWarn>NU1701;NU1603</NoWarn>
|
||||||
@@ -54,6 +54,9 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
||||||
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -63,4 +66,7 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;DEBUG;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -541,7 +541,6 @@ namespace GitHub.Runner.Worker
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception($"Invalid echo command value. Possible values can be: 'on', 'off'. Current value is: '{command.Data}'.");
|
throw new Exception($"Invalid echo command value. Possible values can be: 'on', 'off'. Current value is: '{command.Data}'.");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,21 @@ namespace GitHub.Runner.Worker
|
|||||||
{
|
{
|
||||||
postDisplayName = $"Post {this.DisplayName}";
|
postDisplayName = $"Post {this.DisplayName}";
|
||||||
}
|
}
|
||||||
ExecutionContext.RegisterPostJobAction(postDisplayName, handlerData.CleanupCondition, Action);
|
|
||||||
|
var repositoryReference = Action.Reference as RepositoryPathReference;
|
||||||
|
var pathString = string.IsNullOrEmpty(repositoryReference.Path) ? string.Empty : $"/{repositoryReference.Path}";
|
||||||
|
var repoString = string.IsNullOrEmpty(repositoryReference.Ref) ? $"{repositoryReference.Name}{pathString}" :
|
||||||
|
$"{repositoryReference.Name}{pathString}@{repositoryReference.Ref}";
|
||||||
|
|
||||||
|
ExecutionContext.Debug($"Register post job cleanup for action: {repoString}");
|
||||||
|
|
||||||
|
var actionRunner = HostContext.CreateService<IActionRunner>();
|
||||||
|
actionRunner.Action = Action;
|
||||||
|
actionRunner.Stage = ActionRunStage.Post;
|
||||||
|
actionRunner.Condition = handlerData.CleanupCondition;
|
||||||
|
actionRunner.DisplayName = postDisplayName;
|
||||||
|
|
||||||
|
ExecutionContext.RegisterPostJobStep($"{actionRunner.Action.Name}_post", actionRunner);
|
||||||
}
|
}
|
||||||
|
|
||||||
IStepHost stepHost = HostContext.CreateService<IDefaultStepHost>();
|
IStepHost stepHost = HostContext.CreateService<IDefaultStepHost>();
|
||||||
|
|||||||
@@ -276,7 +276,9 @@ namespace GitHub.Runner.Worker.Container
|
|||||||
return await ExecuteDockerCommandAsync(context, "exec", $"{options} {containerId} {command}", context.CancellationToken);
|
return await ExecuteDockerCommandAsync(context, "exec", $"{options} {containerId} {command}", context.CancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously (method has async logic on only certain platforms)
|
||||||
public async Task<int> DockerExec(IExecutionContext context, string containerId, string options, string command, List<string> output)
|
public async Task<int> DockerExec(IExecutionContext context, string containerId, string options, string command, List<string> output)
|
||||||
|
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||||
{
|
{
|
||||||
ArgUtil.NotNull(output, nameof(output));
|
ArgUtil.NotNull(output, nameof(output));
|
||||||
|
|
||||||
@@ -337,7 +339,9 @@ namespace GitHub.Runner.Worker.Container
|
|||||||
return ExecuteDockerCommandAsync(context, command, options, null, cancellationToken);
|
return ExecuteDockerCommandAsync(context, command, options, null, cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously (method has async logic on only certain platforms)
|
||||||
private async Task<int> ExecuteDockerCommandAsync(IExecutionContext context, string command, string options, IDictionary<string, string> environment, EventHandler<ProcessDataReceivedEventArgs> stdoutDataReceived, EventHandler<ProcessDataReceivedEventArgs> stderrDataReceived, CancellationToken cancellationToken = default(CancellationToken))
|
private async Task<int> ExecuteDockerCommandAsync(IExecutionContext context, string command, string options, IDictionary<string, string> environment, EventHandler<ProcessDataReceivedEventArgs> stdoutDataReceived, EventHandler<ProcessDataReceivedEventArgs> stderrDataReceived, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||||
{
|
{
|
||||||
string arg = $"{command} {options}".Trim();
|
string arg = $"{command} {options}".Trim();
|
||||||
context.Command($"{DockerPath} {arg}");
|
context.Command($"{DockerPath} {arg}");
|
||||||
@@ -362,7 +366,9 @@ namespace GitHub.Runner.Worker.Container
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously (method has async logic on only certain platforms)
|
||||||
private async Task<int> ExecuteDockerCommandAsync(IExecutionContext context, string command, string options, string workingDirectory, CancellationToken cancellationToken = default(CancellationToken))
|
private async Task<int> ExecuteDockerCommandAsync(IExecutionContext context, string command, string options, string workingDirectory, CancellationToken cancellationToken = default(CancellationToken))
|
||||||
|
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||||
{
|
{
|
||||||
string arg = $"{command} {options}".Trim();
|
string arg = $"{command} {options}".Trim();
|
||||||
context.Command($"{DockerPath} {arg}");
|
context.Command($"{DockerPath} {arg}");
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ using GitHub.Runner.Common;
|
|||||||
using GitHub.Runner.Sdk;
|
using GitHub.Runner.Sdk;
|
||||||
using GitHub.DistributedTask.Pipelines.ContextData;
|
using GitHub.DistributedTask.Pipelines.ContextData;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
using GitHub.DistributedTask.Pipelines.ObjectTemplating;
|
||||||
|
|
||||||
namespace GitHub.Runner.Worker
|
namespace GitHub.Runner.Worker
|
||||||
{
|
{
|
||||||
@@ -38,6 +39,14 @@ namespace GitHub.Runner.Worker
|
|||||||
List<ContainerInfo> containers = data as List<ContainerInfo>;
|
List<ContainerInfo> containers = data as List<ContainerInfo>;
|
||||||
ArgUtil.NotNull(containers, nameof(containers));
|
ArgUtil.NotNull(containers, nameof(containers));
|
||||||
|
|
||||||
|
var postJobStep = new JobExtensionRunner(runAsync: this.StopContainersAsync,
|
||||||
|
condition: $"{PipelineTemplateConstants.Always}()",
|
||||||
|
displayName: "Stop containers",
|
||||||
|
data: data);
|
||||||
|
|
||||||
|
executionContext.Debug($"Register post job cleanup for stoping/deleting containers.");
|
||||||
|
executionContext.RegisterPostJobStep(nameof(StopContainersAsync), postJobStep);
|
||||||
|
|
||||||
// Check whether we are inside a container.
|
// Check whether we are inside a container.
|
||||||
// Our container feature requires to map working directory from host to the container.
|
// Our container feature requires to map working directory from host to the container.
|
||||||
// If we are already inside a container, we will not able to find out the real working direcotry path on the host.
|
// If we are already inside a container, we will not able to find out the real working direcotry path on the host.
|
||||||
|
|||||||
@@ -31,7 +31,9 @@ namespace GitHub.Runner.Worker
|
|||||||
public sealed class DiagnosticLogManager : RunnerService, IDiagnosticLogManager
|
public sealed class DiagnosticLogManager : RunnerService, IDiagnosticLogManager
|
||||||
{
|
{
|
||||||
private static string DateTimeFormat = "yyyyMMdd-HHmmss";
|
private static string DateTimeFormat = "yyyyMMdd-HHmmss";
|
||||||
|
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously (method has async logic on only certain platforms)
|
||||||
public async Task UploadDiagnosticLogsAsync(IExecutionContext executionContext,
|
public async Task UploadDiagnosticLogsAsync(IExecutionContext executionContext,
|
||||||
|
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||||
IExecutionContext parentContext,
|
IExecutionContext parentContext,
|
||||||
Pipelines.AgentJobRequestMessage message,
|
Pipelines.AgentJobRequestMessage message,
|
||||||
DateTime jobStartTimeUtc)
|
DateTime jobStartTimeUtc)
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ namespace GitHub.Runner.Worker
|
|||||||
|
|
||||||
// others
|
// others
|
||||||
void ForceTaskComplete();
|
void ForceTaskComplete();
|
||||||
void RegisterPostJobAction(string displayName, string condition, Pipelines.ActionStep action);
|
void RegisterPostJobStep(string refName, IStep step);
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class ExecutionContext : RunnerService, IExecutionContext
|
public sealed class ExecutionContext : RunnerService, IExecutionContext
|
||||||
@@ -240,27 +240,10 @@ namespace GitHub.Runner.Worker
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegisterPostJobAction(string displayName, string condition, Pipelines.ActionStep action)
|
public void RegisterPostJobStep(string refName, IStep step)
|
||||||
{
|
{
|
||||||
if (action.Reference.Type != ActionSourceType.Repository)
|
step.ExecutionContext = Root.CreatePostChild(step.DisplayName, refName, IntraActionState);
|
||||||
{
|
Root.PostJobSteps.Push(step);
|
||||||
throw new NotSupportedException("Only action that has `action.yml` can define post job execution.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var repositoryReference = action.Reference as RepositoryPathReference;
|
|
||||||
var pathString = string.IsNullOrEmpty(repositoryReference.Path) ? string.Empty : $"/{repositoryReference.Path}";
|
|
||||||
var repoString = string.IsNullOrEmpty(repositoryReference.Ref) ? $"{repositoryReference.Name}{pathString}" :
|
|
||||||
$"{repositoryReference.Name}{pathString}@{repositoryReference.Ref}";
|
|
||||||
|
|
||||||
this.Debug($"Register post job cleanup for action: {repoString}");
|
|
||||||
|
|
||||||
var actionRunner = HostContext.CreateService<IActionRunner>();
|
|
||||||
actionRunner.Action = action;
|
|
||||||
actionRunner.Stage = ActionRunStage.Post;
|
|
||||||
actionRunner.Condition = condition;
|
|
||||||
actionRunner.DisplayName = displayName;
|
|
||||||
actionRunner.ExecutionContext = Root.CreatePostChild(displayName, $"{actionRunner.Action.Name}_post", IntraActionState);
|
|
||||||
Root.PostJobSteps.Push(actionRunner);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IExecutionContext CreateChild(Guid recordId, string displayName, string refName, string scopeName, string contextName, Dictionary<string, string> intraActionState = null, int? recordOrder = null)
|
public IExecutionContext CreateChild(Guid recordId, string displayName, string refName, string scopeName, string contextName, Dictionary<string, string> intraActionState = null, int? recordOrder = null)
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
{
|
{
|
||||||
public ContainerActionExecutionData Data { get; set; }
|
public ContainerActionExecutionData Data { get; set; }
|
||||||
|
|
||||||
|
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously (method has async logic on only certain platforms)
|
||||||
public async Task RunAsync(ActionRunStage stage)
|
public async Task RunAsync(ActionRunStage stage)
|
||||||
|
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||||
{
|
{
|
||||||
// Validate args.
|
// Validate args.
|
||||||
Trace.Entering();
|
Trace.Entering();
|
||||||
|
|||||||
@@ -110,9 +110,7 @@ namespace GitHub.Runner.Worker
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build up 3 lists of steps, pre-job, job, post-job
|
// Build up 2 lists of steps, pre-job, job
|
||||||
var postJobStepsBuilder = new Stack<IStep>();
|
|
||||||
|
|
||||||
// Download actions not already in the cache
|
// Download actions not already in the cache
|
||||||
Trace.Info("Downloading actions");
|
Trace.Info("Downloading actions");
|
||||||
var actionManager = HostContext.GetService<IActionManager>();
|
var actionManager = HostContext.GetService<IActionManager>();
|
||||||
@@ -134,10 +132,6 @@ namespace GitHub.Runner.Worker
|
|||||||
condition: $"{PipelineTemplateConstants.Success}()",
|
condition: $"{PipelineTemplateConstants.Success}()",
|
||||||
displayName: "Initialize containers",
|
displayName: "Initialize containers",
|
||||||
data: (object)containers));
|
data: (object)containers));
|
||||||
postJobStepsBuilder.Push(new JobExtensionRunner(runAsync: containerProvider.StopContainersAsync,
|
|
||||||
condition: $"{PipelineTemplateConstants.Always}()",
|
|
||||||
displayName: "Stop containers",
|
|
||||||
data: (object)containers));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add action steps
|
// Add action steps
|
||||||
@@ -187,33 +181,9 @@ namespace GitHub.Runner.Worker
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add post-job steps
|
|
||||||
Trace.Info("Adding post-job steps");
|
|
||||||
while (postJobStepsBuilder.Count > 0)
|
|
||||||
{
|
|
||||||
postJobSteps.Add(postJobStepsBuilder.Pop());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create execution context for post-job steps
|
|
||||||
foreach (var step in postJobSteps)
|
|
||||||
{
|
|
||||||
if (step is JobExtensionRunner)
|
|
||||||
{
|
|
||||||
JobExtensionRunner extensionStep = step as JobExtensionRunner;
|
|
||||||
ArgUtil.NotNull(extensionStep, extensionStep.DisplayName);
|
|
||||||
Guid stepId = Guid.NewGuid();
|
|
||||||
extensionStep.ExecutionContext = jobContext.CreateChild(stepId, extensionStep.DisplayName, stepId.ToString("N"), null, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<IStep> steps = new List<IStep>();
|
List<IStep> steps = new List<IStep>();
|
||||||
steps.AddRange(preJobSteps);
|
steps.AddRange(preJobSteps);
|
||||||
steps.AddRange(jobSteps);
|
steps.AddRange(jobSteps);
|
||||||
steps.AddRange(postJobSteps);
|
|
||||||
|
|
||||||
// Start agent log plugin host process
|
|
||||||
// var logPlugin = HostContext.GetService<IAgentLogPlugin>();
|
|
||||||
// await logPlugin.StartAsync(context, steps, jobContext.CancellationToken);
|
|
||||||
|
|
||||||
// Prepare for orphan process cleanup
|
// Prepare for orphan process cleanup
|
||||||
_processCleanup = jobContext.Variables.GetBoolean("process.clean") ?? true;
|
_processCleanup = jobContext.Variables.GetBoolean("process.clean") ?? true;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;linux-arm64;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
||||||
<NoWarn>NU1701;NU1603</NoWarn>
|
<NoWarn>NU1701;NU1603</NoWarn>
|
||||||
@@ -64,6 +64,9 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
||||||
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -73,4 +76,7 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;DEBUG;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System.Text;
|
|||||||
using Minimatch;
|
using Minimatch;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
using GitHub.DistributedTask.Expressions2.Sdk;
|
||||||
using GitHub.DistributedTask.Pipelines.ContextData;
|
using GitHub.DistributedTask.Pipelines.ContextData;
|
||||||
using GitHub.DistributedTask.Pipelines.ObjectTemplating;
|
using GitHub.DistributedTask.Pipelines.ObjectTemplating;
|
||||||
namespace GitHub.DistributedTask.Expressions2.Sdk.Functions
|
namespace GitHub.DistributedTask.Expressions2.Sdk.Functions
|
||||||
@@ -28,29 +29,50 @@ namespace GitHub.DistributedTask.Expressions2.Sdk.Functions
|
|||||||
string searchRoot = workspaceData.Value;
|
string searchRoot = workspaceData.Value;
|
||||||
string pattern = Parameters[0].Evaluate(context).ConvertToString();
|
string pattern = Parameters[0].Evaluate(context).ConvertToString();
|
||||||
|
|
||||||
|
// Convert slashes on Windows
|
||||||
|
if (s_isWindows)
|
||||||
|
{
|
||||||
|
pattern = pattern.Replace('\\', '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Root the pattern
|
||||||
|
if (!Path.IsPathRooted(pattern))
|
||||||
|
{
|
||||||
|
var patternRoot = s_isWindows ? searchRoot.Replace('\\', '/').TrimEnd('/') : searchRoot.TrimEnd('/');
|
||||||
|
pattern = string.Concat(patternRoot, "/", pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all files
|
||||||
context.Trace.Info($"Search root directory: '{searchRoot}'");
|
context.Trace.Info($"Search root directory: '{searchRoot}'");
|
||||||
context.Trace.Info($"Search pattern: '{pattern}'");
|
context.Trace.Info($"Search pattern: '{pattern}'");
|
||||||
var files = Directory.GetFiles(searchRoot, "*", SearchOption.AllDirectories).OrderBy(x => x).ToList();
|
var files = Directory.GetFiles(searchRoot, "*", SearchOption.AllDirectories)
|
||||||
|
.Select(x => s_isWindows ? x.Replace('\\', '/') : x)
|
||||||
|
.OrderBy(x => x, StringComparer.Ordinal)
|
||||||
|
.ToList();
|
||||||
if (files.Count == 0)
|
if (files.Count == 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentException($"'hashFiles({pattern})' failed. Directory '{searchRoot}' is empty");
|
throw new ArgumentException($"hashFiles('{ExpressionUtility.StringEscape(pattern)}') failed. Directory '{searchRoot}' is empty");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
context.Trace.Info($"Found {files.Count} files");
|
context.Trace.Info($"Found {files.Count} files");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Match
|
||||||
var matcher = new Minimatcher(pattern, s_minimatchOptions);
|
var matcher = new Minimatcher(pattern, s_minimatchOptions);
|
||||||
files = matcher.Filter(files).ToList();
|
files = matcher.Filter(files)
|
||||||
|
.Select(x => s_isWindows ? x.Replace('/', '\\') : x)
|
||||||
|
.ToList();
|
||||||
if (files.Count == 0)
|
if (files.Count == 0)
|
||||||
{
|
{
|
||||||
throw new ArgumentException($"'hashFiles({pattern})' failed. Search pattern '{pattern}' doesn't match any file under '{searchRoot}'");
|
throw new ArgumentException($"hashFiles('{ExpressionUtility.StringEscape(pattern)}') failed. Search pattern '{pattern}' doesn't match any file under '{searchRoot}'");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
context.Trace.Info($"{files.Count} matches to hash");
|
context.Trace.Info($"{files.Count} matches to hash");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hash each file
|
||||||
List<byte> filesSha256 = new List<byte>();
|
List<byte> filesSha256 = new List<byte>();
|
||||||
foreach (var file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
@@ -64,6 +86,7 @@ namespace GitHub.DistributedTask.Expressions2.Sdk.Functions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hash the hashes
|
||||||
using (SHA256 sha256hash = SHA256.Create())
|
using (SHA256 sha256hash = SHA256.Create())
|
||||||
{
|
{
|
||||||
var hashBytes = sha256hash.ComputeHash(filesSha256.ToArray());
|
var hashBytes = sha256hash.ComputeHash(filesSha256.ToArray());
|
||||||
@@ -83,12 +106,14 @@ namespace GitHub.DistributedTask.Expressions2.Sdk.Functions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static readonly bool s_isWindows = Environment.OSVersion.Platform != PlatformID.Unix && Environment.OSVersion.Platform != PlatformID.MacOSX;
|
||||||
|
|
||||||
// Only support basic globbing (* ? and []) and globstar (**)
|
// Only support basic globbing (* ? and []) and globstar (**)
|
||||||
private static readonly Options s_minimatchOptions = new Options
|
private static readonly Options s_minimatchOptions = new Options
|
||||||
{
|
{
|
||||||
Dot = true,
|
Dot = true,
|
||||||
NoBrace = true,
|
NoBrace = true,
|
||||||
NoCase = Environment.OSVersion.Platform != PlatformID.Unix && Environment.OSVersion.Platform != PlatformID.MacOSX,
|
NoCase = s_isWindows,
|
||||||
NoComment = true,
|
NoComment = true,
|
||||||
NoExt = true,
|
NoExt = true,
|
||||||
NoNegate = true,
|
NoNegate = true,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;linux-arm64;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
||||||
<NoWarn>NU1701;NU1603</NoWarn>
|
<NoWarn>NU1701;NU1603</NoWarn>
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Assert.
|
// Assert.
|
||||||
Assert.Equal(hc.SecretMasker.MaskSecrets("secret value 1"), "***");
|
Assert.Equal("***", hc.SecretMasker.MaskSecrets("secret value 1"));
|
||||||
Assert.Equal(hc.SecretMasker.MaskSecrets("secret value 2"), "***");
|
Assert.Equal("***", hc.SecretMasker.MaskSecrets("secret value 2"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,9 +90,9 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
trace.Info("Args: {0}", clp.Args.Count);
|
trace.Info("Args: {0}", clp.Args.Count);
|
||||||
Assert.True(clp.Args.Count == 2);
|
Assert.True(clp.Args.Count == 2);
|
||||||
Assert.True(clp.Args.ContainsKey("arg1"));
|
Assert.True(clp.Args.ContainsKey("arg1"));
|
||||||
Assert.Equal(clp.Args["arg1"], "arg1val");
|
Assert.Equal("arg1val", clp.Args["arg1"]);
|
||||||
Assert.True(clp.Args.ContainsKey("arg2"));
|
Assert.True(clp.Args.ContainsKey("arg2"));
|
||||||
Assert.Equal(clp.Args["arg2"], "arg2val");
|
Assert.Equal("arg2val", clp.Args["arg2"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,8 +113,8 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
|
|
||||||
trace.Info("Args: {0}", clp.Flags.Count);
|
trace.Info("Args: {0}", clp.Flags.Count);
|
||||||
Assert.True(clp.Flags.Count == 2);
|
Assert.True(clp.Flags.Count == 2);
|
||||||
Assert.True(clp.Flags.Contains("flag1"));
|
Assert.Contains("flag1", clp.Flags);
|
||||||
Assert.True(clp.Flags.Contains("flag2"));
|
Assert.Contains("flag2", clp.Flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
"win-x86",
|
"win-x86",
|
||||||
"linux-x64",
|
"linux-x64",
|
||||||
"linux-arm",
|
"linux-arm",
|
||||||
|
"linux-arm64",
|
||||||
"rhel.6-x64",
|
"rhel.6-x64",
|
||||||
"osx-x64"
|
"osx-x64"
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ namespace GitHub.Runner.Common.Tests.Worker.Container
|
|||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.NotNull(result0);
|
Assert.NotNull(result0);
|
||||||
Assert.Equal(result0.Count, 0);
|
Assert.Equal(0, result0.Count);
|
||||||
|
|
||||||
Assert.NotNull(result1);
|
Assert.NotNull(result1);
|
||||||
Assert.Equal(result1.Count, 1);
|
Assert.Equal(1, result1.Count);
|
||||||
var result1Port80Mapping = result1.Find(pm =>
|
var result1Port80Mapping = result1.Find(pm =>
|
||||||
string.Equals(pm.ContainerPort, "80") &&
|
string.Equals(pm.ContainerPort, "80") &&
|
||||||
string.Equals(pm.HostPort, "32881") &&
|
string.Equals(pm.HostPort, "32881") &&
|
||||||
@@ -48,10 +48,10 @@ namespace GitHub.Runner.Common.Tests.Worker.Container
|
|||||||
Assert.NotNull(result1Port80Mapping);
|
Assert.NotNull(result1Port80Mapping);
|
||||||
|
|
||||||
Assert.NotNull(result1Empty);
|
Assert.NotNull(result1Empty);
|
||||||
Assert.Equal(result1Empty.Count, 0);
|
Assert.Equal(0, result1Empty.Count);
|
||||||
|
|
||||||
Assert.NotNull(result2);
|
Assert.NotNull(result2);
|
||||||
Assert.Equal(result2.Count, 2);
|
Assert.Equal(2, result2.Count);
|
||||||
var result2Port80Mapping = result2.Find(pm =>
|
var result2Port80Mapping = result2.Find(pm =>
|
||||||
string.Equals(pm.ContainerPort, "80") &&
|
string.Equals(pm.ContainerPort, "80") &&
|
||||||
string.Equals(pm.HostPort, "32881") &&
|
string.Equals(pm.HostPort, "32881") &&
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Setup([CallerMemberName] string testName = "")
|
private void Setup([CallerMemberName] string testName = "")
|
||||||
{
|
{
|
||||||
_tokenSource = new CancellationTokenSource();
|
_tokenSource = new CancellationTokenSource();
|
||||||
_hc = new HostContext(
|
_hc = new HostContext(
|
||||||
@@ -115,7 +115,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
logFile: Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"trace_{nameof(HostContextL0)}_{testName}.log"));
|
logFile: Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"trace_{nameof(HostContextL0)}_{testName}.log"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Teardown()
|
private void Teardown()
|
||||||
{
|
{
|
||||||
_hc?.Dispose();
|
_hc?.Dispose();
|
||||||
_tokenSource?.Dispose();
|
_tokenSource?.Dispose();
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
// Assert.
|
// Assert.
|
||||||
Assert.Equal("some agent", actual);
|
Assert.Equal("some agent", actual);
|
||||||
Assert.Equal(string.Empty, Environment.GetEnvironmentVariable("ACTIONS_RUNNER_INPUT_AGENT") ?? string.Empty); // Should remove.
|
Assert.Equal(string.Empty, Environment.GetEnvironmentVariable("ACTIONS_RUNNER_INPUT_AGENT") ?? string.Empty); // Should remove.
|
||||||
Assert.Equal(hc.SecretMasker.MaskSecrets("some agent"), "some agent");
|
Assert.Equal("some agent", hc.SecretMasker.MaskSecrets("some agent"));
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -80,7 +80,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
// Assert.
|
// Assert.
|
||||||
Assert.Equal("some secret token value", actual);
|
Assert.Equal("some secret token value", actual);
|
||||||
Assert.Equal(string.Empty, Environment.GetEnvironmentVariable("ACTIONS_RUNNER_INPUT_TOKEN") ?? string.Empty); // Should remove.
|
Assert.Equal(string.Empty, Environment.GetEnvironmentVariable("ACTIONS_RUNNER_INPUT_TOKEN") ?? string.Empty); // Should remove.
|
||||||
Assert.Equal(hc.SecretMasker.MaskSecrets("some secret token value"), "***");
|
Assert.Equal("***", hc.SecretMasker.MaskSecrets("some secret token value"));
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -250,7 +250,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
bool actual = command.Unattended;
|
bool actual = command.Unattended;
|
||||||
|
|
||||||
// Assert.
|
// Assert.
|
||||||
Assert.Equal(true, actual);
|
Assert.True(actual);
|
||||||
Assert.Equal(string.Empty, Environment.GetEnvironmentVariable("ACTIONS_RUNNER_INPUT_UNATTENDED") ?? string.Empty); // Should remove.
|
Assert.Equal(string.Empty, Environment.GetEnvironmentVariable("ACTIONS_RUNNER_INPUT_UNATTENDED") ?? string.Empty); // Should remove.
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
@@ -720,7 +720,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
var command = new CommandSettings(hc, args: new string[] { "badcommand" });
|
var command = new CommandSettings(hc, args: new string[] { "badcommand" });
|
||||||
|
|
||||||
// Assert.
|
// Assert.
|
||||||
Assert.True(command.Validate().Contains("badcommand"));
|
Assert.Contains("badcommand", command.Validate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -735,7 +735,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
var command = new CommandSettings(hc, args: new string[] { "--badflag" });
|
var command = new CommandSettings(hc, args: new string[] { "--badflag" });
|
||||||
|
|
||||||
// Assert.
|
// Assert.
|
||||||
Assert.True(command.Validate().Contains("badflag"));
|
Assert.Contains("badflag", command.Validate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -750,7 +750,7 @@ namespace GitHub.Runner.Common.Tests
|
|||||||
var command = new CommandSettings(hc, args: new string[] { "--badargname", "bad arg value" });
|
var command = new CommandSettings(hc, args: new string[] { "--badargname", "bad arg value" });
|
||||||
|
|
||||||
// Assert.
|
// Assert.
|
||||||
Assert.True(command.Validate().Contains("badargname"));
|
Assert.Contains("badargname", command.Validate());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,10 +43,6 @@ namespace GitHub.Runner.Common.Tests.Listener.Configuration
|
|||||||
private string _expectedServerUrl = "https://localhost";
|
private string _expectedServerUrl = "https://localhost";
|
||||||
private string _expectedAgentName = "expectedAgentName";
|
private string _expectedAgentName = "expectedAgentName";
|
||||||
private string _expectedPoolName = "poolName";
|
private string _expectedPoolName = "poolName";
|
||||||
private string _expectedCollectionName = "testCollectionName";
|
|
||||||
private string _expectedProjectName = "testProjectName";
|
|
||||||
private string _expectedProjectId = "edf3f94e-d251-49df-bfce-602d6c967409";
|
|
||||||
private string _expectedMachineGroupName = "testMachineGroupName";
|
|
||||||
private string _expectedAuthType = "pat";
|
private string _expectedAuthType = "pat";
|
||||||
private string _expectedWorkFolder = "_work";
|
private string _expectedWorkFolder = "_work";
|
||||||
private int _expectedPoolId = 1;
|
private int _expectedPoolId = 1;
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ namespace GitHub.Runner.Common.Tests.Listener
|
|||||||
string line;
|
string line;
|
||||||
while ((line = freader.ReadLine()) != null)
|
while ((line = freader.ReadLine()) != null)
|
||||||
{
|
{
|
||||||
Assert.True(line.EndsWith(LogData));
|
Assert.EndsWith(LogData, line);
|
||||||
bytesWritten += logDataSize;
|
bytesWritten += logDataSize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ namespace GitHub.Runner.Common.Tests.Util
|
|||||||
var connect = VssUtil.CreateConnection(new Uri("https://github.com/actions/runner"), new VssCredentials());
|
var connect = VssUtil.CreateConnection(new Uri("https://github.com/actions/runner"), new VssCredentials());
|
||||||
|
|
||||||
// Assert.
|
// Assert.
|
||||||
Assert.Equal(connect.Settings.MaxRetryRequest.ToString(), "10");
|
Assert.Equal("10", connect.Settings.MaxRetryRequest.ToString());
|
||||||
Assert.Equal(connect.Settings.SendTimeout.TotalSeconds.ToString(), "360");
|
Assert.Equal("360", connect.Settings.SendTimeout.TotalSeconds.ToString());
|
||||||
|
|
||||||
trace.Info("Set httpretry to 100.");
|
trace.Info("Set httpretry to 100.");
|
||||||
Environment.SetEnvironmentVariable("GITHUB_ACTIONS_RUNNER_HTTP_RETRY", "100");
|
Environment.SetEnvironmentVariable("GITHUB_ACTIONS_RUNNER_HTTP_RETRY", "100");
|
||||||
@@ -42,8 +42,8 @@ namespace GitHub.Runner.Common.Tests.Util
|
|||||||
connect = VssUtil.CreateConnection(new Uri("https://github.com/actions/runner"), new VssCredentials());
|
connect = VssUtil.CreateConnection(new Uri("https://github.com/actions/runner"), new VssCredentials());
|
||||||
|
|
||||||
// Assert.
|
// Assert.
|
||||||
Assert.Equal(connect.Settings.MaxRetryRequest.ToString(), "10");
|
Assert.Equal("10", connect.Settings.MaxRetryRequest.ToString());
|
||||||
Assert.Equal(connect.Settings.SendTimeout.TotalSeconds.ToString(), "1200");
|
Assert.Equal("1200", connect.Settings.SendTimeout.TotalSeconds.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -37,25 +37,25 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
|
|
||||||
Assert.Equal(result.Name, "Hello World");
|
Assert.Equal("Hello World", result.Name);
|
||||||
Assert.Equal(result.Description, "Greet the world and record the time");
|
Assert.Equal("Greet the world and record the time", result.Description);
|
||||||
Assert.Equal(result.Inputs.Count, 2);
|
Assert.Equal(2, result.Inputs.Count);
|
||||||
Assert.Equal(result.Inputs[0].Key.AssertString("key").Value, "greeting");
|
Assert.Equal("greeting", result.Inputs[0].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[0].Value.AssertString("value").Value, "Hello");
|
Assert.Equal("Hello", result.Inputs[0].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Inputs[1].Key.AssertString("key").Value, "entryPoint");
|
Assert.Equal("entryPoint", result.Inputs[1].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[1].Value.AssertString("value").Value, "");
|
Assert.Equal("", result.Inputs[1].Value.AssertString("value").Value);
|
||||||
|
|
||||||
Assert.Equal(result.Execution.ExecutionType, ActionExecutionType.Container);
|
Assert.Equal(ActionExecutionType.Container, result.Execution.ExecutionType);
|
||||||
|
|
||||||
var containerAction = result.Execution as ContainerActionExecutionData;
|
var containerAction = result.Execution as ContainerActionExecutionData;
|
||||||
|
|
||||||
Assert.Equal(containerAction.Image, "Dockerfile");
|
Assert.Equal("Dockerfile", containerAction.Image);
|
||||||
Assert.Equal(containerAction.EntryPoint, "main.sh");
|
Assert.Equal("main.sh", containerAction.EntryPoint);
|
||||||
Assert.Equal(containerAction.Arguments[0].ToString(), "bzz");
|
Assert.Equal("bzz", containerAction.Arguments[0].ToString());
|
||||||
Assert.Equal(containerAction.Environment[0].Key.ToString(), "Token");
|
Assert.Equal("Token", containerAction.Environment[0].Key.ToString());
|
||||||
Assert.Equal(containerAction.Environment[0].Value.ToString(), "foo");
|
Assert.Equal("foo", containerAction.Environment[0].Value.ToString());
|
||||||
Assert.Equal(containerAction.Environment[1].Key.ToString(), "Url");
|
Assert.Equal("Url", containerAction.Environment[1].Key.ToString());
|
||||||
Assert.Equal(containerAction.Environment[1].Value.ToString(), "bar");
|
Assert.Equal("bar", containerAction.Environment[1].Value.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -81,27 +81,27 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
|
|
||||||
Assert.Equal(result.Name, "Hello World");
|
Assert.Equal("Hello World", result.Name);
|
||||||
Assert.Equal(result.Description, "Greet the world and record the time");
|
Assert.Equal("Greet the world and record the time", result.Description);
|
||||||
Assert.Equal(result.Inputs.Count, 2);
|
Assert.Equal(2, result.Inputs.Count);
|
||||||
Assert.Equal(result.Inputs[0].Key.AssertString("key").Value, "greeting");
|
Assert.Equal("greeting", result.Inputs[0].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[0].Value.AssertString("value").Value, "Hello");
|
Assert.Equal("Hello", result.Inputs[0].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Inputs[1].Key.AssertString("key").Value, "entryPoint");
|
Assert.Equal("entryPoint", result.Inputs[1].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[1].Value.AssertString("value").Value, "");
|
Assert.Equal("", result.Inputs[1].Value.AssertString("value").Value);
|
||||||
|
|
||||||
Assert.Equal(result.Execution.ExecutionType, ActionExecutionType.Container);
|
Assert.Equal(ActionExecutionType.Container, result.Execution.ExecutionType);
|
||||||
|
|
||||||
var containerAction = result.Execution as ContainerActionExecutionData;
|
var containerAction = result.Execution as ContainerActionExecutionData;
|
||||||
|
|
||||||
Assert.Equal(containerAction.Image, "Dockerfile");
|
Assert.Equal("Dockerfile", containerAction.Image);
|
||||||
Assert.Equal(containerAction.EntryPoint, "main.sh");
|
Assert.Equal("main.sh", containerAction.EntryPoint);
|
||||||
Assert.Equal(containerAction.Cleanup, "cleanup.sh");
|
Assert.Equal("cleanup.sh", containerAction.Cleanup);
|
||||||
Assert.Equal(containerAction.CleanupCondition, "failure()");
|
Assert.Equal("failure()", containerAction.CleanupCondition);
|
||||||
Assert.Equal(containerAction.Arguments[0].ToString(), "bzz");
|
Assert.Equal("bzz", containerAction.Arguments[0].ToString());
|
||||||
Assert.Equal(containerAction.Environment[0].Key.ToString(), "Token");
|
Assert.Equal("Token", containerAction.Environment[0].Key.ToString());
|
||||||
Assert.Equal(containerAction.Environment[0].Value.ToString(), "foo");
|
Assert.Equal("foo", containerAction.Environment[0].Value.ToString());
|
||||||
Assert.Equal(containerAction.Environment[1].Key.ToString(), "Url");
|
Assert.Equal("Url", containerAction.Environment[1].Key.ToString());
|
||||||
Assert.Equal(containerAction.Environment[1].Value.ToString(), "bar");
|
Assert.Equal("bar", containerAction.Environment[1].Value.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -126,19 +126,19 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "dockerfileaction_noargs_noenv_noentrypoint.yml"));
|
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "dockerfileaction_noargs_noenv_noentrypoint.yml"));
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result.Name, "Hello World");
|
Assert.Equal("Hello World", result.Name);
|
||||||
Assert.Equal(result.Description, "Greet the world and record the time");
|
Assert.Equal("Greet the world and record the time", result.Description);
|
||||||
Assert.Equal(result.Inputs.Count, 2);
|
Assert.Equal(2, result.Inputs.Count);
|
||||||
Assert.Equal(result.Inputs[0].Key.AssertString("key").Value, "greeting");
|
Assert.Equal("greeting", result.Inputs[0].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[0].Value.AssertString("value").Value, "Hello");
|
Assert.Equal("Hello", result.Inputs[0].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Inputs[1].Key.AssertString("key").Value, "entryPoint");
|
Assert.Equal("entryPoint", result.Inputs[1].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[1].Value.AssertString("value").Value, "");
|
Assert.Equal("", result.Inputs[1].Value.AssertString("value").Value);
|
||||||
|
|
||||||
Assert.Equal(result.Execution.ExecutionType, ActionExecutionType.Container);
|
Assert.Equal(ActionExecutionType.Container, result.Execution.ExecutionType);
|
||||||
|
|
||||||
var containerAction = result.Execution as ContainerActionExecutionData;
|
var containerAction = result.Execution as ContainerActionExecutionData;
|
||||||
|
|
||||||
Assert.Equal(containerAction.Image, "Dockerfile");
|
Assert.Equal("Dockerfile", containerAction.Image);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -164,25 +164,25 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
|
|
||||||
Assert.Equal(result.Name, "Hello World");
|
Assert.Equal("Hello World", result.Name);
|
||||||
Assert.Equal(result.Description, "Greet the world and record the time");
|
Assert.Equal("Greet the world and record the time", result.Description);
|
||||||
Assert.Equal(result.Inputs.Count, 2);
|
Assert.Equal(2, result.Inputs.Count);
|
||||||
Assert.Equal(result.Inputs[0].Key.AssertString("key").Value, "greeting");
|
Assert.Equal("greeting", result.Inputs[0].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[0].Value.AssertString("value").Value, "Hello");
|
Assert.Equal("Hello", result.Inputs[0].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Inputs[1].Key.AssertString("key").Value, "entryPoint");
|
Assert.Equal("entryPoint", result.Inputs[1].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[1].Value.AssertString("value").Value, "");
|
Assert.Equal("", result.Inputs[1].Value.AssertString("value").Value);
|
||||||
|
|
||||||
Assert.Equal(result.Execution.ExecutionType, ActionExecutionType.Container);
|
Assert.Equal(ActionExecutionType.Container, result.Execution.ExecutionType);
|
||||||
|
|
||||||
var containerAction = result.Execution as ContainerActionExecutionData;
|
var containerAction = result.Execution as ContainerActionExecutionData;
|
||||||
|
|
||||||
Assert.Equal(containerAction.Image, "Dockerfile");
|
Assert.Equal("Dockerfile", containerAction.Image);
|
||||||
Assert.Equal(containerAction.EntryPoint, "main.sh");
|
Assert.Equal("main.sh", containerAction.EntryPoint);
|
||||||
Assert.Equal(containerAction.Arguments[0].ToString(), "${{ inputs.greeting }}");
|
Assert.Equal("${{ inputs.greeting }}", containerAction.Arguments[0].ToString());
|
||||||
Assert.Equal(containerAction.Environment[0].Key.ToString(), "Token");
|
Assert.Equal("Token", containerAction.Environment[0].Key.ToString());
|
||||||
Assert.Equal(containerAction.Environment[0].Value.ToString(), "foo");
|
Assert.Equal("foo", containerAction.Environment[0].Value.ToString());
|
||||||
Assert.Equal(containerAction.Environment[1].Key.ToString(), "Url");
|
Assert.Equal("Url", containerAction.Environment[1].Key.ToString());
|
||||||
Assert.Equal(containerAction.Environment[1].Value.ToString(), "${{ inputs.entryPoint }}");
|
Assert.Equal("${{ inputs.entryPoint }}", containerAction.Environment[1].Value.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -207,25 +207,25 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "dockerhubaction.yml"));
|
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "dockerhubaction.yml"));
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result.Name, "Hello World");
|
Assert.Equal("Hello World", result.Name);
|
||||||
Assert.Equal(result.Description, "Greet the world and record the time");
|
Assert.Equal("Greet the world and record the time", result.Description);
|
||||||
Assert.Equal(result.Inputs.Count, 2);
|
Assert.Equal(2, result.Inputs.Count);
|
||||||
Assert.Equal(result.Inputs[0].Key.AssertString("key").Value, "greeting");
|
Assert.Equal("greeting", result.Inputs[0].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[0].Value.AssertString("value").Value, "Hello");
|
Assert.Equal("Hello", result.Inputs[0].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Inputs[1].Key.AssertString("key").Value, "entryPoint");
|
Assert.Equal("entryPoint", result.Inputs[1].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[1].Value.AssertString("value").Value, "");
|
Assert.Equal("", result.Inputs[1].Value.AssertString("value").Value);
|
||||||
|
|
||||||
Assert.Equal(result.Execution.ExecutionType, ActionExecutionType.Container);
|
Assert.Equal(ActionExecutionType.Container, result.Execution.ExecutionType);
|
||||||
|
|
||||||
var containerAction = result.Execution as ContainerActionExecutionData;
|
var containerAction = result.Execution as ContainerActionExecutionData;
|
||||||
|
|
||||||
Assert.Equal(containerAction.Image, "docker://ubuntu:18.04");
|
Assert.Equal("docker://ubuntu:18.04", containerAction.Image);
|
||||||
Assert.Equal(containerAction.EntryPoint, "main.sh");
|
Assert.Equal("main.sh", containerAction.EntryPoint);
|
||||||
Assert.Equal(containerAction.Arguments[0].ToString(), "bzz");
|
Assert.Equal("bzz", containerAction.Arguments[0].ToString());
|
||||||
Assert.Equal(containerAction.Environment[0].Key.ToString(), "Token");
|
Assert.Equal("Token", containerAction.Environment[0].Key.ToString());
|
||||||
Assert.Equal(containerAction.Environment[0].Value.ToString(), "foo");
|
Assert.Equal("foo", containerAction.Environment[0].Value.ToString());
|
||||||
Assert.Equal(containerAction.Environment[1].Key.ToString(), "Url");
|
Assert.Equal("Url", containerAction.Environment[1].Key.ToString());
|
||||||
Assert.Equal(containerAction.Environment[1].Value.ToString(), "bar");
|
Assert.Equal("bar", containerAction.Environment[1].Value.ToString());
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -250,24 +250,24 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "nodeaction.yml"));
|
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "nodeaction.yml"));
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result.Name, "Hello World");
|
Assert.Equal("Hello World", result.Name);
|
||||||
Assert.Equal(result.Description, "Greet the world and record the time");
|
Assert.Equal("Greet the world and record the time", result.Description);
|
||||||
Assert.Equal(result.Inputs.Count, 2);
|
Assert.Equal(2, result.Inputs.Count);
|
||||||
Assert.Equal(result.Inputs[0].Key.AssertString("key").Value, "greeting");
|
Assert.Equal("greeting", result.Inputs[0].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[0].Value.AssertString("value").Value, "Hello");
|
Assert.Equal("Hello", result.Inputs[0].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Inputs[1].Key.AssertString("key").Value, "entryPoint");
|
Assert.Equal("entryPoint", result.Inputs[1].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[1].Value.AssertString("value").Value, "");
|
Assert.Equal("", result.Inputs[1].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Deprecated.Count, 1);
|
Assert.Equal(1, result.Deprecated.Count);
|
||||||
|
|
||||||
Assert.True(result.Deprecated.ContainsKey("greeting"));
|
Assert.True(result.Deprecated.ContainsKey("greeting"));
|
||||||
result.Deprecated.TryGetValue("greeting", out string value);
|
result.Deprecated.TryGetValue("greeting", out string value);
|
||||||
Assert.Equal(value, "This property has been deprecated");
|
Assert.Equal("This property has been deprecated", value);
|
||||||
|
|
||||||
Assert.Equal(result.Execution.ExecutionType, ActionExecutionType.NodeJS);
|
Assert.Equal(ActionExecutionType.NodeJS, result.Execution.ExecutionType);
|
||||||
|
|
||||||
var nodeAction = result.Execution as NodeJSActionExecutionData;
|
var nodeAction = result.Execution as NodeJSActionExecutionData;
|
||||||
|
|
||||||
Assert.Equal(nodeAction.Script, "main.js");
|
Assert.Equal("main.js", nodeAction.Script);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -292,26 +292,26 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "nodeaction_cleanup.yml"));
|
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "nodeaction_cleanup.yml"));
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result.Name, "Hello World");
|
Assert.Equal("Hello World", result.Name);
|
||||||
Assert.Equal(result.Description, "Greet the world and record the time");
|
Assert.Equal("Greet the world and record the time", result.Description);
|
||||||
Assert.Equal(result.Inputs.Count, 2);
|
Assert.Equal(2, result.Inputs.Count);
|
||||||
Assert.Equal(result.Inputs[0].Key.AssertString("key").Value, "greeting");
|
Assert.Equal("greeting", result.Inputs[0].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[0].Value.AssertString("value").Value, "Hello");
|
Assert.Equal("Hello", result.Inputs[0].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Inputs[1].Key.AssertString("key").Value, "entryPoint");
|
Assert.Equal("entryPoint", result.Inputs[1].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[1].Value.AssertString("value").Value, "");
|
Assert.Equal("", result.Inputs[1].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Deprecated.Count, 1);
|
Assert.Equal(1, result.Deprecated.Count);
|
||||||
|
|
||||||
Assert.True(result.Deprecated.ContainsKey("greeting"));
|
Assert.True(result.Deprecated.ContainsKey("greeting"));
|
||||||
result.Deprecated.TryGetValue("greeting", out string value);
|
result.Deprecated.TryGetValue("greeting", out string value);
|
||||||
Assert.Equal(value, "This property has been deprecated");
|
Assert.Equal("This property has been deprecated", value);
|
||||||
|
|
||||||
Assert.Equal(result.Execution.ExecutionType, ActionExecutionType.NodeJS);
|
Assert.Equal(ActionExecutionType.NodeJS, result.Execution.ExecutionType);
|
||||||
|
|
||||||
var nodeAction = result.Execution as NodeJSActionExecutionData;
|
var nodeAction = result.Execution as NodeJSActionExecutionData;
|
||||||
|
|
||||||
Assert.Equal(nodeAction.Script, "main.js");
|
Assert.Equal("main.js", nodeAction.Script);
|
||||||
Assert.Equal(nodeAction.Cleanup, "cleanup.js");
|
Assert.Equal("cleanup.js", nodeAction.Cleanup);
|
||||||
Assert.Equal(nodeAction.CleanupCondition, "cancelled()");
|
Assert.Equal("cancelled()", nodeAction.CleanupCondition);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -336,19 +336,19 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "pluginaction.yml"));
|
var result = actionManifest.Load(_ec.Object, Path.Combine(TestUtil.GetTestDataPath(), "pluginaction.yml"));
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result.Name, "Hello World");
|
Assert.Equal("Hello World", result.Name);
|
||||||
Assert.Equal(result.Description, "Greet the world and record the time");
|
Assert.Equal("Greet the world and record the time", result.Description);
|
||||||
Assert.Equal(result.Inputs.Count, 2);
|
Assert.Equal(2, result.Inputs.Count);
|
||||||
Assert.Equal(result.Inputs[0].Key.AssertString("key").Value, "greeting");
|
Assert.Equal("greeting", result.Inputs[0].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[0].Value.AssertString("value").Value, "Hello");
|
Assert.Equal("Hello", result.Inputs[0].Value.AssertString("value").Value);
|
||||||
Assert.Equal(result.Inputs[1].Key.AssertString("key").Value, "entryPoint");
|
Assert.Equal("entryPoint", result.Inputs[1].Key.AssertString("key").Value);
|
||||||
Assert.Equal(result.Inputs[1].Value.AssertString("value").Value, "");
|
Assert.Equal("", result.Inputs[1].Value.AssertString("value").Value);
|
||||||
|
|
||||||
Assert.Equal(result.Execution.ExecutionType, ActionExecutionType.Plugin);
|
Assert.Equal(ActionExecutionType.Plugin, result.Execution.ExecutionType);
|
||||||
|
|
||||||
var pluginAction = result.Execution as PluginActionExecutionData;
|
var pluginAction = result.Execution as PluginActionExecutionData;
|
||||||
|
|
||||||
Assert.Equal(pluginAction.Plugin, "someplugin");
|
Assert.Equal("someplugin", pluginAction.Plugin);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -383,9 +383,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var result = actionManifest.EvaluateContainerArguments(_ec.Object, arguments, evaluateContext);
|
var result = actionManifest.EvaluateContainerArguments(_ec.Object, arguments, evaluateContext);
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result[0], "hello");
|
Assert.Equal("hello", result[0]);
|
||||||
Assert.Equal(result[1], "test");
|
Assert.Equal("test", result[1]);
|
||||||
Assert.Equal(result.Count, 2);
|
Assert.Equal(2, result.Count);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -420,9 +420,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var result = actionManifest.EvaluateContainerEnvironment(_ec.Object, environment, evaluateContext);
|
var result = actionManifest.EvaluateContainerEnvironment(_ec.Object, environment, evaluateContext);
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result["hello"], "hello");
|
Assert.Equal("hello", result["hello"]);
|
||||||
Assert.Equal(result["test"], "test");
|
Assert.Equal("test", result["test"]);
|
||||||
Assert.Equal(result.Count, 2);
|
Assert.Equal(2, result.Count);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -459,13 +459,13 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var result = actionManifest.EvaluateDefaultInput(_ec.Object, "testInput", new StringToken(null, null, null, "defaultValue"), evaluateContext);
|
var result = actionManifest.EvaluateDefaultInput(_ec.Object, "testInput", new StringToken(null, null, null, "defaultValue"), evaluateContext);
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result, "defaultValue");
|
Assert.Equal("defaultValue", result);
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
result = actionManifest.EvaluateDefaultInput(_ec.Object, "testInput", new BasicExpressionToken(null, null, null, "github.ref"), evaluateContext);
|
result = actionManifest.EvaluateDefaultInput(_ec.Object, "testInput", new BasicExpressionToken(null, null, null, "github.ref"), evaluateContext);
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(result, "refs/heads/master");
|
Assert.Equal("refs/heads/master", result);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
private TestHostContext _hc;
|
private TestHostContext _hc;
|
||||||
private ActionRunner _actionRunner;
|
private ActionRunner _actionRunner;
|
||||||
private IActionManifestManager _actionManifestManager;
|
private IActionManifestManager _actionManifestManager;
|
||||||
private string _workFolder;
|
|
||||||
private DictionaryContextData _context = new DictionaryContextData();
|
private DictionaryContextData _context = new DictionaryContextData();
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -75,9 +74,9 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal(finialInputs["input1"], "test1");
|
Assert.Equal("test1", finialInputs["input1"]);
|
||||||
Assert.Equal(finialInputs["input2"], "test2");
|
Assert.Equal("test2", finialInputs["input2"]);
|
||||||
Assert.Equal(finialInputs["input3"], "github");
|
Assert.Equal("github", finialInputs["input3"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@@ -278,24 +277,6 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
Assert.Equal("${{ matrix.node }}", _actionRunner.DisplayName);
|
Assert.Equal("${{ matrix.node }}", _actionRunner.DisplayName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateAction(string yamlContent, out Pipelines.ActionStep instance, out string directory)
|
|
||||||
{
|
|
||||||
directory = Path.Combine(_workFolder, Constants.Path.ActionsDirectory, "GitHub/actions".Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar), "master");
|
|
||||||
string file = Path.Combine(directory, Constants.Path.ActionManifestFile);
|
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(file));
|
|
||||||
File.WriteAllText(file, yamlContent);
|
|
||||||
instance = new Pipelines.ActionStep()
|
|
||||||
{
|
|
||||||
Id = Guid.NewGuid(),
|
|
||||||
Reference = new Pipelines.RepositoryPathReference()
|
|
||||||
{
|
|
||||||
Name = "GitHub/actions",
|
|
||||||
Ref = "master",
|
|
||||||
RepositoryType = Pipelines.RepositoryTypes.GitHub
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Setup([CallerMemberName] string name = "")
|
private void Setup([CallerMemberName] string name = "")
|
||||||
{
|
{
|
||||||
_ecTokenSource?.Dispose();
|
_ecTokenSource?.Dispose();
|
||||||
|
|||||||
@@ -206,8 +206,22 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
var action2 = jobContext.CreateChild(Guid.NewGuid(), "action_2", "action_2", null, null);
|
var action2 = jobContext.CreateChild(Guid.NewGuid(), "action_2", "action_2", null, null);
|
||||||
action2.IntraActionState["state"] = "2";
|
action2.IntraActionState["state"] = "2";
|
||||||
|
|
||||||
action1.RegisterPostJobAction("post1", "always()", new Pipelines.ActionStep() { Name = "post1", DisplayName = "Test 1", Reference = new Pipelines.RepositoryPathReference() { Name = "actions/action" } });
|
|
||||||
action2.RegisterPostJobAction("post2", "always()", new Pipelines.ActionStep() { Name = "post2", DisplayName = "Test 2", Reference = new Pipelines.RepositoryPathReference() { Name = "actions/action" } });
|
var postRunner1 = hc.CreateService<IActionRunner>();
|
||||||
|
postRunner1.Action = new Pipelines.ActionStep() { Name = "post1", DisplayName = "Test 1", Reference = new Pipelines.RepositoryPathReference() { Name = "actions/action" } };
|
||||||
|
postRunner1.Stage = ActionRunStage.Post;
|
||||||
|
postRunner1.Condition = "always()";
|
||||||
|
postRunner1.DisplayName = "post1";
|
||||||
|
|
||||||
|
|
||||||
|
var postRunner2 = hc.CreateService<IActionRunner>();
|
||||||
|
postRunner2.Action = new Pipelines.ActionStep() { Name = "post2", DisplayName = "Test 2", Reference = new Pipelines.RepositoryPathReference() { Name = "actions/action" } };
|
||||||
|
postRunner2.Stage = ActionRunStage.Post;
|
||||||
|
postRunner2.Condition = "always()";
|
||||||
|
postRunner2.DisplayName = "post2";
|
||||||
|
|
||||||
|
action1.RegisterPostJobStep("post1", postRunner1);
|
||||||
|
action2.RegisterPostJobStep("post2", postRunner2);
|
||||||
|
|
||||||
Assert.NotNull(jobContext.JobSteps);
|
Assert.NotNull(jobContext.JobSteps);
|
||||||
Assert.NotNull(jobContext.PostJobSteps);
|
Assert.NotNull(jobContext.PostJobSteps);
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
string actual = variables.Get("no such");
|
string actual = variables.Get("no such");
|
||||||
|
|
||||||
// Assert.
|
// Assert.
|
||||||
Assert.Equal(null, actual);
|
Assert.Null(actual);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netcoreapp3.0</TargetFramework>
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;win-x86;linux-x64;linux-arm;linux-arm64;rhel.6-x64;osx-x64</RuntimeIdentifiers>
|
||||||
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
|
||||||
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
<AssetTargetFallback>portable-net45+win8</AssetTargetFallback>
|
||||||
<NoWarn>NU1701;NU1603;NU1603;xUnit2013;</NoWarn>
|
<NoWarn>NU1701;NU1603;NU1603;xUnit2013;</NoWarn>
|
||||||
@@ -58,6 +58,9 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-x64'">
|
||||||
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;X64;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
@@ -67,4 +70,7 @@
|
|||||||
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm'">
|
||||||
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
<DefineConstants>OS_LINUX;ARM;DEBUG;TRACE</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true' AND '$(Configuration)' == 'Debug' AND '$(PackageRuntime)' == 'linux-arm64'">
|
||||||
|
<DefineConstants>OS_LINUX;ARM64;DEBUG;TRACE</DefineConstants>
|
||||||
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ elif [[ "$CURRENT_PLATFORM" == 'linux' ]]; then
|
|||||||
CPU_NAME=$(uname -m)
|
CPU_NAME=$(uname -m)
|
||||||
case $CPU_NAME in
|
case $CPU_NAME in
|
||||||
armv7l) RUNTIME_ID="linux-arm";;
|
armv7l) RUNTIME_ID="linux-arm";;
|
||||||
aarch64) RUNTIME_ID="linux-arm";;
|
aarch64) RUNTIME_ID="linux-arm64";;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ fi
|
|||||||
|
|
||||||
# Make sure current platform support publish the dotnet runtime
|
# Make sure current platform support publish the dotnet runtime
|
||||||
# Windows can publish win-x86/x64
|
# Windows can publish win-x86/x64
|
||||||
# Linux can publish linux-x64/arm/rhel.6-x64
|
# Linux can publish linux-x64/arm/arm64/rhel.6-x64
|
||||||
# OSX can publish osx-x64
|
# OSX can publish osx-x64
|
||||||
if [[ "$CURRENT_PLATFORM" == 'windows' ]]; then
|
if [[ "$CURRENT_PLATFORM" == 'windows' ]]; then
|
||||||
if [[ ("$RUNTIME_ID" != 'win-x86') && ("$RUNTIME_ID" != 'win-x64') ]]; then
|
if [[ ("$RUNTIME_ID" != 'win-x86') && ("$RUNTIME_ID" != 'win-x64') ]]; then
|
||||||
@@ -68,7 +68,7 @@ if [[ "$CURRENT_PLATFORM" == 'windows' ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
elif [[ "$CURRENT_PLATFORM" == 'linux' ]]; then
|
elif [[ "$CURRENT_PLATFORM" == 'linux' ]]; then
|
||||||
if [[ ("$RUNTIME_ID" != 'linux-x64') && ("$RUNTIME_ID" != 'linux-arm') && ("$RUNTIME_ID" != 'rhel.6-x64') ]]; then
|
if [[ ("$RUNTIME_ID" != 'linux-x64') && ("$RUNTIME_ID" != 'linux-arm') && ("$RUNTIME_ID" != 'linux-arm64') && ("$RUNTIME_ID" != 'rhel.6-x64') ]]; then
|
||||||
echo "Failed: Can't build $RUNTIME_ID package $CURRENT_PLATFORM" >&2
|
echo "Failed: Can't build $RUNTIME_ID package $CURRENT_PLATFORM" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -208,8 +208,6 @@ fi
|
|||||||
echo "Prepend ${DOTNETSDK_INSTALLDIR} to %PATH%"
|
echo "Prepend ${DOTNETSDK_INSTALLDIR} to %PATH%"
|
||||||
export PATH=${DOTNETSDK_INSTALLDIR}:$PATH
|
export PATH=${DOTNETSDK_INSTALLDIR}:$PATH
|
||||||
|
|
||||||
heading "Github Dreamlifter Runner"
|
|
||||||
|
|
||||||
heading "Dotnet SDK Version"
|
heading "Dotnet SDK Version"
|
||||||
dotnet --version
|
dotnet --version
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user