Skip to content

src/finish-build.ts

21 lines · 864 B · TypeScript
Raw
/**
 * Mark a build done (or failed) so the build feed shows it finished.
 *
 * @param input - `{ buildId, status?: 'done' | 'failed' }`
 * @returns `{ buildId, status }`
 * @example
 * import finishBuild from 'kody:@kentcdodds/world-builder/finish-build'
 * await finishBuild({ buildId })
 */
import { getCaller } from './lib/identity.ts'
import { WorldError, finishBuild as finish, ownedBuild, requireUuid } from './lib/world-ops.ts'

export default async function finishBuild(input: { buildId: string; status?: 'done' | 'failed' }) {
	const caller = await getCaller()
	if (!caller) throw new WorldError('Sign in to Kody to build.', 401)
	const buildId = requireUuid(input?.buildId, 'buildId')
	await ownedBuild(buildId, caller.username)
	const status = input?.status === 'failed' ? 'failed' : 'done'
	await finish(buildId, status)
	return { buildId, status }
}