Skip to content

Commit 3d107b0

Browse files
authored
v5.0.1 Release with Fleet Types (#358)
* extract resource type * fleet details * new release with fleet * format * type params * format * promote input * format * fleet type * format pls
1 parent d1acc1a commit 3d107b0

File tree

7 files changed

+74
-18
lines changed

7 files changed

+74
-18
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## [5.0.1] - 2024-03-12
4+
5+
### Added
6+
7+
- #356 Add fleet support
8+
39
## [5.0.0] - 2024-03-12
410

511
### Changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ Following are the key capabilities of this action:
125125
<td>skip-tls-verify</br></br>(Optional)</td>
126126
<td>Acceptable values: true/false</br>Default value: false</br>True if the insecure-skip-tls-verify option should be used</td>
127127
</tr>
128+
<tr>
129+
<td>resource-type (Optional)</td>
130+
<td>Acceptable values: `Microsoft.ContainerService/managedClusters` (default), 'Microsoft.ContainerService/fleets'</td>
131+
</tr>
128132
</table>
129133

130134
## Usage Examples

src/actions/deploy.ts

+19-5
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ import {
1313
} from '../strategyHelpers/deploymentHelper'
1414
import {DeploymentStrategy} from '../types/deploymentStrategy'
1515
import {parseTrafficSplitMethod} from '../types/trafficSplitMethod'
16+
export const ResourceTypeManagedCluster =
17+
'Microsoft.ContainerService/managedClusters'
18+
export const ResourceTypeFleet = 'Microsoft.ContainerService/fleets'
19+
export type ClusterType =
20+
| typeof ResourceTypeManagedCluster
21+
| typeof ResourceTypeFleet
1622

1723
export async function deploy(
1824
kubectl: Kubectl,
@@ -39,17 +45,25 @@ export async function deploy(
3945

4046
// check manifest stability
4147
core.startGroup('Checking manifest stability')
42-
const resourceType = (
43-
core.getInput('resource-type') ||
44-
'Microsoft.ContainerService/managedClusters'
45-
).toLowerCase()
48+
const resourceTypeInput =
49+
core.getInput('resource-type') || ResourceTypeManagedCluster
4650
const resourceTypes: Resource[] = getResources(
4751
deployedManifestFiles,
4852
models.DEPLOYMENT_TYPES.concat([
4953
KubernetesConstants.DiscoveryAndLoadBalancerResource.SERVICE
5054
])
5155
)
52-
await checkManifestStability(kubectl, resourceTypes, resourceType)
56+
57+
if (
58+
resourceTypeInput !== ResourceTypeManagedCluster &&
59+
resourceTypeInput !== ResourceTypeFleet
60+
) {
61+
let errMsg = `Invalid resource type: ${resourceTypeInput}. Supported resource types are: ${ResourceTypeManagedCluster} (default), ${ResourceTypeFleet}`
62+
core.setFailed(errMsg)
63+
throw new Error(errMsg)
64+
}
65+
66+
await checkManifestStability(kubectl, resourceTypes, resourceTypeInput)
5367
core.endGroup()
5468

5569
// print ingresses

src/actions/promote.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import {
3838
TrafficSplitMethod
3939
} from '../types/trafficSplitMethod'
4040
import {parseRouteStrategy, RouteStrategy} from '../types/routeStrategy'
41+
import {ResourceTypeFleet, ResourceTypeManagedCluster} from './deploy'
4142

4243
export async function promote(
4344
kubectl: Kubectl,
@@ -166,17 +167,23 @@ async function promoteBlueGreen(kubectl: Kubectl, manifests: string[]) {
166167

167168
// checking stability of newly created deployments
168169
core.startGroup('Checking manifest stability')
169-
const resourceType = (
170-
core.getInput('resource-type') ||
171-
'Microsoft.ContainerService/managedClusters'
172-
).toLowerCase()
170+
const resourceType =
171+
core.getInput('resource-type') || ResourceTypeManagedCluster
173172
const deployedManifestFiles = deployResult.manifestFiles
174173
const resources: Resource[] = getResources(
175174
deployedManifestFiles,
176175
models.DEPLOYMENT_TYPES.concat([
177176
models.DiscoveryAndLoadBalancerResource.SERVICE
178177
])
179178
)
179+
if (
180+
resourceType !== ResourceTypeManagedCluster &&
181+
resourceType !== ResourceTypeFleet
182+
) {
183+
const errMsg = `Invalid resource type: ${resourceType}. Supported resource types are: ${ResourceTypeManagedCluster} (default), fleet`
184+
core.setFailed(errMsg)
185+
throw new Error(errMsg)
186+
}
180187
await KubernetesManifestUtility.checkManifestStability(
181188
kubectl,
182189
resources,

src/strategyHelpers/deploymentHelper.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {
3535
} from '../utilities/githubUtils'
3636
import {getDeploymentConfig} from '../utilities/dockerUtils'
3737
import {DeployResult} from '../types/deployResult'
38+
import {ClusterType} from '../actions/deploy'
3839

3940
export async function deployManifests(
4041
files: string[],
@@ -139,7 +140,7 @@ function appendStableVersionLabelToResource(files: string[]): string[] {
139140
export async function checkManifestStability(
140141
kubectl: Kubectl,
141142
resources: Resource[],
142-
resourceType: string
143+
resourceType: ClusterType
143144
): Promise<void> {
144145
await KubernetesManifestUtility.checkManifestStability(
145146
kubectl,
+28-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import * as manifestStabilityUtils from './manifestStabilityUtils'
22
import {Kubectl} from '../types/kubectl'
3+
import {ResourceTypeFleet, ResourceTypeManagedCluster} from '../actions/deploy'
4+
import {ExecOutput} from '@actions/exec'
5+
import {exitCode, stdout} from 'process'
36

47
describe('manifestStabilityUtils', () => {
58
const kc = new Kubectl('')
@@ -10,18 +13,40 @@ describe('manifestStabilityUtils', () => {
1013
namespace: 'default'
1114
}
1215
]
13-
const resourceType = 'microsoft.containerservice/fleets'
1416

15-
it('should return immediately if the resource type is microsoft.containerservice/fleets', async () => {
17+
it('should return immediately if the resource type is fleet', async () => {
1618
const spy = jest.spyOn(manifestStabilityUtils, 'checkManifestStability')
1719
const checkRolloutStatusSpy = jest.spyOn(kc, 'checkRolloutStatus')
1820
await manifestStabilityUtils.checkManifestStability(
1921
kc,
2022
resources,
21-
resourceType
23+
ResourceTypeFleet
2224
)
2325

2426
expect(checkRolloutStatusSpy).not.toHaveBeenCalled()
2527
expect(spy).toHaveReturned()
2628
})
29+
30+
it('should run fully if the resource type is managedCluster', async () => {
31+
const spy = jest.spyOn(manifestStabilityUtils, 'checkManifestStability')
32+
const checkRolloutStatusSpy = jest
33+
.spyOn(kc, 'checkRolloutStatus')
34+
.mockImplementation(() => {
35+
return new Promise<ExecOutput>((resolve, reject) => {
36+
resolve({
37+
exitCode: 0,
38+
stderr: '',
39+
stdout: ''
40+
})
41+
})
42+
})
43+
await manifestStabilityUtils.checkManifestStability(
44+
kc,
45+
resources,
46+
ResourceTypeManagedCluster
47+
)
48+
49+
expect(checkRolloutStatusSpy).toHaveBeenCalled()
50+
expect(spy).toHaveReturned()
51+
})
2752
})

src/utilities/manifestStabilityUtils.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,19 @@ import * as KubernetesConstants from '../types/kubernetesTypes'
33
import {Kubectl, Resource} from '../types/kubectl'
44
import {checkForErrors} from './kubectlUtils'
55
import {sleep} from './timeUtils'
6+
import {ClusterType, ResourceTypeFleet} from '../actions/deploy'
67

78
const IS_SILENT = false
89
const POD = 'pod'
910

1011
export async function checkManifestStability(
1112
kubectl: Kubectl,
1213
resources: Resource[],
13-
resourceType: string
14+
clusterTyper: ClusterType
1415
): Promise<void> {
1516
// Skip if resource type is microsoft.containerservice/fleets
16-
if (resourceType === 'microsoft.containerservice/fleets') {
17-
core.info(
18-
'Skipping checkManifestStability for microsoft.containerservice/fleets'
19-
)
17+
if (clusterTyper === ResourceTypeFleet) {
18+
core.info(`Skipping checkManifestStability for ${ResourceTypeFleet}`)
2019
return
2120
}
2221
let rolloutStatusHasErrors = false

0 commit comments

Comments
 (0)