in src/github/context.ts [139:311]
export function extractJunieWorkflowContext(tokenOwner: TokenOwner): JunieExecutionContext {
const context = github.context;
const commonFields = {
runId: process.env.GITHUB_RUN_ID!,
workflow: process.env.GITHUB_WORKFLOW || "Junie",
eventAction: context.payload.action,
actor: context.actor,
actorEmail: getActorEmail(),
tokenOwner,
inputs: {
resolveConflicts: process.env.RESOLVE_CONFLICTS == "true",
createNewBranchForPR: process.env.CREATE_NEW_BRANCH_FOR_PR == "true",
silentMode: process.env.SILENT_MODE == "true",
useSingleComment: process.env.USE_SINGLE_COMMENT == "true",
attachGithubContextToCustomPrompt: process.env.ATTACH_GITHUB_CONTEXT_TO_CUSTOM_PROMPT !== "false",
junieWorkingDir: process.env.JUNIE_WORKING_DIR!,
headRef: process.env.GITHUB_HEAD_REF,
appToken: process.env.APP_TOKEN!,
prompt: process.env.PROMPT || "",
triggerPhrase: process.env.TRIGGER_PHRASE ?? DEFAULT_TRIGGER_PHRASE,
assigneeTrigger: process.env.ASSIGNEE_TRIGGER ?? "",
labelTrigger: process.env.LABEL_TRIGGER ?? "",
baseBranch: process.env.BASE_BRANCH,
targetBranch: process.env.TARGET_BRANCH,
allowedMcpServers: process.env.ALLOWED_MCP_SERVERS,
},
};
let parsedContext: JunieExecutionContext;
switch (context.eventName) {
case "issues": {
const payload = context.payload as IssuesEvent;
parsedContext = {
...commonFields,
eventName: context.eventName,
payload,
entityNumber: payload.issue.number,
isPR: false,
};
break;
}
case "issue_comment": {
const payload = context.payload as IssueCommentEvent;
parsedContext = {
...commonFields,
eventName: context.eventName,
payload,
entityNumber: payload.issue.number,
isPR: Boolean(payload.issue.pull_request),
};
break;
}
case "pull_request":
case "pull_request_target": {
const payload = context.payload as PullRequestEvent;
parsedContext = {
...commonFields,
eventName: "pull_request",
payload,
entityNumber: payload.pull_request.number,
isPR: true,
};
break;
}
case "pull_request_review": {
const payload = context.payload as PullRequestReviewEvent;
parsedContext = {
...commonFields,
eventName: context.eventName,
payload,
entityNumber: payload.pull_request.number,
isPR: true,
};
break;
}
case "pull_request_review_comment": {
const payload = context.payload as PullRequestReviewCommentEvent;
parsedContext = {
...commonFields,
eventName: context.eventName,
payload,
entityNumber: payload.pull_request.number,
isPR: true,
};
break
}
case "check_suite": {
const payload = context.payload as CheckSuiteEvent;
const isPr = payload.check_suite.pull_requests.length > 0
parsedContext = {
...commonFields,
eventName: context.eventName,
payload: payload,
entityNumber: isPr ? payload.check_suite.pull_requests[0].number : undefined,
isPR: isPr,
};
break
}
case "push": {
const payload = context.payload as PushEvent;
parsedContext = {
...commonFields,
eventName: context.eventName,
payload: payload
};
break
}
case "workflow_dispatch": {
const payload = context.payload as WorkflowDispatchEvent;
if (payload.inputs?.action == RESOLVE_CONFLICTS_ACTION) {
parsedContext = {
...commonFields,
isPR: true,
entityNumber: payload.inputs?.prNumber as number,
eventName: context.eventName,
payload: {
...payload,
action: RESOLVE_CONFLICTS_ACTION
},
};
break
}
// Handle Jira integration event
if (payload.inputs?.action == JIRA_EVENT_ACTION) {
parsedContext = extractJiraEventData(payload, commonFields)
break;
}
parsedContext = {
...commonFields,
eventName: context.eventName,
payload: context.payload as unknown as WorkflowDispatchEvent,
};
break;
}
case "repository_dispatch": {
parsedContext = {
...commonFields,
eventName: context.eventName,
payload: context.payload as unknown as RepositoryDispatchEvent,
};
break;
}
case "schedule": {
parsedContext = {
...commonFields,
eventName: context.eventName,
payload: context.payload as unknown as ScheduleEvent,
};
break
}
case "workflow_run": {
const payload = context.payload as WorkflowRunEvent;
const isPR = payload.workflow_run.pull_requests.length > 0
parsedContext = {
...commonFields,
eventName: context.eventName,
payload,
isPR,
entityNumber: isPR ? payload.workflow_run.pull_requests[0].number : undefined,
};
break;
}
default:
throw new Error(`Unsupported event type: ${context.eventName}`);
}
core.setOutput(OUTPUT_VARS.ACTOR_NAME, parsedContext.actor);
core.setOutput(OUTPUT_VARS.ACTOR_EMAIL, parsedContext.actorEmail);
core.setOutput(OUTPUT_VARS.PARSED_CONTEXT, JSON.stringify(parsedContext));
return parsedContext;
}