This is an automated email from the ASF dual-hosted git repository.
visortelle pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-site.git
The following commit(s) were added to refs/heads/main by this push:
new a987e8a55e81 Add GitHub user ids for committers and PMC members to
team.js (#858)
a987e8a55e81 is described below
commit a987e8a55e81c0e57a6a08b73fb09f4aa54e3e47
Author: Lari Hotari <[email protected]>
AuthorDate: Tue Mar 19 06:02:58 2024 -0700
Add GitHub user ids for committers and PMC members to team.js (#858)
* Add GitHub user ids for committers and PMC members to team.js
- it's possible to have multiple GitHub user ids so that's the reason why
it's an array
* Use githubUsername information on CommunityPage.tsx
* Reduce duplication
* Shuffle team members so that order is different each time
* polish
* Update src/components/pages/CommunityPage/CommunityPage.tsx
Co-authored-by: Kiryl Valkovich 🛸 <[email protected]>
* Update src/components/pages/CommunityPage/CommunityPage.tsx
Co-authored-by: Kiryl Valkovich 🛸 <[email protected]>
* Update src/components/pages/CommunityPage/CommunityPage.tsx
Co-authored-by: Kiryl Valkovich 🛸 <[email protected]>
* Require explicit github username information for providing the link
* Use _.shuffle
* polish
* Sync latest version of team.js
---------
Co-authored-by: Kiryl Valkovich 🛸 <[email protected]>
---
data/team.js | 392 ++++++++++++++++-----
scripts/sync-team-js.sh | 12 +
.../pages/CommunityPage/CommunityPage.tsx | 87 ++---
3 files changed, 356 insertions(+), 135 deletions(-)
diff --git a/data/team.js b/data/team.js
index 07c82f4df127..1c7c023d5ce2 100644
--- a/data/team.js
+++ b/data/team.js
@@ -2,333 +2,561 @@ module.exports = {
"pmc": [
{
"name": "Sahaya Andrews",
- "apacheId": "andrews"
+ "apacheId": "andrews",
+ "githubUsername": [
+ "saandrews"
+ ]
},
{
"name": "Daniel Blankensteiner",
- "apacheId": "blankensteiner"
+ "apacheId": "blankensteiner",
+ "githubUsername": [
+ "blankensteiner"
+ ]
},
{
"name": "Bo Cong",
- "apacheId": "bogong"
+ "apacheId": "bogong",
+ "githubUsername": [
+ "congbobo184"
+ ]
},
{
"name": "Brad McMillen",
- "apacheId": "bradtm"
+ "apacheId": "bradtm",
+ "githubUsername": []
},
{
"name": "Hang Chen",
- "apacheId": "chenhang"
+ "apacheId": "chenhang",
+ "githubUsername": [
+ "hangc0276"
+ ]
},
{
"name": "David Jensen",
- "apacheId": "djensen"
+ "apacheId": "djensen",
+ "githubUsername": []
},
{
"name": "Enrico Olivelli",
- "apacheId": "eolivelli"
+ "apacheId": "eolivelli",
+ "githubUsername": [
+ "eolivelli"
+ ]
},
{
"name": "Jennifer Huang",
- "apacheId": "hjf"
+ "apacheId": "hjf",
+ "githubUsername": [
+ "jennifer88huang",
+ "Jennifer88huang-zz"
+ ]
},
{
"name": "Hiroyuki Sakai",
- "apacheId": "hrsakai"
+ "apacheId": "hrsakai",
+ "githubUsername": [
+ "hrsakai"
+ ]
},
{
"name": "Ivan Brendan Kelly",
- "apacheId": "ivank"
+ "apacheId": "ivank",
+ "githubUsername": [
+ "ivankelly"
+ ]
},
{
"name": "Jai Asher",
- "apacheId": "jai1"
+ "apacheId": "jai1",
+ "githubUsername": [
+ "jai1"
+ ]
},
{
"name": "Boyang Jerry Peng",
- "apacheId": "jerrypeng"
+ "apacheId": "jerrypeng",
+ "githubUsername": [
+ "jerrypeng"
+ ]
},
{
"name": "Haiting Jiang",
- "apacheId": "jianghaiting"
+ "apacheId": "jianghaiting",
+ "githubUsername": [
+ "Jason918"
+ ]
},
{
"name": "Jim Jagielski",
- "apacheId": "jim"
+ "apacheId": "jim",
+ "githubUsername": [
+ "jimjag"
+ ]
},
{
"name": "Joe Francis",
- "apacheId": "joef"
+ "apacheId": "joef",
+ "githubUsername": [
+ "joefk"
+ ]
},
{
"name": "Lari Hotari",
- "apacheId": "lhotari"
+ "apacheId": "lhotari",
+ "githubUsername": [
+ "lhotari"
+ ]
},
{
"name": "Lin Lin",
- "apacheId": "linlin"
+ "apacheId": "linlin",
+ "githubUsername": [
+ "315157973"
+ ]
},
{
"name": "Liu Yu",
- "apacheId": "liuyu"
+ "apacheId": "liuyu",
+ "githubUsername": [
+ "Anonymitaet"
+ ]
},
{
"name": "Ludwig Pummer",
- "apacheId": "ludwigp"
+ "apacheId": "ludwigp",
+ "githubUsername": []
},
{
"name": "Masakazu Kitajo",
- "apacheId": "maskit"
+ "apacheId": "maskit",
+ "githubUsername": [
+ "maskit"
+ ]
},
{
"name": "Masahiro Sakamoto",
- "apacheId": "massakam"
+ "apacheId": "massakam",
+ "githubUsername": [
+ "massakam"
+ ]
},
{
"name": "Qiang Zhao",
- "apacheId": "mattisonchao"
+ "apacheId": "mattisonchao",
+ "githubUsername": [
+ "mattisonchao"
+ ]
},
{
"name": "Michael Marshall",
- "apacheId": "mmarshall"
+ "apacheId": "mmarshall",
+ "githubUsername": [
+ "michaeljmarshall"
+ ]
},
{
"name": "Matteo Merli",
- "apacheId": "mmerli"
+ "apacheId": "mmerli",
+ "githubUsername": [
+ "merlimat"
+ ]
},
{
"name": "Nicolò Boschi",
- "apacheId": "nicoloboschi"
+ "apacheId": "nicoloboschi",
+ "githubUsername": [
+ "nicoloboschi"
+ ]
},
{
"name": "Nozomi Kurihara",
- "apacheId": "nkurihar"
+ "apacheId": "nkurihar",
+ "githubUsername": [
+ "nkurihar"
+ ]
},
{
"name": "Penghui Li",
- "apacheId": "penghui"
+ "apacheId": "penghui",
+ "githubUsername": [
+ "codelipenghui"
+ ]
},
{
"name": "P. Taylor Goetz",
- "apacheId": "ptgoetz"
+ "apacheId": "ptgoetz",
+ "githubUsername": [
+ "ptgoetz"
+ ]
},
{
"name": "Rajan Dhabalia",
- "apacheId": "rdhabalia"
+ "apacheId": "rdhabalia",
+ "githubUsername": [
+ "rdhabalia"
+ ]
},
{
"name": "Sanjeev Kulkarni",
- "apacheId": "sanjeevrk"
+ "apacheId": "sanjeevrk",
+ "githubUsername": [
+ "srkukarni"
+ ]
},
{
"name": "Siddharth Boobna",
- "apacheId": "sboobna"
+ "apacheId": "sboobna",
+ "githubUsername": [
+ "sboobna"
+ ]
},
{
"name": "Sijie Guo",
- "apacheId": "sijie"
+ "apacheId": "sijie",
+ "githubUsername": [
+ "sijie"
+ ]
},
{
"name": "Sebastián Schepens",
- "apacheId": "sschepens"
+ "apacheId": "sschepens",
+ "githubUsername": [
+ "sschepens"
+ ]
},
{
"name": "Guo Jiwei",
- "apacheId": "technoboy"
+ "apacheId": "technoboy",
+ "githubUsername": [
+ "Technoboy-"
+ ]
},
{
"name": "Zili Chen",
- "apacheId": "tison"
+ "apacheId": "tison",
+ "githubUsername": [
+ "tisonkun"
+ ]
},
{
"name": "Francis Christopher Liu",
- "apacheId": "toffer"
+ "apacheId": "toffer",
+ "githubUsername": [
+ "francisliu"
+ ]
},
{
"name": "David Fisher",
- "apacheId": "wave"
+ "apacheId": "wave",
+ "githubUsername": [
+ "dave2wave"
+ ]
},
{
"name": "Yunze Xu",
- "apacheId": "xyz"
+ "apacheId": "xyz",
+ "githubUsername": [
+ "BewareMyPower"
+ ]
},
{
"name": "Yubiao Feng",
- "apacheId": "yubiao"
+ "apacheId": "yubiao",
+ "githubUsername": []
},
{
"name": "Yuki Shiga",
- "apacheId": "yushiga"
+ "apacheId": "yushiga",
+ "githubUsername": [
+ "yush1ga"
+ ]
},
{
"name": "Jia Zhai",
- "apacheId": "zhaijia"
+ "apacheId": "zhaijia",
+ "githubUsername": [
+ "jiazhai",
+ "zhaijack"
+ ]
}
],
"committers": [
{
"name": "Ali Ahmed",
- "apacheId": "aahmed"
+ "apacheId": "aahmed",
+ "githubUsername": [
+ "aahmed-se"
+ ]
},
{
"name": "Addison Higham",
- "apacheId": "addisonj"
+ "apacheId": "addisonj",
+ "githubUsername": [
+ "addisonj"
+ ]
},
{
"name": "Aloys Zhang",
- "apacheId": "aloyszhang"
+ "apacheId": "aloyszhang",
+ "githubUsername": [
+ "aloyszhang"
+ ]
},
{
"name": "Asaf Mesika",
- "apacheId": "amesika"
+ "apacheId": "amesika",
+ "githubUsername": []
},
{
"name": "Andrey Yegorov",
- "apacheId": "ayegorov"
+ "apacheId": "ayegorov",
+ "githubUsername": [
+ "dlg99"
+ ]
},
{
"name": "Baodi Shi",
- "apacheId": "baodi"
+ "apacheId": "baodi",
+ "githubUsername": [
+ "shibd"
+ ]
},
{
"name": "Christophe Bornet",
- "apacheId": "cbornet"
+ "apacheId": "cbornet",
+ "githubUsername": [
+ "cbornet"
+ ]
},
{
"name": "Chris Kellogg",
- "apacheId": "cckellogg"
+ "apacheId": "cckellogg",
+ "githubUsername": [
+ "cckellogg"
+ ]
},
{
"name": "Tao Jiuming",
- "apacheId": "daojun"
+ "apacheId": "daojun",
+ "githubUsername": []
},
{
"name": "davidkj",
- "apacheId": "davekj"
+ "apacheId": "davekj",
+ "githubUsername": [
+ "david-streamlio"
+ ]
},
{
"name": "Dezhi Liu",
- "apacheId": "dezhiliu"
+ "apacheId": "dezhiliu",
+ "githubUsername": [
+ "liudezhi2098"
+ ]
},
{
"name": "Yuri Mizushima",
- "apacheId": "equanz"
+ "apacheId": "equanz",
+ "githubUsername": []
},
{
"name": "Guangning E",
- "apacheId": "guangning"
+ "apacheId": "guangning",
+ "githubUsername": [
+ "tuteng"
+ ]
},
{
"name": "Heesung Sohn",
- "apacheId": "heesung"
+ "apacheId": "heesung",
+ "githubUsername": [
+ "heesung-sn"
+ ]
},
{
"name": "Yan Zhao",
- "apacheId": "horizonzy"
+ "apacheId": "horizonzy",
+ "githubUsername": [
+ "horizonzy"
+ ]
},
{
"name": "Xiaoyu Hou",
- "apacheId": "houxiaoyu"
+ "apacheId": "houxiaoyu",
+ "githubUsername": [
+ "AnonHxy"
+ ]
},
{
"name": "Qiang Huang",
- "apacheId": "huangqiang"
+ "apacheId": "huangqiang",
+ "githubUsername": [
+ "hqebupt"
+ ]
},
{
"name": "Huanli Meng",
- "apacheId": "huanlimeng"
+ "apacheId": "huanlimeng",
+ "githubUsername": [
+ "Huanli-Meng"
+ ]
},
{
"name": "Jun Ma",
- "apacheId": "junma"
+ "apacheId": "junma",
+ "githubUsername": []
},
{
"name": "Yuto Furuta",
- "apacheId": "k2la"
+ "apacheId": "k2la",
+ "githubUsername": [
+ "k2la"
+ ]
},
{
"name": "Kai Wang",
- "apacheId": "kwang"
+ "apacheId": "kwang",
+ "githubUsername": [
+ "Demogorgon314"
+ ]
},
{
"name": "Lin Chen",
- "apacheId": "lordcheng10"
+ "apacheId": "lordcheng10",
+ "githubUsername": [
+ "lordcheng10"
+ ]
},
{
"name": "Neng Lu",
- "apacheId": "nlu90"
+ "apacheId": "nlu90",
+ "githubUsername": [
+ "nlu90"
+ ]
},
{
"name": "Chris Bono",
- "apacheId": "onobc"
+ "apacheId": "onobc",
+ "githubUsername": []
},
{
"name": "Rui Fu",
- "apacheId": "rfu"
+ "apacheId": "rfu",
+ "githubUsername": [
+ "freeznet"
+ ]
},
{
"name": "Ran Gao",
- "apacheId": "rgao"
+ "apacheId": "rgao",
+ "githubUsername": [
+ "gaoran10"
+ ]
},
{
"name": "Xiaolong Ran",
- "apacheId": "rxl"
+ "apacheId": "rxl",
+ "githubUsername": [
+ "wolfstudy"
+ ]
},
{
"name": "ZhangJian He",
- "apacheId": "shoothzj"
+ "apacheId": "shoothzj",
+ "githubUsername": [
+ "Shoothzj"
+ ]
},
{
"name": "Fangbin Sun",
- "apacheId": "sunfangbin"
+ "apacheId": "sunfangbin",
+ "githubUsername": [
+ "murong00"
+ ]
},
{
"name": "Li Li",
- "apacheId": "urfree"
+ "apacheId": "urfree",
+ "githubUsername": [
+ "urfreespace"
+ ]
},
{
"name": "Kiryl Valkovich",
- "apacheId": "visortelle"
+ "apacheId": "visortelle",
+ "githubUsername": [
+ "visortelle"
+ ]
},
{
"name": "Vineeth Polamreddy",
- "apacheId": "vpolamreddy"
+ "apacheId": "vpolamreddy",
+ "githubUsername": []
},
{
"name": "Xiangying Meng",
- "apacheId": "xiangying"
+ "apacheId": "xiangying",
+ "githubUsername": [
+ "liangyepianzhou"
+ ]
},
{
"name": "Marvin Cai",
- "apacheId": "xxc"
+ "apacheId": "xxc",
+ "githubUsername": [
+ "MarvinCai"
+ ]
},
{
"name": "Yijie Shen",
- "apacheId": "yjshen"
+ "apacheId": "yjshen",
+ "githubUsername": [
+ "yjshen"
+ ]
},
{
"name": "Yong Zhang",
- "apacheId": "yong"
+ "apacheId": "yong",
+ "githubUsername": [
+ "zymap"
+ ]
},
{
"name": "Ruguo Yu",
- "apacheId": "yuruguo"
+ "apacheId": "yuruguo",
+ "githubUsername": [
+ "yuruguo"
+ ]
},
{
"name": "Gavin Gao",
- "apacheId": "zhangmingao"
+ "apacheId": "zhangmingao",
+ "githubUsername": [
+ "gaozhangmin"
+ ]
},
{
"name": "Cong Zhao",
- "apacheId": "zhaocong"
+ "apacheId": "zhaocong",
+ "githubUsername": [
+ "coderzc"
+ ]
},
{
"name": "Zike Yang",
- "apacheId": "zike"
+ "apacheId": "zike",
+ "githubUsername": [
+ "RobertIndie"
+ ]
},
{
"name": "Zixuan Liu",
- "apacheId": "zixuan"
+ "apacheId": "zixuan",
+ "githubUsername": [
+ "nodece"
+ ]
}
]
};
diff --git a/scripts/sync-team-js.sh b/scripts/sync-team-js.sh
new file mode 100755
index 000000000000..98ef0765f887
--- /dev/null
+++ b/scripts/sync-team-js.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+# This script is used to sync the team.js file with the Pulsar PMC and
committers.
+# Usage:
+# 1. Log in to https://whimsy.apache.org/roster/committee/pulsar with browser
+# 2. Append ".json" to URL so that browser goes to
https://whimsy.apache.org/roster/committee/pulsar.json
+# 3. Click "Save as..." and store the JSON as ~/Downloads/pulsar.json
+# 4. Run this script with "scripts/sync-team-js.sh"
+PULSAR_JSON="${1:-"$HOME/Downloads/pulsar.json"}"
+{
+ echo -n "module.exports = " && cat "$PULSAR_JSON" \
+ | jq '{"pmc": [.roster| to_entries | sort_by(.key) | .[] |
select(.value.role|startswith("PMC")) | {"name":.value.name, "apacheId": .key,
"githubUsername": (.value.githubUsername|split(", "))}], "committers":
[.roster| to_entries | sort_by(.key) | .[] | select(.value.role=="Committer") |
{"name":.value.name, "apacheId": .key, "githubUsername":
(.value.githubUsername|split(", "))}]}'
+} | perl -pe 's/$/;\n/ if eof' > data/team.js
\ No newline at end of file
diff --git a/src/components/pages/CommunityPage/CommunityPage.tsx
b/src/components/pages/CommunityPage/CommunityPage.tsx
index c81a78dd4e75..b2fd9728dc74 100644
--- a/src/components/pages/CommunityPage/CommunityPage.tsx
+++ b/src/components/pages/CommunityPage/CommunityPage.tsx
@@ -11,6 +11,7 @@ import ProjectGovernance from
"./sections/project-governance/ProjectGovernance";
import Slider from '@site/src/components/ui/Slider/Slider';
import BrowserOnly from "@docusaurus/BrowserOnly";
import Button from "@site/src/components/ui/Button/Button";
+import _ from 'lodash'
export default function CommunityPage(): JSX.Element {
@@ -24,14 +25,10 @@ export default function CommunityPage(): JSX.Element {
<Button title={isShowMoreCmtrs ? 'Show less' : 'Show more'}
variant="transparentWhite" onClick={() =>
setIsShowMoreCmtrs(!isShowMoreCmtrs)}/>
);
- type ApacheId = string
- type GithubId = string
- const GithubUsers: Record<ApacheId, GithubId> = {
- "jianghaiting": "Jason918",
- "technoboy": "Technoboy-",
- "linlin": "315157973"
- }
-
+ // Shuffle the team members so that the order is different each time the
page is loaded
+ team.pmc = _.shuffle(team.pmc);
+ team.committers = _.shuffle(team.committers);
+
let TeamPMCSets = new Array(Math.ceil(team.pmc.length/5));
let teamCtrsSets = new Array(Math.ceil(team.committers.length/5));
@@ -53,6 +50,30 @@ export default function CommunityPage(): JSX.Element {
teamCtrsSets[CountTheSets].push(element);
});
+ function MemberCard({ member, index }) {
+ // require the member to have "GitHub username(s) (user-provided)" field
information in Whimsy
+ // the user can go to Whimsy url
https://whimsy.apache.org/roster/committer/__self__ to update the information
+ // since it's possible to have multiple GitHub usernames, we only take the
first one
+ const githubUsername = member.githubUsername?.[0];
+ const href = githubUsername ? ('https://github.com/' + githubUsername) :
"#";
+ const target = githubUsername ? "_blank" : "_self";
+
+ return (
+ <a href={href} target={target} key={'m'+index}
className={s.CommunityMembersMember}>
+ <div>
+ <div className={s.CommunityMembersMemberPic}>
+ { githubUsername && (
+ <img src={'https://github.com/' + githubUsername + '.png'}
alt={githubUsername} />
+ )}
+ </div>
+ <div className={s.CommunityMembersMemberName}>
+ <strong>{member.name}</strong><br />
+ {githubUsername ? githubUsername : member.apacheId}
+ </div>
+ </div>
+ </a>
+ );
+ }
return (
<Layout title={"Community"} description={"Learn about the basics of using
Apache Pulsar"} wrapperClassName="LandingPage">
@@ -190,17 +211,7 @@ export default function CommunityPage(): JSX.Element {
<div>
<div className={(isShowMorePMC ? s.CommunityMembersDesktopOpen
: s.CommunityMembersDesktop)}>
{(team.pmc || []).map((member,i) => (
- <a href={'https://github.com/' +
(GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] :
member.apacheId)} target="_blank" key={'m'+i}
className={s.CommunityMembersMember}>
- <div>
- <div className={s.CommunityMembersMemberPic}>
- <img src={'https://github.com/' +
(GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] : member.apacheId)
+ '.png'} alt={GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] :
member.apacheId} />
- </div>
- <div className={s.CommunityMembersMemberName}>
- <strong>{member.name}</strong><br />
- {GithubUsers[member.apacheId] ?
GithubUsers[member.apacheId] : member.apacheId}
- </div>
- </div>
- </a>
+ <MemberCard member={member} index={i} />
))}
<div className={s.CommunityMembersShowMore}>
{showMorePMCButton}
@@ -215,18 +226,8 @@ export default function CommunityPage(): JSX.Element {
{TeamPMCSets.map((set, i) => (
<div key={i} className={s.SlideTeam}>
{set.map((member, i) => (
- <a href={'https://github.com/' +
(GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] :
member.apacheId)} target="_blank" key={'ms'+i}
className={s.CommunityMembersMember}>
- <div>
- <div
className={s.CommunityMembersMemberPic}>
- <img src={'https://github.com/' +
(GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] : member.apacheId)
+ '.png'} alt={GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] :
member.apacheId} />
- </div>
- <div
className={s.CommunityMembersMemberName}>
- <strong>{member.name}</strong><br />
- {member.apacheId}
- </div>
- </div>
- </a>
- ))}
+ <MemberCard member={member} index={i} />
+ ))}
</div>
))}
</Slider>
@@ -239,17 +240,7 @@ export default function CommunityPage(): JSX.Element {
<div>
<div className={(isShowMoreCmtrs ?
s.CommunityMembersDesktopOpen : s.CommunityMembersDesktop)}>
{(team.committers || []).map((member,i) => (
- <a href={'https://github.com/' +
(GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] :
member.apacheId)} target="_blank" key={'c'+i}
className={s.CommunityMembersMember}>
- <div>
- <div className={s.CommunityMembersMemberPic}>
- <img src={'https://github.com/' +
(GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] : member.apacheId)
+ '.png'} alt={GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] :
member.apacheId} />
- </div>
- <div className={s.CommunityMembersMemberName}>
- <strong>{member.name}</strong><br />
- {member.apacheId}
- </div>
- </div>
- </a>
+ <MemberCard member={member} index={i} />
))}
<div className={s.CommunityMembersShowMore}>
{showMoreCmtrsButton}
@@ -264,17 +255,7 @@ export default function CommunityPage(): JSX.Element {
{teamCtrsSets.map((set, i) => (
<div key={i} className={s.SlideTeam}>
{set.map((member, i) => (
- <a href={'https://github.com/' +
(GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] :
member.apacheId)} target="_blank" key={'cs'+i}
className={s.CommunityMembersMember}>
- <div>
- <div
className={s.CommunityMembersMemberPic}>
- <img src={'https://github.com/' +
(GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] : member.apacheId)
+ '.png'} alt={GithubUsers[member.apacheId] ? GithubUsers[member.apacheId] :
member.apacheId} />
- </div>
- <div
className={s.CommunityMembersMemberName}>
- <strong>{member.name}</strong><br />
- {member.apacheId}
- </div>
- </div>
- </a>
+ <MemberCard member={member} index={i} />
))}
</div>
))}