2019-09-09 10:27:23 -07:00
"use strict" ;
var __importStar = ( this && this . __importStar ) || function ( mod ) {
if ( mod && mod . __esModule ) return mod ;
var result = {};
if ( mod != null ) for ( var k in mod ) if ( Object . hasOwnProperty . call ( mod , k )) result [ k ] = mod [ k ];
result [ "default" ] = mod ;
return result ;
};
Object . defineProperty ( exports , "__esModule" , { value : true });
const fs = __importStar ( require ( "fs" ));
const path = __importStar ( require ( "path" ));
const core = __importStar ( require ( "@actions/core" ));
const github = __importStar ( require ( "@actions/github" ));
const xmlbuilder = __importStar ( require ( "xmlbuilder" ));
const xmlParser = __importStar ( require ( "fast-xml-parser" ));
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' );
writeFeedToFile ( feedUrl , existingNuGetConfig , tempNuGetConfig );
}
exports . configAuthentication = configAuthentication ;
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 } ` );
let xml ;
2019-10-03 17:29:20 -07:00
let sourceKeys = [];
2019-09-09 10:27:23 -07:00
let owner = core . getInput ( 'owner' );
2019-10-03 17:29:20 -07:00
let sourceUrl = feedUrl ;
if ( ! owner ) {
2019-09-09 10:27:23 -07:00
owner = github . context . repo . owner ;
}
2019-10-03 17:29:20 -07:00
if ( feedUrl . indexOf ( 'nuget.pkg.github.com' ) > - 1 ) {
2019-10-03 18:00:43 -07:00
sourceUrl = 'https://nuget.pkg.github.com/' + owner + '/index.json' ;
2019-10-03 17:29:20 -07:00
}
2019-09-09 10:27:23 -07:00
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}}' );
}
if ( fs . existsSync ( existingFileLocation )) {
// get key from existing NuGet.config so NuGet/dotnet can match credentials
const curContents = fs . readFileSync ( existingFileLocation , 'utf8' );
var json = xmlParser . parse ( curContents , { ignoreAttributes : false });
if ( typeof json . configuration == 'undefined' ) {
throw new Error ( `The provided NuGet.config seems invalid.` );
}
if ( typeof json . configuration . packageSources != 'undefined' ) {
if ( typeof json . configuration . packageSources . add != 'undefined' ) {
// file has at least one <add>
if ( typeof json . configuration . packageSources . add [ 0 ] == 'undefined' ) {
// file has only one <add>
if ( json . configuration . packageSources . add [ '@_value' ]
. toLowerCase ()
2019-10-03 17:29:20 -07:00
. includes ( feedUrl . toLowerCase ())) {
2019-09-09 10:27:23 -07:00
let key = json . configuration . packageSources . add [ '@_key' ];
2019-10-03 17:29:20 -07:00
sourceKeys . push ( key );
core . debug ( `Found a URL with key ${ key } ` );
2019-09-09 10:27:23 -07:00
}
}
else {
// file has 2+ <add>
for ( let i = 0 ; i < json . configuration . packageSources . add . length ; i ++ ) {
core . debug ( json . configuration . packageSources . add [ i ]);
if ( json . configuration . packageSources . add [ i ][ '@_value' ]
. toLowerCase ()
2019-10-03 17:29:20 -07:00
. includes ( feedUrl . toLowerCase ())) {
2019-09-09 10:27:23 -07:00
let key = json . configuration . packageSources . add [ i ][ '@_key' ];
2019-10-03 17:29:20 -07:00
sourceKeys . push ( key );
core . debug ( `Found a URL with key ${ key } ` );
2019-09-09 10:27:23 -07:00
}
}
}
}
}
}
xml = xmlbuilder
. create ( 'configuration' )
. ele ( 'config' )
. ele ( 'add' , { key : 'defaultPushSource' , value : sourceUrl })
. up ()
. up ();
2019-10-03 17:29:20 -07:00
if ( sourceKeys . length == 0 ) {
let keystring = 'Source' ;
2019-09-09 10:27:23 -07:00
xml = xml
. ele ( 'packageSources' )
. ele ( 'add' , { key : keystring , value : sourceUrl })
. up ()
. up ();
2019-10-03 17:29:20 -07:00
sourceKeys . push ( keystring );
2019-09-09 10:27:23 -07:00
}
2019-10-03 18:00:43 -07:00
xml = xml . ele ( 'packageSourceCredentials' );
2019-10-03 17:29:20 -07:00
sourceKeys . forEach ( key => {
2019-09-09 10:27:23 -07:00
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." );
}
2019-10-03 18:00:43 -07:00
xml = xml
. ele ( key )
2019-09-09 10:27:23 -07:00
. ele ( 'add' , { key : 'Username' , value : owner })
. up ()
. ele ( 'add' , {
key : 'ClearTextPassword' ,
value : process . env . NUGET_AUTH_TOKEN
})
. up ()
. up ();
});
// If NuGet fixes itself such that on Linux it can look for environment variables in the config file (it doesn't seem to work today),
// use this for the value above
// process.platform == 'win32'
// ? '%NUGET_AUTH_TOKEN%'
// : '$NUGET_AUTH_TOKEN'
var output = xml . end ({ pretty : true });
fs . writeFileSync ( tempFileLocation , output );
}