From 3569a93d9f0cc0a225f68bd30b5979e5097e382d Mon Sep 17 00:00:00 2001 From: Zachary Eisinger Date: Wed, 2 Sep 2020 11:11:56 -0700 Subject: [PATCH] Honor specified nuget file location (#109) * Honor specified nuget file location * Generate and verify nuget.config --- .github/workflows/workflow.yml | 10 ++++++ __tests__/authutil.test.ts | 58 +++++++++++++++++++++++++--------- __tests__/verify-dotnet.ps1 | 5 +++ __tests__/verify-dotnet.sh | 5 +++ dist/index.js | 6 ++-- src/authutil.ts | 8 +++-- 6 files changed, 71 insertions(+), 21 deletions(-) diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index ea946fd51..ec093eaa2 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -42,6 +42,10 @@ jobs: uses: ./ with: dotnet-version: 3.0.100 + # We are including this veriable to force the generation of the nuget config file to verify that it is created in the correct place + source-url: https://api.nuget.org/v3/index.json + env: + NUGET_AUTH_TOKEN: NOTATOKEN - name: Verify dotnet if: runner.os != 'windows' run: __tests__/verify-dotnet.sh 3.0.100 @@ -70,6 +74,9 @@ jobs: uses: ./ with: dotnet-version: 3.0.100 + source-url: https://api.nuget.org/v3/index.json + env: + NUGET_AUTH_TOKEN: NOTATOKEN - name: Verify dotnet run: __tests__/verify-dotnet.sh 3.0.100 @@ -87,5 +94,8 @@ jobs: uses: ./ with: dotnet-version: 3.0.100 + source-url: https://api.nuget.org/v3/index.json + env: + NUGET_AUTH_TOKEN: NOTATOKEN - name: Verify dotnet run: __tests__/verify-dotnet.sh 3.0.100 diff --git a/__tests__/authutil.test.ts b/__tests__/authutil.test.ts index 0ed596d53..cf0b52a79 100644 --- a/__tests__/authutil.test.ts +++ b/__tests__/authutil.test.ts @@ -75,7 +75,6 @@ const azureartifactsnugetorgNuGetConfig: string = ` { @@ -95,7 +94,9 @@ describe('authutil tests', () => { it('No existing config, sets up a full NuGet.config with URL and user/PAT for GPR', async () => { process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; await auth.configAuthentication( - 'https://nuget.pkg.github.com/OwnerName/index.json' + 'https://nuget.pkg.github.com/OwnerName/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -107,7 +108,9 @@ describe('authutil tests', () => { let thrown = false; try { await auth.configAuthentication( - 'https://nuget.pkg.github.com/OwnerName/index.json' + 'https://nuget.pkg.github.com/OwnerName/index.json', + '', + fakeSourcesDirForTesting ); } catch { thrown = true; @@ -119,7 +122,9 @@ describe('authutil tests', () => { process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['INPUT_OWNER'] = 'otherorg'; await auth.configAuthentication( - 'https://nuget.pkg.github.com/otherorg/index.json' + 'https://nuget.pkg.github.com/otherorg/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -137,7 +142,9 @@ describe('authutil tests', () => { let thrown = false; try { await auth.configAuthentication( - 'https://nuget.pkg.github.com/OwnerName/index.json' + 'https://nuget.pkg.github.com/OwnerName/index.json', + '', + fakeSourcesDirForTesting ); } catch { thrown = true; @@ -153,7 +160,9 @@ describe('authutil tests', () => { ); fs.writeFileSync(inputNuGetConfigPath, emptyNuGetConfig); await auth.configAuthentication( - 'https://nuget.pkg.github.com/OwnerName/index.json' + 'https://nuget.pkg.github.com/OwnerName/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -169,7 +178,9 @@ describe('authutil tests', () => { ); fs.writeFileSync(inputNuGetConfigPath, nugetorgNuGetConfig); await auth.configAuthentication( - 'https://nuget.pkg.github.com/OwnerName/index.json' + 'https://nuget.pkg.github.com/OwnerName/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -185,7 +196,9 @@ describe('authutil tests', () => { ); fs.writeFileSync(inputNuGetConfigPath, gprNuGetConfig); await auth.configAuthentication( - 'https://nuget.pkg.github.com/OwnerName/index.json' + 'https://nuget.pkg.github.com/OwnerName/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -201,7 +214,9 @@ describe('authutil tests', () => { ); fs.writeFileSync(inputNuGetConfigPath, gprnugetorgNuGetConfig); await auth.configAuthentication( - 'https://nuget.pkg.github.com/OwnerName/index.json' + 'https://nuget.pkg.github.com/OwnerName/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -216,7 +231,11 @@ describe('authutil tests', () => { 'nuget.config' ); fs.writeFileSync(inputNuGetConfigPath, twogprNuGetConfig); - await auth.configAuthentication('https://nuget.pkg.github.com'); + await auth.configAuthentication( + 'https://nuget.pkg.github.com', + '', + fakeSourcesDirForTesting + ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( fs.readFileSync(nugetConfigFile, {encoding: 'utf8'}) @@ -233,7 +252,9 @@ describe('authutil tests', () => { let thrown = false; try { await auth.configAuthentication( - 'https://nuget.pkg.github.com/OwnerName/index.json' + 'https://nuget.pkg.github.com/OwnerName/index.json', + '', + fakeSourcesDirForTesting ); } catch { thrown = true; @@ -255,7 +276,8 @@ describe('authutil tests', () => { fs.writeFileSync(inputNuGetConfigPath, gprNuGetConfig); await auth.configAuthentication( 'https://nuget.pkg.github.com/OwnerName/index.json', - 'subfolder/nuget.config' + 'subfolder/nuget.config', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -271,7 +293,9 @@ describe('authutil tests', () => { ); fs.writeFileSync(inputNuGetConfigPath, azureartifactsNuGetConfig); await auth.configAuthentication( - 'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json' + 'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -287,7 +311,9 @@ describe('authutil tests', () => { ); fs.writeFileSync(inputNuGetConfigPath, azureartifactsnugetorgNuGetConfig); await auth.configAuthentication( - 'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json' + 'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( @@ -298,7 +324,9 @@ describe('authutil tests', () => { it('No existing config, sets up a full NuGet.config with URL and token for other source', async () => { process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; await auth.configAuthentication( - 'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json' + 'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json', + '', + fakeSourcesDirForTesting ); expect(fs.existsSync(nugetConfigFile)).toBe(true); expect( diff --git a/__tests__/verify-dotnet.ps1 b/__tests__/verify-dotnet.ps1 index d3f03034b..3bf68cad2 100755 --- a/__tests__/verify-dotnet.ps1 +++ b/__tests__/verify-dotnet.ps1 @@ -3,6 +3,11 @@ if (!$args[0]) throw "Must supply dotnet version argument" } +if (-Not (Test-Path "../nuget.config")) +{ + throw "nuget file not generated correctly" +} + $dotnet = Get-Command dotnet | Select-Object -First 1 | ForEach-Object { $_.Path } Write-Host "Found '$dotnet'" diff --git a/__tests__/verify-dotnet.sh b/__tests__/verify-dotnet.sh index f314c9a37..21d02b163 100755 --- a/__tests__/verify-dotnet.sh +++ b/__tests__/verify-dotnet.sh @@ -3,6 +3,11 @@ if [ -z "$1" ]; then exit 1 fi +if [ ! -f "../nuget.config" ]; then + echo "nuget file not generated correctly" + exit 1 +fi + dotnet_version="$(dotnet --version)" echo "Found dotnet version '$dotnet_version'" if [ -z "$(echo $dotnet_version | grep $1)" ]; then diff --git a/dist/index.js b/dist/index.js index d43543bb6..831f219e9 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4964,9 +4964,9 @@ const core = __importStar(__webpack_require__(470)); const github = __importStar(__webpack_require__(469)); const xmlbuilder = __importStar(__webpack_require__(312)); const xmlParser = __importStar(__webpack_require__(989)); -function configAuthentication(feedUrl, existingFileLocation = '') { - const existingNuGetConfig = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), existingFileLocation == '' ? 'nuget.config' : existingFileLocation); - const tempNuGetConfig = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '../', 'nuget.config'); +function configAuthentication(feedUrl, existingFileLocation = '', processRoot = process.cwd()) { + const existingNuGetConfig = path.resolve(processRoot, existingFileLocation == '' ? 'nuget.config' : existingFileLocation); + const tempNuGetConfig = path.resolve(processRoot, '../', 'nuget.config'); writeFeedToFile(feedUrl, existingNuGetConfig, tempNuGetConfig); } exports.configAuthentication = configAuthentication; diff --git a/src/authutil.ts b/src/authutil.ts index 69f375015..463f0d3fb 100644 --- a/src/authutil.ts +++ b/src/authutil.ts @@ -4,18 +4,20 @@ import * as core from '@actions/core'; import * as github from '@actions/github'; import * as xmlbuilder from 'xmlbuilder'; import * as xmlParser from 'fast-xml-parser'; +import {ProcessEnvOptions} from 'child_process'; export function configAuthentication( feedUrl: string, - existingFileLocation: string = '' + existingFileLocation: string = '', + processRoot: string = process.cwd() ) { const existingNuGetConfig: string = path.resolve( - process.env['RUNNER_TEMP'] || process.cwd(), + processRoot, existingFileLocation == '' ? 'nuget.config' : existingFileLocation ); const tempNuGetConfig: string = path.resolve( - process.env['RUNNER_TEMP'] || process.cwd(), + processRoot, '../', 'nuget.config' );