Skip to content

Commit 5816f59

Browse files
committed
Parse parameters from a file
1 parent dfbee8a commit 5816f59

File tree

5 files changed

+83
-13
lines changed

5 files changed

+83
-13
lines changed

.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,7 @@ Thumbs.db
9696

9797
# Ignore built ts files
9898
__tests__/runner/*
99-
lib/**/*
99+
lib/**/*
100+
101+
# Intellij IDEA metadata
102+
.idea/

__tests__/params.test.json

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[
2+
{
3+
"ParameterKey": "MyParam1",
4+
"ParameterValue": "myValue1"
5+
},
6+
{
7+
"ParameterKey": "MyParam2",
8+
"ParameterValue": "myValue2"
9+
}
10+
]

__tests__/utils.test.ts

+36-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import { parseTags, isUrl } from '../src/utils'
1+
import { parseTags, isUrl, parseParameters } from '../src/utils'
22

33
jest.mock('@actions/core')
4-
jest.mock('fs')
54

65
describe('Determine a valid url', () => {
76
beforeEach(() => {
@@ -36,3 +35,38 @@ describe('Parse Tags', () => {
3635
expect(json).toEqual([{ Key: 'Test', Value: 'Value' }])
3736
})
3837
})
38+
39+
describe('Parse Parameters', () => {
40+
beforeEach(() => {
41+
jest.clearAllMocks()
42+
})
43+
44+
test('returns parameters list from string', async () => {
45+
const json = parseParameters('MyParam1=myValue1,MyParam2=myValue2')
46+
expect(json).toEqual([
47+
{
48+
ParameterKey: 'MyParam1',
49+
ParameterValue: 'myValue1'
50+
},
51+
{
52+
ParameterKey: 'MyParam2',
53+
ParameterValue: 'myValue2'
54+
}
55+
])
56+
})
57+
58+
test('returns parameters list from file', async () => {
59+
const filename = 'file://__tests__/params.test.json'
60+
const json = parseParameters(filename)
61+
expect(json).toEqual([
62+
{
63+
ParameterKey: 'MyParam1',
64+
ParameterValue: 'myValue1'
65+
},
66+
{
67+
ParameterKey: 'MyParam2',
68+
ParameterValue: 'myValue2'
69+
}
70+
])
71+
})
72+
})

src/main.ts

+9-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@ import * as core from '@actions/core'
33
import * as aws from 'aws-sdk'
44
import * as fs from 'fs'
55
import { deployStack, getStackOutputs } from './deploy'
6-
import { isUrl, parseTags, parseString, parseNumber, parseARNs } from './utils'
6+
import {
7+
isUrl,
8+
parseTags,
9+
parseString,
10+
parseNumber,
11+
parseARNs,
12+
parseParameters
13+
} from './utils'
714

815
export type CreateStackInput = aws.CloudFormation.Types.CreateStackInput
916
export type CreateChangeSetInput = aws.CloudFormation.Types.CreateChangeSetInput
@@ -96,15 +103,7 @@ export async function run(): Promise<void> {
96103
}
97104

98105
if (parameterOverrides) {
99-
params.Parameters = [
100-
...parameterOverrides.split(',').map(parameter => {
101-
const [key, value] = parameter.trim().split('=')
102-
return {
103-
ParameterKey: key,
104-
ParameterValue: value
105-
}
106-
})
107-
]
106+
params.Parameters = parseParameters(parameterOverrides)
108107
}
109108

110109
const stackId = await deployStack(cfn, params, noEmptyChangeSet)

src/utils.ts

+24
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import * as aws from 'aws-sdk'
2+
import * as fs from 'fs'
3+
import { Parameter } from 'aws-sdk/clients/cloudformation'
24

35
export function isUrl(s: string): boolean {
46
let url
@@ -33,3 +35,25 @@ export function parseString(s: string): string | undefined {
3335
export function parseNumber(s: string): number | undefined {
3436
return parseInt(s) || undefined
3537
}
38+
39+
export function parseParameters(parameterOverrides: string): Parameter[] {
40+
if (parameterOverrides.trim().startsWith('file://')) {
41+
const path = parameterOverrides.trim().replace('file://', './')
42+
if (!fs.existsSync(path)) {
43+
throw new Error('parameter input file does not exist')
44+
}
45+
46+
const rawParameters = fs.readFileSync(path, 'utf-8')
47+
return JSON.parse(rawParameters)
48+
}
49+
50+
return [
51+
...parameterOverrides.split(',').map(parameter => {
52+
const [key, value] = parameter.trim().split('=')
53+
return {
54+
ParameterKey: key,
55+
ParameterValue: value
56+
}
57+
})
58+
]
59+
}

0 commit comments

Comments
 (0)