From 8f028b7adf0e40e26c4e427ba37ce6fa9a5e6f7c Mon Sep 17 00:00:00 2001 From: zxypro1 <1018995004@qq.com> Date: Sun, 7 Jul 2024 17:37:06 +0800 Subject: [PATCH] pub: engine@0.1.4-beta.4, parse-spec@0.0.28-beta.4 Signed-off-by: zxypro1 <1018995004@qq.com> --- packages/engine/package.json | 2 +- packages/engine/src/index.ts | 10 +++++++--- packages/engine/src/types.ts | 1 + packages/parse-spec/package.json | 2 +- packages/parse-spec/src/index.ts | 5 +++-- packages/parse-spec/src/parse-content.ts | 20 +++++++++++--------- packages/parse-spec/src/types.ts | 1 + 7 files changed, 25 insertions(+), 16 deletions(-) diff --git a/packages/engine/package.json b/packages/engine/package.json index 1a52b9ce..71fdecb4 100644 --- a/packages/engine/package.json +++ b/packages/engine/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-devs/engine", - "version": "0.1.4-beta.3", + "version": "0.1.4-beta.4", "description": "a engine lib for serverless-devs", "main": "lib/index.js", "scripts": { diff --git a/packages/engine/src/index.ts b/packages/engine/src/index.ts index 29d4e86b..94895483 100644 --- a/packages/engine/src/index.ts +++ b/packages/engine/src/index.ts @@ -66,10 +66,11 @@ class Engine { each(this.options.env, (value, key) => { process.env[key] = value; }); - const { steps: _steps } = this.spec; + const { steps: _steps, allSteps } = this.spec; // 参数校验 await this.validate(); this.context.steps = await this.download(_steps); + this.context.allSteps = allSteps ? await this.download(allSteps) : []; } /** @@ -118,6 +119,9 @@ class Engine { this.context.steps = map(this.context.steps, item => { return { ...item, stepCount: uniqueId(), status: STEP_STATUS.PENDING, done: false }; }); + this.context.allSteps = map(this.context.allSteps, item => { + return { ...item, stepCount: uniqueId(), status: STEP_STATUS.PENDING, done: false }; + }); const res: IContext = await new Promise(async resolve => { // Every states object has two fixed states, "init" and "final". const states: any = { @@ -359,7 +363,7 @@ class Engine { } if (isEmpty(resourceNames)) return; const resourcesItems: IStepOptions[] = map(Array.from(resourceNames), (name) => { - return this.context.steps.find((obj) => obj.projectName === name) as IStepOptions; + return this.context.allSteps.find((obj) => obj.projectName === name) as IStepOptions; }); await Promise.all(map(resourcesItems, async (item) => { if (!item) return; @@ -389,7 +393,7 @@ class Engine { __runtime: this.options.verify ? 'engine' : 'parse', __steps: this.context.steps, } as Record; - for (const obj of this.context.steps) { + for (const obj of this.context.allSteps) { data.resources[obj.projectName] = { output: obj.output || {}, props: obj.props || {}, diff --git a/packages/engine/src/types.ts b/packages/engine/src/types.ts index cbe32678..62394b73 100644 --- a/packages/engine/src/types.ts +++ b/packages/engine/src/types.ts @@ -73,6 +73,7 @@ export interface IContext { error: IEngineError[]; // 记录step的错误信息 output: Record; // 记录step的输出 credential: Record; // 尝试获取到的密钥信息 + allSteps: IStepOptions[]; // 记录所有step } export type IEngineError = Error | AssertionError | DevsError; diff --git a/packages/parse-spec/package.json b/packages/parse-spec/package.json index 6c4a09f2..39a1cbb8 100644 --- a/packages/parse-spec/package.json +++ b/packages/parse-spec/package.json @@ -1,6 +1,6 @@ { "name": "@serverless-devs/parse-spec", - "version": "0.0.28-beta.3", + "version": "0.0.28-beta.4", "description": "a parse yaml spec lib for serverless-devs", "main": "lib/index.js", "scripts": { diff --git a/packages/parse-spec/src/index.ts b/packages/parse-spec/src/index.ts index d856d07c..0598487b 100644 --- a/packages/parse-spec/src/index.ts +++ b/packages/parse-spec/src/index.ts @@ -202,10 +202,10 @@ class ParseSpec { // 再次解析参数,比如projectNames this.parseArgv(); if (!this.yaml.use3x) return this.v1(); - const { steps, content, originSteps } = await new ParseContent(this.yaml.content, this.getParsedContentOptions(this.yaml.path)).start(); + const { steps, content, originSteps, allSteps } = await new ParseContent(this.yaml.content, this.getParsedContentOptions(this.yaml.path)).start(); const services = get(this.yaml.content, 'services', {}); if (isEmpty(steps) && !isEmpty(services)) { - this.options.logger.tips('Check https://manual.serverless-devs.com/user-guide/spec/ for more details. Use the \'s cli fc3 s2tos3\' command for automatic YAML transformation.'); + this.options.logger.tips('Check https://docs.serverless-devs.com/user-guide/spec/ for more details. Use the \'s cli fc3 s2tos3\' command for automatic YAML transformation.'); throw new DevsError(`Keyword 'services' has been replaced by 'resources' in 3.0.0 YAML.`, { trackerType: ETrackerType.parseException, }); @@ -221,6 +221,7 @@ class ParseSpec { const result = { steps: this.record.projectName ? steps : this.doFlow(steps, originSteps), yaml: this.yaml, + allSteps: allSteps, ...this.record, }; debug(`parse result: ${JSON.stringify(result)}`); diff --git a/packages/parse-spec/src/parse-content.ts b/packages/parse-spec/src/parse-content.ts index 0d0d0c19..27f3b0e0 100644 --- a/packages/parse-spec/src/parse-content.ts +++ b/packages/parse-spec/src/parse-content.ts @@ -2,7 +2,7 @@ import path from 'path'; import getInputs from './get-inputs'; import { IStep } from './types'; import { getCredential } from './utils'; -import { each, get, omit, set, pickBy, cloneDeep, isEmpty } from 'lodash'; +import { each, get, omit, set, pickBy, cloneDeep, isEmpty, find } from 'lodash'; const compile = require('@serverless-devs/art-template/lib/devs-compile'); const extend2 = require('extend2'); const debug = require('@serverless-cd/debug')('serverless-devs:parse-spec'); @@ -78,11 +78,10 @@ class ParseContent { ...this.content, ...getInputs(rest, this.getCommonMagic()), }; - const steps = []; - const originSteps = []; - // projectName 存在,说明指定了项目 - const temp = this.options.projectName ? { [this.options.projectName]: resources[this.options.projectName] } : resources; - for (const project in temp) { + // support resources.info, all steps are needed + const allSteps = []; + const allOriginSteps = []; + for (const project in resources) { const element = resources[project]; const component = compile(get(element, 'component'), this.getCommonMagic()); let template = get(this.content.template, get(element, 'extend.name'), {}); @@ -114,14 +113,14 @@ class ParseContent { [project]: real, }, }; - steps.push({ + allSteps.push({ ...real, projectName: project, component, access, credential: this.credential, }); - originSteps.push({ + allOriginSteps.push({ ...element, projectName: project, component, @@ -129,7 +128,10 @@ class ParseContent { credential: this.credential, }); } - return { steps, content: this.content, originSteps }; + // projectName 存在,说明指定了项目 + const steps = this.options.projectName ? [find(allSteps, (item) => item.projectName === this.options.projectName)] : allSteps; + const originSteps = this.options.projectName ? [find(allOriginSteps, (item) => item.projectName === this.options.projectName)] : allOriginSteps; + return { steps, content: this.content, originSteps, allSteps }; } private getAccess() { // 全局的 -a > env.yaml 的 access > s.yaml 的 access > default diff --git a/packages/parse-spec/src/types.ts b/packages/parse-spec/src/types.ts index eea6f925..c5cd8ba5 100644 --- a/packages/parse-spec/src/types.ts +++ b/packages/parse-spec/src/types.ts @@ -81,6 +81,7 @@ export interface IYaml { export type ISpec = IRecord & { steps: IStep[]; yaml: IYaml; + allSteps?: IStep[]; }; export interface IRecord { projectName?: string;