@taimos/projen 0.1.66 → 0.1.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +244 -36
- package/API.md +330 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +18 -0
- package/lib/components/production-release.d.ts +54 -0
- package/lib/components/production-release.js +104 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/projects/cdk-app.js +1 -1
- package/lib/projects/cdk-construct.js +1 -1
- package/lib/projects/monorepo.d.ts +19 -0
- package/lib/projects/monorepo.js +13 -2
- package/lib/projects/private-cdk-app.js +1 -1
- package/lib/projects/private-ts-lib.js +1 -1
- package/lib/projects/prod-cdk-app.js +1 -1
- package/lib/projects/ts-lib.js +1 -1
- package/package.json +3 -2
package/API.md
CHANGED
|
@@ -2,6 +2,213 @@
|
|
|
2
2
|
|
|
3
3
|
## Constructs <a name="Constructs" id="Constructs"></a>
|
|
4
4
|
|
|
5
|
+
### GitHubProductionRelease <a name="GitHubProductionRelease" id="@taimos/projen.GitHubProductionRelease"></a>
|
|
6
|
+
|
|
7
|
+
Adds a manual "Production Release" workflow that promotes a branch into a production branch.
|
|
8
|
+
|
|
9
|
+
The workflow is triggered via `workflow_dispatch`. It fast-forward merges the
|
|
10
|
+
project's default release branch into the selected production branch and
|
|
11
|
+
pushes it. This keeps a production promotion a deliberate, auditable manual
|
|
12
|
+
action separate from merging to the default release branch. When several
|
|
13
|
+
production branches are configured, the operator chooses the target at
|
|
14
|
+
dispatch time.
|
|
15
|
+
|
|
16
|
+
#### Initializers <a name="Initializers" id="@taimos/projen.GitHubProductionRelease.Initializer"></a>
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { GitHubProductionRelease } from '@taimos/projen'
|
|
20
|
+
|
|
21
|
+
new GitHubProductionRelease(scope: GitHubProject, options?: GitHubProductionReleaseOptions)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
| **Name** | **Type** | **Description** |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.Initializer.parameter.scope">scope</a></code> | <code>projen.github.GitHubProject</code> | *No description.* |
|
|
27
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.Initializer.parameter.options">options</a></code> | <code><a href="#@taimos/projen.GitHubProductionReleaseOptions">GitHubProductionReleaseOptions</a></code> | *No description.* |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
##### `scope`<sup>Required</sup> <a name="scope" id="@taimos/projen.GitHubProductionRelease.Initializer.parameter.scope"></a>
|
|
32
|
+
|
|
33
|
+
- *Type:* projen.github.GitHubProject
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
##### `options`<sup>Optional</sup> <a name="options" id="@taimos/projen.GitHubProductionRelease.Initializer.parameter.options"></a>
|
|
38
|
+
|
|
39
|
+
- *Type:* <a href="#@taimos/projen.GitHubProductionReleaseOptions">GitHubProductionReleaseOptions</a>
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
#### Methods <a name="Methods" id="Methods"></a>
|
|
44
|
+
|
|
45
|
+
| **Name** | **Description** |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.toString">toString</a></code> | Returns a string representation of this construct. |
|
|
48
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.with">with</a></code> | Applies one or more mixins to this construct. |
|
|
49
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.postSynthesize">postSynthesize</a></code> | Called after synthesis. |
|
|
50
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.preSynthesize">preSynthesize</a></code> | Called before synthesis. |
|
|
51
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.synthesize">synthesize</a></code> | Synthesizes files to the project output directory. |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
##### `toString` <a name="toString" id="@taimos/projen.GitHubProductionRelease.toString"></a>
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
public toString(): string
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Returns a string representation of this construct.
|
|
62
|
+
|
|
63
|
+
##### `with` <a name="with" id="@taimos/projen.GitHubProductionRelease.with"></a>
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
public with(mixins: ...IMixin[]): IConstruct
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Applies one or more mixins to this construct.
|
|
70
|
+
|
|
71
|
+
Mixins are applied in order. The list of constructs is captured at the
|
|
72
|
+
start of the call, so constructs added by a mixin will not be visited.
|
|
73
|
+
Use multiple `with()` calls if subsequent mixins should apply to added
|
|
74
|
+
constructs.
|
|
75
|
+
|
|
76
|
+
###### `mixins`<sup>Required</sup> <a name="mixins" id="@taimos/projen.GitHubProductionRelease.with.parameter.mixins"></a>
|
|
77
|
+
|
|
78
|
+
- *Type:* ...constructs.IMixin[]
|
|
79
|
+
|
|
80
|
+
The mixins to apply.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
##### `postSynthesize` <a name="postSynthesize" id="@taimos/projen.GitHubProductionRelease.postSynthesize"></a>
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
public postSynthesize(): void
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Called after synthesis.
|
|
91
|
+
|
|
92
|
+
Order is *not* guaranteed.
|
|
93
|
+
|
|
94
|
+
##### `preSynthesize` <a name="preSynthesize" id="@taimos/projen.GitHubProductionRelease.preSynthesize"></a>
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
public preSynthesize(): void
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Called before synthesis.
|
|
101
|
+
|
|
102
|
+
##### `synthesize` <a name="synthesize" id="@taimos/projen.GitHubProductionRelease.synthesize"></a>
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
public synthesize(): void
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Synthesizes files to the project output directory.
|
|
109
|
+
|
|
110
|
+
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
|
|
111
|
+
|
|
112
|
+
| **Name** | **Description** |
|
|
113
|
+
| --- | --- |
|
|
114
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
|
|
115
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.isComponent">isComponent</a></code> | Test whether the given construct is a component. |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
##### `isConstruct` <a name="isConstruct" id="@taimos/projen.GitHubProductionRelease.isConstruct"></a>
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
import { GitHubProductionRelease } from '@taimos/projen'
|
|
123
|
+
|
|
124
|
+
GitHubProductionRelease.isConstruct(x: any)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Checks if `x` is a construct.
|
|
128
|
+
|
|
129
|
+
Use this method instead of `instanceof` to properly detect `Construct`
|
|
130
|
+
instances, even when the construct library is symlinked.
|
|
131
|
+
|
|
132
|
+
Explanation: in JavaScript, multiple copies of the `constructs` library on
|
|
133
|
+
disk are seen as independent, completely different libraries. As a
|
|
134
|
+
consequence, the class `Construct` in each copy of the `constructs` library
|
|
135
|
+
is seen as a different class, and an instance of one class will not test as
|
|
136
|
+
`instanceof` the other class. `npm install` will not create installations
|
|
137
|
+
like this, but users may manually symlink construct libraries together or
|
|
138
|
+
use a monorepo tool: in those cases, multiple copies of the `constructs`
|
|
139
|
+
library can be accidentally installed, and `instanceof` will behave
|
|
140
|
+
unpredictably. It is safest to avoid using `instanceof`, and using
|
|
141
|
+
this type-testing method instead.
|
|
142
|
+
|
|
143
|
+
###### `x`<sup>Required</sup> <a name="x" id="@taimos/projen.GitHubProductionRelease.isConstruct.parameter.x"></a>
|
|
144
|
+
|
|
145
|
+
- *Type:* any
|
|
146
|
+
|
|
147
|
+
Any object.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
##### `isComponent` <a name="isComponent" id="@taimos/projen.GitHubProductionRelease.isComponent"></a>
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
import { GitHubProductionRelease } from '@taimos/projen'
|
|
155
|
+
|
|
156
|
+
GitHubProductionRelease.isComponent(x: any)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Test whether the given construct is a component.
|
|
160
|
+
|
|
161
|
+
###### `x`<sup>Required</sup> <a name="x" id="@taimos/projen.GitHubProductionRelease.isComponent.parameter.x"></a>
|
|
162
|
+
|
|
163
|
+
- *Type:* any
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
168
|
+
|
|
169
|
+
| **Name** | **Type** | **Description** |
|
|
170
|
+
| --- | --- | --- |
|
|
171
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
|
|
172
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.property.project">project</a></code> | <code>projen.Project</code> | *No description.* |
|
|
173
|
+
| <code><a href="#@taimos/projen.GitHubProductionRelease.property.workflow">workflow</a></code> | <code>projen.github.GithubWorkflow</code> | The generated production release workflow. |
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
##### `node`<sup>Required</sup> <a name="node" id="@taimos/projen.GitHubProductionRelease.property.node"></a>
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
public readonly node: Node;
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
- *Type:* constructs.Node
|
|
184
|
+
|
|
185
|
+
The tree node.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
##### `project`<sup>Required</sup> <a name="project" id="@taimos/projen.GitHubProductionRelease.property.project"></a>
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
public readonly project: Project;
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
- *Type:* projen.Project
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
##### `workflow`<sup>Required</sup> <a name="workflow" id="@taimos/projen.GitHubProductionRelease.property.workflow"></a>
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
public readonly workflow: GithubWorkflow;
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
- *Type:* projen.github.GithubWorkflow
|
|
206
|
+
|
|
207
|
+
The generated production release workflow.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
|
|
5
212
|
### MonorepoProject <a name="MonorepoProject" id="@taimos/projen.MonorepoProject"></a>
|
|
6
213
|
|
|
7
214
|
Private PNPM-workspace monorepo root, following Taimos ADR-0002.
|
|
@@ -666,10 +873,12 @@ When given a project, this it the project itself.
|
|
|
666
873
|
| <code><a href="#@taimos/projen.MonorepoProject.property.eslint">eslint</a></code> | <code>projen.javascript.Eslint</code> | *No description.* |
|
|
667
874
|
| <code><a href="#@taimos/projen.MonorepoProject.property.tsconfig">tsconfig</a></code> | <code>projen.javascript.TypescriptConfig</code> | *No description.* |
|
|
668
875
|
| <code><a href="#@taimos/projen.MonorepoProject.property.tsconfigEslint">tsconfigEslint</a></code> | <code>projen.javascript.TypescriptConfig</code> | *No description.* |
|
|
876
|
+
| <code><a href="#@taimos/projen.MonorepoProject.property.defaultReleaseBranch">defaultReleaseBranch</a></code> | <code>string</code> | The default release branch (promoted by the production release workflow). |
|
|
669
877
|
| <code><a href="#@taimos/projen.MonorepoProject.property.prBuildWorkflow">prBuildWorkflow</a></code> | <code>projen.github.GithubWorkflow</code> | The unified PR build workflow. |
|
|
670
878
|
| <code><a href="#@taimos/projen.MonorepoProject.property.workspaceFile">workspaceFile</a></code> | <code>projen.YamlFile</code> | The generated `pnpm-workspace.yaml`. |
|
|
671
879
|
| <code><a href="#@taimos/projen.MonorepoProject.property.amplifyFile">amplifyFile</a></code> | <code>projen.YamlFile</code> | The generated `amplify.yml`, if any Amplify apps were configured. |
|
|
672
880
|
| <code><a href="#@taimos/projen.MonorepoProject.property.assignApprover">assignApprover</a></code> | <code>projen-pipelines.GitHubAssignApprover</code> | The PR approver assignment, if enabled. |
|
|
881
|
+
| <code><a href="#@taimos/projen.MonorepoProject.property.productionRelease">productionRelease</a></code> | <code><a href="#@taimos/projen.GitHubProductionRelease">GitHubProductionRelease</a></code> | The production release workflow, if enabled. |
|
|
673
882
|
|
|
674
883
|
---
|
|
675
884
|
|
|
@@ -1356,6 +1565,18 @@ public readonly tsconfigEslint: TypescriptConfig;
|
|
|
1356
1565
|
|
|
1357
1566
|
---
|
|
1358
1567
|
|
|
1568
|
+
##### `defaultReleaseBranch`<sup>Required</sup> <a name="defaultReleaseBranch" id="@taimos/projen.MonorepoProject.property.defaultReleaseBranch"></a>
|
|
1569
|
+
|
|
1570
|
+
```typescript
|
|
1571
|
+
public readonly defaultReleaseBranch: string;
|
|
1572
|
+
```
|
|
1573
|
+
|
|
1574
|
+
- *Type:* string
|
|
1575
|
+
|
|
1576
|
+
The default release branch (promoted by the production release workflow).
|
|
1577
|
+
|
|
1578
|
+
---
|
|
1579
|
+
|
|
1359
1580
|
##### `prBuildWorkflow`<sup>Required</sup> <a name="prBuildWorkflow" id="@taimos/projen.MonorepoProject.property.prBuildWorkflow"></a>
|
|
1360
1581
|
|
|
1361
1582
|
```typescript
|
|
@@ -1404,6 +1625,18 @@ The PR approver assignment, if enabled.
|
|
|
1404
1625
|
|
|
1405
1626
|
---
|
|
1406
1627
|
|
|
1628
|
+
##### `productionRelease`<sup>Optional</sup> <a name="productionRelease" id="@taimos/projen.MonorepoProject.property.productionRelease"></a>
|
|
1629
|
+
|
|
1630
|
+
```typescript
|
|
1631
|
+
public readonly productionRelease: GitHubProductionRelease;
|
|
1632
|
+
```
|
|
1633
|
+
|
|
1634
|
+
- *Type:* <a href="#@taimos/projen.GitHubProductionRelease">GitHubProductionRelease</a>
|
|
1635
|
+
|
|
1636
|
+
The production release workflow, if enabled.
|
|
1637
|
+
|
|
1638
|
+
---
|
|
1639
|
+
|
|
1407
1640
|
#### Constants <a name="Constants" id="Constants"></a>
|
|
1408
1641
|
|
|
1409
1642
|
| **Name** | **Type** | **Description** |
|
|
@@ -9922,6 +10155,72 @@ public readonly DEFAULT_TS_JEST_TRANFORM_PATTERN: string;
|
|
|
9922
10155
|
|
|
9923
10156
|
## Structs <a name="Structs" id="Structs"></a>
|
|
9924
10157
|
|
|
10158
|
+
### GitHubProductionReleaseOptions <a name="GitHubProductionReleaseOptions" id="@taimos/projen.GitHubProductionReleaseOptions"></a>
|
|
10159
|
+
|
|
10160
|
+
#### Initializer <a name="Initializer" id="@taimos/projen.GitHubProductionReleaseOptions.Initializer"></a>
|
|
10161
|
+
|
|
10162
|
+
```typescript
|
|
10163
|
+
import { GitHubProductionReleaseOptions } from '@taimos/projen'
|
|
10164
|
+
|
|
10165
|
+
const gitHubProductionReleaseOptions: GitHubProductionReleaseOptions = { ... }
|
|
10166
|
+
```
|
|
10167
|
+
|
|
10168
|
+
#### Properties <a name="Properties" id="Properties"></a>
|
|
10169
|
+
|
|
10170
|
+
| **Name** | **Type** | **Description** |
|
|
10171
|
+
| --- | --- | --- |
|
|
10172
|
+
| <code><a href="#@taimos/projen.GitHubProductionReleaseOptions.property.productionBranches">productionBranches</a></code> | <code>string[]</code> | The production branches that the source branch may be promoted into. |
|
|
10173
|
+
| <code><a href="#@taimos/projen.GitHubProductionReleaseOptions.property.runnerTags">runnerTags</a></code> | <code>string[]</code> | The runner tags used to select the runner. |
|
|
10174
|
+
| <code><a href="#@taimos/projen.GitHubProductionReleaseOptions.property.workflowName">workflowName</a></code> | <code>string</code> | The name of the generated workflow (and its `.yml` file). |
|
|
10175
|
+
|
|
10176
|
+
---
|
|
10177
|
+
|
|
10178
|
+
##### `productionBranches`<sup>Optional</sup> <a name="productionBranches" id="@taimos/projen.GitHubProductionReleaseOptions.property.productionBranches"></a>
|
|
10179
|
+
|
|
10180
|
+
```typescript
|
|
10181
|
+
public readonly productionBranches: string[];
|
|
10182
|
+
```
|
|
10183
|
+
|
|
10184
|
+
- *Type:* string[]
|
|
10185
|
+
- *Default:* ['production']
|
|
10186
|
+
|
|
10187
|
+
The production branches that the source branch may be promoted into.
|
|
10188
|
+
|
|
10189
|
+
Each branch typically backs its own production deployment — e.g. one Amplify
|
|
10190
|
+
app tracking `production` and another tracking `production2`. When more than
|
|
10191
|
+
one branch is given, the `workflow_dispatch` trigger exposes a `target`
|
|
10192
|
+
choice input so the operator picks which branch to promote into at dispatch
|
|
10193
|
+
time. The first entry is the default selection. With a single branch, no
|
|
10194
|
+
input is rendered and that branch is always the target.
|
|
10195
|
+
|
|
10196
|
+
---
|
|
10197
|
+
|
|
10198
|
+
##### `runnerTags`<sup>Optional</sup> <a name="runnerTags" id="@taimos/projen.GitHubProductionReleaseOptions.property.runnerTags"></a>
|
|
10199
|
+
|
|
10200
|
+
```typescript
|
|
10201
|
+
public readonly runnerTags: string[];
|
|
10202
|
+
```
|
|
10203
|
+
|
|
10204
|
+
- *Type:* string[]
|
|
10205
|
+
- *Default:* ['ubuntu-latest']
|
|
10206
|
+
|
|
10207
|
+
The runner tags used to select the runner.
|
|
10208
|
+
|
|
10209
|
+
---
|
|
10210
|
+
|
|
10211
|
+
##### `workflowName`<sup>Optional</sup> <a name="workflowName" id="@taimos/projen.GitHubProductionReleaseOptions.property.workflowName"></a>
|
|
10212
|
+
|
|
10213
|
+
```typescript
|
|
10214
|
+
public readonly workflowName: string;
|
|
10215
|
+
```
|
|
10216
|
+
|
|
10217
|
+
- *Type:* string
|
|
10218
|
+
- *Default:* 'production-release'
|
|
10219
|
+
|
|
10220
|
+
The name of the generated workflow (and its `.yml` file).
|
|
10221
|
+
|
|
10222
|
+
---
|
|
10223
|
+
|
|
9925
10224
|
### MonorepoAmplifyApp <a name="MonorepoAmplifyApp" id="@taimos/projen.MonorepoAmplifyApp"></a>
|
|
9926
10225
|
|
|
9927
10226
|
One AWS Amplify Hosting application served from a workspace package.
|
|
@@ -10257,6 +10556,8 @@ const monorepoProjectOptions: MonorepoProjectOptions = { ... }
|
|
|
10257
10556
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.defaultApprovers">defaultApprovers</a></code> | <code>string[]</code> | Approvers assigned when no author-specific mapping matches. |
|
|
10258
10557
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.nodeVersion">nodeVersion</a></code> | <code>string</code> | The Node.js version used in the generated build workflow. |
|
|
10259
10558
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.pnpmWorkspaceVersion">pnpmWorkspaceVersion</a></code> | <code>string</code> | The pnpm version pinned for the workspace and CI. |
|
|
10559
|
+
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.productionRelease">productionRelease</a></code> | <code>boolean</code> | Whether to add a manual "Production Release" workflow that promotes a branch to the production branch (see `GitHubProductionRelease`). |
|
|
10560
|
+
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.productionReleaseOptions">productionReleaseOptions</a></code> | <code><a href="#@taimos/projen.GitHubProductionReleaseOptions">GitHubProductionReleaseOptions</a></code> | Options for the production release workflow. |
|
|
10260
10561
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.runTestsInBuild">runTestsInBuild</a></code> | <code>boolean</code> | Whether the unified build workflow also runs `pnpm -r run test`. |
|
|
10261
10562
|
| <code><a href="#@taimos/projen.MonorepoProjectOptions.property.workspaceOptions">workspaceOptions</a></code> | <code><a href="#@taimos/projen.MonorepoWorkspaceOptions">MonorepoWorkspaceOptions</a></code> | PNPM workspace tuning for the generated `pnpm-workspace.yaml`. |
|
|
10262
10563
|
|
|
@@ -12469,6 +12770,35 @@ The pnpm version pinned for the workspace and CI.
|
|
|
12469
12770
|
|
|
12470
12771
|
---
|
|
12471
12772
|
|
|
12773
|
+
##### `productionRelease`<sup>Optional</sup> <a name="productionRelease" id="@taimos/projen.MonorepoProjectOptions.property.productionRelease"></a>
|
|
12774
|
+
|
|
12775
|
+
```typescript
|
|
12776
|
+
public readonly productionRelease: boolean;
|
|
12777
|
+
```
|
|
12778
|
+
|
|
12779
|
+
- *Type:* boolean
|
|
12780
|
+
- *Default:* false
|
|
12781
|
+
|
|
12782
|
+
Whether to add a manual "Production Release" workflow that promotes a branch to the production branch (see `GitHubProductionRelease`).
|
|
12783
|
+
|
|
12784
|
+
---
|
|
12785
|
+
|
|
12786
|
+
##### `productionReleaseOptions`<sup>Optional</sup> <a name="productionReleaseOptions" id="@taimos/projen.MonorepoProjectOptions.property.productionReleaseOptions"></a>
|
|
12787
|
+
|
|
12788
|
+
```typescript
|
|
12789
|
+
public readonly productionReleaseOptions: GitHubProductionReleaseOptions;
|
|
12790
|
+
```
|
|
12791
|
+
|
|
12792
|
+
- *Type:* <a href="#@taimos/projen.GitHubProductionReleaseOptions">GitHubProductionReleaseOptions</a>
|
|
12793
|
+
- *Default:* promote `main` to a `production` branch
|
|
12794
|
+
|
|
12795
|
+
Options for the production release workflow.
|
|
12796
|
+
|
|
12797
|
+
Only used when
|
|
12798
|
+
`productionRelease` is enabled.
|
|
12799
|
+
|
|
12800
|
+
---
|
|
12801
|
+
|
|
12472
12802
|
##### `runTestsInBuild`<sup>Optional</sup> <a name="runTestsInBuild" id="@taimos/projen.MonorepoProjectOptions.property.runTestsInBuild"></a>
|
|
12473
12803
|
|
|
12474
12804
|
```typescript
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './production-release';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./production-release"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wcm9kdWN0aW9uLXJlbGVhc2UnO1xuIl19
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Component, github } from 'projen';
|
|
2
|
+
import { GitHubProject } from 'projen/lib/github';
|
|
3
|
+
export interface GitHubProductionReleaseOptions {
|
|
4
|
+
/**
|
|
5
|
+
* The production branches that the source branch may be promoted into.
|
|
6
|
+
*
|
|
7
|
+
* Each branch typically backs its own production deployment — e.g. one Amplify
|
|
8
|
+
* app tracking `production` and another tracking `production2`. When more than
|
|
9
|
+
* one branch is given, the `workflow_dispatch` trigger exposes a `target`
|
|
10
|
+
* choice input so the operator picks which branch to promote into at dispatch
|
|
11
|
+
* time. The first entry is the default selection. With a single branch, no
|
|
12
|
+
* input is rendered and that branch is always the target.
|
|
13
|
+
*
|
|
14
|
+
* @default ['production']
|
|
15
|
+
*/
|
|
16
|
+
readonly productionBranches?: string[];
|
|
17
|
+
/**
|
|
18
|
+
* The name of the generated workflow (and its `.yml` file).
|
|
19
|
+
*
|
|
20
|
+
* @default 'production-release'
|
|
21
|
+
*/
|
|
22
|
+
readonly workflowName?: string;
|
|
23
|
+
/**
|
|
24
|
+
* The runner tags used to select the runner.
|
|
25
|
+
*
|
|
26
|
+
* @default ['ubuntu-latest']
|
|
27
|
+
*/
|
|
28
|
+
readonly runnerTags?: string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Adds a manual "Production Release" workflow that promotes a branch into a
|
|
32
|
+
* production branch.
|
|
33
|
+
*
|
|
34
|
+
* The workflow is triggered via `workflow_dispatch`. It fast-forward merges the
|
|
35
|
+
* project's default release branch into the selected production branch and
|
|
36
|
+
* pushes it. This keeps a production promotion a deliberate, auditable manual
|
|
37
|
+
* action separate from merging to the default release branch. When several
|
|
38
|
+
* production branches are configured, the operator chooses the target at
|
|
39
|
+
* dispatch time.
|
|
40
|
+
*/
|
|
41
|
+
export declare class GitHubProductionRelease extends Component {
|
|
42
|
+
/**
|
|
43
|
+
* Resolves the branch that is promoted — the project's default release branch.
|
|
44
|
+
*
|
|
45
|
+
* `NodeProject` does not expose the configured default release branch as a
|
|
46
|
+
* public field, so this reads the best available source: a project that
|
|
47
|
+
* exposes `defaultReleaseBranch` (e.g. `MonorepoProject`), then the release
|
|
48
|
+
* component's default branch, falling back to `main`.
|
|
49
|
+
*/
|
|
50
|
+
private static resolveDefaultReleaseBranch;
|
|
51
|
+
/** The generated production release workflow. */
|
|
52
|
+
readonly workflow: github.GithubWorkflow;
|
|
53
|
+
constructor(scope: GitHubProject, options?: GitHubProductionReleaseOptions);
|
|
54
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GitHubProductionRelease = void 0;
|
|
4
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
+
const projen_1 = require("projen");
|
|
6
|
+
/**
|
|
7
|
+
* Adds a manual "Production Release" workflow that promotes a branch into a
|
|
8
|
+
* production branch.
|
|
9
|
+
*
|
|
10
|
+
* The workflow is triggered via `workflow_dispatch`. It fast-forward merges the
|
|
11
|
+
* project's default release branch into the selected production branch and
|
|
12
|
+
* pushes it. This keeps a production promotion a deliberate, auditable manual
|
|
13
|
+
* action separate from merging to the default release branch. When several
|
|
14
|
+
* production branches are configured, the operator chooses the target at
|
|
15
|
+
* dispatch time.
|
|
16
|
+
*/
|
|
17
|
+
class GitHubProductionRelease extends projen_1.Component {
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubProductionRelease", version: "0.1.68" };
|
|
19
|
+
/**
|
|
20
|
+
* Resolves the branch that is promoted — the project's default release branch.
|
|
21
|
+
*
|
|
22
|
+
* `NodeProject` does not expose the configured default release branch as a
|
|
23
|
+
* public field, so this reads the best available source: a project that
|
|
24
|
+
* exposes `defaultReleaseBranch` (e.g. `MonorepoProject`), then the release
|
|
25
|
+
* component's default branch, falling back to `main`.
|
|
26
|
+
*/
|
|
27
|
+
static resolveDefaultReleaseBranch(scope) {
|
|
28
|
+
const anyScope = scope;
|
|
29
|
+
return anyScope.defaultReleaseBranch
|
|
30
|
+
?? anyScope.release?.defaultBranch
|
|
31
|
+
?? 'main';
|
|
32
|
+
}
|
|
33
|
+
/** The generated production release workflow. */
|
|
34
|
+
workflow;
|
|
35
|
+
constructor(scope, options = {}) {
|
|
36
|
+
super(scope);
|
|
37
|
+
if (!scope.github) {
|
|
38
|
+
throw new Error('GitHubProductionRelease requires a project with GitHub enabled');
|
|
39
|
+
}
|
|
40
|
+
const sourceBranch = GitHubProductionRelease.resolveDefaultReleaseBranch(scope);
|
|
41
|
+
const productionBranches = options.productionBranches ?? ['production'];
|
|
42
|
+
if (productionBranches.length === 0) {
|
|
43
|
+
throw new Error('GitHubProductionRelease requires at least one production branch');
|
|
44
|
+
}
|
|
45
|
+
const workflowName = options.workflowName ?? 'production-release';
|
|
46
|
+
const runnerTags = options.runnerTags ?? ['ubuntu-latest'];
|
|
47
|
+
const multipleTargets = productionBranches.length > 1;
|
|
48
|
+
this.workflow = new projen_1.github.GithubWorkflow(scope.github, workflowName);
|
|
49
|
+
this.workflow.on({
|
|
50
|
+
workflowDispatch: multipleTargets ? {
|
|
51
|
+
inputs: {
|
|
52
|
+
target: {
|
|
53
|
+
description: `Production branch to promote ${sourceBranch} into`,
|
|
54
|
+
type: 'choice',
|
|
55
|
+
options: productionBranches,
|
|
56
|
+
default: productionBranches[0],
|
|
57
|
+
required: true,
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
} : {},
|
|
61
|
+
});
|
|
62
|
+
// The target branch is read from an env var rather than interpolated into a
|
|
63
|
+
// run script, so the dispatch input cannot be used for shell injection.
|
|
64
|
+
const targetRef = multipleTargets ? '${{ inputs.target }}' : productionBranches[0];
|
|
65
|
+
this.workflow.addJob('merge-to-production', {
|
|
66
|
+
name: 'Promote to production',
|
|
67
|
+
runsOn: runnerTags,
|
|
68
|
+
permissions: { contents: projen_1.github.workflows.JobPermission.WRITE },
|
|
69
|
+
env: { TARGET_BRANCH: targetRef },
|
|
70
|
+
steps: [
|
|
71
|
+
{
|
|
72
|
+
name: 'Checkout repository',
|
|
73
|
+
uses: 'actions/checkout@v4',
|
|
74
|
+
with: { 'fetch-depth': 0 },
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'Configure git',
|
|
78
|
+
run: [
|
|
79
|
+
'git config user.name "github-actions[bot]"',
|
|
80
|
+
'git config user.email "github-actions[bot]@users.noreply.github.com"',
|
|
81
|
+
].join('\n'),
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'Fetch all branches',
|
|
85
|
+
run: 'git fetch --all',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'Checkout production branch',
|
|
89
|
+
run: 'git checkout "$TARGET_BRANCH"',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: `Merge ${sourceBranch} (fast-forward only)`,
|
|
93
|
+
run: `git merge --ff-only "origin/${sourceBranch}"`,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'Push to production branch',
|
|
97
|
+
run: 'git push origin "$TARGET_BRANCH"',
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.GitHubProductionRelease = GitHubProductionRelease;
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdGlvbi1yZWxlYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvcHJvZHVjdGlvbi1yZWxlYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FBMkM7QUFpQzNDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLGtCQUFTOztJQUVwRDs7Ozs7OztPQU9HO0lBQ0ssTUFBTSxDQUFDLDJCQUEyQixDQUFDLEtBQW9CO1FBQzdELE1BQU0sUUFBUSxHQUFHLEtBQVksQ0FBQztRQUM5QixPQUFPLFFBQVEsQ0FBQyxvQkFBb0I7ZUFDL0IsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFhO2VBQy9CLE1BQU0sQ0FBQztJQUNkLENBQUM7SUFFRCxpREFBaUQ7SUFDakMsUUFBUSxDQUF3QjtJQUVoRCxZQUFZLEtBQW9CLEVBQUUsVUFBMEMsRUFBRTtRQUM1RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEYsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUM7UUFDbEUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTNELE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGVBQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNmLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUU7d0JBQ04sV0FBVyxFQUFFLGdDQUFnQyxZQUFZLE9BQU87d0JBQ2hFLElBQUksRUFBRSxRQUFRO3dCQUNkLE9BQU8sRUFBRSxrQkFBa0I7d0JBQzNCLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLFFBQVEsRUFBRSxJQUFJO3FCQUNmO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNQLENBQUMsQ0FBQztRQUVILDRFQUE0RTtRQUM1RSx3RUFBd0U7UUFDeEUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUU7WUFDMUMsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixNQUFNLEVBQUUsVUFBVTtZQUNsQixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsZUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQy9ELEdBQUcsRUFBRSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7WUFDakMsS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUU7aUJBQzNCO2dCQUNEO29CQUNFLElBQUksRUFBRSxlQUFlO29CQUNyQixHQUFHLEVBQUU7d0JBQ0gsNENBQTRDO3dCQUM1QyxzRUFBc0U7cUJBQ3ZFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDYjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixHQUFHLEVBQUUsaUJBQWlCO2lCQUN2QjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsNEJBQTRCO29CQUNsQyxHQUFHLEVBQUUsK0JBQStCO2lCQUNyQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsU0FBUyxZQUFZLHNCQUFzQjtvQkFDakQsR0FBRyxFQUFFLCtCQUErQixZQUFZLEdBQUc7aUJBQ3BEO2dCQUNEO29CQUNFLElBQUksRUFBRSwyQkFBMkI7b0JBQ2pDLEdBQUcsRUFBRSxrQ0FBa0M7aUJBQ3hDO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQTVGSCwwREE2RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBHaXRIdWJQcm9qZWN0IH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcHJvZHVjdGlvbiBicmFuY2hlcyB0aGF0IHRoZSBzb3VyY2UgYnJhbmNoIG1heSBiZSBwcm9tb3RlZCBpbnRvLlxuICAgKlxuICAgKiBFYWNoIGJyYW5jaCB0eXBpY2FsbHkgYmFja3MgaXRzIG93biBwcm9kdWN0aW9uIGRlcGxveW1lbnQg4oCUIGUuZy4gb25lIEFtcGxpZnlcbiAgICogYXBwIHRyYWNraW5nIGBwcm9kdWN0aW9uYCBhbmQgYW5vdGhlciB0cmFja2luZyBgcHJvZHVjdGlvbjJgLiBXaGVuIG1vcmUgdGhhblxuICAgKiBvbmUgYnJhbmNoIGlzIGdpdmVuLCB0aGUgYHdvcmtmbG93X2Rpc3BhdGNoYCB0cmlnZ2VyIGV4cG9zZXMgYSBgdGFyZ2V0YFxuICAgKiBjaG9pY2UgaW5wdXQgc28gdGhlIG9wZXJhdG9yIHBpY2tzIHdoaWNoIGJyYW5jaCB0byBwcm9tb3RlIGludG8gYXQgZGlzcGF0Y2hcbiAgICogdGltZS4gVGhlIGZpcnN0IGVudHJ5IGlzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbi4gV2l0aCBhIHNpbmdsZSBicmFuY2gsIG5vXG4gICAqIGlucHV0IGlzIHJlbmRlcmVkIGFuZCB0aGF0IGJyYW5jaCBpcyBhbHdheXMgdGhlIHRhcmdldC5cbiAgICpcbiAgICogQGRlZmF1bHQgWydwcm9kdWN0aW9uJ11cbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3Rpb25CcmFuY2hlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHdvcmtmbG93IChhbmQgaXRzIGAueW1sYCBmaWxlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3Byb2R1Y3Rpb24tcmVsZWFzZSdcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJ1bm5lciB0YWdzIHVzZWQgdG8gc2VsZWN0IHRoZSBydW5uZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsndWJ1bnR1LWxhdGVzdCddXG4gICAqL1xuICByZWFkb25seSBydW5uZXJUYWdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQWRkcyBhIG1hbnVhbCBcIlByb2R1Y3Rpb24gUmVsZWFzZVwiIHdvcmtmbG93IHRoYXQgcHJvbW90ZXMgYSBicmFuY2ggaW50byBhXG4gKiBwcm9kdWN0aW9uIGJyYW5jaC5cbiAqXG4gKiBUaGUgd29ya2Zsb3cgaXMgdHJpZ2dlcmVkIHZpYSBgd29ya2Zsb3dfZGlzcGF0Y2hgLiBJdCBmYXN0LWZvcndhcmQgbWVyZ2VzIHRoZVxuICogcHJvamVjdCdzIGRlZmF1bHQgcmVsZWFzZSBicmFuY2ggaW50byB0aGUgc2VsZWN0ZWQgcHJvZHVjdGlvbiBicmFuY2ggYW5kXG4gKiBwdXNoZXMgaXQuIFRoaXMga2VlcHMgYSBwcm9kdWN0aW9uIHByb21vdGlvbiBhIGRlbGliZXJhdGUsIGF1ZGl0YWJsZSBtYW51YWxcbiAqIGFjdGlvbiBzZXBhcmF0ZSBmcm9tIG1lcmdpbmcgdG8gdGhlIGRlZmF1bHQgcmVsZWFzZSBicmFuY2guIFdoZW4gc2V2ZXJhbFxuICogcHJvZHVjdGlvbiBicmFuY2hlcyBhcmUgY29uZmlndXJlZCwgdGhlIG9wZXJhdG9yIGNob29zZXMgdGhlIHRhcmdldCBhdFxuICogZGlzcGF0Y2ggdGltZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlIGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGJyYW5jaCB0aGF0IGlzIHByb21vdGVkIOKAlCB0aGUgcHJvamVjdCdzIGRlZmF1bHQgcmVsZWFzZSBicmFuY2guXG4gICAqXG4gICAqIGBOb2RlUHJvamVjdGAgZG9lcyBub3QgZXhwb3NlIHRoZSBjb25maWd1cmVkIGRlZmF1bHQgcmVsZWFzZSBicmFuY2ggYXMgYVxuICAgKiBwdWJsaWMgZmllbGQsIHNvIHRoaXMgcmVhZHMgdGhlIGJlc3QgYXZhaWxhYmxlIHNvdXJjZTogYSBwcm9qZWN0IHRoYXRcbiAgICogZXhwb3NlcyBgZGVmYXVsdFJlbGVhc2VCcmFuY2hgIChlLmcuIGBNb25vcmVwb1Byb2plY3RgKSwgdGhlbiB0aGUgcmVsZWFzZVxuICAgKiBjb21wb25lbnQncyBkZWZhdWx0IGJyYW5jaCwgZmFsbGluZyBiYWNrIHRvIGBtYWluYC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlc29sdmVEZWZhdWx0UmVsZWFzZUJyYW5jaChzY29wZTogR2l0SHViUHJvamVjdCk6IHN0cmluZyB7XG4gICAgY29uc3QgYW55U2NvcGUgPSBzY29wZSBhcyBhbnk7XG4gICAgcmV0dXJuIGFueVNjb3BlLmRlZmF1bHRSZWxlYXNlQnJhbmNoXG4gICAgICA/PyBhbnlTY29wZS5yZWxlYXNlPy5kZWZhdWx0QnJhbmNoXG4gICAgICA/PyAnbWFpbic7XG4gIH1cblxuICAvKiogVGhlIGdlbmVyYXRlZCBwcm9kdWN0aW9uIHJlbGVhc2Ugd29ya2Zsb3cuICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvdzogZ2l0aHViLkdpdGh1YldvcmtmbG93O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBHaXRIdWJQcm9qZWN0LCBvcHRpb25zOiBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZU9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlKTtcblxuICAgIGlmICghc2NvcGUuZ2l0aHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dpdEh1YlByb2R1Y3Rpb25SZWxlYXNlIHJlcXVpcmVzIGEgcHJvamVjdCB3aXRoIEdpdEh1YiBlbmFibGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlQnJhbmNoID0gR2l0SHViUHJvZHVjdGlvblJlbGVhc2UucmVzb2x2ZURlZmF1bHRSZWxlYXNlQnJhbmNoKHNjb3BlKTtcbiAgICBjb25zdCBwcm9kdWN0aW9uQnJhbmNoZXMgPSBvcHRpb25zLnByb2R1Y3Rpb25CcmFuY2hlcyA/PyBbJ3Byb2R1Y3Rpb24nXTtcbiAgICBpZiAocHJvZHVjdGlvbkJyYW5jaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgcHJvZHVjdGlvbiBicmFuY2gnKTtcbiAgICB9XG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gb3B0aW9ucy53b3JrZmxvd05hbWUgPz8gJ3Byb2R1Y3Rpb24tcmVsZWFzZSc7XG4gICAgY29uc3QgcnVubmVyVGFncyA9IG9wdGlvbnMucnVubmVyVGFncyA/PyBbJ3VidW50dS1sYXRlc3QnXTtcblxuICAgIGNvbnN0IG11bHRpcGxlVGFyZ2V0cyA9IHByb2R1Y3Rpb25CcmFuY2hlcy5sZW5ndGggPiAxO1xuXG4gICAgdGhpcy53b3JrZmxvdyA9IG5ldyBnaXRodWIuR2l0aHViV29ya2Zsb3coc2NvcGUuZ2l0aHViLCB3b3JrZmxvd05hbWUpO1xuICAgIHRoaXMud29ya2Zsb3cub24oe1xuICAgICAgd29ya2Zsb3dEaXNwYXRjaDogbXVsdGlwbGVUYXJnZXRzID8ge1xuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUHJvZHVjdGlvbiBicmFuY2ggdG8gcHJvbW90ZSAke3NvdXJjZUJyYW5jaH0gaW50b2AsXG4gICAgICAgICAgICB0eXBlOiAnY2hvaWNlJyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHByb2R1Y3Rpb25CcmFuY2hlcyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHByb2R1Y3Rpb25CcmFuY2hlc1swXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9IDoge30sXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGFyZ2V0IGJyYW5jaCBpcyByZWFkIGZyb20gYW4gZW52IHZhciByYXRoZXIgdGhhbiBpbnRlcnBvbGF0ZWQgaW50byBhXG4gICAgLy8gcnVuIHNjcmlwdCwgc28gdGhlIGRpc3BhdGNoIGlucHV0IGNhbm5vdCBiZSB1c2VkIGZvciBzaGVsbCBpbmplY3Rpb24uXG4gICAgY29uc3QgdGFyZ2V0UmVmID0gbXVsdGlwbGVUYXJnZXRzID8gJyR7eyBpbnB1dHMudGFyZ2V0IH19JyA6IHByb2R1Y3Rpb25CcmFuY2hlc1swXTtcblxuICAgIHRoaXMud29ya2Zsb3cuYWRkSm9iKCdtZXJnZS10by1wcm9kdWN0aW9uJywge1xuICAgICAgbmFtZTogJ1Byb21vdGUgdG8gcHJvZHVjdGlvbicsXG4gICAgICBydW5zT246IHJ1bm5lclRhZ3MsXG4gICAgICBwZXJtaXNzaW9uczogeyBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLldSSVRFIH0sXG4gICAgICBlbnY6IHsgVEFSR0VUX0JSQU5DSDogdGFyZ2V0UmVmIH0sXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NoZWNrb3V0IHJlcG9zaXRvcnknLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyxcbiAgICAgICAgICB3aXRoOiB7ICdmZXRjaC1kZXB0aCc6IDAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDb25maWd1cmUgZ2l0JyxcbiAgICAgICAgICBydW46IFtcbiAgICAgICAgICAgICdnaXQgY29uZmlnIHVzZXIubmFtZSBcImdpdGh1Yi1hY3Rpb25zW2JvdF1cIicsXG4gICAgICAgICAgICAnZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiZ2l0aHViLWFjdGlvbnNbYm90XUB1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb21cIicsXG4gICAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdGZXRjaCBhbGwgYnJhbmNoZXMnLFxuICAgICAgICAgIHJ1bjogJ2dpdCBmZXRjaCAtLWFsbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ2hlY2tvdXQgcHJvZHVjdGlvbiBicmFuY2gnLFxuICAgICAgICAgIHJ1bjogJ2dpdCBjaGVja291dCBcIiRUQVJHRVRfQlJBTkNIXCInLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYE1lcmdlICR7c291cmNlQnJhbmNofSAoZmFzdC1mb3J3YXJkIG9ubHkpYCxcbiAgICAgICAgICBydW46IGBnaXQgbWVyZ2UgLS1mZi1vbmx5IFwib3JpZ2luLyR7c291cmNlQnJhbmNofVwiYCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQdXNoIHRvIHByb2R1Y3Rpb24gYnJhbmNoJyxcbiAgICAgICAgICBydW46ICdnaXQgcHVzaCBvcmlnaW4gXCIkVEFSR0VUX0JSQU5DSFwiJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./components"), exports);
|
|
17
18
|
__exportStar(require("./projects"), exports);
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QjtBQUM3Qiw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9qZWN0cyc7Il19
|
package/lib/projects/cdk-app.js
CHANGED
|
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
|
|
|
9
9
|
* @pjid taimos-cdk-app
|
|
10
10
|
*/
|
|
11
11
|
class TaimosCdkApp extends projen_1.awscdk.AwsCdkTypeScriptApp {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkApp", version: "0.1.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkApp", version: "0.1.68" };
|
|
13
13
|
constructor(options) {
|
|
14
14
|
super({
|
|
15
15
|
authorEmail: 'info@taimos.de',
|
|
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
|
|
|
9
9
|
* @pjid taimos-awscdk-construct
|
|
10
10
|
*/
|
|
11
11
|
class TaimosCdkConstructLibrary extends projen_1.awscdk.AwsCdkConstructLibrary {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkConstructLibrary", version: "0.1.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkConstructLibrary", version: "0.1.68" };
|
|
13
13
|
constructor(options) {
|
|
14
14
|
super({
|
|
15
15
|
authorOrganization: true,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { github, typescript, YamlFile } from 'projen';
|
|
2
2
|
import { GitHubAssignApprover } from 'projen-pipelines';
|
|
3
|
+
import { GitHubProductionRelease, GitHubProductionReleaseOptions } from '../components';
|
|
3
4
|
/**
|
|
4
5
|
* The frontend framework an Amplify Hosting application is built with.
|
|
5
6
|
*
|
|
@@ -176,6 +177,20 @@ export interface MonorepoProjectOptions extends typescript.TypeScriptProjectOpti
|
|
|
176
177
|
* @default []
|
|
177
178
|
*/
|
|
178
179
|
readonly amplifyApps?: MonorepoAmplifyApp[];
|
|
180
|
+
/**
|
|
181
|
+
* Whether to add a manual "Production Release" workflow that promotes a branch
|
|
182
|
+
* to the production branch (see `GitHubProductionRelease`).
|
|
183
|
+
*
|
|
184
|
+
* @default false
|
|
185
|
+
*/
|
|
186
|
+
readonly productionRelease?: boolean;
|
|
187
|
+
/**
|
|
188
|
+
* Options for the production release workflow. Only used when
|
|
189
|
+
* `productionRelease` is enabled.
|
|
190
|
+
*
|
|
191
|
+
* @default - promote `main` to a `production` branch
|
|
192
|
+
*/
|
|
193
|
+
readonly productionReleaseOptions?: GitHubProductionReleaseOptions;
|
|
179
194
|
}
|
|
180
195
|
/**
|
|
181
196
|
* Private PNPM-workspace monorepo root, following Taimos ADR-0002.
|
|
@@ -199,6 +214,10 @@ export declare class MonorepoProject extends typescript.TypeScriptProject {
|
|
|
199
214
|
readonly amplifyFile?: YamlFile;
|
|
200
215
|
/** The PR approver assignment, if enabled. */
|
|
201
216
|
readonly assignApprover?: GitHubAssignApprover;
|
|
217
|
+
/** The production release workflow, if enabled. */
|
|
218
|
+
readonly productionRelease?: GitHubProductionRelease;
|
|
219
|
+
/** The default release branch (promoted by the production release workflow). */
|
|
220
|
+
readonly defaultReleaseBranch: string;
|
|
202
221
|
constructor(options: MonorepoProjectOptions);
|
|
203
222
|
private renderAmplifyApp;
|
|
204
223
|
}
|