2020-03-02 20:52:38 +08:00
import { getInput } from "@actions/core" ;
import { actionInterface } from "./constants" ;
/* Utility function that checks to see if a value is undefined or not. */
export const isNullOrUndefined = ( value : any ) : boolean = >
typeof value === "undefined" || value === null || value === "" ;
/* Generates a token type used for the action. */
export const generateTokenType = ( action : actionInterface ) : string = >
action . ssh
? "SSH Deploy Key"
: action . accessToken
? "Access Token"
: action . gitHubToken
? "GitHub Token"
: "..." ;
/* Generates a the repository path used to make the commits. */
export const generateRepositoryPath = ( action : actionInterface ) : string = >
action . ssh
2020-03-02 21:37:55 +08:00
? ` git@github.com: ${ action . repositoryName } `
2020-03-02 20:52:38 +08:00
: ` https:// ${ action . accessToken ||
` x-access-token: ${ action . gitHubToken } ` } @github . com / $ {
2020-03-02 21:37:55 +08:00
action . repositoryName
2020-03-02 20:52:38 +08:00
} . git ` ;
/* Checks for the required tokens and formatting. Throws an error if any case is matched. */
export const hasRequiredParameters = ( action : actionInterface ) : void = > {
if (
( isNullOrUndefined ( action . accessToken ) &&
isNullOrUndefined ( action . gitHubToken ) &&
isNullOrUndefined ( action . ssh ) ) ||
isNullOrUndefined ( action . repositoryPath )
) {
throw new Error (
"No deployment token/method was provided. You must provide the action with either a Personal Access Token or the GitHub Token secret in order to deploy. If you wish to use an ssh deploy token then you must set SSH to true."
) ;
}
if ( isNullOrUndefined ( action . branch ) ) {
throw new Error ( "Branch is required." ) ;
}
if ( ! action . folder || isNullOrUndefined ( action . folder ) ) {
throw new Error ( "You must provide the action with a folder to deploy." ) ;
}
if ( action . folder . startsWith ( "/" ) || action . folder . startsWith ( "./" ) ) {
throw new Error (
"Incorrectly formatted build folder. The deployment folder cannot be prefixed with '/' or './'. Instead reference the folder name directly."
) ;
}
} ;
/* Suppresses sensitive information from being exposed in error messages. */
export const suppressSensitiveInformation = (
str : string ,
action : actionInterface
) = > {
let value = str ;
if ( getInput ( "DEBUG" ) ) {
// Data is unmasked in debug mode.
return value ;
}
if ( action . accessToken ) {
value = value . replace ( action . accessToken , "***" ) ;
}
if ( action . gitHubToken ) {
value = value . replace ( action . gitHubToken , "***" ) ;
}
if ( action . repositoryPath ) {
value = value . replace ( action . repositoryPath , "***" ) ;
}
return value ;
} ;