Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 10cc59e

Browse files
committedNov 25, 2024··
Allow outputs to substitute without changing initial values
Signed-off-by: Peter Zhu <zhujiaxi@amazon.com>
1 parent c133455 commit 10cc59e

File tree

4 files changed

+38
-31
lines changed

4 files changed

+38
-31
lines changed
 

‎package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "opensearch-automation-app",
3-
"version": "0.1.18",
3+
"version": "0.2.0",
44
"description": "An Automation App that handles all your GitHub Repository Activities",
55
"author": "Peter Zhu",
66
"homepage": "https://github.com/opensearch-project/automation-app",

‎src/call/add-issue-to-github-project-v2.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default async function addIssueToGitHubProjectV2(
4545
context: any,
4646
resource: Resource,
4747
{ labels, projects }: AddIssueToGitHubProjectV2Params,
48-
): Promise<Map<string, [string, string]> | null> {
48+
): Promise<string | null> {
4949
if (!(await validateResourceConfig(app, context, resource))) return null;
5050
if (!(await validateProjects(app, resource, projects))) return null;
5151

@@ -66,7 +66,7 @@ export default async function addIssueToGitHubProjectV2(
6666
const repoName = context.payload.repository.name;
6767
const issueNumber = context.payload.issue.number;
6868
const issueNodeId = context.payload.issue.node_id;
69-
const itemIdMap = new Map<string, [string, string]>();
69+
let itemId = null
7070

7171
// Add to project
7272
try {
@@ -91,14 +91,13 @@ export default async function addIssueToGitHubProjectV2(
9191
`;
9292
const responseAddToProject = await context.octokit.graphql(addToProjectMutation);
9393
app.log.info(responseAddToProject);
94-
const itemId = responseAddToProject.addProjectV2ItemById.item.id;
95-
itemIdMap.set(project, [itemId, label]);
94+
itemId = responseAddToProject.addProjectV2ItemById.item.id;
9695
}),
9796
);
9897
} catch (e) {
9998
app.log.error(`ERROR: ${e}`);
10099
return null;
101100
}
102101

103-
return itemIdMap;
102+
return itemId;
104103
}

‎src/service/service.ts

+31-23
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { Operation } from './operation/operation';
1515
import { Task } from './operation/task';
1616
import { ResourceConfig } from '../config/resource-config';
1717
import { OperationConfig } from '../config/operation-config';
18+
import { TaskArgData } from '../config/types';
1819
import { octokitAuth } from '../utility/probot/octokit';
1920

2021
export class Service {
@@ -78,31 +79,13 @@ export class Service {
7879
console.error(`ERROR: ${e}`);
7980
}
8081

82+
8183
const callStack = await import(callPath);
84+
const callArgsSub = await this._outputsSubstitution({ ...callArgs }, event);
85+
8286
if (callFunc === 'default') {
8387
console.log(`[${event}]: Call default function: [${callStack.default.name}]`);
84-
if (callArgs) {
85-
console.log(`[${event}]: Call with args:`);
86-
for (const name2 in callArgs) {
87-
console.log(`[${event}]: args: ${name2}: ${callArgs[name2]}`);
88-
if (Array.isArray(callArgs[name2])) {
89-
for (let i = 0; i < callArgs[name2].length; i++) {
90-
if (this.subPattern.test(callArgs[name2][i])) {
91-
console.log(`Array: ${callArgs[name2][i]}`);
92-
}
93-
}
94-
} else {
95-
const match = (callArgs[name2] as string).match(this.subPattern);
96-
if (match) {
97-
console.log(`StrSub: ${callArgs[name2]}, Match: ${match[1]}, ${match[1].replace('outputs.', '')}`);
98-
console.log(this._outputs.get(event)?.get(match[1].replace('outputs.', '')))
99-
callArgs[name2] = JSON.stringify(Object.fromEntries(this._outputs.get(event)?.get(match[1].replace('outputs.', ''))))
100-
}
101-
}
102-
}
103-
}
104-
105-
const resultDefault = await callStack.default(this.app, context, this.resource, { ...callArgs });
88+
const resultDefault = await callStack.default(this.app, context, this.resource, { ...callArgsSub });
10689
this._outputs.get(event)?.set(name, resultDefault);
10790
console.log(this._outputs.get(event));
10891
} else {
@@ -112,11 +95,36 @@ export class Service {
11295
if (!(typeof callFuncCustom === 'function')) {
11396
throw new Error(`[${event}]: ${callFuncCustom} is not a function, please verify in ${callPath}`);
11497
}
115-
this._outputs.get(event)?.set(name, await callFuncCustom(this.app, context, this.resource, { ...callArgs }));
98+
this._outputs.get(event)?.set(name, await callFuncCustom(this.app, context, this.resource, { ...callArgsSub }));
11699
}
117100
}, Promise.resolve());
118101
}
119102

103+
private async _outputsSubstitution(callArgsData: TaskArgData, event: string): Promise<TaskArgData> {
104+
console.log(`[${event}]: Call with args:`);
105+
for (const argName in callArgsData) {
106+
console.log(`[${event}]: args: ${argName}: ${callArgsData[argName]}`);
107+
if (Array.isArray(callArgsData[argName])) {
108+
for (let i = 0; i < callArgsData[argName].length; i++) {
109+
(callArgsData[argName] as string[])[i] = await this._matchSubPattern((callArgsData[argName][i] as string), event);
110+
}
111+
} else {
112+
(callArgsData[argName] as string) = await this._matchSubPattern((callArgsData[argName] as string), event);
113+
}
114+
}
115+
return callArgsData;
116+
}
117+
118+
private async _matchSubPattern(callArgsValue: string, event: string): Promise<string> {
119+
const match = callArgsValue.match(this.subPattern);
120+
if (match) {
121+
const outputMatch = this._outputs.get(event)?.get(match[1].replace('outputs.', ''));
122+
console.log(`StrSub: ${callArgsValue}, Match: ${match[1]}, Output: ${outputMatch}`);
123+
return outputMatch;
124+
}
125+
return callArgsValue;
126+
}
127+
120128
private async _registerEvents(): Promise<void> {
121129
const { events, tasks } = this.operation;
122130
console.log(`Evaluate events: [${events}]`);

0 commit comments

Comments
 (0)
Please sign in to comment.