mirror of
https://github.com/kremalicious/portfolio.git
synced 2025-02-14 21:10:41 +01:00
Merge pull request #171 from kremalicious/feature/org-repos
allow adding any repo to repos.yml
This commit is contained in:
commit
05947fc76c
@ -1,10 +1,10 @@
|
|||||||
- user: kremalicious
|
- kremalicious/portfolio
|
||||||
repos:
|
- kremalicious/blog
|
||||||
- portfolio
|
- kremalicious/blowfish
|
||||||
- blog
|
- kremalicious/gatsby-plugin-matomo
|
||||||
- blowfish
|
- kremalicious/gatsby-redirect-from
|
||||||
- gatsby-plugin-matomo
|
- kremalicious/hyper-mac-pro
|
||||||
- gatsby-redirect-from
|
- kremalicious/appstorebadges
|
||||||
- hyper-mac-pro
|
- kremalicious/kbdfun
|
||||||
- appstorebadges
|
- oceanprotocol/commons
|
||||||
- kbdfun
|
- oceanprotocol/squid-js
|
||||||
|
@ -27,31 +27,32 @@ function truncate(n, useWordBoundary) {
|
|||||||
// Get GitHub repos
|
// Get GitHub repos
|
||||||
//
|
//
|
||||||
async function getGithubRepos(data) {
|
async function getGithubRepos(data) {
|
||||||
const allRepos = await axios.get(
|
let repos = []
|
||||||
`https://api.github.com/users/${data.user}/repos?per_page=100`,
|
|
||||||
{ headers: { 'User-Agent': 'kremalicious/portfolio' } }
|
|
||||||
)
|
|
||||||
const repos = allRepos.data
|
|
||||||
// filter by what's defined in content/repos.yml
|
|
||||||
.filter(({ name }) => data.repos.includes(name))
|
|
||||||
// sort by pushed to, newest first
|
|
||||||
.sort((a, b) => b.pushed_at.localeCompare(a.pushed_at))
|
|
||||||
|
|
||||||
// reduce data output by reconstructing repo objects
|
|
||||||
const reposReduced = []
|
|
||||||
let holder = {}
|
let holder = {}
|
||||||
|
|
||||||
for (let repo of repos) {
|
for (let item of data) {
|
||||||
holder.name = repo.name
|
const user = item.split('/')[0]
|
||||||
holder.description = repo.description
|
const repoName = item.split('/')[1]
|
||||||
holder.html_url = repo.html_url
|
const repo = await axios.get(
|
||||||
holder.homepage = repo.homepage
|
`https://api.github.com/repos/${user}/${repoName}`,
|
||||||
holder.stargazers_count = repo.stargazers_count
|
{ headers: { 'User-Agent': 'kremalicious/portfolio' } }
|
||||||
reposReduced.push(holder)
|
)
|
||||||
|
|
||||||
|
holder.name = repo.data.name
|
||||||
|
holder.full_name = repo.data.full_name
|
||||||
|
holder.description = repo.data.description
|
||||||
|
holder.html_url = repo.data.html_url
|
||||||
|
holder.homepage = repo.data.homepage
|
||||||
|
holder.stargazers_count = repo.data.stargazers_count
|
||||||
|
holder.pushed_at = repo.data.pushed_at
|
||||||
|
repos.push(holder)
|
||||||
holder = {}
|
holder = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
return reposReduced
|
// sort by pushed to, newest first
|
||||||
|
repos = repos.sort((a, b) => b.pushed_at.localeCompare(a.pushed_at))
|
||||||
|
|
||||||
|
return repos
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -63,7 +64,7 @@ exports.onPreBootstrap = async () => {
|
|||||||
const t0 = performance.now()
|
const t0 = performance.now()
|
||||||
|
|
||||||
try {
|
try {
|
||||||
repos = await getGithubRepos(reposYaml[0])
|
repos = await getGithubRepos(reposYaml)
|
||||||
const t1 = performance.now()
|
const t1 = performance.now()
|
||||||
const ms = t1 - t0
|
const ms = t1 - t0
|
||||||
const s = ((ms / 1000) % 60).toFixed(3)
|
const s = ((ms / 1000) % 60).toFixed(3)
|
||||||
|
@ -3,26 +3,38 @@ import PropTypes from 'prop-types'
|
|||||||
import LinkIcon from '../atoms/LinkIcon'
|
import LinkIcon from '../atoms/LinkIcon'
|
||||||
import styles from './Repository.module.scss'
|
import styles from './Repository.module.scss'
|
||||||
|
|
||||||
const Repository = ({ repo }) => {
|
export default function Repository({ repo }) {
|
||||||
const { name, description, html_url, homepage, stargazers_count } = repo
|
const {
|
||||||
|
name,
|
||||||
|
full_name,
|
||||||
|
description,
|
||||||
|
html_url,
|
||||||
|
homepage,
|
||||||
|
stargazers_count
|
||||||
|
} = repo
|
||||||
|
|
||||||
|
const isExternal = !full_name.includes('kremalicious')
|
||||||
|
|
||||||
// for blog & portfolio and if there's no homepage, use github url
|
// for blog & portfolio and if there's no homepage, use github url
|
||||||
// else use homepage field
|
// else use homepage field
|
||||||
const repoLink =
|
const repoLink =
|
||||||
name === 'blog' || name === 'portfolio' || !homepage ? html_url : homepage
|
name === 'blog' || name === 'portfolio' || !homepage || isExternal
|
||||||
|
? html_url
|
||||||
|
: homepage
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.repo}>
|
<div className={styles.repo}>
|
||||||
<h1 className={styles.repoTitle}>
|
<h1 className={styles.repoTitle}>
|
||||||
<a href={repoLink}>{name}</a>
|
<a href={repoLink}>{isExternal ? full_name : name}</a>
|
||||||
</h1>
|
</h1>
|
||||||
<p>{description}</p>
|
<p>{description}</p>
|
||||||
<p className={styles.meta}>
|
<p className={styles.meta}>
|
||||||
{name === 'portfolio' || name === 'blog'
|
{name === 'portfolio' || name === 'blog'
|
||||||
? null
|
? null
|
||||||
: homepage && (
|
: !isExternal &&
|
||||||
|
homepage && (
|
||||||
<a href={homepage}>
|
<a href={homepage}>
|
||||||
<LinkIcon title="website" /> Release post
|
<LinkIcon title="website" /> More info
|
||||||
</a>
|
</a>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@ -41,5 +53,3 @@ const Repository = ({ repo }) => {
|
|||||||
Repository.propTypes = {
|
Repository.propTypes = {
|
||||||
repo: PropTypes.object.isRequired
|
repo: PropTypes.object.isRequired
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Repository
|
|
||||||
|
@ -55,5 +55,6 @@
|
|||||||
fill: currentColor;
|
fill: currentColor;
|
||||||
width: $font-size-mini;
|
width: $font-size-mini;
|
||||||
height: $font-size-mini;
|
height: $font-size-mini;
|
||||||
|
margin-right: $spacer / 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ describe('Repository', () => {
|
|||||||
it('uses html_url as main link for portfolio & blog', () => {
|
it('uses html_url as main link for portfolio & blog', () => {
|
||||||
const repo1 = {
|
const repo1 = {
|
||||||
name: 'portfolio',
|
name: 'portfolio',
|
||||||
|
full_name: 'kremalicious/portfolio',
|
||||||
html_url: 'html_url'
|
html_url: 'html_url'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,6 +25,7 @@ describe('Repository', () => {
|
|||||||
it('renders homepage link when provided', () => {
|
it('renders homepage link when provided', () => {
|
||||||
const repo = {
|
const repo = {
|
||||||
name: 'Hello',
|
name: 'Hello',
|
||||||
|
full_name: 'kremalicious/hello',
|
||||||
homepage: 'hello'
|
homepage: 'hello'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,7 +34,7 @@ describe('Repository', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('renders no link without homepage', () => {
|
it('renders no link without homepage', () => {
|
||||||
const repo = { name: 'Hello' }
|
const repo = { name: 'Hello', full_name: 'repo/hello' }
|
||||||
|
|
||||||
const { container } = render(<Repository repo={repo} />)
|
const { container } = render(<Repository repo={repo} />)
|
||||||
expect(container.querySelectorAll('p:last-child a').length).toBe(2)
|
expect(container.querySelectorAll('p:last-child a').length).toBe(2)
|
||||||
|
@ -19,7 +19,8 @@ describe('Home', () => {
|
|||||||
const pageContext = {
|
const pageContext = {
|
||||||
repos: [
|
repos: [
|
||||||
{
|
{
|
||||||
name: 'Hello'
|
name: 'hello',
|
||||||
|
full_name: 'kremalicious/hello'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,6 @@ a {
|
|||||||
&:hover,
|
&:hover,
|
||||||
&:focus {
|
&:focus {
|
||||||
color: lighten($brand-cyan, 10%);
|
color: lighten($brand-cyan, 10%);
|
||||||
transform: translate3d(0, -.1rem, 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user