1 import { pick } from '@shared/core-utils'
2 import { HttpStatusCode, RegisterRunnerBody, RegisterRunnerResult, ResultList, Runner, UnregisterRunnerBody } from '@shared/models'
3 import { unwrapBody } from '../requests'
4 import { AbstractCommand, OverrideCommandOptions } from '../shared'
6 export class RunnersCommand extends AbstractCommand {
8 list (options: OverrideCommandOptions & {
13 const path = '/api/v1/runners'
15 return this.getRequestBody<ResultList<Runner>>({
19 query: pick(options, [ 'start', 'count', 'sort' ]),
21 defaultExpectedStatus: HttpStatusCode.OK_200
25 register (options: OverrideCommandOptions & RegisterRunnerBody) {
26 const path = '/api/v1/runners/register'
28 return unwrapBody<RegisterRunnerResult>(this.postBodyRequest({
32 fields: pick(options, [ 'name', 'registrationToken', 'description' ]),
34 defaultExpectedStatus: HttpStatusCode.OK_200
38 unregister (options: OverrideCommandOptions & UnregisterRunnerBody) {
39 const path = '/api/v1/runners/unregister'
41 return this.postBodyRequest({
45 fields: pick(options, [ 'runnerToken' ]),
47 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
51 delete (options: OverrideCommandOptions & {
54 const path = '/api/v1/runners/' + options.id
56 return this.deleteRequest({
61 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
65 // ---------------------------------------------------------------------------
67 async autoRegisterRunner () {
68 const { data } = await this.server.runnerRegistrationTokens.list({ sort: 'createdAt' })
70 const { runnerToken } = await this.register({
72 registrationToken: data[0].registrationToken