Skip to content

Commit

Permalink
fix: #6397 - auth update overwrite parameters (#6403)
Browse files Browse the repository at this point in the history
  • Loading branch information
Attila Hajdrik committed Jan 26, 2021
1 parent af8885b commit 75f5ace
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 21 deletions.
Expand Up @@ -29,13 +29,6 @@ async function handleTriggers(context, coreAnswers, previouslySaved) {
triggerEnvs[r] = context.amplify.getTriggerEnvVariables(context, { key: r, modules: triggers[r] }, 'auth');
});

const parameters = {
authResourceName,
triggerEnvs,
parentStack: { Ref: 'AWS::StackId' },
triggers,
};

// creating array of trigger names
const keys = Object.keys(triggers);

Expand All @@ -46,9 +39,12 @@ async function handleTriggers(context, coreAnswers, previouslySaved) {
for (let t = 0; t < keys.length; t += 1) {
const functionName = `${authResourceName}${keys[t]}`;
const targetPath = `${targetDir}/function/${functionName}/src`;

if (previouslySaved && previouslySaved[keys[t]]) {
const currentEnvVariables = context.amplify.loadEnvResourceParameters(context, 'function', functionName);
await triggerEnvParams(context, keys[t], values[t], functionName, currentEnvVariables);

await saveTriggerEnvParamsToTeamProviderInfo(context, keys[t], values[t], functionName, currentEnvVariables);

const triggerOptions = {
key: keys[t],
values: values[t],
Expand All @@ -65,10 +61,13 @@ async function handleTriggers(context, coreAnswers, previouslySaved) {
parentResource: authResourceName,
skipEdit: true,
};

const updatedLambda = await context.amplify.updateTrigger(triggerOptions);

triggerKeyValues = Object.assign(triggerKeyValues, updatedLambda);
} else {
await triggerEnvParams(context, keys[t], values[t], functionName);
await saveTriggerEnvParamsToTeamProviderInfo(context, keys[t], values[t], functionName);

const triggerOptions = {
key: keys[t],
values: values[t],
Expand All @@ -79,11 +78,14 @@ async function handleTriggers(context, coreAnswers, previouslySaved) {
parentStack: 'auth',
targetPath,
triggerTemplate: `${keys[t]}.json.ejs`,
triggerEventPath: `${keys[t]}.event.json`,
triggerDir: path.join(triggerAssetRoot, keys[t]),
parentResource: authResourceName,
skipEdit: true,
};

const newLambda = await context.amplify.addTrigger(triggerOptions);

triggerKeyValues = Object.assign(triggerKeyValues, newLambda);
}
}
Expand All @@ -99,11 +101,11 @@ async function handleTriggers(context, coreAnswers, previouslySaved) {
coreAnswers.parentStack = { Ref: 'AWS::StackId' };
}

return parameters.triggers;
return triggers;
}

// saving input-based trigger env variables to the team-provider
const triggerEnvParams = async (context, key, value, functionName, currentEnvVars) => {
const saveTriggerEnvParamsToTeamProviderInfo = async (context, key, value, functionName, currentEnvVars) => {
const envs = await context.amplify.getTriggerEnvInputs(context, path.join(triggerAssetRoot, key), key, value, currentEnvVars);
context.amplify.saveEnvResourceParameters(context, 'function', functionName, envs);
};
Expand Down
Expand Up @@ -2,7 +2,7 @@ import { FunctionParameters, FunctionTriggerParameters, FunctionTemplate, Provid
import { isMultiEnvLayer, LayerParameters, StoredLayerParameters } from './utils/layerParams';
import { chooseParamsOnEnvInit } from './utils/layerHelpers';
import { supportedServices } from '../supported-services';
import { ServiceName, provider, parametersFileName } from './utils/constants';
import { ServiceName, provider, parametersFileName, functionParametersFileName } from './utils/constants';
import { category as categoryName } from '../../constants';
import {
createFunctionResources,
Expand All @@ -19,6 +19,7 @@ import fs from 'fs-extra';
import path from 'path';
import open from 'open';
import { IsMockableResponse } from '../..';
import { JSONUtilities } from 'amplify-cli-core';

/**
* Entry point for creating a new function
Expand Down Expand Up @@ -198,18 +199,24 @@ export async function updateFunctionResource(context, category, service, paramet
context.amplify.pathManager.getBackendDirPath(),
categoryName,
resourceToUpdate,
parametersFileName,
functionParametersFileName,
);
let previousParameters;

if (fs.existsSync(parametersFilePath)) {
previousParameters = context.amplify.readJsonFile(parametersFilePath);

if ('trigger' in previousParameters) {
parameters = _.assign(parameters, previousParameters);
parameters = _.assign({}, previousParameters, parameters);

if (parameters.triggerEnvs && parameters.triggerEnvs instanceof String) {
parameters.triggerEnvs = JSONUtilities.parse(parameters.triggerEnvs) || [];
}
}
}

saveMutableState(parameters);
saveCFNParameters(parameters);
} else {
parameters = await serviceConfig.walkthroughs.updateWalkthrough(context, parameters, resourceToUpdate);
if (parameters.dependsOn) {
Expand Down Expand Up @@ -340,6 +347,7 @@ export async function updateConfigOnEnvInit(context: any, resourceName: string,
if (resourceParams.trigger === true) {
envParams = await initTriggerEnvs(context, resourceParams, providerPlugin, envParams, srvcMetaData);
}

return envParams;
} else if (isMultiEnvLayer(context, resourceName) && service === ServiceName.LambdaLayer) {
const teamProviderParams: StoredLayerParameters = await chooseParamsOnEnvInit(context, resourceName);
Expand Down
Expand Up @@ -127,7 +127,7 @@ function copyTemplateFiles(context: $TSContext, parameters: FunctionParameters |
let templateParams: $TSAny = parameters;
if ('trigger' in parameters) {
let triggerEnvs = context.amplify.loadEnvResourceParameters(context, 'function', parameters.resourceName);
parameters.triggerEnvs = JSON.parse(parameters.triggerEnvs) || [];
parameters.triggerEnvs = JSONUtilities.parse(parameters.triggerEnvs) || [];

parameters.triggerEnvs.forEach(c => {
triggerEnvs[c.key] = c.value;
Expand Down
Expand Up @@ -151,12 +151,6 @@ export const updateTrigger = async triggerOptions => {
for (let v = 0; v < values.length; v += 1) {
await copyFunctions(key, values[v], category, context, targetPath);
}
const projectBackendDirPath = context.amplify.pathManager.getBackendDirPath();
const parametersPath = path.join(projectBackendDirPath, 'function', functionName);
const dirContents = fs.readdirSync(parametersPath);
if (dirContents.includes('parameters.json')) {
JSONUtilities.writeJson(path.join(parametersPath, 'parameters.json'), { modules: values.join() });
}

await cleanFunctions(key, values, category, context, targetPath);
}
Expand Down

0 comments on commit 75f5ace

Please sign in to comment.