2020-05-19 09:25:54 -04:00
import * as core from '@actions/core' ;
import * as installer from './installer' ;
2021-10-07 16:42:34 +00:00
import fs from 'fs' ;
2021-10-06 16:40:36 +00:00
import * as auth from './authutil' ;
2020-05-19 09:25:54 -04:00
import * as path from 'path' ;
2021-06-16 09:52:44 +03:00
import { restoreCache } from './cache-restore' ;
2020-05-19 09:25:54 -04:00
import { URL } from 'url' ;
2021-10-07 16:46:55 +00:00
import os from 'os' ;
2020-05-19 09:25:54 -04:00
export async function run() {
try {
//
// Version is optional. If supplied, install / use from the tool cache
// If not supplied then task is still used to setup proxy, auth, etc...
//
let version = core . getInput ( 'node-version' ) ;
if ( ! version ) {
version = core . getInput ( 'version' ) ;
2021-10-06 16:40:36 +00:00
if ( ! version ) {
const versionFile = core . getInput ( 'node-version-file' ) ;
2020-11-01 17:04:22 -05:00
2021-10-06 16:40:36 +00:00
if ( ! ! versionFile ) {
2021-10-07 17:22:47 +00:00
const versionFilePath = path . join (
process . env . GITHUB_WORKSPACE ! ,
versionFile
) ;
2021-10-07 16:31:14 +00:00
version = installer . parseNodeVersionFile (
2021-10-06 16:40:36 +00:00
fs . readFileSync ( versionFilePath , 'utf8' )
) ;
core . info ( ` Resolved ${ versionFile } as ${ version } ` ) ;
}
2020-11-01 17:04:22 -05:00
}
2021-10-06 16:40:36 +00:00
}
2020-09-06 11:09:41 -05:00
2021-10-06 16:40:36 +00:00
let arch = core . getInput ( 'architecture' ) ;
const cache = core . getInput ( 'cache' ) ;
2020-09-06 11:09:41 -05:00
2021-10-06 16:40:36 +00:00
// if architecture supplied but node-version is not
// if we don't throw a warning, the already installed x64 node will be used which is not probably what user meant.
if ( arch && ! version ) {
core . warning (
'`architecture` is provided but `node-version` is missing. In this configuration, the version/architecture of Node will not be changed. To fix this, provide `architecture` in combination with `node-version`'
) ;
}
2020-11-01 17:04:22 -05:00
2021-10-06 16:40:36 +00:00
if ( ! arch ) {
arch = os . arch ( ) ;
}
2020-05-19 09:25:54 -04:00
2021-10-06 16:40:36 +00:00
if ( version ) {
let token = core . getInput ( 'token' ) ;
let auth = ! token || isGhes ( ) ? undefined : ` token ${ token } ` ;
let stable = ( core . getInput ( 'stable' ) || 'true' ) . toUpperCase ( ) === 'TRUE' ;
const checkLatest =
( core . getInput ( 'check-latest' ) || 'false' ) . toUpperCase ( ) === 'TRUE' ;
await installer . getNode ( version , stable , checkLatest , auth , arch ) ;
}
2020-05-19 09:25:54 -04:00
2021-10-06 16:40:36 +00:00
const registryUrl : string = core . getInput ( 'registry-url' ) ;
const alwaysAuth : string = core . getInput ( 'always-auth' ) ;
if ( registryUrl ) {
auth . configAuthentication ( registryUrl , alwaysAuth ) ;
}
2021-06-16 09:52:44 +03:00
2021-10-06 16:40:36 +00:00
if ( cache ) {
if ( isGhes ( ) ) {
throw new Error ( 'Caching is not supported on GHES' ) ;
}
const cacheDependencyPath = core . getInput ( 'cache-dependency-path' ) ;
await restoreCache ( cache , cacheDependencyPath ) ;
2021-10-05 16:54:02 +00:00
}
2021-10-06 16:40:36 +00:00
const matchersPath = path . join ( __dirname , '../..' , '.github' ) ;
core . info ( ` ##[add-matcher] ${ path . join ( matchersPath , 'tsc.json' ) } ` ) ;
core . info (
` ##[add-matcher] ${ path . join ( matchersPath , 'eslint-stylish.json' ) } `
) ;
core . info (
` ##[add-matcher] ${ path . join ( matchersPath , 'eslint-compact.json' ) } `
) ;
2021-10-07 16:46:55 +00:00
} catch ( err ) {
core . setFailed ( err . message ) ;
2020-05-19 09:25:54 -04:00
}
}
function isGhes ( ) : boolean {
const ghUrl = new URL (
process . env [ 'GITHUB_SERVER_URL' ] || 'https://github.com'
) ;
return ghUrl . hostname . toUpperCase ( ) !== 'GITHUB.COM' ;
2021-10-05 16:54:02 +00:00
}