Roadmap author and contributors page
This commit is contained in:
@ -13,7 +13,8 @@ const DetailedRoadmap = ({ roadmap }) => {
|
|||||||
const [menuActive, setMenuState] = useState(false);
|
const [menuActive, setMenuState] = useState(false);
|
||||||
const {
|
const {
|
||||||
sidebar = {},
|
sidebar = {},
|
||||||
page: currentPage = {}
|
page: currentPage = {},
|
||||||
|
author = {}
|
||||||
} = roadmap;
|
} = roadmap;
|
||||||
|
|
||||||
const roadmapPages = Object.keys(sidebar || {}).map(groupTitle => {
|
const roadmapPages = Object.keys(sidebar || {}).map(groupTitle => {
|
||||||
@ -42,7 +43,9 @@ const DetailedRoadmap = ({ roadmap }) => {
|
|||||||
<div className="container d-flex align-items-center flex-column flex-md-row">
|
<div className="container d-flex align-items-center flex-column flex-md-row">
|
||||||
<RoadmapMeta>
|
<RoadmapMeta>
|
||||||
<h3>{ roadmap.title }</h3>
|
<h3>{ roadmap.title }</h3>
|
||||||
<p>Roadmap contributed by <a href="#">Kamran Ahmed</a> and <a href="#">5 others</a></p>
|
<p>
|
||||||
|
Roadmap contributed by <a href={ author.url } target="_blank">{ author.name }</a>
|
||||||
|
{ roadmap.contributorsCount > 1 && ` and <a href="${roadmap.contributorsUrl}">${roadmap.contributorsCount} others</a>`}</p>
|
||||||
</RoadmapMeta>
|
</RoadmapMeta>
|
||||||
<ShareRoadmap className="mt-2 mt-md-0">
|
<ShareRoadmap className="mt-2 mt-md-0">
|
||||||
<ShareIcon href={ siteConfig.url.repo } target="_blank">
|
<ShareIcon href={ siteConfig.url.repo } target="_blank">
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
const exec = require('child_process').execSync;
|
||||||
|
|
||||||
const STORAGE_PATH = path.join(__dirname, '../storage');
|
const STORAGE_PATH = path.join(__dirname, '../storage');
|
||||||
const ROADMAPS_PATH = path.join(__dirname, '../storage/roadmaps');
|
const ROADMAPS_PATH = path.join(__dirname, '../storage/roadmaps');
|
||||||
@ -13,6 +14,13 @@ const roadmapsMeta = roadmapDirs.reduce((metaAcc, roadmapDirName) => {
|
|||||||
const roadmapDir = path.join(ROADMAPS_PATH, roadmapDirName);
|
const roadmapDir = path.join(ROADMAPS_PATH, roadmapDirName);
|
||||||
const roadmapMeta = require(path.join(roadmapDir, 'meta.json'));
|
const roadmapMeta = require(path.join(roadmapDir, 'meta.json'));
|
||||||
|
|
||||||
|
const contributors = exec(`git log --pretty=format:"%an%x09" ${roadmapDir} | uniq`)
|
||||||
|
.toString()
|
||||||
|
.split('\n')
|
||||||
|
.map(contributor => contributor.replace(/[\s\t]/g, ' ').trim()) || [];
|
||||||
|
const contributorNames = contributors.filter(contributor => !!contributor);
|
||||||
|
|
||||||
|
|
||||||
console.log(`----------------------------`);
|
console.log(`----------------------------`);
|
||||||
console.log(`[#] Roadmap: ${roadmapMeta.title}`);
|
console.log(`[#] Roadmap: ${roadmapMeta.title}`);
|
||||||
console.log(`[x] Generating sidebar`);
|
console.log(`[x] Generating sidebar`);
|
||||||
@ -61,6 +69,8 @@ const roadmapsMeta = roadmapDirs.reduce((metaAcc, roadmapDirName) => {
|
|||||||
...metaAcc,
|
...metaAcc,
|
||||||
{
|
{
|
||||||
...roadmapMeta,
|
...roadmapMeta,
|
||||||
|
contributorsCount: contributorNames.length,
|
||||||
|
contributorsUrl: `/${roadmapSlug}/contributors`,
|
||||||
url: `/${roadmapSlug}`,
|
url: `/${roadmapSlug}`,
|
||||||
path: path.join(roadmapDir.replace(STORAGE_PATH, ''), '/summary.md'),
|
path: path.join(roadmapDir.replace(STORAGE_PATH, ''), '/summary.md'),
|
||||||
sidebar,
|
sidebar,
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"title": "Frontend Developer",
|
"title": "Frontend Developer",
|
||||||
"description": "Roadmap to becoming a modern frontend developer",
|
"description": "Step by step guide to becoming a modern frontend developer",
|
||||||
"featuredDescription": "Step by step guide to becoming a modern frontend developer in 2019",
|
"featuredDescription": "Step by step guide to becoming a modern frontend developer in 2019",
|
||||||
|
"author": {
|
||||||
|
"name": "Kamran Ahmed",
|
||||||
|
"url": "https://twitter.com/kamranahmedse"
|
||||||
|
},
|
||||||
"featured": true,
|
"featured": true,
|
||||||
"detailed": true,
|
"detailed": true,
|
||||||
"versions": [
|
"versions": [
|
||||||
@ -10,9 +14,18 @@
|
|||||||
"2018",
|
"2018",
|
||||||
"2017"
|
"2017"
|
||||||
],
|
],
|
||||||
|
"contributorsCount": 1,
|
||||||
|
"contributorsUrl": "/frontend/contributors",
|
||||||
"url": "/frontend",
|
"url": "/frontend",
|
||||||
"path": "/roadmaps/1-frontend/summary.md",
|
"path": "/roadmaps/1-frontend/summary.md",
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
|
"_others": [
|
||||||
|
{
|
||||||
|
"url": "/frontend/contributors",
|
||||||
|
"title": "contributors",
|
||||||
|
"path": "/roadmaps/1-frontend/_others/contributors.md"
|
||||||
|
}
|
||||||
|
],
|
||||||
"landscape": [
|
"landscape": [
|
||||||
{
|
{
|
||||||
"url": "/frontend/junior",
|
"url": "/frontend/junior",
|
||||||
@ -79,6 +92,12 @@
|
|||||||
"description": "Step by step guide to becoming a modern backend developer",
|
"description": "Step by step guide to becoming a modern backend developer",
|
||||||
"featuredDescription": "Step by step guide to becoming a modern backend developer in 2019",
|
"featuredDescription": "Step by step guide to becoming a modern backend developer in 2019",
|
||||||
"featured": true,
|
"featured": true,
|
||||||
|
"author": {
|
||||||
|
"name": "Kamran Ahmed",
|
||||||
|
"url": "https://twitter.com/kamranahmedse"
|
||||||
|
},
|
||||||
|
"contributorsCount": 1,
|
||||||
|
"contributorsUrl": "/backend/contributors",
|
||||||
"url": "/backend",
|
"url": "/backend",
|
||||||
"path": "/roadmaps/2-backend/summary.md",
|
"path": "/roadmaps/2-backend/summary.md",
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
@ -111,6 +130,12 @@
|
|||||||
"2018",
|
"2018",
|
||||||
"2017"
|
"2017"
|
||||||
],
|
],
|
||||||
|
"author": {
|
||||||
|
"name": "Kamran Ahmed",
|
||||||
|
"url": "https://twitter.com/kamranahmedse"
|
||||||
|
},
|
||||||
|
"contributorsCount": 1,
|
||||||
|
"contributorsUrl": "/devops/contributors",
|
||||||
"url": "/devops",
|
"url": "/devops",
|
||||||
"path": "/roadmaps/3-devops/summary.md",
|
"path": "/roadmaps/3-devops/summary.md",
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
@ -138,6 +163,12 @@
|
|||||||
"description": "Step by step guide to becoming a modern fullstack developer in 2019",
|
"description": "Step by step guide to becoming a modern fullstack developer in 2019",
|
||||||
"featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2019",
|
"featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2019",
|
||||||
"upcoming": true,
|
"upcoming": true,
|
||||||
|
"author": {
|
||||||
|
"name": "Kamran Ahmed",
|
||||||
|
"url": "https://twitter.com/kamranahmedse"
|
||||||
|
},
|
||||||
|
"contributorsCount": 1,
|
||||||
|
"contributorsUrl": "/fullstack/contributors",
|
||||||
"url": "/fullstack",
|
"url": "/fullstack",
|
||||||
"path": "/roadmaps/4-fullstack/summary.md",
|
"path": "/roadmaps/4-fullstack/summary.md",
|
||||||
"sidebar": {}
|
"sidebar": {}
|
||||||
@ -147,6 +178,12 @@
|
|||||||
"description": "Steps to follow in order to become a modern QA Engineer in 2019",
|
"description": "Steps to follow in order to become a modern QA Engineer in 2019",
|
||||||
"featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2019",
|
"featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2019",
|
||||||
"upcoming": true,
|
"upcoming": true,
|
||||||
|
"author": {
|
||||||
|
"name": "Anas Fitiani",
|
||||||
|
"url": "https://github.com/anas-qa"
|
||||||
|
},
|
||||||
|
"contributorsCount": 1,
|
||||||
|
"contributorsUrl": "/qa/contributors",
|
||||||
"url": "/qa",
|
"url": "/qa",
|
||||||
"path": "/roadmaps/5-qa/summary.md",
|
"path": "/roadmaps/5-qa/summary.md",
|
||||||
"sidebar": {}
|
"sidebar": {}
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
"title": "Frontend Developer",
|
"title": "Frontend Developer",
|
||||||
"description": "Step by step guide to becoming a modern frontend developer",
|
"description": "Step by step guide to becoming a modern frontend developer",
|
||||||
"featuredDescription": "Step by step guide to becoming a modern frontend developer in 2019",
|
"featuredDescription": "Step by step guide to becoming a modern frontend developer in 2019",
|
||||||
|
"author": {
|
||||||
|
"name": "Kamran Ahmed",
|
||||||
|
"url": "https://twitter.com/kamranahmedse"
|
||||||
|
},
|
||||||
"featured": true,
|
"featured": true,
|
||||||
"detailed": true,
|
"detailed": true,
|
||||||
"versions": [
|
"versions": [
|
||||||
|
@ -2,5 +2,9 @@
|
|||||||
"title": "Backend Developer",
|
"title": "Backend Developer",
|
||||||
"description": "Step by step guide to becoming a modern backend developer",
|
"description": "Step by step guide to becoming a modern backend developer",
|
||||||
"featuredDescription": "Step by step guide to becoming a modern backend developer in 2019",
|
"featuredDescription": "Step by step guide to becoming a modern backend developer in 2019",
|
||||||
"featured": true
|
"featured": true,
|
||||||
|
"author": {
|
||||||
|
"name": "Kamran Ahmed",
|
||||||
|
"url": "https://twitter.com/kamranahmedse"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,5 +7,9 @@
|
|||||||
"latest",
|
"latest",
|
||||||
"2018",
|
"2018",
|
||||||
"2017"
|
"2017"
|
||||||
]
|
],
|
||||||
|
"author": {
|
||||||
|
"name": "Kamran Ahmed",
|
||||||
|
"url": "https://twitter.com/kamranahmedse"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,5 +2,9 @@
|
|||||||
"title": "Full Stack Developer",
|
"title": "Full Stack Developer",
|
||||||
"description": "Step by step guide to becoming a modern fullstack developer in 2019",
|
"description": "Step by step guide to becoming a modern fullstack developer in 2019",
|
||||||
"featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2019",
|
"featuredDescription": "Step by step guide to becoming a modern fullstack developer in 2019",
|
||||||
"upcoming": true
|
"upcoming": true,
|
||||||
|
"author": {
|
||||||
|
"name": "Kamran Ahmed",
|
||||||
|
"url": "https://twitter.com/kamranahmedse"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,5 +2,9 @@
|
|||||||
"title": "QA Engineer",
|
"title": "QA Engineer",
|
||||||
"description": "Steps to follow in order to become a modern QA Engineer in 2019",
|
"description": "Steps to follow in order to become a modern QA Engineer in 2019",
|
||||||
"featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2019",
|
"featuredDescription": "Step by step guide to becoming a modern QA Engineer in 2019",
|
||||||
"upcoming": true
|
"upcoming": true,
|
||||||
|
"author": {
|
||||||
|
"name": "Anas Fitiani",
|
||||||
|
"url": "https://github.com/anas-qa"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user