Separate reusable jobs in the workflow context

This commit is contained in:
Josh Gross
2023-02-03 17:52:48 -05:00
parent 3d5b006138
commit 986ce1bfe4
9 changed files with 37 additions and 37 deletions
@@ -2,7 +2,6 @@ import {data, DescriptionDictionary} from "@github/actions-expressions";
import {StringData} from "@github/actions-expressions/data/string";
import {WorkflowContext} from "@github/actions-languageservice/context/workflow-context";
import {isMapping, isString} from "@github/actions-workflow-parser";
import {isJob} from "@github/actions-workflow-parser/model/type-guards";
import {Octokit} from "@octokit/rest";
import {RepositoryContext} from "../initializationOptions";
import {TTLCache} from "../utils/cache";
@@ -15,13 +14,11 @@ export async function getSecrets(
defaultContext: DescriptionDictionary | undefined
): Promise<DescriptionDictionary> {
let environmentName: string | undefined;
const job = workflowContext?.job;
const environment = job && isJob(job) && job.environment;
if (environment) {
if (isString(environment)) {
environmentName = environment.value;
} else if (isMapping(environment)) {
for (const x of environment) {
if (workflowContext?.job?.environment) {
if (isString(workflowContext.job.environment)) {
environmentName = workflowContext.job.environment.value;
} else if (isMapping(workflowContext.job.environment)) {
for (const x of workflowContext.job.environment) {
if (isString(x.key) && x.key.value === "name") {
if (isString(x.value)) {
environmentName = x.value.value;
@@ -1,7 +1,7 @@
import {data, DescriptionDictionary, isDescriptionDictionary} from "@github/actions-expressions";
import {parseActionReference} from "@github/actions-languageservice/action";
import {WorkflowContext} from "@github/actions-languageservice/context/workflow-context";
import {isActionStep, isReusableWorkflowJob} from "@github/actions-workflow-parser/model/type-guards";
import {isActionStep} from "@github/actions-workflow-parser/model/type-guards";
import {Octokit} from "@octokit/rest";
import {TTLCache} from "../utils/cache";
import {getActionOutputs} from "./action-outputs";
@@ -12,8 +12,7 @@ export async function getStepsContext(
defaultContext: DescriptionDictionary | undefined,
workflowContext: WorkflowContext
): Promise<DescriptionDictionary | undefined> {
const job = workflowContext.job;
if (!defaultContext || !job || isReusableWorkflowJob(job)) {
if (!defaultContext || !workflowContext.job) {
return defaultContext;
}
@@ -27,7 +26,7 @@ export async function getStepsContext(
// Copy the default context for each step
// If the step is an action, add the action outputs to the context
const stepsContext = new DescriptionDictionary();
for (const step of job.steps) {
for (const step of workflowContext.job.steps) {
if (!contextSteps.has(step.id)) {
continue;
}
@@ -6,7 +6,6 @@ import {Pair} from "@github/actions-expressions/data/expressiondata";
import {RepositoryContext} from "../initializationOptions";
import {StringData} from "@github/actions-expressions/data/index";
import {TTLCache} from "../utils/cache";
import {isJob} from "@github/actions-workflow-parser/model/type-guards";
export async function getVariables(
workflowContext: WorkflowContext,
@@ -16,13 +15,11 @@ export async function getVariables(
defaultContext: DescriptionDictionary | undefined
): Promise<DescriptionDictionary | undefined> {
let environmentName: string | undefined;
const job = workflowContext?.job;
const environment = job && isJob(job) && job.environment;
if (environment) {
if (isString(environment)) {
environmentName = environment.value;
} else if (isMapping(environment)) {
for (const x of environment) {
if (workflowContext?.job?.environment) {
if (isString(workflowContext.job.environment)) {
environmentName = workflowContext.job.environment.value;
} else if (isMapping(workflowContext.job.environment)) {
for (const x of workflowContext.job.environment) {
if (isString(x.key) && x.key.value === "name") {
if (isString(x.value)) {
environmentName = x.value.value;
@@ -1,6 +1,5 @@
import {WorkflowContext} from "@github/actions-languageservice/context/workflow-context";
import {convertWorkflowTemplate, parseWorkflow, TraceWriter} from "@github/actions-workflow-parser";
import {isJob} from "@github/actions-workflow-parser/model/type-guards";
const nullTrace: TraceWriter = {
info: x => {},
@@ -20,8 +19,8 @@ export function createWorkflowContext(workflow: string, job?: string, stepIndex?
context.job = template.jobs.find(j => j.id.value === job);
}
if (stepIndex !== undefined && context.job && isJob(context.job)) {
context.step = context.job.steps[stepIndex];
if (stepIndex !== undefined) {
context.step = context.job?.steps[stepIndex];
}
return context;