mirror of
https://github.com/actions/runner-container-hooks.git
synced 2025-12-14 08:36:45 +00:00
fixed testing adding storage class and persistent volume and timeout to wait for cleanup
This commit is contained in:
@@ -1 +1 @@
|
|||||||
jest.setTimeout(90000)
|
jest.setTimeout(500000)
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
jest.setTimeout(90000)
|
jest.setTimeout(500000)
|
||||||
|
|||||||
@@ -55,9 +55,9 @@ describe('e2e', () => {
|
|||||||
const runContainerStepContent = fs.readFileSync(runContainerStepJsonPath)
|
const runContainerStepContent = fs.readFileSync(runContainerStepJsonPath)
|
||||||
const runContainerStepData = JSON.parse(runContainerStepContent.toString())
|
const runContainerStepData = JSON.parse(runContainerStepContent.toString())
|
||||||
|
|
||||||
// await expect(
|
await expect(
|
||||||
// runContainerStep(runContainerStepData.args)
|
runContainerStep(runContainerStepData.args)
|
||||||
// ).resolves.not.toThrow()
|
).resolves.not.toThrow()
|
||||||
|
|
||||||
await expect(cleanupJob()).resolves.not.toThrow()
|
await expect(cleanupJob()).resolves.not.toThrow()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { TestHelper } from './test-setup'
|
import * as fs from 'fs'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
import { runContainerStep } from '../src/hooks'
|
import { runContainerStep } from '../src/hooks'
|
||||||
import * as fs from 'fs'
|
import { TestHelper } from './test-setup'
|
||||||
|
|
||||||
jest.useRealTimers()
|
jest.useRealTimers()
|
||||||
|
|
||||||
@@ -27,5 +27,7 @@ describe('Run container step', () => {
|
|||||||
})
|
})
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await testHelper.cleanup()
|
await testHelper.cleanup()
|
||||||
|
// wait for the job cleanup
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 300 * 1000))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,33 +1,34 @@
|
|||||||
|
import * as k8s from '@kubernetes/client-node'
|
||||||
import * as fs from 'fs'
|
import * as fs from 'fs'
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
import * as k8s from '@kubernetes/client-node'
|
|
||||||
import { V1PersistentVolumeClaim } from '@kubernetes/client-node'
|
|
||||||
|
|
||||||
const kc = new k8s.KubeConfig()
|
const kc = new k8s.KubeConfig()
|
||||||
|
|
||||||
kc.loadFromDefault()
|
kc.loadFromDefault()
|
||||||
|
|
||||||
const k8sApi = kc.makeApiClient(k8s.CoreV1Api)
|
const k8sApi = kc.makeApiClient(k8s.CoreV1Api)
|
||||||
|
const k8sStorageApi = kc.makeApiClient(k8s.StorageV1Api)
|
||||||
|
|
||||||
export class TestHelper {
|
export class TestHelper {
|
||||||
private tempDirPath: string
|
private tempDirPath: string
|
||||||
private podName: string
|
private podName: string
|
||||||
constructor() {
|
constructor() {
|
||||||
this.tempDirPath = `${__dirname}/_temp/runner`
|
this.tempDirPath = `${__dirname}/_temp/runner`
|
||||||
this.podName = uuidv4().replace('-', '')
|
this.podName = uuidv4().replace(/-/g, '')
|
||||||
}
|
}
|
||||||
|
|
||||||
public async initialize(): Promise<void> {
|
public async initialize(): Promise<void> {
|
||||||
await this.cleanupK8sResources()
|
|
||||||
await this.createTestVolume()
|
|
||||||
await this.createTestJobPod()
|
|
||||||
fs.mkdirSync(`${this.tempDirPath}/work/repo/repo`, { recursive: true })
|
|
||||||
fs.mkdirSync(`${this.tempDirPath}/externals`, { recursive: true })
|
|
||||||
process.env['ACTIONS_RUNNER_POD_NAME'] = `${this.podName}`
|
process.env['ACTIONS_RUNNER_POD_NAME'] = `${this.podName}`
|
||||||
process.env['ACTIONS_RUNNER_CLAIM_NAME'] = `${this.podName}-work`
|
process.env['ACTIONS_RUNNER_CLAIM_NAME'] = `${this.podName}-work`
|
||||||
process.env['RUNNER_WORKSPACE'] = `${this.tempDirPath}/work/repo`
|
process.env['RUNNER_WORKSPACE'] = `${this.tempDirPath}/work/repo`
|
||||||
process.env['GITHUB_WORKSPACE'] = `${this.tempDirPath}/work/repo/repo`
|
process.env['GITHUB_WORKSPACE'] = `${this.tempDirPath}/work/repo/repo`
|
||||||
process.env['ACTIONS_RUNNER_KUBERNETES_NAMESPACE'] = 'default'
|
process.env['ACTIONS_RUNNER_KUBERNETES_NAMESPACE'] = 'default'
|
||||||
|
|
||||||
|
await this.cleanupK8sResources()
|
||||||
|
await this.createTestVolume()
|
||||||
|
await this.createTestJobPod()
|
||||||
|
fs.mkdirSync(`${this.tempDirPath}/work/repo/repo`, { recursive: true })
|
||||||
|
fs.mkdirSync(`${this.tempDirPath}/externals`, { recursive: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
public async cleanup(): Promise<void> {
|
public async cleanup(): Promise<void> {
|
||||||
@@ -46,6 +47,8 @@ export class TestHelper {
|
|||||||
0
|
0
|
||||||
)
|
)
|
||||||
.catch(e => {})
|
.catch(e => {})
|
||||||
|
await k8sApi.deletePersistentVolume('work').catch(e => {})
|
||||||
|
await k8sStorageApi.deleteStorageClass('local-storage').catch(e => {})
|
||||||
await k8sApi
|
await k8sApi
|
||||||
.deleteNamespacedPod(this.podName, 'default', undefined, undefined, 0)
|
.deleteNamespacedPod(this.podName, 'default', undefined, undefined, 0)
|
||||||
.catch(e => {})
|
.catch(e => {})
|
||||||
@@ -90,15 +93,41 @@ export class TestHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async createTestVolume() {
|
public async createTestVolume() {
|
||||||
var volume: V1PersistentVolumeClaim = {
|
var sc: k8s.V1StorageClass = {
|
||||||
|
metadata: {
|
||||||
|
name: 'local-storage'
|
||||||
|
},
|
||||||
|
provisioner: 'kubernetes.io/no-provisioner',
|
||||||
|
volumeBindingMode: 'Immediate'
|
||||||
|
}
|
||||||
|
await k8sStorageApi.createStorageClass(sc)
|
||||||
|
|
||||||
|
var volume: k8s.V1PersistentVolume = {
|
||||||
|
metadata: {
|
||||||
|
name: 'work'
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
storageClassName: 'local-storage',
|
||||||
|
capacity: {
|
||||||
|
storage: '2Gi'
|
||||||
|
},
|
||||||
|
volumeMode: 'Filesystem',
|
||||||
|
accessModes: ['ReadWriteOnce'],
|
||||||
|
hostPath: {
|
||||||
|
path: this.tempDirPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await k8sApi.createPersistentVolume(volume)
|
||||||
|
var volumeClaim: k8s.V1PersistentVolumeClaim = {
|
||||||
metadata: {
|
metadata: {
|
||||||
name: `${this.podName}-work`
|
name: `${this.podName}-work`
|
||||||
},
|
},
|
||||||
spec: {
|
spec: {
|
||||||
accessModes: ['ReadWriteOnce'],
|
accessModes: ['ReadWriteOnce'],
|
||||||
|
|
||||||
volumeMode: 'Filesystem',
|
volumeMode: 'Filesystem',
|
||||||
|
storageClassName: 'local-storage',
|
||||||
|
volumeName: 'work',
|
||||||
resources: {
|
resources: {
|
||||||
requests: {
|
requests: {
|
||||||
storage: '1Gi'
|
storage: '1Gi'
|
||||||
@@ -106,6 +135,6 @@ export class TestHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await k8sApi.createNamespacedPersistentVolumeClaim('default', volume)
|
await k8sApi.createNamespacedPersistentVolumeClaim('default', volumeClaim)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user