Skip to content

Commit 35ad560

Browse files
committed
chore: code refactor, tests
1 parent 4282b37 commit 35ad560

File tree

5 files changed

+127
-26
lines changed

5 files changed

+127
-26
lines changed

__tests__/main.test.ts

+47
Original file line numberDiff line numberDiff line change
@@ -1389,6 +1389,53 @@ describe('Deploy CloudFormation Stack', () => {
13891389
expect(mockCfnClient).toHaveReceivedCommandTimes(ExecuteChangeSetCommand, 0)
13901390
})
13911391

1392+
test('deploys the stack with template', async () => {
1393+
const inputs: Inputs = {
1394+
name: 'MockStack',
1395+
template: 'template.yaml',
1396+
capabilities: 'CAPABILITY_IAM',
1397+
'parameter-overrides': '[email protected]',
1398+
'envs-prefix-for-parameter-overrides': 'CFD_',
1399+
'no-fail-on-empty-changeset': '0',
1400+
'disable-rollback': '0',
1401+
'timeout-in-minutes': '',
1402+
'notification-arns': '',
1403+
'role-arn': '',
1404+
tags: '',
1405+
'termination-protection': ''
1406+
}
1407+
1408+
jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
1409+
return inputs[name]
1410+
})
1411+
1412+
process.env = Object.assign(process.env, { CFD_AdminNickname: 'root' })
1413+
1414+
await run()
1415+
1416+
expect(core.setFailed).toHaveBeenCalledTimes(0)
1417+
expect(mockDescribeStacks).toHaveBeenCalledTimes(2)
1418+
expect(mockDescribeStacks).toHaveBeenNthCalledWith(1, {
1419+
StackName: 'MockStack'
1420+
})
1421+
expect(mockDescribeStacks).toHaveBeenNthCalledWith(2, {
1422+
StackName: mockStackId
1423+
})
1424+
expect(mockCreateStack).toHaveBeenNthCalledWith(1, {
1425+
StackName: 'MockStack',
1426+
TemplateBody: mockTemplate,
1427+
Capabilities: ['CAPABILITY_IAM'],
1428+
Parameters: [
1429+
{ ParameterKey: 'AdminEmail', ParameterValue: '[email protected]' },
1430+
{ ParameterKey: 'AdminNickname', ParameterValue: 'root' }
1431+
],
1432+
DisableRollback: false,
1433+
EnableTerminationProtection: false
1434+
})
1435+
expect(core.setOutput).toHaveBeenCalledTimes(1)
1436+
expect(core.setOutput).toHaveBeenNthCalledWith(1, 'stack-id', mockStackId)
1437+
})
1438+
13921439
test('error is caught by core.setFailed', async () => {
13931440
mockCfnClient.reset().on(DescribeStacksCommand).rejects(new Error())
13941441

__tests__/utils.test.ts

+30-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { parseTags, isUrl, parseParameters } from '../src/utils'
1+
import {
2+
parseTags,
3+
isUrl,
4+
parseParameters,
5+
parseParametersFromEnvs
6+
} from '../src/utils'
27
import * as path from 'path'
38

49
jest.mock('@actions/core')
@@ -119,6 +124,30 @@ describe('Parse Parameters', () => {
119124
])
120125
})
121126

