Skip to content

Commit 16a03e4

Browse files
authored
Merge branch 'main' into dependabot/npm_and_yarn/actions-7d07fb3801
2 parents 2623c38 + 3b11c64 commit 16a03e4

File tree

8 files changed

+99
-38
lines changed

8 files changed

+99
-38
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# Changelog
22

3+
## [5.0.3] - 2025-04-16
4+
5+
### Added
6+
7+
- #398 case-insensitive resource type
8+
9+
## [5.0.2] - 2025-04-15
10+
11+
### Added
12+
13+
- #396 Update new resource-type input for action
14+
315
## [5.0.1] - 2024-03-12
416

517
### Added

src/actions/deploy.ts

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,15 @@ import {
1313
} from '../strategyHelpers/deploymentHelper'
1414
import {DeploymentStrategy} from '../types/deploymentStrategy'
1515
import {parseTrafficSplitMethod} from '../types/trafficSplitMethod'
16+
import {ClusterType} from '../inputUtils'
1617
export const ResourceTypeManagedCluster =
1718
'Microsoft.ContainerService/managedClusters'
1819
export const ResourceTypeFleet = 'Microsoft.ContainerService/fleets'
19-
export type ClusterType =
20-
| typeof ResourceTypeManagedCluster
21-
| typeof ResourceTypeFleet
22-
2320
export async function deploy(
2421
kubectl: Kubectl,
2522
manifestFilePaths: string[],
26-
deploymentStrategy: DeploymentStrategy
23+
deploymentStrategy: DeploymentStrategy,
24+
resourceType: ClusterType
2725
) {
2826
// update manifests
2927
const inputManifestFiles: string[] = updateManifestFiles(manifestFilePaths)
@@ -45,25 +43,14 @@ export async function deploy(
4543

4644
// check manifest stability
4745
core.startGroup('Checking manifest stability')
48-
const resourceTypeInput =
49-
core.getInput('resource-type') || ResourceTypeManagedCluster
5046
const resourceTypes: Resource[] = getResources(
5147
deployedManifestFiles,
5248
models.DEPLOYMENT_TYPES.concat([
5349
KubernetesConstants.DiscoveryAndLoadBalancerResource.SERVICE
5450
])
5551
)
5652

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)
53+
await checkManifestStability(kubectl, resourceTypes, resourceType)
6754
core.endGroup()
6855

6956
// print ingresses

src/actions/promote.ts

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,20 @@ import {
3838
TrafficSplitMethod
3939
} from '../types/trafficSplitMethod'
4040
import {parseRouteStrategy, RouteStrategy} from '../types/routeStrategy'
41-
import {ResourceTypeFleet, ResourceTypeManagedCluster} from './deploy'
41+
import {ClusterType} from '../inputUtils'
4242

4343
export async function promote(
4444
kubectl: Kubectl,
4545
manifests: string[],
46-
deploymentStrategy: DeploymentStrategy
46+
deploymentStrategy: DeploymentStrategy,
47+
resourceType: ClusterType
4748
) {
4849
switch (deploymentStrategy) {
4950
case DeploymentStrategy.CANARY:
5051
await promoteCanary(kubectl, manifests)
5152
break
5253
case DeploymentStrategy.BLUE_GREEN:
53-
await promoteBlueGreen(kubectl, manifests)
54+
await promoteBlueGreen(kubectl, manifests, resourceType)
5455
break
5556
default:
5657
throw Error('Invalid promote deployment strategy')
@@ -140,7 +141,11 @@ async function promoteCanary(kubectl: Kubectl, manifests: string[]) {
140141
core.endGroup()
141142
}
142143

143-
async function promoteBlueGreen(kubectl: Kubectl, manifests: string[]) {
144+
async function promoteBlueGreen(
145+
kubectl: Kubectl,
146+
manifests: string[],
147+
resourceType: ClusterType
148+
) {
144149
// update container images and pull secrets
145150
const inputManifestFiles: string[] = updateManifestFiles(manifests)
146151
const manifestObjects: BlueGreenManifests =
@@ -167,23 +172,13 @@ async function promoteBlueGreen(kubectl: Kubectl, manifests: string[]) {
167172

168173
// checking stability of newly created deployments
169174
core.startGroup('Checking manifest stability')
170-
const resourceType =
171-
core.getInput('resource-type') || ResourceTypeManagedCluster
172175
const deployedManifestFiles = deployResult.manifestFiles
173176
const resources: Resource[] = getResources(
174177
deployedManifestFiles,
175178
models.DEPLOYMENT_TYPES.concat([
176179
models.DiscoveryAndLoadBalancerResource.SERVICE
177180
])
178181
)
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-
}
187182
await KubernetesManifestUtility.checkManifestStability(
188183
kubectl,
189184
resources,

src/inputUtils.test.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import {parseResourceTypeInput} from './inputUtils'
2+
import {
3+
ClusterType,
4+
ResourceTypeFleet,
5+
ResourceTypeManagedCluster
6+
} from './actions/deploy'
7+
8+
describe('InputUtils', () => {
9+
describe('parseResourceTypeInput', () => {
10+
it('should extract fleet exact match resource type', () => {
11+
expect(
12+
parseResourceTypeInput('Microsoft.ContainerService/fleets')
13+
).toEqual(ResourceTypeFleet)
14+
})
15+
it('should match fleet case-insensitively', () => {
16+
expect(
17+
parseResourceTypeInput('Microsoft.containerservice/fleets')
18+
).toEqual(ResourceTypeFleet)
19+
})
20+
it('should match managed cluster case-insensitively', () => {
21+
expect(
22+
parseResourceTypeInput('Microsoft.containerservice/MAnaGedClusterS')
23+
).toEqual(ResourceTypeManagedCluster)
24+
})
25+
it('should error on unexpected values', () => {
26+
expect(() => {
27+
parseResourceTypeInput('icrosoft.ContainerService/ManagedCluster')
28+
}).toThrow()
29+
expect(() => {
30+
parseResourceTypeInput('wrong-value')
31+
}).toThrow()
32+
})
33+
})
34+
})

src/inputUtils.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as core from '@actions/core'
22
import {parseAnnotations} from './types/annotations'
3+
import {ResourceTypeFleet, ResourceTypeManagedCluster} from './actions/deploy'
34

45
export const inputAnnotations = parseAnnotations(
56
core.getInput('annotations', {required: false})
@@ -14,3 +15,18 @@ export function getBufferTime(): number {
1415

1516
return inputBufferTime
1617
}
18+
19+
export function parseResourceTypeInput(rawInput: string): ClusterType {
20+
switch (rawInput.toLowerCase()) {
21+
case ResourceTypeFleet.toLowerCase():
22+
return ResourceTypeFleet
23+
case ResourceTypeManagedCluster.toLowerCase():
24+
return ResourceTypeManagedCluster
25+
}
26+
throw new Error(
27+
`Invalid resource type: ${rawInput}. Supported resource types are: ${ResourceTypeManagedCluster} (default), ${ResourceTypeFleet}`
28+
)
29+
}
30+
export type ClusterType =
31+
| typeof ResourceTypeManagedCluster
32+
| typeof ResourceTypeFleet

src/run.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
import * as core from '@actions/core'
22
import {getKubectlPath, Kubectl} from './types/kubectl'
3-
import {deploy} from './actions/deploy'
3+
import {
4+
deploy,
5+
ResourceTypeFleet,
6+
ResourceTypeManagedCluster
7+
} from './actions/deploy'
8+
import {ClusterType} from './inputUtils'
49
import {promote} from './actions/promote'
510
import {reject} from './actions/reject'
611
import {Action, parseAction} from './types/action'
712
import {parseDeploymentStrategy} from './types/deploymentStrategy'
813
import {getFilesFromDirectoriesAndURLs} from './utilities/fileUtils'
914
import {PrivateKubectl} from './types/privatekubectl'
15+
import {parseResourceTypeInput} from './inputUtils'
1016

1117
export async function run() {
1218
// verify kubeconfig is set
@@ -36,6 +42,16 @@ export async function run() {
3642
const resourceName = core.getInput('name') || ''
3743
const skipTlsVerify = core.getBooleanInput('skip-tls-verify')
3844

45+
let resourceType: ClusterType
46+
try {
47+
// included in the trycatch to allow raw input to go out of scope after parsing
48+
const resourceTypeInput = core.getInput('resource-type')
49+
resourceType = parseResourceTypeInput(resourceTypeInput)
50+
} catch (e) {
51+
core.setFailed(e)
52+
return
53+
}
54+
3955
const kubectl = isPrivateCluster
4056
? new PrivateKubectl(
4157
kubectlPath,
@@ -49,11 +65,11 @@ export async function run() {
4965
// run action
5066
switch (action) {
5167
case Action.DEPLOY: {
52-
await deploy(kubectl, fullManifestFilePaths, strategy)
68+
await deploy(kubectl, fullManifestFilePaths, strategy, resourceType)
5369
break
5470
}
5571
case Action.PROMOTE: {
56-
await promote(kubectl, fullManifestFilePaths, strategy)
72+
await promote(kubectl, fullManifestFilePaths, strategy, resourceType)
5773
break
5874
}
5975
case Action.REJECT: {

src/strategyHelpers/deploymentHelper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +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'
38+
import {ClusterType} from '../inputUtils'
3939

4040
export async function deployManifests(
4141
files: string[],

src/utilities/manifestStabilityUtils.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +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'
6+
import {ResourceTypeFleet} from '../actions/deploy'
7+
import {ClusterType} from '../inputUtils'
78

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

1112
export async function checkManifestStability(
1213
kubectl: Kubectl,
1314
resources: Resource[],
14-
clusterTyper: ClusterType
15+
resourceType: ClusterType
1516
): Promise<void> {
1617
// Skip if resource type is microsoft.containerservice/fleets
17-
if (clusterTyper === ResourceTypeFleet) {
18+
if (resourceType === ResourceTypeFleet) {
1819
core.info(`Skipping checkManifestStability for ${ResourceTypeFleet}`)
1920
return
2021
}

0 commit comments

Comments
 (0)