yaml builds, and tests for builds

This commit is contained in:
Ava Gaiety W 2025-09-20 12:31:11 -06:00
parent e291dbc4a2
commit 8b70f735fc
8 changed files with 120 additions and 11 deletions

View file

@ -1,2 +1,2 @@
[tools] [tools]
bun = "latest" bun = "1.2.22"

BIN
bun.lockb

Binary file not shown.

22
dist/palette.yml vendored Normal file
View file

@ -0,0 +1,22 @@
name: "verdigris"
version: "0.0.1"
license: "GPL-3.0-only"
sourcecode: "https://git.basking.monster/gaiety/verdigris"
author:
name: "Gaiety"
email: "ava+verdigris@gaiety.me"
url: "https://gaiety.me"
common:
pit: "#00040B"
depths: "#19323B"
stope: "#4E6872"
text: "#C6E4F0"
orange: "#FF9F6F"
teal: "#23DBC1"
red: "#E8ADA9"
yellow: "#E1B392"
green: "#98CCAC"
blue: "#8CC8E0"
purple: "#BEB6E8"

View file

@ -4,6 +4,7 @@ import { timerToSeconds } from './src/helpers/math';
import previewList from './src/preview/cli-list' import previewList from './src/preview/cli-list'
import previewSnippet from './src/preview/cli-snippet' import previewSnippet from './src/preview/cli-snippet'
import buildTOML from './src/build/toml' import buildTOML from './src/build/toml'
import buildYAML from './src/build/yaml'
import buildKitty from './ports/kitty/src/build' import buildKitty from './ports/kitty/src/build'
const program = new Command(); const program = new Command();
@ -41,6 +42,7 @@ program
if (options.verbose) console.info('Building Direct Exports...') if (options.verbose) console.info('Building Direct Exports...')
log(options.verbose, await buildTOML(), timer) log(options.verbose, await buildTOML(), timer)
log(options.verbose, await buildYAML(), timer)
if (options.verbose) console.info('Building Ports...') if (options.verbose) console.info('Building Ports...')
log(options.verbose, await buildKitty(), timer) log(options.verbose, await buildKitty(), timer)

View file

@ -15,7 +15,8 @@
"app-root-path": "^3.1.0", "app-root-path": "^3.1.0",
"chalk": "^5.6.2", "chalk": "^5.6.2",
"color-convert": "^3.1.2", "color-convert": "^3.1.2",
"commander": "^14.0.1" "commander": "^14.0.1",
"estilo": "^2.1.3",
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "^5.0.0" "typescript": "^5.0.0"

View file

@ -10,7 +10,11 @@ const appendToTOML = async (content: string) => await appendToFile(file, content
export default async function(isVerbose = false): Promise<string> { export default async function(isVerbose = false): Promise<string> {
if (isVerbose) console.info('Removing previous build', file) if (isVerbose) console.info('Removing previous build', file)
await rmFile(file) try {
await rmFile(file)
} catch (error) {
console.info('TOML: Previous build already removed')
}
if (isVerbose) console.info('Ensuring path and file exist', file) if (isVerbose) console.info('Ensuring path and file exist', file)
await mkFilePath(file) await mkFilePath(file)
if (isVerbose) console.info('Writing header info to file', file) if (isVerbose) console.info('Writing header info to file', file)
@ -46,6 +50,7 @@ email = "${email}"
url = "${url}" url = "${url}"
` `
} }
function colorHeaderTOML(): string { function colorHeaderTOML(): string {
return ` return `
[colors] [colors]
@ -63,11 +68,3 @@ h = ${h}
hex = "${color.toHex()}" hex = "${color.toHex()}"
` `
} }
// [colors]
//
// [colors.bg]
// l = 0.2
// c = 0.02
// h =

62
src/build/yaml.ts Normal file
View file

@ -0,0 +1,62 @@
import { name, version, license, url, author } from '../../package.json'
import appRoot from 'app-root-path'
import { rmFile, mkFilePath, appendToFile } from "../helpers/file"
import { toSnakeCase } from '../helpers/string'
import colors from '../palette'
import type color from '../helpers/color'
const file = appRoot + '/dist/palette.yml'
const appendToYAML = async (content: string) => await appendToFile(file, content)
export default async function(isVerbose = false): Promise<string> {
if (isVerbose) console.info('Removing previous build', file)
try {
await rmFile(file)
} catch (error) {
console.info('YAML: Previous build already removed')
}
if (isVerbose) console.info('Ensuring path and file exist', file)
await mkFilePath(file)
if (isVerbose) console.info('Writing header info to file', file)
await appendToYAML(headerYAML())
if (isVerbose) console.info('Writing author info to file', file)
await appendToYAML(authorYAML())
if (isVerbose) console.info('Writing color palette to file', file)
await appendToYAML(colorHeaderYAML())
for (let index = 0; index < colors.length; index++) {
const color = colors[index]
if (isVerbose) console.info(`${color.name}`, file)
await appendToYAML(colorYAML(color))
}
return file
}
function headerYAML(): string {
return `name: "${name}"
version: "${version}"
license: "${license}"
sourcecode: "${url}"
`
}
function authorYAML(): string {
const { name, email, url } = author
return `
author:
name: "${name}"
email: "${email}"
url: "${url}"
`
}
function colorHeaderYAML(): string {
return `
common:`
}
function colorYAML(color: color): string {
return `
${toSnakeCase(color.name)}: "${color.toHex()}"`
}

25
tests/dist/yaml.test.ts vendored Normal file
View file

@ -0,0 +1,25 @@
import { name, version, license, url, author } from '../../package.json'
import { expect, test } from 'bun:test'
import colors from '../../src/palette'
import { toSnakeCase } from '../../src/helpers/string'
import data from '../../dist/palette.yml'
test('has header info', () => {
expect(data.name).toBe(name)
expect(data.version).toBe(version)
expect(data.license).toBe(license)
expect(data.sourcecode).toBe(url)
expect(data.author.name).toBe(author.name)
expect(data.author.email).toBe(author.email)
expect(data.author.url).toBe(author.url)
})
test('has expected colors', () => {
colors.forEach(color => {
const dataColor = data.common[toSnakeCase(color.name)]
expect(dataColor).toBe(color.toHex())
})
})