export function extractJunieWorkflowContext()

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;
}