Support for non-GPR sources

This commit is contained in:
Alex Mullans 2019-10-03 17:29:20 -07:00
parent 6bd4969ec6
commit 70528ac007
6 changed files with 203 additions and 65 deletions

View File

@ -15,6 +15,21 @@ exports[`authutil tests Existing config not in repo root, sets up a partial NuGe
</configuration>" </configuration>"
`; `;
exports[`authutil tests Existing config w/ Azure Artifacts source and NuGet.org, sets up a partial NuGet.config user/PAT for GPR 1`] = `
"<?xml version=\\"1.0\\"?>
<configuration>
<config>
<add key=\\"defaultPushSource\\" value=\\"https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json\\"/>
</config>
<packageSourceCredentials>
<AzureArtifacts>
<add key=\\"Username\\" value=\\"OwnerName\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
</AzureArtifacts>
</packageSourceCredentials>
</configuration>"
`;
exports[`authutil tests Existing config w/ GPR source and NuGet.org, sets up a partial NuGet.config user/PAT for GPR 1`] = ` exports[`authutil tests Existing config w/ GPR source and NuGet.org, sets up a partial NuGet.config user/PAT for GPR 1`] = `
"<?xml version=\\"1.0\\"?> "<?xml version=\\"1.0\\"?>
<configuration> <configuration>
@ -37,13 +52,13 @@ exports[`authutil tests Existing config w/ no GPR sources, sets up a full NuGet.
<add key=\\"defaultPushSource\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/> <add key=\\"defaultPushSource\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/>
</config> </config>
<packageSources> <packageSources>
<add key=\\"GPR\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/> <add key=\\"Source\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/>
</packageSources> </packageSources>
<packageSourceCredentials> <packageSourceCredentials>
<GPR> <Source>
<add key=\\"Username\\" value=\\"OwnerName\\"/> <add key=\\"Username\\" value=\\"OwnerName\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/> <add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
</GPR> </Source>
</packageSourceCredentials> </packageSourceCredentials>
</configuration>" </configuration>"
`; `;
@ -55,13 +70,28 @@ exports[`authutil tests Existing config w/ no sources, sets up a full NuGet.conf
<add key=\\"defaultPushSource\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/> <add key=\\"defaultPushSource\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/>
</config> </config>
<packageSources> <packageSources>
<add key=\\"GPR\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/> <add key=\\"Source\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/>
</packageSources> </packageSources>
<packageSourceCredentials> <packageSourceCredentials>
<GPR> <Source>
<add key=\\"Username\\" value=\\"OwnerName\\"/> <add key=\\"Username\\" value=\\"OwnerName\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/> <add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
</GPR> </Source>
</packageSourceCredentials>
</configuration>"
`;
exports[`authutil tests Existing config w/ only Azure Artifacts source, sets up a partial NuGet.config user/PAT for GPR 1`] = `
"<?xml version=\\"1.0\\"?>
<configuration>
<config>
<add key=\\"defaultPushSource\\" value=\\"https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json\\"/>
</config>
<packageSourceCredentials>
<AzureArtifacts>
<add key=\\"Username\\" value=\\"OwnerName\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
</AzureArtifacts>
</packageSourceCredentials> </packageSourceCredentials>
</configuration>" </configuration>"
`; `;
@ -92,12 +122,10 @@ exports[`authutil tests Existing config w/ two GPR sources, sets up a partial Nu
<add key=\\"Username\\" value=\\"OwnerName\\"/> <add key=\\"Username\\" value=\\"OwnerName\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/> <add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
</GPR-GitHub> </GPR-GitHub>
<packageSourceCredentials> <GPR-Actions>
<GPR-Actions> <add key=\\"Username\\" value=\\"OwnerName\\"/>
<add key=\\"Username\\" value=\\"OwnerName\\"/> <add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/> </GPR-Actions>
</GPR-Actions>
</packageSourceCredentials>
</packageSourceCredentials> </packageSourceCredentials>
</configuration>" </configuration>"
`; `;
@ -109,13 +137,31 @@ exports[`authutil tests No existing config, sets up a full NuGet.config with URL
<add key=\\"defaultPushSource\\" value=\\"https://nuget.pkg.github.com/otherorg\\"/> <add key=\\"defaultPushSource\\" value=\\"https://nuget.pkg.github.com/otherorg\\"/>
</config> </config>
<packageSources> <packageSources>
<add key=\\"GPR\\" value=\\"https://nuget.pkg.github.com/otherorg\\"/> <add key=\\"Source\\" value=\\"https://nuget.pkg.github.com/otherorg\\"/>
</packageSources> </packageSources>
<packageSourceCredentials> <packageSourceCredentials>
<GPR> <Source>
<add key=\\"Username\\" value=\\"otherorg\\"/> <add key=\\"Username\\" value=\\"otherorg\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/> <add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
</GPR> </Source>
</packageSourceCredentials>
</configuration>"
`;
exports[`authutil tests No existing config, sets up a full NuGet.config with URL and token for other source 1`] = `
"<?xml version=\\"1.0\\"?>
<configuration>
<config>
<add key=\\"defaultPushSource\\" value=\\"https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json\\"/>
</config>
<packageSources>
<add key=\\"Source\\" value=\\"https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json\\"/>
</packageSources>
<packageSourceCredentials>
<Source>
<add key=\\"Username\\" value=\\"OwnerName\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
</Source>
</packageSourceCredentials> </packageSourceCredentials>
</configuration>" </configuration>"
`; `;
@ -127,13 +173,13 @@ exports[`authutil tests No existing config, sets up a full NuGet.config with URL
<add key=\\"defaultPushSource\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/> <add key=\\"defaultPushSource\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/>
</config> </config>
<packageSources> <packageSources>
<add key=\\"GPR\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/> <add key=\\"Source\\" value=\\"https://nuget.pkg.github.com/OwnerName\\"/>
</packageSources> </packageSources>
<packageSourceCredentials> <packageSourceCredentials>
<GPR> <Source>
<add key=\\"Username\\" value=\\"OwnerName\\"/> <add key=\\"Username\\" value=\\"OwnerName\\"/>
<add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/> <add key=\\"ClearTextPassword\\" value=\\"TEST_FAKE_AUTH_TOKEN\\"/>
</GPR> </Source>
</packageSourceCredentials> </packageSourceCredentials>
</configuration>" </configuration>"
`; `;

View File

@ -2,7 +2,7 @@ import io = require('@actions/io');
import fs = require('fs'); import fs = require('fs');
import path = require('path'); import path = require('path');
const tempDir = path.join( const fakeSourcesDirForTesting = path.join(
__dirname, __dirname,
'runner', 'runner',
path.join( path.join(
@ -10,7 +10,7 @@ const tempDir = path.join(
.toString(36) .toString(36)
.substring(7) .substring(7)
), ),
'temp' 's'
); );
const invalidNuGetConfig: string = `<?xml version="1.0" encoding="utf-8"?>`; const invalidNuGetConfig: string = `<?xml version="1.0" encoding="utf-8"?>`;
@ -56,16 +56,32 @@ const spaceNuGetConfig: string = `<?xml version="1.0" encoding="utf-8"?>
</packageSources> </packageSources>
</configuration>`; </configuration>`;
const nugetConfigFile = path.join(tempDir, '../nuget.config'); const azureartifactsNuGetConfig: string = `<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="AzureArtifacts" value="https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>`;
const azureartifactsnugetorgNuGetConfig: string = `<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="AzureArtifacts" value="https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json" protocolVersion="3" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>`;
// We want a NuGet.config one level above the sources directory, so it doesn't trample a user's NuGet.config but is still picked up by NuGet/dotnet.
const nugetConfigFile = path.join(fakeSourcesDirForTesting, '../nuget.config');
process.env['GITHUB_REPOSITORY'] = 'OwnerName/repo'; process.env['GITHUB_REPOSITORY'] = 'OwnerName/repo';
process.env['RUNNER_TEMP'] = tempDir; process.env['RUNNER_TEMP'] = fakeSourcesDirForTesting;
import * as auth from '../src/authutil'; import * as auth from '../src/authutil';
describe('authutil tests', () => { describe('authutil tests', () => {
beforeAll(async () => { beforeEach(async () => {
await io.rmRF(tempDir); await io.rmRF(fakeSourcesDirForTesting);
await io.mkdirP(tempDir); await io.mkdirP(fakeSourcesDirForTesting);
}, 100000); }, 100000);
beforeEach(() => { beforeEach(() => {
@ -107,7 +123,10 @@ describe('authutil tests', () => {
it('Existing config (invalid), tries to parse an invalid NuGet.config and throws', async () => { it('Existing config (invalid), tries to parse an invalid NuGet.config and throws', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(tempDir, 'nuget.config'); const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, invalidNuGetConfig); fs.writeFileSync(inputNuGetConfigPath, invalidNuGetConfig);
let thrown = false; let thrown = false;
try { try {
@ -120,7 +139,10 @@ describe('authutil tests', () => {
it('Existing config w/ no sources, sets up a full NuGet.config with URL and user/PAT for GPR', async () => { it('Existing config w/ no sources, sets up a full NuGet.config with URL and user/PAT for GPR', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(tempDir, 'nuget.config'); const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, emptyNuGetConfig); fs.writeFileSync(inputNuGetConfigPath, emptyNuGetConfig);
await auth.configAuthentication('https://nuget.pkg.github.com'); await auth.configAuthentication('https://nuget.pkg.github.com');
expect(fs.existsSync(nugetConfigFile)).toBe(true); expect(fs.existsSync(nugetConfigFile)).toBe(true);
@ -131,7 +153,10 @@ describe('authutil tests', () => {
it('Existing config w/ no GPR sources, sets up a full NuGet.config with URL and user/PAT for GPR', async () => { it('Existing config w/ no GPR sources, sets up a full NuGet.config with URL and user/PAT for GPR', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(tempDir, 'nuget.config'); const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, nugetorgNuGetConfig); fs.writeFileSync(inputNuGetConfigPath, nugetorgNuGetConfig);
await auth.configAuthentication('https://nuget.pkg.github.com'); await auth.configAuthentication('https://nuget.pkg.github.com');
expect(fs.existsSync(nugetConfigFile)).toBe(true); expect(fs.existsSync(nugetConfigFile)).toBe(true);
@ -142,7 +167,10 @@ describe('authutil tests', () => {
it('Existing config w/ only GPR source, sets up a partial NuGet.config user/PAT for GPR', async () => { it('Existing config w/ only GPR source, sets up a partial NuGet.config user/PAT for GPR', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(tempDir, 'nuget.config'); const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, gprNuGetConfig); fs.writeFileSync(inputNuGetConfigPath, gprNuGetConfig);
await auth.configAuthentication('https://nuget.pkg.github.com'); await auth.configAuthentication('https://nuget.pkg.github.com');
expect(fs.existsSync(nugetConfigFile)).toBe(true); expect(fs.existsSync(nugetConfigFile)).toBe(true);
@ -153,7 +181,10 @@ describe('authutil tests', () => {
it('Existing config w/ GPR source and NuGet.org, sets up a partial NuGet.config user/PAT for GPR', async () => { it('Existing config w/ GPR source and NuGet.org, sets up a partial NuGet.config user/PAT for GPR', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(tempDir, 'nuget.config'); const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, gprnugetorgNuGetConfig); fs.writeFileSync(inputNuGetConfigPath, gprnugetorgNuGetConfig);
await auth.configAuthentication('https://nuget.pkg.github.com'); await auth.configAuthentication('https://nuget.pkg.github.com');
expect(fs.existsSync(nugetConfigFile)).toBe(true); expect(fs.existsSync(nugetConfigFile)).toBe(true);
@ -164,7 +195,10 @@ describe('authutil tests', () => {
it('Existing config w/ two GPR sources, sets up a partial NuGet.config user/PAT for GPR', async () => { it('Existing config w/ two GPR sources, sets up a partial NuGet.config user/PAT for GPR', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(tempDir, 'nuget.config'); const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, twogprNuGetConfig); fs.writeFileSync(inputNuGetConfigPath, twogprNuGetConfig);
await auth.configAuthentication('https://nuget.pkg.github.com'); await auth.configAuthentication('https://nuget.pkg.github.com');
expect(fs.existsSync(nugetConfigFile)).toBe(true); expect(fs.existsSync(nugetConfigFile)).toBe(true);
@ -175,7 +209,10 @@ describe('authutil tests', () => {
it('Existing config w/ spaces in key, throws for now', async () => { it('Existing config w/ spaces in key, throws for now', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(tempDir, 'nuget.config'); const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, spaceNuGetConfig); fs.writeFileSync(inputNuGetConfigPath, spaceNuGetConfig);
let thrown = false; let thrown = false;
try { try {
@ -188,7 +225,10 @@ describe('authutil tests', () => {
it('Existing config not in repo root, sets up a partial NuGet.config user/PAT for GPR', async () => { it('Existing config not in repo root, sets up a partial NuGet.config user/PAT for GPR', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN'; process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigDirectory: string = path.join(tempDir, 'subfolder'); const inputNuGetConfigDirectory: string = path.join(
fakeSourcesDirForTesting,
'subfolder'
);
const inputNuGetConfigPath: string = path.join( const inputNuGetConfigPath: string = path.join(
inputNuGetConfigDirectory, inputNuGetConfigDirectory,
'nuget.config' 'nuget.config'
@ -204,4 +244,47 @@ describe('authutil tests', () => {
fs.readFileSync(nugetConfigFile, {encoding: 'utf8'}) fs.readFileSync(nugetConfigFile, {encoding: 'utf8'})
).toMatchSnapshot(); ).toMatchSnapshot();
}); });
it('Existing config w/ only Azure Artifacts source, sets up a partial NuGet.config user/PAT for GPR', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, azureartifactsNuGetConfig);
await auth.configAuthentication(
'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json'
);
expect(fs.existsSync(nugetConfigFile)).toBe(true);
expect(
fs.readFileSync(nugetConfigFile, {encoding: 'utf8'})
).toMatchSnapshot();
});
it('Existing config w/ Azure Artifacts source and NuGet.org, sets up a partial NuGet.config user/PAT for GPR', async () => {
process.env['NUGET_AUTH_TOKEN'] = 'TEST_FAKE_AUTH_TOKEN';
const inputNuGetConfigPath: string = path.join(
fakeSourcesDirForTesting,
'nuget.config'
);
fs.writeFileSync(inputNuGetConfigPath, azureartifactsnugetorgNuGetConfig);
await auth.configAuthentication(
'https://pkgs.dev.azure.com/amullans/_packaging/GitHubBuilds/nuget/v3/index.json'
);
expect(fs.existsSync(nugetConfigFile)).toBe(true);
expect(
fs.readFileSync(nugetConfigFile, {encoding: 'utf8'})
).toMatchSnapshot();
});
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'
);
expect(fs.existsSync(nugetConfigFile)).toBe(true);
expect(
fs.readFileSync(nugetConfigFile, {encoding: 'utf8'})
).toMatchSnapshot();
});
}); });

View File

@ -22,12 +22,15 @@ exports.configAuthentication = configAuthentication;
function writeFeedToFile(feedUrl, existingFileLocation, tempFileLocation) { function writeFeedToFile(feedUrl, existingFileLocation, tempFileLocation) {
console.log(`dotnet-auth: Finding any source references in ${existingFileLocation}, writing a new temporary configuration file with credentials to ${tempFileLocation}`); console.log(`dotnet-auth: Finding any source references in ${existingFileLocation}, writing a new temporary configuration file with credentials to ${tempFileLocation}`);
let xml; let xml;
let gprKeys = []; let sourceKeys = [];
let owner = core.getInput('owner'); let owner = core.getInput('owner');
if (!owner && feedUrl.indexOf('nuget.pkg.github.com') > -1) { let sourceUrl = feedUrl;
if (!owner) {
owner = github.context.repo.owner; owner = github.context.repo.owner;
} }
let sourceUrl = 'https://nuget.pkg.github.com/' + owner; if (feedUrl.indexOf('nuget.pkg.github.com') > -1) {
sourceUrl = 'https://nuget.pkg.github.com/' + owner;
}
if (!process.env.NUGET_AUTH_TOKEN || process.env.NUGET_AUTH_TOKEN == '') { if (!process.env.NUGET_AUTH_TOKEN || process.env.NUGET_AUTH_TOKEN == '') {
throw new Error('The NUGET_AUTH_TOKEN environment variable was not provided. In this step, add the following: \r\nenv:\r\n NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}'); throw new Error('The NUGET_AUTH_TOKEN environment variable was not provided. In this step, add the following: \r\nenv:\r\n NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}');
} }
@ -45,10 +48,10 @@ function writeFeedToFile(feedUrl, existingFileLocation, tempFileLocation) {
// file has only one <add> // file has only one <add>
if (json.configuration.packageSources.add['@_value'] if (json.configuration.packageSources.add['@_value']
.toLowerCase() .toLowerCase()
.includes('nuget.pkg.github.com')) { .includes(feedUrl.toLowerCase())) {
let key = json.configuration.packageSources.add['@_key']; let key = json.configuration.packageSources.add['@_key'];
gprKeys.push(key); sourceKeys.push(key);
core.debug(`Found a GPR URL with key ${key}`); core.debug(`Found a URL with key ${key}`);
} }
} }
else { else {
@ -57,10 +60,10 @@ function writeFeedToFile(feedUrl, existingFileLocation, tempFileLocation) {
core.debug(json.configuration.packageSources.add[i]); core.debug(json.configuration.packageSources.add[i]);
if (json.configuration.packageSources.add[i]['@_value'] if (json.configuration.packageSources.add[i]['@_value']
.toLowerCase() .toLowerCase()
.includes('nuget.pkg.github.com')) { .includes(feedUrl.toLowerCase())) {
let key = json.configuration.packageSources.add[i]['@_key']; let key = json.configuration.packageSources.add[i]['@_key'];
gprKeys.push(key); sourceKeys.push(key);
core.debug(`Found a GPR URL with key ${key}`); core.debug(`Found a URL with key ${key}`);
} }
} }
} }
@ -73,22 +76,22 @@ function writeFeedToFile(feedUrl, existingFileLocation, tempFileLocation) {
.ele('add', { key: 'defaultPushSource', value: sourceUrl }) .ele('add', { key: 'defaultPushSource', value: sourceUrl })
.up() .up()
.up(); .up();
if (gprKeys.length == 0) { if (sourceKeys.length == 0) {
let keystring = 'GPR'; let keystring = 'Source';
xml = xml xml = xml
.ele('packageSources') .ele('packageSources')
.ele('add', { key: keystring, value: sourceUrl }) .ele('add', { key: keystring, value: sourceUrl })
.up() .up()
.up(); .up();
gprKeys.push(keystring); sourceKeys.push(keystring);
} }
gprKeys.forEach(key => { xml = xml
.ele('packageSourceCredentials');
sourceKeys.forEach(key => {
if (key.indexOf(' ') > -1) { if (key.indexOf(' ') > -1) {
throw new Error("This action currently can't handle source names with spaces. Remove the space from your repo's NuGet.config and try again."); throw new Error("This action currently can't handle source names with spaces. Remove the space from your repo's NuGet.config and try again.");
} }
xml = xml xml = xml.ele(key)
.ele('packageSourceCredentials')
.ele(key)
.ele('add', { key: 'Username', value: owner }) .ele('add', { key: 'Username', value: owner })
.up() .up()
.ele('add', { .ele('add', {

View File

@ -35,8 +35,9 @@ function run() {
yield dotnetInstaller.installDotnet(); yield dotnetInstaller.installDotnet();
} }
const sourceUrl = core.getInput('source-url'); const sourceUrl = core.getInput('source-url');
const configFile = core.getInput('config-file');
if (sourceUrl) { if (sourceUrl) {
auth.configAuthentication(sourceUrl); auth.configAuthentication(sourceUrl, configFile);
} }
// TODO: setup proxy from runner proxy config // TODO: setup proxy from runner proxy config
const matchersPath = path.join(__dirname, '..', '.github'); const matchersPath = path.join(__dirname, '..', '.github');

View File

@ -34,12 +34,15 @@ function writeFeedToFile(
`dotnet-auth: Finding any source references in ${existingFileLocation}, writing a new temporary configuration file with credentials to ${tempFileLocation}` `dotnet-auth: Finding any source references in ${existingFileLocation}, writing a new temporary configuration file with credentials to ${tempFileLocation}`
); );
let xml: xmlbuilder.XMLElement; let xml: xmlbuilder.XMLElement;
let gprKeys: string[] = []; let sourceKeys: string[] = [];
let owner: string = core.getInput('owner'); let owner: string = core.getInput('owner');
if (!owner && feedUrl.indexOf('nuget.pkg.github.com') > -1) { let sourceUrl: string = feedUrl;
if (!owner) {
owner = github.context.repo.owner; owner = github.context.repo.owner;
} }
let sourceUrl: string = 'https://nuget.pkg.github.com/' + owner; if (feedUrl.indexOf('nuget.pkg.github.com') > -1) {
sourceUrl = 'https://nuget.pkg.github.com/' + owner;
}
if (!process.env.NUGET_AUTH_TOKEN || process.env.NUGET_AUTH_TOKEN == '') { if (!process.env.NUGET_AUTH_TOKEN || process.env.NUGET_AUTH_TOKEN == '') {
throw new Error( throw new Error(
@ -63,11 +66,11 @@ function writeFeedToFile(
if ( if (
json.configuration.packageSources.add['@_value'] json.configuration.packageSources.add['@_value']
.toLowerCase() .toLowerCase()
.includes('nuget.pkg.github.com') .includes(feedUrl.toLowerCase())
) { ) {
let key = json.configuration.packageSources.add['@_key']; let key = json.configuration.packageSources.add['@_key'];
gprKeys.push(key); sourceKeys.push(key);
core.debug(`Found a GPR URL with key ${key}`); core.debug(`Found a URL with key ${key}`);
} }
} else { } else {
// file has 2+ <add> // file has 2+ <add>
@ -80,11 +83,11 @@ function writeFeedToFile(
if ( if (
json.configuration.packageSources.add[i]['@_value'] json.configuration.packageSources.add[i]['@_value']
.toLowerCase() .toLowerCase()
.includes('nuget.pkg.github.com') .includes(feedUrl.toLowerCase())
) { ) {
let key = json.configuration.packageSources.add[i]['@_key']; let key = json.configuration.packageSources.add[i]['@_key'];
gprKeys.push(key); sourceKeys.push(key);
core.debug(`Found a GPR URL with key ${key}`); core.debug(`Found a URL with key ${key}`);
} }
} }
} }
@ -99,16 +102,18 @@ function writeFeedToFile(
.up() .up()
.up(); .up();
if (gprKeys.length == 0) { if (sourceKeys.length == 0) {
let keystring = 'GPR'; let keystring = 'Source';
xml = xml xml = xml
.ele('packageSources') .ele('packageSources')
.ele('add', {key: keystring, value: sourceUrl}) .ele('add', {key: keystring, value: sourceUrl})
.up() .up()
.up(); .up();
gprKeys.push(keystring); sourceKeys.push(keystring);
} }
gprKeys.forEach(key => { xml = xml.ele('packageSourceCredentials');
sourceKeys.forEach(key => {
if (key.indexOf(' ') > -1) { if (key.indexOf(' ') > -1) {
throw new Error( throw new Error(
"This action currently can't handle source names with spaces. Remove the space from your repo's NuGet.config and try again." "This action currently can't handle source names with spaces. Remove the space from your repo's NuGet.config and try again."
@ -116,7 +121,6 @@ function writeFeedToFile(
} }
xml = xml xml = xml
.ele('packageSourceCredentials')
.ele(key) .ele(key)
.ele('add', {key: 'Username', value: owner}) .ele('add', {key: 'Username', value: owner})
.up() .up()

View File

@ -19,8 +19,9 @@ async function run() {
} }
const sourceUrl: string = core.getInput('source-url'); const sourceUrl: string = core.getInput('source-url');
const configFile: string = core.getInput('config-file');
if (sourceUrl) { if (sourceUrl) {
auth.configAuthentication(sourceUrl); auth.configAuthentication(sourceUrl, configFile);
} }
// TODO: setup proxy from runner proxy config // TODO: setup proxy from runner proxy config