1
0
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:
Matthias Kretschmann 2019-10-10 01:01:14 +02:00 committed by GitHub
commit 05947fc76c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 56 additions and 42 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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;
} }
} }

View File

@ -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)

View File

@ -19,7 +19,8 @@ describe('Home', () => {
const pageContext = { const pageContext = {
repos: [ repos: [
{ {
name: 'Hello' name: 'hello',
full_name: 'kremalicious/hello'
} }
] ]
} }

View File

@ -98,7 +98,6 @@ a {
&:hover, &:hover,
&:focus { &:focus {
color: lighten($brand-cyan, 10%); color: lighten($brand-cyan, 10%);
transform: translate3d(0, -.1rem, 0);
} }
} }