gdal-async
Version:
Bindings to GDAL (Geospatial Data Abstraction Library) with full async support
49 lines (46 loc) • 2.31 kB
JavaScript
import { promises as fs } from 'node:fs'
import * as path from 'node:path'
import { fileURLToPath } from 'node:url'
import * as child_process from 'node:child_process'
import { promisify } from 'node:util'
import { Octokit } from '@octokit/core'
const exec = promisify(child_process.exec)
const octokit = new Octokit({ auth: process.env.NODE_PRE_GYP_GITHUB_TOKEN })
const pkg = { repo: 'node-gdal-async', owner: 'mmomtchev' }
const version = JSON.parse(await fs.readFile(path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'package.json'))).version
const workflowPublishId = 7048427
const workflowPublish = { ...pkg, workflow_id: workflowPublishId, ref: `v${version}` }
try {
const branch = (await exec('git branch --show-current')).stdout.trim()
process.stdout.write(`launching Github actions build on branch ${branch} for ${version}, tag ${workflowPublish.ref}`)
await octokit.request('POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches', workflowPublish)
let status
do {
process.stdout.write('.')
// eslint-disable-next-line no-await-in-loop
await new Promise((res) => setTimeout(res, 5000))
// eslint-disable-next-line no-await-in-loop
status = await octokit.request(`GET /repos/{owner}/{repo}/actions/workflows/${workflowPublishId}/runs`,
{ ...pkg, per_page: 1, page: 0 })
} while (status.data.workflow_runs[0].status !== 'completed')
process.stdout.write('\n')
if (status.data.workflow_runs[0].conclusion !== 'success') {
const url = new URL(status.data.workflow_runs[0].jobs_url)
if (url.protocol !== 'https:' || url.hostname !== 'api.github.com' || !url.pathname.match(/^[a-z0-9/-]+$/g)) {
throw new Error(`unexpected protocol URL ${url}`)
}
const jobs = await octokit.request(url.toString())
const failedJob = jobs.data.jobs.filter((j) => ![ 'success', 'cancelled' ].includes(j.conclusion))
if (failedJob[0]) {
const failedStep = failedJob[0].steps.filter((j) => ![ 'success', 'cancelled' ].includes(j.conclusion))
console.error('failed job', failedJob[0].name, failedStep[0].name)
} else {
console.error('job cancelled')
}
throw new Error('Github actions build failed')
}
process.stdout.write('success')
} catch (e) {
console.error(e)
process.exit(1)
}