mirror of https://github.com/actions/toolkit
84 lines
2.5 KiB
TypeScript
84 lines
2.5 KiB
TypeScript
// Originally pulled from https://github.com/JasonEtco/actions-toolkit/blob/main/src/context.ts
|
|
import {WebhookPayload} from './interfaces'
|
|
import {readFileSync, existsSync} from 'fs'
|
|
import {EOL} from 'os'
|
|
|
|
export class Context {
|
|
/**
|
|
* Webhook payload object that triggered the workflow
|
|
*/
|
|
payload: WebhookPayload
|
|
|
|
eventName: string
|
|
sha: string
|
|
ref: string
|
|
workflow: string
|
|
action: string
|
|
actor: string
|
|
job: string
|
|
runAttempt: number
|
|
runNumber: number
|
|
runId: number
|
|
apiUrl: string
|
|
serverUrl: string
|
|
graphqlUrl: string
|
|
|
|
/**
|
|
* Hydrate the context from the environment
|
|
*/
|
|
constructor() {
|
|
this.payload = {}
|
|
if (process.env.GITHUB_EVENT_PATH) {
|
|
if (existsSync(process.env.GITHUB_EVENT_PATH)) {
|
|
this.payload = JSON.parse(
|
|
readFileSync(process.env.GITHUB_EVENT_PATH, {encoding: 'utf8'})
|
|
)
|
|
} else {
|
|
const path = process.env.GITHUB_EVENT_PATH
|
|
process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${EOL}`)
|
|
}
|
|
}
|
|
this.eventName = process.env.GITHUB_EVENT_NAME as string
|
|
this.sha = process.env.GITHUB_SHA as string
|
|
this.ref = process.env.GITHUB_REF as string
|
|
this.workflow = process.env.GITHUB_WORKFLOW as string
|
|
this.action = process.env.GITHUB_ACTION as string
|
|
this.actor = process.env.GITHUB_ACTOR as string
|
|
this.job = process.env.GITHUB_JOB as string
|
|
this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT as string, 10)
|
|
this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER as string, 10)
|
|
this.runId = parseInt(process.env.GITHUB_RUN_ID as string, 10)
|
|
this.apiUrl = process.env.GITHUB_API_URL ?? `https://api.github.com`
|
|
this.serverUrl = process.env.GITHUB_SERVER_URL ?? `https://github.com`
|
|
this.graphqlUrl =
|
|
process.env.GITHUB_GRAPHQL_URL ?? `https://api.github.com/graphql`
|
|
}
|
|
|
|
get issue(): {owner: string; repo: string; number: number} {
|
|
const payload = this.payload
|
|
|
|
return {
|
|
...this.repo,
|
|
number: (payload.issue || payload.pull_request || payload).number
|
|
}
|
|
}
|
|
|
|
get repo(): {owner: string; repo: string} {
|
|
if (process.env.GITHUB_REPOSITORY) {
|
|
const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/')
|
|
return {owner, repo}
|
|
}
|
|
|
|
if (this.payload.repository) {
|
|
return {
|
|
owner: this.payload.repository.owner.login,
|
|
repo: this.payload.repository.name
|
|
}
|
|
}
|
|
|
|
throw new Error(
|
|
"context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"
|
|
)
|
|
}
|
|
}
|