diff --git a/README.md b/README.md index 5891a7b..a8656e0 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,16 @@ steps: include-prerelease: true - run: dotnet build ``` +global.json in a subdirectory: +```yml +steps: +- uses: actions/checkout@v3 +- uses: actions/setup-dotnet@v2 + with: + global-json-file: csharp/global.json +- run: dotnet build + working-directory: csharp +``` Matrix Testing: ```yaml diff --git a/action.yml b/action.yml index 7a8471e..b81aa4d 100644 --- a/action.yml +++ b/action.yml @@ -7,6 +7,8 @@ branding: inputs: dotnet-version: description: 'Optional SDK version(s) to use. If not provided, will install global.json version when available. Examples: 2.2.104, 3.1, 3.1.x' + global-json-file: + description: 'Optional global.json location, if your global.json it''t located in the root of the repo.' source-url: description: 'Optional package source for which to set up authentication. Will consult any existing NuGet.config in the root of the repo and provide a temporary NuGet.config using the NUGET_AUTH_TOKEN environment variable as a ClearTextPassword' owner: diff --git a/dist/index.js b/dist/index.js index 3d48ec6..724cad8 100644 --- a/dist/index.js +++ b/dist/index.js @@ -9115,11 +9115,21 @@ function run() { // // dotnet-version is optional, but needs to be provided for most use cases. // If supplied, install / use from the tool cache. + // global-version-file may be specified to point to a specific global.json + // and will be used to install an additional version. // If not supplied, look for version in ./global.json. // If a valid version still can't be identified, nothing will be installed. // Proxy, auth, (etc) are still set up, even if no version is identified // let versions = core.getMultilineInput('dotnet-version'); + const globalJsonFileInput = core.getInput('global-json-file'); + if (globalJsonFileInput) { + const globalJsonPath = path.join(process.cwd(), globalJsonFileInput); + if (!fs.existsSync(globalJsonPath)) { + throw new Error(`The specified global.json file '${globalJsonFileInput}' does not exist`); + } + versions.push(getVersionFromGlobalJson(globalJsonPath)); + } if (!versions.length) { // Try to fall back to global.json core.debug('No version found, trying to find version from global.json'); diff --git a/src/setup-dotnet.ts b/src/setup-dotnet.ts index 65c9893..64f3149 100644 --- a/src/setup-dotnet.ts +++ b/src/setup-dotnet.ts @@ -9,11 +9,25 @@ export async function run() { // // dotnet-version is optional, but needs to be provided for most use cases. // If supplied, install / use from the tool cache. + // global-version-file may be specified to point to a specific global.json + // and will be used to install an additional version. // If not supplied, look for version in ./global.json. // If a valid version still can't be identified, nothing will be installed. // Proxy, auth, (etc) are still set up, even if no version is identified // let versions = core.getMultilineInput('dotnet-version'); + + const globalJsonFileInput = core.getInput('global-json-file'); + if (globalJsonFileInput) { + const globalJsonPath = path.join(process.cwd(), globalJsonFileInput); + if (!fs.existsSync(globalJsonPath)) { + throw new Error( + `The specified global.json file '${globalJsonFileInput}' does not exist` + ); + } + versions.push(getVersionFromGlobalJson(globalJsonPath)); + } + if (!versions.length) { // Try to fall back to global.json core.debug('No version found, trying to find version from global.json');