This is an automated email from the ASF dual-hosted git repository.

shuai pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/answer-website.git


The following commit(s) were added to refs/heads/main by this push:
     new 7f106f0ae Team avatar (#307)
7f106f0ae is described below

commit 7f106f0ae466fc392973561ae087af380e676927
Author: dashuai <[email protected]>
AuthorDate: Tue Mar 18 17:43:08 2025 +0800

    Team avatar (#307)
---
 community/team.mdx               |   4 +--
 scripts/contributor.js           |  63 ++++++++++++++++++++++++++++++++++++++-
 static/data/team.json            |  54 ++++++++++++++++++++++-----------
 static/img/team/LinkinStars.jpg  | Bin 0 -> 34718 bytes
 static/img/team/PrimmaAnna.png   | Bin 0 -> 119922 bytes
 static/img/team/WillemJiang.jpg  | Bin 0 -> 56333 bytes
 static/img/team/aichy126.jpg     | Bin 0 -> 28450 bytes
 static/img/team/chrisdutz.jpg    | Bin 0 -> 24504 bytes
 static/img/team/fenbox.png       | Bin 0 -> 280312 bytes
 static/img/team/haitaojarvis.jpg | Bin 0 -> 44904 bytes
 static/img/team/hgaol.jpg        | Bin 0 -> 21356 bytes
 static/img/team/jiangbonadia.jpg | Bin 0 -> 15321 bytes
 static/img/team/joyqi.png        | Bin 0 -> 2618 bytes
 static/img/team/justinmclean.jpg | Bin 0 -> 27654 bytes
 static/img/team/kumfo.jpg        | Bin 0 -> 22071 bytes
 static/img/team/mingcheng.png    | Bin 0 -> 22906 bytes
 static/img/team/robinv8.jpg      | Bin 0 -> 16574 bytes
 static/img/team/shuashuai.jpg    | Bin 0 -> 19034 bytes
 static/img/team/sy-records.jpg   | Bin 0 -> 54658 bytes
 static/img/team/tisonkun.jpg     | Bin 0 -> 18747 bytes
 static/img/team/zahash.png       | Bin 0 -> 4317 bytes
 21 files changed, 100 insertions(+), 21 deletions(-)

diff --git a/community/team.mdx b/community/team.mdx
index 3b3a14843..3f3dbdfc3 100644
--- a/community/team.mdx
+++ b/community/team.mdx
@@ -20,7 +20,7 @@ The PMC is also responsible for voting on releases of their 
project, to ensure t
     UserData[0].users.map(u => {
       return (
         <div key={u.name} className="col-xl-3 col-lg-4 col-md-4 col-sm-6 
col-12 d-flex mb-4">
-            <img src={u.avatar} width="48" height="48" className="rounded me-2 
lh-normal" />
+            <img src={u.avatar_local} width="48" height="48" 
className="rounded me-2 lh-normal" />
             <div>
               <a href={u.github} target="_blank" className="d-block 
lh-base">{u.name}</a>
               <div className="fs-14 text-secondary">{u.role}</div>
@@ -40,7 +40,7 @@ Committers have read-write access to the code repository, 
signed the CLA, and us
     UserData[1].users.map(u => {
       return (
         <div key={u.name} className="col-xl-3 col-lg-4 col-md-4 col-sm-6 
col-12 d-flex mb-4">
-            <img src={u.avatar} width="48" height="48" className="rounded me-2 
lh-normal" />
+            <img src={u.avatar_local} width="48" height="48" 
className="rounded me-2 lh-normal" />
             <div>
               <a href={u.github} target="_blank" className="d-block 
lh-base">{u.name}</a>
               <div className="fs-14 text-secondary">{u.role}</div>
diff --git a/scripts/contributor.js b/scripts/contributor.js
index 91e71e375..fd9914198 100644
--- a/scripts/contributor.js
+++ b/scripts/contributor.js
@@ -5,6 +5,7 @@ var path = require('path');
 var TeamJson = require('../static/data/team.json');
 
 var outputFile = path.resolve(__dirname, '../static/data/team.json');
+var teamAvatarDir = path.resolve(__dirname, '../static/img/team');
 
 // ignore PMC and committers members
 var ignoreList = [];
@@ -94,4 +95,64 @@ function fetchPagedContributors(url, index, page, 
currentResults) {
     });
 }
 
-fetchContributors();
+saveAvatars('pmc');
+saveAvatars('committer');
+
+// 根据 MIME 类型获取文件扩展名
+function getExtensionFromMimeType(mimeType) {
+  var mimeToExtension = {
+    'image/jpeg': 'jpg',
+    'image/png': 'png',
+    'image/gif': 'gif',
+    'image/webp': 'webp',
+    'image/svg+xml': 'svg',
+  };
+
+  return mimeToExtension[mimeType] || 'jpg';
+}
+
+// save avatars
+async function saveAvatars(type) {
+  const dataType = TeamJson.find((item) => item.type ===  type);
+  const users = dataType.users;
+  for (const user of users) {
+    try {
+      const avatarUrl = user.avatar;
+
+      const response = await fetch(avatarUrl);
+      if (!response.ok) {
+        throw new Error(`Failed to fetch ${avatarUrl}: 
${response.statusText}`);
+      }
+      const contentType = response.headers.get('content-type');
+      // According to Content-Type to get extension
+      const extension = getExtensionFromMimeType(contentType);
+
+      const avatarName = `${user.name}.${extension}`;
+      const savePath = path.join(teamAvatarDir, avatarName);
+      const arrayBuffer = await response.arrayBuffer();
+      const buffer = Buffer.from(arrayBuffer);
+      fs.writeFileSync(savePath, buffer);
+      // 更新 avatar2 字段为相对路径
+      user.avatar_local = `/img/team/${avatarName}`;
+
+      console.log(`Saved avatar for ${user.name} to ${savePath}`);
+    } catch (error) {
+      console.error(`Failed to save avatar for ${user.name}:`, error.message);
+    }
+  }
+  TeamJson = TeamJson.map((item) => {
+    if (item.type === type) {
+      return {
+        ...item,
+        users,
+      };
+    }
+    return item;
+  });
+  fs.writeFileSync(outputFile, JSON.stringify(TeamJson, null, 2));
+}
+
+saveAvatars('pmc');
+saveAvatars('committer');
+
+// fetchContributors();
diff --git a/static/data/team.json b/static/data/team.json
index e2c14d30e..1f38eceb6 100644
--- a/static/data/team.json
+++ b/static/data/team.json
@@ -7,85 +7,99 @@
         "name": "chrisdutz",
         "avatar": "https://avatars.githubusercontent.com/u/651105";,
         "github": "https://github.com/chrisdutz";,
-        "role": "Mentor"
+        "role": "Mentor",
+        "avatar_local": "/img/team/chrisdutz.jpg"
       },
       {
         "name": "fenbox",
         "avatar": "https://avatars.githubusercontent.com/u/360618";,
         "github": "https://github.com/fenbox";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/fenbox.png"
       },
       {
         "name": "jiangbonadia",
         "avatar": "https://avatars.githubusercontent.com/u/1227386";,
         "github": "https://github.com/jiangbonadia";,
-        "role": "DevRel"
+        "role": "DevRel",
+        "avatar_local": "/img/team/jiangbonadia.jpg"
       },
       {
         "name": "joyqi",
         "avatar": "https://avatars.githubusercontent.com/u/59437";,
         "github": "https://github.com/joyqi";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/joyqi.png"
       },
       {
         "name": "justinmclean",
         "avatar": "https://avatars.githubusercontent.com/u/144504";,
         "github": "https://github.com/justinmclean";,
-        "role": "Mentor"
+        "role": "Mentor",
+        "avatar_local": "/img/team/justinmclean.jpg"
       },
       {
         "name": "kumfo",
         "avatar": "https://avatars.githubusercontent.com/u/7692591";,
         "github": "https://github.com/kumfo";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/kumfo.jpg"
       },
       {
         "name": "LinkinStars",
         "avatar": "https://avatars.githubusercontent.com/u/19712692";,
         "github": "https://github.com/LinkinStars";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/LinkinStars.jpg"
       },
       {
         "name": "mingcheng",
         "avatar": "https://avatars.githubusercontent.com/u/21816";,
         "github": "https://github.com/mingcheng";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/mingcheng.png"
       },
       {
         "name": "PrimmaAnna",
         "avatar": "https://avatars.githubusercontent.com/u/131739771";,
         "github": "https://github.com/PrimmaAnna";,
-        "role": "DevRel"
+        "role": "DevRel",
+        "avatar_local": "/img/team/PrimmaAnna.png"
       },
       {
         "name": "robinv8",
         "avatar": "https://avatars.githubusercontent.com/u/12277531";,
         "github": "https://github.com/robinv8";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/robinv8.jpg"
       },
       {
         "name": "shuashuai",
         "avatar": "https://avatars.githubusercontent.com/u/30591202";,
         "github": "https://github.com/shuashuai";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/shuashuai.jpg"
       },
       {
         "name": "sy-records",
         "github": "https://github.com/sy-records";,
         "avatar": "https://avatars.githubusercontent.com/u/33931153?v=4";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/sy-records.jpg"
       },
       {
         "name": "tisonkun",
         "avatar": "https://avatars.githubusercontent.com/u/18818196";,
         "github": "https://github.com/tisonkun";,
-        "role": "Mentor"
+        "role": "Mentor",
+        "avatar_local": "/img/team/tisonkun.jpg"
       },
       {
         "name": "WillemJiang",
         "avatar": "https://avatars.githubusercontent.com/u/219644";,
         "github": "https://github.com/WillemJiang";,
-        "role": "Mentor"
+        "role": "Mentor",
+        "avatar_local": "/img/team/WillemJiang.jpg"
       }
     ]
   },
@@ -97,25 +111,29 @@
         "name": "aichy126",
         "avatar": "https://avatars.githubusercontent.com/u/16996097";,
         "github": "https://github.com/aichy126";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/aichy126.jpg"
       },
       {
         "name": "haitaojarvis",
         "avatar": "https://avatars.githubusercontent.com/u/344142";,
         "github": "https://github.com/haitaojarvis";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/haitaojarvis.jpg"
       },
       {
         "name": "hgaol",
         "avatar": "https://avatars.githubusercontent.com/u/11908658?v=4";,
         "github": "https://github.com/hgaol";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/hgaol.jpg"
       },
       {
         "name": "zahash",
         "github": "https://github.com/zahash";,
         "avatar": "https://avatars.githubusercontent.com/u/36153955?v=4";,
-        "role": "Developer"
+        "role": "Developer",
+        "avatar_local": "/img/team/zahash.png"
       }
     ]
   },
