2022-03-30 12:16:49 +02:00
import * as cache from "@actions/cache" ;
2019-10-30 19:48:49 +01:00
import * as core from "@actions/core" ;
2019-11-13 16:54:39 +01:00
2022-12-21 15:08:44 +01:00
import { RefKey } from "../constants" ;
2019-10-30 19:48:49 +01:00
2020-09-29 16:58:32 +02:00
export function isGhes ( ) : boolean {
2024-10-18 15:52:16 +02:00
const ghUrl = new URL (
process . env [ "GITHUB_SERVER_URL" ] || "https://github.com"
) ;
2024-10-18 13:23:42 +02:00
2024-10-18 15:52:16 +02:00
const hostname = ghUrl . hostname . trimEnd ( ) . toUpperCase ( ) ;
const isGitHubHost = hostname === "GITHUB.COM" ;
const isGitHubEnterpriseCloudHost = hostname . endsWith ( ".GHE.COM" ) ;
const isLocalHost = hostname . endsWith ( ".LOCALHOST" ) ;
2024-10-18 13:23:42 +02:00
2024-10-18 15:52:16 +02:00
return ! isGitHubHost && ! isGitHubEnterpriseCloudHost && ! isLocalHost ;
2020-09-29 16:58:32 +02:00
}
2020-05-14 23:27:38 +02:00
export function isExactKeyMatch ( key : string , cacheKey? : string ) : boolean {
2019-10-30 19:48:49 +01:00
return ! ! (
2020-05-14 23:27:38 +02:00
cacheKey &&
cacheKey . localeCompare ( key , undefined , {
2019-10-30 19:48:49 +01:00
sensitivity : "accent"
} ) === 0
) ;
}
2019-11-21 20:37:54 +01:00
export function logWarning ( message : string ) : void {
const warningPrefix = "[warning]" ;
core . info ( ` ${ warningPrefix } ${ message } ` ) ;
}
2020-04-17 21:46:46 +02:00
// Cache token authorized for all events that are tied to a ref
2019-11-13 16:54:39 +01:00
// See GitHub Context https://help.github.com/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions#github-context
export function isValidEvent ( ) : boolean {
2020-04-20 19:44:37 +02:00
return RefKey in process . env && Boolean ( process . env [ RefKey ] ) ;
2019-11-13 16:54:39 +01:00
}
2020-06-02 17:21:03 +02:00
export function getInputAsArray (
name : string ,
options? : core.InputOptions
) : string [ ] {
return core
. getInput ( name , options )
. split ( "\n" )
2022-08-22 15:05:20 +02:00
. map ( s = > s . replace ( /^!\s+/ , "!" ) . trim ( ) )
2022-10-03 08:39:10 +02:00
. filter ( x = > x !== "" ) ;
2020-06-02 17:21:03 +02:00
}
2020-10-02 16:59:55 +02:00
export function getInputAsInt (
name : string ,
options? : core.InputOptions
) : number | undefined {
2020-10-02 17:55:30 +02:00
const value = parseInt ( core . getInput ( name , options ) ) ;
if ( isNaN ( value ) || value < 0 ) {
2020-10-02 16:59:55 +02:00
return undefined ;
}
return value ;
}
2022-03-30 12:16:49 +02:00
2023-01-05 12:19:13 +01:00
export function getInputAsBool (
name : string ,
options? : core.InputOptions
) : boolean {
const result = core . getInput ( name , options ) ;
return result . toLowerCase ( ) === "true" ;
}
2022-03-30 12:16:49 +02:00
export function isCacheFeatureAvailable ( ) : boolean {
2022-12-02 07:09:10 +01:00
if ( cache . isFeatureAvailable ( ) ) {
return true ;
}
if ( isGhes ( ) ) {
logWarning (
` Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.
2022-09-20 07:17:27 +02:00
Otherwise please upgrade to GHES version >= 3.5 and If you are also using Github Connect , please unretire the actions / cache namespace before upgrade ( see https : //docs.github.com/en/enterprise-server@3.5/admin/github-actions/managing-access-to-actions-from-githubcom/enabling-automatic-access-to-githubcom-actions-using-github-connect#automatic-retirement-of-namespaces-for-actions-accessed-on-githubcom)`
2022-12-02 07:09:10 +01:00
) ;
2022-03-30 12:16:49 +02:00
return false ;
}
2022-12-02 07:09:10 +01:00
logWarning (
"An internal error has occurred in cache backend. Please check https://www.githubstatus.com/ for any ongoing issue in actions."
) ;
return false ;
2022-03-30 12:16:49 +02:00
}