105 lines
2.9 KiB
JavaScript
105 lines
2.9 KiB
JavaScript
/*
|
|
* Copyright Elasticsearch B.V. and contributors
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
const { join } = require('path')
|
|
const stream = require('stream')
|
|
const { promisify } = require('util')
|
|
const { createWriteStream, promises } = require('fs')
|
|
const { rimraf } = require('rimraf')
|
|
const fetch = require('node-fetch')
|
|
const crossZip = require('cross-zip')
|
|
const ora = require('ora')
|
|
|
|
const { mkdir, cp } = promises
|
|
const pipeline = promisify(stream.pipeline)
|
|
const unzip = promisify(crossZip.unzip)
|
|
|
|
const testYamlFolder = join(__dirname, '..', 'yaml-rest-tests')
|
|
const zipFile = join(__dirname, '..', 'elasticsearch-clients-tests.zip')
|
|
|
|
const schemaFolder = join(__dirname, '..', 'schema')
|
|
const schemaJson = join(schemaFolder, 'schema.json')
|
|
|
|
async function downloadArtifacts (localTests, version = 'main') {
|
|
const log = ora('Checking out spec and test').start()
|
|
|
|
const { GITHUB_TOKEN } = process.env
|
|
|
|
if (version !== 'main') {
|
|
version = version.split('.').slice(0, 2).join('.')
|
|
}
|
|
|
|
log.text = 'Clean tests folder'
|
|
await rimraf(testYamlFolder)
|
|
await mkdir(testYamlFolder, { recursive: true })
|
|
|
|
log.text = `Fetch test YAML files for version ${version}`
|
|
|
|
if (localTests) {
|
|
log.text = `Copying local tests from ${localTests}`
|
|
await cp(localTests, testYamlFolder, { recursive: true })
|
|
} else {
|
|
if (!GITHUB_TOKEN) {
|
|
log.fail("Missing required environment variable 'GITHUB_TOKEN'")
|
|
process.exit(1)
|
|
}
|
|
|
|
const response = await fetch(`https://api.github.com/repos/elastic/elasticsearch-clients-tests/zipball/${version}`, {
|
|
headers: {
|
|
Authorization: `Bearer ${GITHUB_TOKEN}`,
|
|
Accept: 'application/vnd.github+json'
|
|
}
|
|
})
|
|
|
|
if (!response.ok) {
|
|
log.fail(`unexpected response ${response.statusText}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
log.text = 'Downloading tests zipball'
|
|
await pipeline(response.body, createWriteStream(zipFile))
|
|
|
|
log.text = 'Unzipping tests'
|
|
await unzip(zipFile, testYamlFolder)
|
|
|
|
log.text = 'Cleanup'
|
|
await rimraf(zipFile)
|
|
}
|
|
|
|
log.text = 'Fetching Elasticsearch specification'
|
|
await rimraf(schemaFolder)
|
|
await mkdir(schemaFolder, { recursive: true })
|
|
|
|
const response = await fetch(`https://raw.githubusercontent.com/elastic/elasticsearch-specification/${version}/output/schema/schema.json`)
|
|
if (!response.ok) {
|
|
log.fail(`unexpected response ${response.statusText}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
log.text = 'Downloading schema.json'
|
|
await pipeline(response.body, createWriteStream(schemaJson))
|
|
|
|
log.succeed('Done')
|
|
}
|
|
|
|
async function main () {
|
|
await downloadArtifacts()
|
|
}
|
|
|
|
if (require.main === module) {
|
|
process.on('unhandledRejection', function (err) {
|
|
console.error(err)
|
|
process.exit(1)
|
|
})
|
|
|
|
main().catch(t => {
|
|
console.log(t)
|
|
process.exit(2)
|
|
})
|
|
}
|
|
|
|
module.exports = downloadArtifacts
|
|
module.exports.locations = { testYamlFolder, zipFile, schemaJson }
|