mirror of
https://github.com/actions/setup-dotnet.git
synced 2024-11-25 21:03:06 +07:00
3447fd6a9f
* feat: cache NuGet global-packages folder * fix: remove unused files * docs: fix incorrect action * ci: add e2e test for cache * docs: accept suggested changes on README * docs: add simple cache example * build: change main script path * fix: change relative path to install scripts * fix: change relative path to problem matcher * refactor: accept changes on cache-utils * fix: revert main script path changes * test: fix cache-utils unit test * test: fix cache-utils unit test * feat: add `cache-dependency-path` variables * build: change main script dist path * ci: add `cache-dependency-path` e2e test & missing lock file * fix: accept change suggestions * ci: copy NuGet lock file to root to pass "test-setup-with-cache" e2e test * docs: change README guide * fix: apply suggestions from code review Co-authored-by: Ivan <98037481+IvanZosimov@users.noreply.github.com> * test: fix some failed unit tests - fix `restoreCache()` test for 9703c8 - update installer script * build: rebuild dist * Update unit-tests - Additional unit test were added to setup-dotnet.test.ts * Update unit tests for unix systems * Format and lint unit tests * fix: avoid use '/' on `path.join` * fix: rebuild dist * fix: apply suggestions from code review Co-authored-by: Ivan <98037481+IvanZosimov@users.noreply.github.com> * build: add `DisableImplicitNuGetFallbackFolder` option also add guide on README * docs: highlight warnings and notes * docs: update note about handling NU1403 --------- Co-authored-by: Ivan <98037481+IvanZosimov@users.noreply.github.com> Co-authored-by: IvanZosimov <ivanzosimov@github.com>
99 lines
2.7 KiB
TypeScript
99 lines
2.7 KiB
TypeScript
import * as cache from '@actions/cache';
|
|
import * as core from '@actions/core';
|
|
import * as exec from '@actions/exec';
|
|
|
|
import {cliCommand} from './constants';
|
|
|
|
type NuGetFolderName =
|
|
| 'http-cache'
|
|
| 'global-packages'
|
|
| 'temp'
|
|
| 'plugins-cache';
|
|
|
|
/**
|
|
* Get NuGet global packages, cache, and temp folders from .NET CLI.
|
|
* @returns (Folder Name)-(Path) mappings
|
|
* @see https://docs.microsoft.com/nuget/consume-packages/managing-the-global-packages-and-cache-folders
|
|
* @example
|
|
* Windows
|
|
* ```json
|
|
* {
|
|
* "http-cache": "C:\\Users\\user1\\AppData\\Local\\NuGet\\v3-cache",
|
|
* "global-packages": "C:\\Users\\user1\\.nuget\\packages\\",
|
|
* "temp": "C:\\Users\\user1\\AppData\\Local\\Temp\\NuGetScratch",
|
|
* "plugins-cache": "C:\\Users\\user1\\AppData\\Local\\NuGet\\plugins-cache"
|
|
* }
|
|
* ```
|
|
*
|
|
* Mac/Linux
|
|
* ```json
|
|
* {
|
|
* "http-cache": "/home/user1/.local/share/NuGet/v3-cache",
|
|
* "global-packages": "/home/user1/.nuget/packages/",
|
|
* "temp": "/tmp/NuGetScratch",
|
|
* "plugins-cache": "/home/user1/.local/share/NuGet/plugins-cache"
|
|
* }
|
|
* ```
|
|
*/
|
|
export const getNuGetFolderPath = async () => {
|
|
const {stdout, stderr, exitCode} = await exec.getExecOutput(
|
|
cliCommand,
|
|
undefined,
|
|
{ignoreReturnCode: true, silent: true}
|
|
);
|
|
|
|
if (exitCode) {
|
|
throw new Error(
|
|
!stderr.trim()
|
|
? `The '${cliCommand}' command failed with exit code: ${exitCode}`
|
|
: stderr
|
|
);
|
|
}
|
|
|
|
const result: Record<NuGetFolderName, string> = {
|
|
'http-cache': '',
|
|
'global-packages': '',
|
|
temp: '',
|
|
'plugins-cache': ''
|
|
};
|
|
|
|
const regex = /(?:^|\s)(?<key>[a-z-]+): (?<path>.+[/\\].+)$/gm;
|
|
|
|
let match: RegExpExecArray | null;
|
|
while ((match = regex.exec(stdout)) !== null) {
|
|
const key = match.groups!.key;
|
|
if ((key as NuGetFolderName) in result) {
|
|
result[key] = match.groups!.path;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
export function isCacheFeatureAvailable(): boolean {
|
|
if (cache.isFeatureAvailable()) {
|
|
return true;
|
|
}
|
|
|
|
if (isGhes()) {
|
|
core.warning(
|
|
'Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.'
|
|
);
|
|
return false;
|
|
}
|
|
core.warning(
|
|
'The runner was not able to contact the cache service. Caching will be skipped'
|
|
);
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Returns this action runs on GitHub Enterprise Server or not.
|
|
* (port from https://github.com/actions/toolkit/blob/457303960f03375db6f033e214b9f90d79c3fe5c/packages/cache/src/internal/cacheUtils.ts#L134)
|
|
*/
|
|
function isGhes(): boolean {
|
|
const url = process.env['GITHUB_SERVER_URL'] || 'https://github.com';
|
|
return new URL(url).hostname.toUpperCase() !== 'GITHUB.COM';
|
|
}
|