127+
test('returns parameters list from envs if envsPrefixForParameterOverrides is defined', async () => {
128+
const mockEnvs = {
129+
CFD_MyParam1: 'myValue1',
130+
CFD_MyParam2: 'myValue2',
131+
USER: 'test',
132+
PATH: '/bin:/usr/local/bin',
133+
HOME: '/home/test',
134+
AWS_PAGER: ''
135+
}
136+
const envsPrefix = 'CFD_'
137+
138+
const json = parseParametersFromEnvs(envsPrefix, mockEnvs)
139+
expect(json).toEqual([
140+
{
141+
ParameterKey: 'MyParam1',
142+
ParameterValue: 'myValue1'
143+
},
144+
{
145+
ParameterKey: 'MyParam2',
146+
ParameterValue: 'myValue2'
147+
}
148+
])
149+
})
150+
122151
test('throws error if file is not found', async () => {
123152
const filename = 'file://' + path.join(__dirname, 'params.tezt.json')
124153
expect(() => parseParameters(filename)).toThrow()

dist/index.js

+18-10
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,6 @@ let clientConfiguration = {
227227
customUserAgent: 'aws-cloudformation-github-deploy-for-github-actions'
228228
};
229229
function run() {
230-
var _a;
231230
return __awaiter(this, void 0, void 0, function* () {
232231
try {
233232
const { GITHUB_WORKSPACE = __dirname } = process.env;
@@ -243,7 +242,7 @@ function run() {
243242
const parameterOverrides = core.getInput('parameter-overrides', {
244243
required: false
245244
});
246-
const envsPrefixForparameterOverrides = core.getInput('envs-prefix-for-parameter-overrides', {
245+
const envsPrefixForParameterOverrides = core.getInput('envs-prefix-for-parameter-overrides', {
247246
required: false
248247
});
249248
const noEmptyChangeSet = !!+core.getInput('no-fail-on-empty-changeset', {
@@ -320,13 +319,11 @@ function run() {
320319
if (parameterOverrides) {
321320
params.Parameters = (0, utils_1.parseParameters)(parameterOverrides.trim());
322321
}
323-
if (envsPrefixForparameterOverrides.length > 0) {
324-
(_a = params.Parameters) === null || _a === void 0 ? void 0 : _a.concat(Object.keys(process.env)
325-
.filter(key => key.startsWith(envsPrefixForparameterOverrides))
326-
.map(key => ({
327-
ParameterKey: key,
328-
ParameterValue: process.env[key]
329-
})));
322+
if (envsPrefixForParameterOverrides.length > 0) {
323+
const envParameters = (0, utils_1.parseParametersFromEnvs)(envsPrefixForParameterOverrides, process.env);
324+
params.Parameters = params.Parameters
325+
? [...params.Parameters, ...envParameters]
326+
: envParameters;
330327
}
331328
const stackId = yield (0, deploy_1.deployStack)(cfn, params, noEmptyChangeSet, noExecuteChangeSet, noDeleteFailedChangeSet);
332329
core.setOutput('stack-id', stackId || 'UNKNOWN');
@@ -383,7 +380,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
383380
return result;
384381
};
385382
Object.defineProperty(exports, "__esModule", ({ value: true }));
386-
exports.configureProxy = exports.parseParameters = exports.parseNumber = exports.parseString = exports.parseARNs = exports.parseTags = exports.isUrl = void 0;
383+
exports.configureProxy = exports.parseParametersFromEnvs = exports.parseParameters = exports.parseNumber = exports.parseString = exports.parseARNs = exports.parseTags = exports.isUrl = void 0;
384+
const aws = __importStar(__nccwpck_require__(71786));
387385
const fs = __importStar(__nccwpck_require__(57147));
388386
const https_proxy_agent_1 = __nccwpck_require__(77219);
389387
function isUrl(s) {
@@ -455,6 +453,16 @@ function parseParameters(parameterOverrides) {
455453
});
456454
}
457455
exports.parseParameters = parseParameters;
456+
function parseParametersFromEnvs(prefix, envs) {
457+
const parameters = Object.keys(envs)
458+
.filter(key => key.startsWith(prefix))
459+
.map(key => ({
460+
ParameterKey: key.substring(prefix.length),
461+
ParameterValue: envs[key]
462+
}));
463+
return parameters;
464+
}
465+
exports.parseParametersFromEnvs = parseParametersFromEnvs;
458466
function configureProxy(proxyServer) {
459467
const proxyFromEnv = process.env.HTTP_PROXY || process.env.http_proxy;
460468
if (proxyFromEnv || proxyServer) {

src/main.ts

+16-12
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import {
1515
parseNumber,
1616
parseARNs,
1717
parseParameters,
18-
configureProxy
18+
configureProxy,
19+
parseParametersFromEnvs
1920
} from './utils'
2021
import { NodeHttpHandler } from '@smithy/node-http-handler'
2122

@@ -52,9 +53,12 @@ export async function run(): Promise<void> {
5253
const parameterOverrides = core.getInput('parameter-overrides', {
5354
required: false
5455
})
55-
const envsPrefixForparameterOverrides = core.getInput('envs-prefix-for-parameter-overrides', {
56-
required: false
57-
})
56+
const envsPrefixForParameterOverrides = core.getInput(
57+
'envs-prefix-for-parameter-overrides',
58+
{
59+
required: false
60+
}
61+
)
5862
const noEmptyChangeSet = !!+core.getInput('no-fail-on-empty-changeset', {
5963
required: false
6064
})
@@ -153,14 +157,14 @@ export async function run(): Promise<void> {
153157
params.Parameters = parseParameters(parameterOverrides.trim())
154158
}
155159

156-
if (envsPrefixForparameterOverrides.length > 0) {
157-
params.Parameters?.concat(
158-
Object.keys(process.env)
159-
.filter(key => key.startsWith(envsPrefixForparameterOverrides))
160-
.map(key => ({
161-
ParameterKey: key,
162-
ParameterValue: process.env[key]
163-
})))
160+
if (envsPrefixForParameterOverrides.length > 0) {
161+
const envParameters = parseParametersFromEnvs(
162+
envsPrefixForParameterOverrides,
163+
process.env
164+
)
165+
params.Parameters = params.Parameters
166+
? [...params.Parameters, ...envParameters]
167+
: envParameters
164168
}
165169

166170
const stackId = await deployStack(

src/utils.ts

+16-3
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,22 @@ export function parseParameters(parameterOverrides: string): Parameter[] {
7878
})
7979
}
8080

81-
export function configureProxy(
82-
proxyServer: string | undefined
83-
): HttpsProxyAgent | undefined {
81+
type Envs = { [k: string]: string | undefined }
82+
83+
export function parseParametersFromEnvs(
84+
prefix: string,
85+
envs: Envs
86+
): Parameter[] {
87+
const parameters: Parameter[] = Object.keys(envs)
88+
.filter(key => key.startsWith(prefix))
89+
.map(key => ({
90+
ParameterKey: key.substring(prefix.length),
91+
ParameterValue: envs[key]
92+
}))
93+
return parameters
94+
}
95+
96+
export function configureProxy(proxyServer: string | undefined) {
8497
const proxyFromEnv = process.env.HTTP_PROXY || process.env.http_proxy
8598

8699
if (proxyFromEnv || proxyServer) {

0 commit comments

Comments
 (0)