diff --git a/static/img/team/LinkinStars.jpg b/static/img/team/LinkinStars.jpg
new file mode 100644
index 000000000..bb22126ec
Binary files /dev/null and b/static/img/team/LinkinStars.jpg differ
diff --git a/static/img/team/PrimmaAnna.png b/static/img/team/PrimmaAnna.png
new file mode 100644
index 000000000..9c5b35bad
Binary files /dev/null and b/static/img/team/PrimmaAnna.png differ
diff --git a/static/img/team/WillemJiang.jpg b/static/img/team/WillemJiang.jpg
new file mode 100644
index 000000000..230b1c9d4
Binary files /dev/null and b/static/img/team/WillemJiang.jpg differ
diff --git a/static/img/team/aichy126.jpg b/static/img/team/aichy126.jpg
new file mode 100644
index 000000000..77a4379e0
Binary files /dev/null and b/static/img/team/aichy126.jpg differ
diff --git a/static/img/team/chrisdutz.jpg b/static/img/team/chrisdutz.jpg
new file mode 100644
index 000000000..f5f593f79
Binary files /dev/null and b/static/img/team/chrisdutz.jpg differ
diff --git a/static/img/team/fenbox.png b/static/img/team/fenbox.png
new file mode 100644
index 000000000..e753dd3d3
Binary files /dev/null and b/static/img/team/fenbox.png differ
diff --git a/static/img/team/haitaojarvis.jpg b/static/img/team/haitaojarvis.jpg
new file mode 100644
index 000000000..e5ec7f03c
Binary files /dev/null and b/static/img/team/haitaojarvis.jpg differ
diff --git a/static/img/team/hgaol.jpg b/static/img/team/hgaol.jpg
new file mode 100644
index 000000000..13414ce89
Binary files /dev/null and b/static/img/team/hgaol.jpg differ
diff --git a/static/img/team/jiangbonadia.jpg b/static/img/team/jiangbonadia.jpg
new file mode 100644
index 000000000..ec930cdb4
Binary files /dev/null and b/static/img/team/jiangbonadia.jpg differ
diff --git a/static/img/team/joyqi.png b/static/img/team/joyqi.png
new file mode 100644
index 000000000..5b82a80eb
Binary files /dev/null and b/static/img/team/joyqi.png differ
diff --git a/static/img/team/justinmclean.jpg b/static/img/team/justinmclean.jpg
new file mode 100644
index 000000000..a7e3234d9
Binary files /dev/null and b/static/img/team/justinmclean.jpg differ
diff --git a/static/img/team/kumfo.jpg b/static/img/team/kumfo.jpg
new file mode 100644
index 000000000..87d36499c
Binary files /dev/null and b/static/img/team/kumfo.jpg differ
diff --git a/static/img/team/mingcheng.png b/static/img/team/mingcheng.png
new file mode 100644
index 000000000..c16b1d1bd
Binary files /dev/null and b/static/img/team/mingcheng.png differ
diff --git a/static/img/team/robinv8.jpg b/static/img/team/robinv8.jpg
new file mode 100644
index 000000000..615d17979
Binary files /dev/null and b/static/img/team/robinv8.jpg differ
diff --git a/static/img/team/shuashuai.jpg b/static/img/team/shuashuai.jpg
new file mode 100644
index 000000000..2d15bf0d5
Binary files /dev/null and b/static/img/team/shuashuai.jpg differ
diff --git a/static/img/team/sy-records.jpg b/static/img/team/sy-records.jpg
new file mode 100644
index 000000000..295b94b07
Binary files /dev/null and b/static/img/team/sy-records.jpg differ
diff --git a/static/img/team/tisonkun.jpg b/static/img/team/tisonkun.jpg
new file mode 100644
index 000000000..36b1f71a0
Binary files /dev/null and b/static/img/team/tisonkun.jpg differ
diff --git a/static/img/team/zahash.png b/static/img/team/zahash.png
new file mode 100644
index 000000000..f8b2d7adb
Binary files /dev/null and b/static/img/team/zahash.png differ

Reply via email to