123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 'use strict'
- const execFile = require('node:util').promisify(require('node:child_process').execFile)
- const fsp = require('node:fs/promises')
- const ospath = require('node:path')
- module.exports.register = function () {
- if (!process.env.BUILD_REFNAME) return
- this.once('playbookBuilt', async ({ playbook }) => {
- const { concat: get } = this.require('simple-get')
- const asciidocAttrs = ((playbook.asciidoc ||= {}).attributes ||= {})
- const siteManifestUrl = asciidocAttrs['primary-site-manifest-url'] || `${playbook.site.url}/site-manifest.json`
- const siteManifestData = await (siteManifestUrl.startsWith('https://')
- ? download(get, siteManifestUrl)
- : fsp.readFile(siteManifestUrl)
- ).then(JSON.parse)
- let { BUILD_REFNAME: refname, BUILD_VERSION: version } = process.env
- const isBranch = /[a-z]$/.test(refname)
- if (!version) {
- const repoUrl = await execFile('git', ['remote', 'get-url', 'origin']).then(({ stdout: output }) => output.trim())
- const propertiesUrl = `${repoUrl.replace('github.com', 'raw.githubusercontent.com')}/${refname}/gradle.properties`
- version = await download(get, propertiesUrl)
- .then((contents) => contents.toString().split('\n').find((it) => it.startsWith('version='))?.slice(8))
- }
- if (isBranch && version.endsWith('-SNAPSHOT')) version = version.slice(0, -9)
- const versionsInManifest = siteManifestData.components.ROOT.versions
- if (!(version in versionsInManifest && isBranch === !!versionsInManifest[version].prerelease)) {
- const category = require('path').basename(module.id, '.js')
- await fsp.writeFile(ospath.join(playbook.dir, '.full-build'), '')
- console.log(`version ${version} not previously built; reverting to full build`)
- return
- }
- Object.assign(
- playbook.content.sources[0],
- isBranch ? { branches: [refname], tags: [] } : { branches: [], tags: [refname] }
- )
- Object.assign(
- asciidocAttrs,
- { 'primary-site-url': '.', 'primary-site-manifest-url': siteManifestUrl }
- )
- this.updateVariables({ playbook })
- })
- }
- function download (get, url) {
- return new Promise((resolve, reject) =>
- get({ url }, (err, response, contents) => {
- if (err) reject(err)
- if (response.statusCode !== 200) {
- const message = `Response code ${response.statusCode} (${response.statusMessage})`
- return reject(Object.assign(new Error(message), { name: 'HTTPError' }))
- }
- resolve(contents)
- })
- )
- }
|