conventional-changelog-action/test-output.js

66 lines
1.8 KiB
JavaScript

const fs = require('fs')
const assert = require('assert')
const objectPath = require('object-path')
const yaml = require('yaml')
const toml = require('@iarna/toml')
const actionConfig = yaml.parse(fs.readFileSync('./action.yml', 'utf8'))
const {
FILES = actionConfig.inputs['version-file'].default,
EXPECTED_VERSION_PATH = actionConfig.inputs['version-path'].default,
EXPECTED_VERSION = actionConfig.inputs['fallback-version'].default,
} = process.env
assert.ok(FILES, 'Files not defined!')
/**
* Test if all the files are updated
*/
FILES.split(',').map((file, index) => {
console.log(`Going to test file "${file}"`)
const fileContent = fs.readFileSync(file.trim(), 'utf8')
const fileExtension = file.split('.').pop()
assert.ok(fileExtension, 'No file extension found!')
let parsedContent = null
switch (fileExtension.toLowerCase()) {
case 'json':
parsedContent = JSON.parse(fileContent)
break
case 'yaml':
case 'yml':
parsedContent = yaml.parse(fileContent)
break
case 'toml':
parsedContent = toml.parse(fileContent)
break
default:
assert.fail('File extension not supported!')
}
console.log(`"${file}" has a valid extension "${fileExtension.toLowerCase()}"`)
assert.ok(parsedContent, 'Content could not be parsed!')
console.log(`"${file}" has valid content`, parsedContent)
const newVersionInFile = objectPath.get(parsedContent, EXPECTED_VERSION_PATH, null)
const expectedVersions = EXPECTED_VERSION.split(',')
const expectedVersion = expectedVersions.length > 0
? expectedVersions[index]
: expectedVersions
console.log(`"${file}" check if "${newVersionInFile}" matches what is expected "${expectedVersion.trim()}"`)
assert.strictEqual(newVersionInFile, expectedVersion.trim(), 'Version does not match what is expected')
})