UNPKG

@curvenote/cli

Version:
111 lines (110 loc) 4.39 kB
import { tic } from 'myst-cli-utils'; import { format } from 'date-fns'; import { getFromUrl, postToJournals, postToUrl } from '../utils/api.js'; export function formatDate(date) { return format(new Date(date), 'dd MMM, yyyy HH:mm:ss'); } export async function postNewCliCheckJob(session, payload, results) { const toc = tic(); const body = { job_type: 'CLI_CHECK', payload, results, }; session.log.debug(`POST to ${session.config?.apiUrl}/jobs...`); const resp = await postToJournals(session, `/jobs`, body); session.log.debug(`${resp.status} ${resp.statusText}`); if (resp.ok) { const json = (await resp.json()); session.log.info(toc(`🎉 Posted a new job in %s.`)); session.log.debug(`Job id: ${json.id}`); session.log.debug(`Job status: ${json.status}`); return json; } else { throw new Error('Job creation failed'); } } export async function patchUpdateCliCheckJob(session, jobId, status, message, results) { const toc = tic(); const body = { status, message, results, }; session.log.debug(`PATCH to ${session.config?.apiUrl}/jobs...`); const resp = await postToJournals(session, `/jobs/${jobId}`, body, { method: 'PATCH' }); session.log.debug(`${resp.status} ${resp.statusText}`); if (resp.ok) { const json = (await resp.json()); session.log.info(toc(`🎉 Updated a job in %s.`)); session.log.debug(`Job id: ${json.id}`); session.log.debug(`Job status: ${json.status}`); return json; } else { throw new Error('Job update failed'); } } export async function postNewSubmission(session, venue, collection_id, kind_id, work_version_id, draft, job_id, metadata, tags) { const toc = tic(); const submissionRequest = { work_version_id, collection_id, kind_id, draft, job_id, metadata, tags, }; session.log.debug(`POST to ${session.config?.apiUrl}/sites/${venue}/submissions...`); const resp = await postToJournals(session, `/sites/${venue}/submissions`, submissionRequest); session.log.debug(`${resp.status} ${resp.statusText}`); if (resp.ok) { const json = (await resp.json()); session.log.info(toc(`🚀 Submitted to venue "${venue}" in %s.`)); session.log.debug(`Submission id: ${json.id}`); session.log.debug(`Submitted by: ${json.submitted_by.name ?? json.submitted_by.id}`); return json; } else { throw new Error('Creating new submission failed'); } } export async function postUpdateSubmissionWorkVersion(session, venue, versionsUrl, work_version_id, job_id, metadata, tags) { const toc = tic(); const submissionRequest = { work_version_id, job_id, metadata, tags }; session.log.debug(`POST to ${versionsUrl}...`); const resp = await postToUrl(session, versionsUrl, submissionRequest); session.log.debug(`${resp.status} ${resp.statusText}`); if (resp.ok) { const json = (await resp.json()); session.log.info(toc(`🚀 Updated submission accepted by "${venue}" in %s.`)); session.log.debug(`Submission id: ${json.submission_id}`); session.log.debug(`Submitted by: ${json.submitted_by.name ?? json.submitted_by.id}`); return json; } else { throw new Error('Updating submission failed'); } } export async function patchUpdateSubmissionStatus(session, venue, submissionUrl, action, date) { const toc = tic(); session.log.debug(`GET to ${submissionUrl}...`); const submissionJson = await getFromUrl(session, submissionUrl); const updateUrl = submissionJson?.links?.[action]; if (!updateUrl) { throw new Error(`Action "${action}" not available for submission`); } session.log.debug(`PUT to ${updateUrl}...`); const resp = await postToUrl(session, updateUrl, { date }, { method: 'PUT' }); session.log.debug(`${resp.status} ${resp.statusText}`); if (resp.ok) { const json = (await resp.json()); session.log.info(toc(`🚀 Submission successfully ${action === 'publish' ? 'publishing to' : 'unpublishing from'} "${venue}" in %s.`)); session.log.debug(`Submission id: ${json.id}`); } else { throw new Error(`Submission failed to ${action}`); } }