Compare commits

..

16 Commits

Author SHA1 Message Date
David Gamero da331a158c Update codeql.yml 2024-03-19 12:57:22 -04:00
David Gamero e08fe4d10f Update CHANGELOG.md 2024-03-19 12:55:59 -04:00
David Gamero 159ed4c2e2 Update CHANGELOG.md 2024-03-19 12:55:04 -04:00
David Gamero e394a363ea Update codeql.yml 2024-03-19 12:41:03 -04:00
David Gamero 9a3f9b33d4 update the current tags 2024-03-12 17:01:59 -04:00
David Gamero 2deb54c5d3 format 2024-03-12 15:23:18 -04:00
David Gamero f0b74d1da1 Update codeql.yml 2024-03-12 15:20:14 -04:00
David Gamero 0767161214 Update codeql.yml 2024-03-12 15:18:05 -04:00
David Gamero ee4689b033 Update codeql.yml 2024-03-12 15:14:05 -04:00
David Gamero 103b5ccfa2 Update codeql.yml 2024-03-12 11:36:09 -04:00
David Gamero 209431e7c0 format 2024-03-12 11:09:35 -04:00
David Gamero 18f9d6f27c Update CHANGELOG.md 2024-03-12 11:08:25 -04:00
David Gamero f9cf4e2ef6 Update CHANGELOG.md 2024-03-12 11:08:10 -04:00
David Gamero db9a5aa2d4 Update CHANGELOG.md 2024-03-12 11:07:40 -04:00
David Gamero f7415623aa Update release-pr.yml 2024-03-12 11:05:47 -04:00
David Gamero 43974c78e2 Update package.json 2024-03-12 11:03:38 -04:00
4 changed files with 74 additions and 78 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "k8s-deploy-action", "name": "k8s-deploy-action",
"version": "5.0.0", "version": "0.0.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "k8s-deploy-action", "name": "k8s-deploy-action",
"version": "5.0.0", "version": "0.0.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/core": "^1.10.0", "@actions/core": "^1.10.0",
+1 -1
View File
@@ -4,7 +4,7 @@
"author": "Deepak Sattiraju", "author": "Deepak Sattiraju",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"prebuild": "npm i @vercel/ncc", "prebuild": "npm i @ncc/vercel",
"build": "ncc build src/run.ts -o lib", "build": "ncc build src/run.ts -o lib",
"test": "jest", "test": "jest",
"coverage": "jest --coverage=true", "coverage": "jest --coverage=true",
+4 -10
View File
@@ -1,8 +1,8 @@
import { PrivateKubectl, extractFileNames, replaceFileNamesWithBaseNames } from './privatekubectl' import {PrivateKubectl} from './privatekubectl'
import * as exec from '@actions/exec' import * as exec from '@actions/exec'
describe('Private kubectl', () => { describe('Private kubectl', () => {
const testString = `kubectl annotate -f testdir/test.yml,test2.yml,testdir/subdir/test3.yml -f test4.yml --filename test5.yml actions.github.com/k8s-deploy={"run":"3498366832","repository":"jaiveerk/k8s-deploy","workflow":"Minikube Integration Tests - private cluster","workflowFileName":"run-integration-tests-private.yml","jobName":"run-integration-test","createdBy":"jaiveerk","runUri":"https://github.com/jaiveerk/k8s-deploy/actions/runs/3498366832","commit":"c63b323186ea1320a31290de6dcc094c06385e75","lastSuccessRunCommit":"NA","branch":"refs/heads/main","deployTimestamp":1668787848577,"dockerfilePaths":{"nginx:1.14.2":""},"manifestsPaths":["https://github.com/jaiveerk/k8s-deploy/blob/c63b323186ea1320a31290de6dcc094c06385e75/test/integration/manifests/test.yml"],"helmChartPaths":[],"provider":"GitHub"} --overwrite --namespace test-3498366832` const testString = `kubectl annotate -f test.yml,test2.yml,test3.yml -f test4.yml --filename test5.yml actions.github.com/k8s-deploy={"run":"3498366832","repository":"jaiveerk/k8s-deploy","workflow":"Minikube Integration Tests - private cluster","workflowFileName":"run-integration-tests-private.yml","jobName":"run-integration-test","createdBy":"jaiveerk","runUri":"https://github.com/jaiveerk/k8s-deploy/actions/runs/3498366832","commit":"c63b323186ea1320a31290de6dcc094c06385e75","lastSuccessRunCommit":"NA","branch":"refs/heads/main","deployTimestamp":1668787848577,"dockerfilePaths":{"nginx:1.14.2":""},"manifestsPaths":["https://github.com/jaiveerk/k8s-deploy/blob/c63b323186ea1320a31290de6dcc094c06385e75/test/integration/manifests/test.yml"],"helmChartPaths":[],"provider":"GitHub"} --overwrite --namespace test-3498366832`
const mockKube = new PrivateKubectl( const mockKube = new PrivateKubectl(
'kubectlPath', 'kubectlPath',
'namespace', 'namespace',
@@ -12,14 +12,8 @@ describe('Private kubectl', () => {
) )
it('should extract filenames correctly', () => { it('should extract filenames correctly', () => {
expect(extractFileNames(testString)).toEqual( expect(mockKube.extractFilesnames(testString)).toEqual(
['testdir/test.yml', 'test2.yml', 'testdir/subdir/test3.yml', 'test4.yml', 'test5.yml'] 'test.yml test2.yml test3.yml test4.yml test5.yml'
)
})
it('should replace filenames with basenames correctly', () => {
expect(replaceFileNamesWithBaseNames(testString)).toEqual(
`kubectl annotate -f test.yml,test2.yml,test3.yml -f test4.yml --filename test5.yml actions.github.com/k8s-deploy={"run":"3498366832","repository":"jaiveerk/k8s-deploy","workflow":"Minikube Integration Tests - private cluster","workflowFileName":"run-integration-tests-private.yml","jobName":"run-integration-test","createdBy":"jaiveerk","runUri":"https://github.com/jaiveerk/k8s-deploy/actions/runs/3498366832","commit":"c63b323186ea1320a31290de6dcc094c06385e75","lastSuccessRunCommit":"NA","branch":"refs/heads/main","deployTimestamp":1668787848577,"dockerfilePaths":{"nginx:1.14.2":""},"manifestsPaths":["https://github.com/jaiveerk/k8s-deploy/blob/c63b323186ea1320a31290de6dcc094c06385e75/test/integration/manifests/test.yml"],"helmChartPaths":[],"provider":"GitHub"} --overwrite --namespace test-3498366832`
) )
}) })
+51 -49
View File
@@ -19,7 +19,7 @@ export class PrivateKubectl extends Kubectl {
if (this.containsFilenames(kubectlCmd)) { if (this.containsFilenames(kubectlCmd)) {
// For private clusters, files will referenced solely by their basename // For private clusters, files will referenced solely by their basename
kubectlCmd = replaceFileNamesWithBaseNames(kubectlCmd) kubectlCmd = this.replaceFilnamesWithBasenames(kubectlCmd)
addFileFlag = true addFileFlag = true
} }
@@ -43,19 +43,21 @@ export class PrivateKubectl extends Kubectl {
] ]
if (addFileFlag) { if (addFileFlag) {
const filenames = extractFileNames(kubectlCmd) const filenames = this.extractFilesnames(kubectlCmd).split(' ')
const tempDirectory = const tempDirectory =
process.env['runner.tempDirectory'] || os.tmpdir() + '/manifests' process.env['runner.tempDirectory'] || os.tmpdir() + '/manifests'
eo.cwd = tempDirectory eo.cwd = tempDirectory
privateClusterArgs.push(...['--file', '.']) privateClusterArgs.push(...['--file', '.'])
for (const filename of filenames) { let filenamesArr = filenames[0].split(',')
try { for (let index = 0; index < filenamesArr.length; index++) {
this.moveFileToTempManifestDir(filename) const file = filenamesArr[index]
} catch (e) {
core.debug(`Error moving file ${filename} to temp directory: ${e}`) if (!file) {
continue
} }
this.moveFileToTempManifestDir(file)
} }
} }
@@ -93,6 +95,48 @@ export class PrivateKubectl extends Kubectl {
} as ExecOutput } as ExecOutput
} }
private replaceFilnamesWithBasenames(kubectlCmd: string) {
let exFilenames = this.extractFilesnames(kubectlCmd)
let filenames = exFilenames.split(' ')
let filenamesArr = filenames[0].split(',')
for (let index = 0; index < filenamesArr.length; index++) {
filenamesArr[index] = path.basename(filenamesArr[index])
}
let baseFilenames = filenamesArr.join()
let result = kubectlCmd.replace(exFilenames, baseFilenames)
return result
}
public extractFilesnames(strToParse: string) {
const fileNames: string[] = []
const argv = minimist(strToParse.split(' '))
const fArg = 'f'
const filenameArg = 'filename'
fileNames.push(...this.extractFilesFromMinimist(argv, fArg))
fileNames.push(...this.extractFilesFromMinimist(argv, filenameArg))
return fileNames.join(' ')
}
private extractFilesFromMinimist(argv, arg: string): string[] {
if (!argv[arg]) {
return []
}
const toReturn: string[] = []
if (typeof argv[arg] === 'string') {
toReturn.push(...argv[arg].split(','))
} else {
for (const value of argv[arg] as string[]) {
toReturn.push(...value.split(','))
}
}
return toReturn
}
private containsFilenames(str: string) { private containsFilenames(str: string) {
return str.includes('-f ') || str.includes('filename ') return str.includes('-f ') || str.includes('filename ')
@@ -137,45 +181,3 @@ export class PrivateKubectl extends Kubectl {
}) })
} }
} }
export function replaceFileNamesWithBaseNames(kubectlCmd: string) {
let filenames = extractFileNames(kubectlCmd)
let basenames = filenames.map((filename) => path.basename(filename))
let result = kubectlCmd
if (filenames.length != basenames.length) {
throw Error('replacing filenames with basenames, ' + filenames.length + ' filenames != ' + basenames.length + 'basenames')
}
for (let index = 0; index < filenames.length; index++) {
result = result.replace(filenames[index], basenames[index])
}
return result
}
export function extractFileNames(strToParse: string) {
const fileNames: string[] = []
const argv = minimist(strToParse.split(' '))
const fArg = 'f'
const filenameArg = 'filename'
fileNames.push(...extractFilesFromMinimist(argv, fArg))
fileNames.push(...extractFilesFromMinimist(argv, filenameArg))
return fileNames
}
export function extractFilesFromMinimist(argv, arg: string): string[] {
if (!argv[arg]) {
return []
}
const toReturn: string[] = []
if (typeof argv[arg] === 'string') {
toReturn.push(...argv[arg].split(','))
} else {
for (const value of argv[arg] as string[]) {
toReturn.push(...value.split(','))
}
}
return toReturn
}