Added Integration Tests, Resolved Bugs With Annotations (#255)

* First commit - made manifests for test deployments, made manifests for i tests for other deployment strategies

* broke down blue/green

* added latest tags to test manifests for new tags

* remade tester

* ready to test bgi

* using all but first index of argv

* careless error with dicts

* added test to namespace

* realized i was silencing error

* indexing containers

* keyerror

* logging bc python errors are weird

* expected still string

* parsed args behaving weirdly

* test seems to be working now, applying changes to other YAMLs now

* blue/green ready to test

* oops

* oops

* Added additional labels to check

* hyphen

* Added our annotations

* lol

* added our labels to services too

* nonetype issue'

* nonetype issue'

* narrowing down parameter

* fixed annotations issue with promote

* adding debhug statement to figure out why services aren't getting annotations

* this should fix annotations issue for service

* not sure why this wasn't caught by intellisense

* should be fixed with removing comma but adding logs in case

* added linkerd install

* verification

* upgraded kubernetes version

* removing crds

* proxy option

* Added smi extension

* logging service

* smi svcs also getting labeled now

* matching ts type

* not sure where stable service is going

* remaining svc and deployment should match

* keeping stable service and ts object

* updated tests to reflect keeping ts object

* no green svc after promote

* duh

* lol

* canary work

* canary test ready

* logging for ing, filename for canary

* changed ingress svc key and returning svc files from smi canary deployment

* ts name

* forgot about baseline in first deploy

* *

* *

* smi canary should annotate, fixed cleanup

* typescript issue plus percentage

* forgot to type extra method

* removed cleaned up objects from annotate list

* logging because services aren't getting removed

* moving to try/catch strategy of annotation since deletion can fail silently/with warnings

* moved label to individual

* removing canary service check after promote

* pod ready for testing

* set weights to 1000

* selectors

* *

* percentage

* *

* typing

* mixed up pod and smi

* fixed tests

* prettier

* forgot to remove canary

* cleanup

* Added oliver's feedback + more cleanup

* ncc as dev dependency

* npx

* going back to global ncc install bc npm is being weird

* prettier

* removed unnecessary post step
This commit is contained in:
Jaiveer Katariya
2022-11-01 16:02:57 -04:00
committed by GitHub
parent a6cfc31f7a
commit e9693a7cdd
24 changed files with 1665 additions and 310 deletions
+44 -6
View File
@@ -39,6 +39,8 @@ import {
normalizeWorkflowStrLabel
} from '../utilities/githubUtils'
import {getDeploymentConfig} from '../utilities/dockerUtils'
import {deploy} from '../actions/deploy'
import {DeployResult} from '../types/deployResult'
export async function deployManifests(
files: string[],
@@ -48,13 +50,13 @@ export async function deployManifests(
): Promise<string[]> {
switch (deploymentStrategy) {
case DeploymentStrategy.CANARY: {
const {result, newFilePaths} =
const canaryDeployResult: DeployResult =
trafficSplitMethod == TrafficSplitMethod.SMI
? await deploySMICanary(files, kubectl)
: await deployPodCanary(files, kubectl)
checkForErrors([result])
return newFilePaths
checkForErrors([canaryDeployResult.execResult])
return canaryDeployResult.manifestFiles
}
case DeploymentStrategy.BLUE_GREEN: {
@@ -73,7 +75,12 @@ export async function deployManifests(
)
checkForErrors([blueGreenDeployment.deployResult.execResult])
return blueGreenDeployment.deployResult.manifestFiles
const deployedManifestFiles =
blueGreenDeployment.deployResult.manifestFiles
core.debug(
`from blue-green service, deployed manifest files are ${deployedManifestFiles}`
)
return deployedManifestFiles
}
case DeploymentStrategy.BASIC: {
@@ -178,6 +185,18 @@ async function annotateResources(
annotationKey
)
if (core.isDebug()) {
core.debug(`files getting annotated are ${JSON.stringify(files)}`)
for (const filePath of files) {
core.debug('printing objects getting annotated...')
const fileContents = fs.readFileSync(filePath).toString()
const inputObjects = yaml.safeLoadAll(fileContents)
for (const inputObject of inputObjects) {
core.debug(`object: ${JSON.stringify(inputObject)}`)
}
}
}
const annotationKeyValStr = `${annotationKey}=${getWorkflowAnnotations(
lastSuccessSha,
workflowFilePath,
@@ -192,7 +211,17 @@ async function annotateResources(
await kubectl.annotate('namespace', namespace, annotationKeyValStr)
)
}
annotateResults.push(await kubectl.annotateFiles(files, annotationKeyValStr))
for (const file of files) {
try {
const annotateResult = await kubectl.annotateFiles(
file,
annotationKeyValStr
)
annotateResults.push(annotateResult)
} catch (e) {
core.warning(`failed to annotate resource: ${e}`)
}
}
for (const resource of resourceTypes) {
if (
@@ -226,5 +255,14 @@ async function labelResources(
`workflow=${cleanLabel(label)}`
]
checkForErrors([await kubectl.labelFiles(files, labels)], true)
const labelResults = []
for (const file of files) {
try {
const labelResult = await kubectl.labelFiles(files, labels)
labelResults.push(labelResult)
} catch (e) {
core.warning(`failed to annotate resource: ${e}`)
}
}
checkForErrors(labelResults, true)
}