Skip to content

Commit

Permalink
feat: add configurable quadrant names
Browse files Browse the repository at this point in the history
  • Loading branch information
Demian222 authored Jul 8, 2021
1 parent baf9f6e commit a1a5aac
Show file tree
Hide file tree
Showing 23 changed files with 307 additions and 54 deletions.
18 changes: 14 additions & 4 deletions data/ios/2021-06.csv
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@ QIWI iOS Tech Radar
date
21-06-2021
===
quadrant,alias
q1,languages-and-frameworks
q1,Language
q2,Platforms
q3,tools
q4,tech
q4,techniques
===
quadrant,title
q1,Languages and frameworks
q2,Platforms
q3,Tools
q4,Techniques
===
name,quadrant,ring,description
Дизайн-система,tech,adopt,
Модульная архитектура,tech,adopt,
Expand Down Expand Up @@ -78,7 +92,3 @@ SwipeCellKit,Language,HOLD,"Swipeable UITableViewCell/UICollectionViewCell based
TTTAttributedLabel,Language,HOLD,"A drop-in replacement for UILabel that supports attributes, data detectors, links, and more"
Typhoon,Language,HOLD,Dependency Injection framework
YapDatabase,Language,HOLD,A collection/key/value store.
===
quadrant,alias
languages-and-frameworks,Language
Techniques,tech
12 changes: 12 additions & 0 deletions data/js/2021-06.csv
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@ QIWI JS Tech Radar
date
21-06-2021
===
quadrant,alias
q1,languages-and-frameworks
q2,Platforms
q3,tools
q4,techniques
===
quadrant,title
q1,Languages and frameworks
q2,Platforms
q3,Tools
q4,Techniques
===
name,quadrant,ring,description
TypeScript,languages-and-frameworks,Adopt,Статически типизированный ЖС
JavaScript,languages-and-frameworks,Adopt,ЖС
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"lint:fix": "yarn lint --fix",
"format": "prettier --write \"src/**/*.js\"",
"release": "npx -p @qiwi/semrel-toolkit semrel -e @qiwi/semrel-config",
"generate": "node ./src/main/js/cli.mjs --input \"data/**/*.{csv,json,yml}\" --output dist && touch dist/.nojekyll"
"generate": "node ./src/main/js/cli.mjs --input \"data/**/*.{csv,json,yml}\" --output dist --base-prefix tech-radar && touch dist/.nojekyll"
},
"prettier": "prettier-config-qiwi",
"exports": {
Expand Down
4 changes: 1 addition & 3 deletions src/main/js/11ty/.eleventy.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ const htmlmin = require('html-minifier')
const terser = require('terser')

module.exports = (config) => {
// const pathPrefix = process.env.PATHPREFIX
const {temp, output, title, pathPrefix} = global._11ty_

const {temp, output, title, pathPrefix } = global._11ty_
const assetsPath = temp + '/assets'
config.addPassthroughCopy({
[assetsPath]: '/',
Expand Down
17 changes: 17 additions & 0 deletions src/main/js/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,20 @@ export const radarSchema = {
},
},
}
export const settings = {
svg_id: 'radar',
width: 1450,
height: 1100,
colors: {
background: '#fff',
grid: '#bbb',
inactive: '#ddd',
},
rings: [
{ name: 'ADOPT', color: '#93c47d', id: 'adopt' },
{ name: 'TRIAL', color: '#93d2c2', id: 'trial' },
{ name: 'ASSESS', color: '#fbdb84', id: 'assess' },
{ name: 'HOLD', color: '#efafa9', id: 'hold' },
],
print_layout: true,
}
10 changes: 2 additions & 8 deletions src/main/js/generateMdAssets.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import fsExtra from 'fs-extra'
import path from 'path'

import { tplDir } from './constants.js'
import { getQuadrant } from './util.js'

/**
* generate path to .md file
Expand Down Expand Up @@ -38,22 +39,15 @@ ${description}`
*/
export const genMdAssets = (doc, temp) => {
fsExtra.copySync(tplDir, temp)

doc.data.forEach(({ name, quadrant, ring, description, moved }) => {
try {
const quadrantAlias = getQuadrant(quadrant, doc)
const entryPath = genMdPath({ name, quadrant: quadrantAlias, temp })
const content = genMdContent({ ring, description, moved })

fs.writeFileSync(entryPath, content)
} catch (err) {
console.error('genMdAssets', err)
}
})
}

export const getQuadrant = (quadrant, doc) => {
if (!('quadrantAliases' in doc)) return quadrant.toLowerCase()
return doc.quadrantAliases[quadrant.toLowerCase()]
? doc.quadrantAliases[quadrant.toLowerCase()]
: quadrant.toLowerCase()
}
5 changes: 4 additions & 1 deletion src/main/js/generateStatic.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import path from 'path'

import { radarSchema, tempDir } from './constants.js'
import { genMdAssets } from './generateMdAssets.js'
import { writeSettings } from './util.js'
import { validate } from './validator.js'

/**
Expand All @@ -25,15 +26,17 @@ export const genStatics = async (

const temp = tempDir
const output = dirs[i] ? path.join(_output, dirs[i]) : _output
const pathPrefix = basePrefix ? basePrefix + '/' + dirs[i] : undefined

global._11ty_ = {
title: doc.meta.title,
output,
temp,
pathPrefix: basePrefix + '/' + dirs[i],
pathPrefix,
}
try {
genMdAssets(doc, temp)
writeSettings(doc, temp)
await genEleventy(temp, output)
} catch (err) {
console.error('genStatics', err)
Expand Down
7 changes: 6 additions & 1 deletion src/main/js/reader.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export const csvReader = (csvPath) => {
meta: {},
data: [],
quadrantAliases: {},
quadrantTitles: {},
}
radarContents.split('===').forEach((radarChunks) => {
const records = parse(radarChunks, {
Expand All @@ -60,11 +61,15 @@ export const csvReader = (csvPath) => {
radarDocument.quadrantAliases[record.alias.toLowerCase()] =
record.quadrant.toLowerCase()
})
} else if (header.includes('title') && header.includes('quadrant')) {
records.forEach((record) => {
radarDocument.quadrantTitles[record.quadrant.toLowerCase()] =
record.title
})
} else {
Object.assign(radarDocument.meta, records[0])
}
})
// console.log('csvPath:', csvPath, radarDocument)
return radarDocument
}
/**
Expand Down
22 changes: 22 additions & 0 deletions src/main/js/util.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
// import findCacheDir from 'find-cache-dir'
import crypto from 'crypto'
import fs from 'fs'
import { ensureDirSync } from 'fs-extra'
import path from 'path'

import { settings } from './constants.js'

export const reverse = (arr) => {
const _arr = [...arr]
_arr.reverse()
Expand Down Expand Up @@ -43,3 +46,22 @@ export const getTemp = (cwd, temp) => {
const tempDir = id
return ensureDir(tempDir)
}
export const getQuadrant = (quadrant, doc) => {
const lowQuadrant = quadrant.toLowerCase()
return doc.quadrantAliases[lowQuadrant] || lowQuadrant
}

export const writeSettings = (doc, output) => {
const quadrants = []

quadrants.push({ name: doc.quadrantTitles.q1 || 'Q1', id: 'q1' })
quadrants.push({ name: doc.quadrantTitles.q2 || 'Q2', id: 'q2' })
quadrants.push({ name: doc.quadrantTitles.q3 || 'Q3', id: 'q3' })
quadrants.push({ name: doc.quadrantTitles.q4 || 'Q4', id: 'q4' })

const settins = {}
Object.assign(settins, settings)
settins.quadrants = quadrants
const settingsPath = path.join(output, '_data/settins.json')
fs.writeFileSync(settingsPath, JSON.stringify(settins))
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
48 changes: 24 additions & 24 deletions src/test/js/__snapshots__/generateStatic.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

exports[`generate 11ty app from .csv file 1`] = `
Array [
"/test/entries/languages-and-frameworks/TypeScript/index.html",
"/test/entries/platforms/Nodejs/index.html",
"/test/entries/techniques/Гексагональная архитектура/index.html",
"/test/entries/tools/codeclimate/index.html",
"/test/entries/q1/TypeScript/index.html",
"/test/entries/q2/Nodejs/index.html",
"/test/entries/q3/codeclimate/index.html",
"/test/entries/q4/Гексагональная архитектура/index.html",
"/test/favicon.ico",
"/test/index.html",
"/test/radar.css",
Expand All @@ -15,10 +15,10 @@ Array [

exports[`generate 11ty app from .json file 1`] = `
Array [
"/test/entries/languages-and-frameworks/TypeScript/index.html",
"/test/entries/platforms/Nodejs/index.html",
"/test/entries/techniques/Гексагональная архитектура/index.html",
"/test/entries/tools/codeclimate/index.html",
"/test/entries/q1/TypeScript/index.html",
"/test/entries/q2/Nodejs/index.html",
"/test/entries/q3/codeclimate/index.html",
"/test/entries/q4/Гексагональная архитектура/index.html",
"/test/favicon.ico",
"/test/index.html",
"/test/radar.css",
Expand All @@ -28,10 +28,10 @@ Array [

exports[`generate 11ty app from .yml file 1`] = `
Array [
"/test/entries/languages-and-frameworks/TypeScript/index.html",
"/test/entries/platforms/Nodejs/index.html",
"/test/entries/techniques/Гексагональная архитектура/index.html",
"/test/entries/tools/codeclimate/index.html",
"/test/entries/q1/TypeScript/index.html",
"/test/entries/q2/Nodejs/index.html",
"/test/entries/q3/codeclimate/index.html",
"/test/entries/q4/Гексагональная архитектура/index.html",
"/test/favicon.ico",
"/test/index.html",
"/test/radar.css",
Expand All @@ -41,26 +41,26 @@ Array [

exports[`generate 11ty app from multiple files 1`] = `
Array [
"/test/entries/languages-and-frameworks/TypeScript/index.html",
"/test/entries/platforms/Nodejs/index.html",
"/test/entries/techniques/Гексагональная архитектура/index.html",
"/test/entries/tools/codeclimate/index.html",
"/test/entries/q1/TypeScript/index.html",
"/test/entries/q2/Nodejs/index.html",
"/test/entries/q3/codeclimate/index.html",
"/test/entries/q4/Гексагональная архитектура/index.html",
"/test/favicon.ico",
"/test/index.html",
"/test/radar.css",
"/test/radar.js",
"/test-2/entries/languages-and-frameworks/TypeScript/index.html",
"/test-2/entries/platforms/Nodejs/index.html",
"/test-2/entries/techniques/Гексагональная архитектура/index.html",
"/test-2/entries/tools/codeclimate/index.html",
"/test-2/entries/q1/TypeScript/index.html",
"/test-2/entries/q2/Nodejs/index.html",
"/test-2/entries/q3/codeclimate/index.html",
"/test-2/entries/q4/Гексагональная архитектура/index.html",
"/test-2/favicon.ico",
"/test-2/index.html",
"/test-2/radar.css",
"/test-2/radar.js",
"/test-3/entries/languages-and-frameworks/TypeScript/index.html",
"/test-3/entries/platforms/Nodejs/index.html",
"/test-3/entries/techniques/Гексагональная архитектура/index.html",
"/test-3/entries/tools/codeclimate/index.html",
"/test-3/entries/q1/TypeScript/index.html",
"/test-3/entries/q2/Nodejs/index.html",
"/test-3/entries/q3/codeclimate/index.html",
"/test-3/entries/q4/Гексагональная архитектура/index.html",
"/test-3/favicon.ico",
"/test-3/index.html",
"/test-3/radar.css",
Expand Down
48 changes: 46 additions & 2 deletions src/test/js/__snapshots__/reader.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,17 @@ Object {
"title": "work it",
},
"quadrantAliases": Object {
"language": "languages-and-frameworks",
"language": "q1",
"languages-and-frameworks": "q1",
"platforms": "q2",
"techniques": "q4",
"tools": "q3",
},
"quadrantTitles": Object {
"q1": "Languages and frameworks",
"q2": "Platforms",
"q3": "Tools",
"q4": "Techniques",
},
}
`;
Expand Down Expand Up @@ -80,6 +90,18 @@ Object {
"legend": "bla bla bla",
"title": "tech radar js",
},
"quadrantAliases": Object {
"languages-and-frameworks": "q1",
"platforms": "q2",
"techniques": "q4",
"tools": "q3",
},
"quadrantTitles": Object {
"q1": "Languages and frameworks",
"q2": "Platforms",
"q3": "Tools",
"q4": "Techniques",
},
}
`;

Expand Down Expand Up @@ -121,7 +143,17 @@ Object {
"title": "work it",
},
"quadrantAliases": Object {
"language": "languages-and-frameworks",
"language": "q1",
"languages-and-frameworks": "q1",
"platforms": "q2",
"techniques": "q4",
"tools": "q3",
},
"quadrantTitles": Object {
"q1": "Languages and frameworks",
"q2": "Platforms",
"q3": "Tools",
"q4": "Techniques",
},
}
`;
Expand Down Expand Up @@ -163,5 +195,17 @@ Object {
"legend": "bla bla bla",
"title": "tech radar js",
},
"quadrantAliases": Object {
"languages-and-frameworks": "q1",
"platforms": "q2",
"techniques": "q4",
"tools": "q3",
},
"quadrantTitles": Object {
"q1": "Languages and frameworks",
"q2": "Platforms",
"q3": "Tools",
"q4": "Techniques",
},
}
`;
Loading

0 comments on commit a1a5aac

Please sign in to comment.