Skip to content

Commit 40be365

Browse files
committed
Change so that parameter-overrides is allow to use native yaml for github actions
1 parent 2b6f33f commit 40be365

File tree

4 files changed

+46
-4
lines changed

4 files changed

+46
-4
lines changed

README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,22 @@ A few inputs are highlighted below. See [action.yml](action.yml) for the full do
2424

2525
#### parameter-overrides (OPTIONAL)
2626

27-
To override parameter values in the template you can provide a string or a file that is either local or an URL.
27+
To override parameter values in the template you can provide a string, a file that is either local or an URL, or a native YAML object.
2828

2929
Override multiple parameters separated by commas: `"MyParam1=myValue1,MyParam2=myValue2"`
3030

3131
Override a comma delimited list: `"MyParam1=myValue1,MyParam1=myValue2"` or `MyParam1="myValue1,myValue2"`
3232

33+
Override parameters using a native YAML object:
34+
```yaml
35+
parameter-overrides:
36+
MyParam1: myValue1
37+
MyParam2: myValue2
38+
MyListParam:
39+
- item1
40+
- item2
41+
```
42+
3343
Override parameters using a local JSON file: `"file:///${{ github.workspace }}/parameters.json"` with a file named `parameters.json` at the root of the repository:
3444
```json
3545
[

action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ inputs:
1515
required: false
1616
default: "CAPABILITY_IAM"
1717
parameter-overrides:
18-
description: 'The parameters to override in the stack inputs. You can pass a comma-delimited list or a file URL. Comma-delimited list has each entry formatted as <ParameterName>=<ParameterValue> or <ParameterName>="<ParameterValue>,<ParameterValue>". A JSON file can be a local file with a "file://" prefix or remote URL. The file should look like: [ { "ParameterKey": "KeyPairName", "ParameterValue": "MyKey" }]'
18+
description: 'The parameters to override in the stack inputs. You can pass a comma-delimited list, a file URL, or a native YAML object. Comma-delimited list has each entry formatted as <ParameterName>=<ParameterValue> or <ParameterName>="<ParameterValue>,<ParameterValue>". A JSON file can be a local file with a "file://" prefix or remote URL. The file should look like: [ { "ParameterKey": "KeyPairName", "ParameterValue": "MyKey" }]. For YAML objects, provide parameter keys and values directly in the YAML structure.'
1919
required: false
2020
no-execute-changeset:
2121
description: "Indicates whether to execute to the change set or have it reviewed. Default to '0' (will execute the change set)"

src/main.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,23 @@ export async function run(): Promise<void> {
5454
.split(',')
5555
.map(capability => capability.trim()) as Capability[]
5656

57-
const parameterOverrides = core.getInput('parameter-overrides', {
57+
// Get parameter overrides - could be a string or a parsed YAML object
58+
const rawParameterOverrides = core.getInput('parameter-overrides', {
5859
required: false
5960
})
61+
// Try to parse as JSON in case it's a YAML object that was auto-converted to JSON
62+
let parameterOverrides: string | Record<string, any> = rawParameterOverrides
63+
try {
64+
if (rawParameterOverrides) {
65+
const possibleObject = JSON.parse(rawParameterOverrides)
66+
if (possibleObject && typeof possibleObject === 'object') {
67+
parameterOverrides = possibleObject
68+
}
69+
}
70+
} catch (e) {
71+
// If parsing fails, use the raw string value
72+
core.debug('Parameter overrides is not a JSON object, using as string')
73+
}
6074
const noEmptyChangeSet = !!+core.getInput('no-fail-on-empty-changeset', {
6175
required: false
6276
})

src/utils.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,24 @@ export function parseNumber(s: string): number | undefined {
3737
return parseInt(s) || undefined
3838
}
3939

40-
export function parseParameters(parameterOverrides: string): Parameter[] {
40+
export function parseParameters(parameterOverrides: string | Record<string, any>): Parameter[] {
41+
// Case 1: Handle native YAML objects
42+
if (parameterOverrides && typeof parameterOverrides !== 'string') {
43+
return Object.keys(parameterOverrides).map(key => {
44+
const value = parameterOverrides[key]
45+
return {
46+
ParameterKey: key,
47+
ParameterValue: typeof value === 'string' ? value : JSON.stringify(value)
48+
}
49+
})
50+
}
51+
52+
// Case 2: Empty string
53+
if (!parameterOverrides) {
54+
return []
55+
}
56+
57+
// Case 3: URL to JSON file
4158
try {
4259
const path = new URL(parameterOverrides)
4360
const rawParameters = fs.readFileSync(path, 'utf-8')
@@ -50,6 +67,7 @@ export function parseParameters(parameterOverrides: string): Parameter[] {
5067
}
5168
}
5269

70+
// Case 4: String format "key=value,key2=value2"
5371
const parameters = new Map<string, string>()
5472
parameterOverrides
5573
.split(/,(?=(?:(?:[^"']*["|']){2})*[^"']*$)/g)

0 commit comments

Comments
 (0)