You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by dj...@apache.org on 2025/03/24 06:15:26 UTC
(cloudberry-site) 01/02: Refactor team page and add new committer guides
This is an automated email from the ASF dual-hosted git repository.
djwang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-site.git
commit 368c3cd27102606f027304f89860655e665a7359
Author: Dianjin Wang <wa...@gmail.com>
AuthorDate: Wed Mar 19 18:27:15 2025 +0800
Refactor team page and add new committer guides
This commit refactors the team page to improve organization and adds guides for new committers.
The following changes were made:
- Removed the Slack users component and related files.
- Added the process guides on inviting a new committer.
- Added guides for Apache email setup and ICLA signing.
---
docusaurus.config.ts | 85 +++++++-
scripts/fetch_slack_users.py | 136 -------------
src/components/SlackUsers.module.css | 31 ---
src/components/slack_users.js | 35 ----
src/pages/{team.md => team/index.md} | 15 +-
src/pages/team/new-committers.md | 281 +++++++++++++++++++++++++++
src/pages/team/setup-apache-email-account.md | 33 ++++
src/pages/team/sign-icla.md | 70 +++++++
static/contributors_and_team.json | 4 +
static/img/team/apache-email-2.jpeg | Bin 0 -> 139978 bytes
static/img/team/apache-email-3.jpeg | Bin 0 -> 104872 bytes
static/img/team/apache-email-4.jpeg | Bin 0 -> 123330 bytes
static/img/team/apache-email-5.jpeg | Bin 0 -> 115665 bytes
static/img/team/apache-email-6.jpeg | Bin 0 -> 69260 bytes
static/img/team/sign-apache-icla-1.jpeg | Bin 0 -> 228058 bytes
static/img/team/sign-apache-icla-2.jpeg | Bin 0 -> 211361 bytes
static/slack_users.json | 194 ------------------
17 files changed, 473 insertions(+), 411 deletions(-)
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 8edf7e5a1..4e0b02cba 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -99,12 +99,66 @@ const config: Config = {
{
label: "Community",
position: "right",
- to: "/community",
+ items: [
+ {
+ label: "Overview",
+ to: "/community",
+ },
+ {
+ label: "Slack Guide",
+ to: "/community/slack",
+ },
+ {
+ label: "WeChat Guide",
+ to: "/community/wechat",
+ },
+ {
+ label: "Community Events",
+ to: "/community/events",
+ },
+ {
+ label: "Mailing Lists",
+ to: "/community/mailing-lists",
+ },
+ {
+ label: "Brand Guidelines",
+ to: "/community/brand",
+ },
+ {
+ label: "Security Policy",
+ to: "/community/security",
+ },
+ ],
},
{
label: "Contribute",
position: "right",
- to: "/contribute",
+ items: [
+ {
+ label: "Overview",
+ to: "/contribute",
+ },
+ {
+ label: "How to Contribute",
+ to: "/contribute/how-to-contribute",
+ },
+ {
+ label: "Working with Git & GitHub",
+ to: "/contribute/git",
+ },
+ {
+ label: "Code Contribution Guide",
+ to: "/contribute/code",
+ },
+ {
+ label: "Proposal Guide",
+ to: "/contribute/proposal",
+ },
+ {
+ label: "Doc Contribution Guide",
+ to: "/contribute/doc",
+ },
+ ],
},
{ to: "/blog", label: "Blog", position: "right" },
{
@@ -113,9 +167,26 @@ const config: Config = {
position: "right",
},
{
- to: "/support",
- label: "Support",
+ label: "Team",
position: "right",
+ items: [
+ {
+ label: "Who we are",
+ to: "/team",
+ },
+ {
+ label: "Inviting New Committers",
+ to: "/team/new-committers",
+ },
+ {
+ label: "Sign ICLA",
+ to: "/team/sign-icla",
+ },
+ {
+ label: "Setup the Apache account",
+ to: "/team/setup-apache-email-account",
+ },
+ ],
},
{
label: "Resources",
@@ -134,9 +205,9 @@ const config: Config = {
to: "/bootcamp",
},
{
- label: "Team",
- to: "/team",
- },
+ label: "Support",
+ to: "/support",
+ },
],
},
{
diff --git a/scripts/fetch_slack_users.py b/scripts/fetch_slack_users.py
deleted file mode 100755
index 50b0a447a..000000000
--- a/scripts/fetch_slack_users.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/usr/bin/env python3
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-# OF ANY KIND, either express or implied. See the License for
-# the specific language governing permissions and limitations
-# under the License.
-#
-"""
-fetch_slack_users.py
-
-This script fetches Slack users and filters them based on a hardcoded list of names.
-Duplicate names are excluded by keeping only the first occurrence.
-
-Output:
-- `slack_users.json`: Contains matched users with the following fields:
- - name: Slack user's real name.
- - profile_image: URL to the user's Slack profile image.
-
-Requirements:
-- A valid Slack API token with the `users:read` permission.
- The token must be set as an environment variable `SLACK_TOKEN`.
-
-Notes:
-- The hardcoded list of user names is manually retrieved from the Slack workspace
- members area, where it is possible to filter active users.
-- This script is designed to work at the free API level, as Slack APIs do not provide
- sufficient information to programmatically determine active users in free-tier workspaces.
-
-Prerequisites:
-- Python 3.7 or later.
-- Modules: `requests`.
-
-Usage:
-1. Ensure you have `requests` installed (`pip install requests`).
-2. Set the environment variable `SLACK_TOKEN` with a valid token:
- - export SLACK_TOKEN="your_slack_api_token"
-3. Run the script:
- - ./fetch_slack_users.py
-4. The output file `slack_users.json` will be saved in the `static` directory.
-"""
-
-import os
-import requests
-import json
-
-# Slack API Token from environment variable
-SLACK_TOKEN = os.getenv("SLACK_TOKEN")
-if not SLACK_TOKEN:
- raise ValueError("Please set the SLACK_TOKEN environment variable.")
-
-# Slack API URL
-SLACK_USERS_URL = "https://slack.com/api/users.list"
-
-# Headers for API request
-HEADERS = {"Authorization": f"Bearer {SLACK_TOKEN}"}
-
-# Hardcoded list of user names
-USER_NAMES = [
- "Abhi", "Albert C", "Albert Dong", "Alwin", "Amy Levine", "Andreas Eschbacher",
- "Antonio Petrole", "Bernard", "Brad Howerter", "Chuck Renaud", "David",
- "Dianjin Wang", "Eddie Espino", "franck sidi", "Greg Spiegelberg", "Hao Wu",
- "Himanshu Pandey", "Jacque Istok", "Jakub Sicner", "jiaqizho", "Joaquim Oliveira",
- "John Huang", "kalo", "kris", "Leon Cheng", "Leonid Borchuk", "Liang Chen",
- "Lirong Jian", "Louis Mugnano", "Luis Macedo", "Max Yang", "Nadir Pervez",
- "Nikolay", "Nixon Daniel Hutahaean", "roseduan", "Ryan Wei", "sai", "Sharon",
- "Shine Zhang 张辛", "Tony Wasson", "Travis L", "Tushar Pednekar", "Way Dev",
- "Xuebin", "Yuriy", "Zhang Mingli", "ZhangBaowen", "Айдарханов Даурен"
-]
-
-# Determine absolute path to static directory
-SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-STATIC_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "../static"))
-
-# Ensure static directory exists
-os.makedirs(STATIC_DIR, exist_ok=True)
-
-
-def fetch_slack_users():
- """
- Fetch Slack users and filter by a hardcoded list of names.
- Exclude duplicates by keeping the first occurrence.
- Save their names and profile images to a JSON file.
- """
- print("Fetching Slack users from API...")
- slack_users = {}
- matched_users = []
-
- # Fetch users from Slack API
- response = requests.get(SLACK_USERS_URL, headers=HEADERS)
- if response.status_code != 200:
- print(f"Error fetching Slack users: {response.status_code}, {response.text}")
- return
-
- data = response.json()
- if not data.get("ok"):
- print(f"Slack API error: {data.get('error')}")
- return
-
- # Process users and match against the hardcoded list
- slack_user_data = data.get("members", [])
- for user in slack_user_data:
- # Skip bots and deleted users
- if user.get("is_bot") or user.get("deleted"):
- continue
-
- # Extract user name and profile image
- real_name = user.get("real_name", "").strip()
- profile_image = user.get("profile", {}).get("image_512")
-
- # Check if name is in USER_NAMES and not already recorded
- if real_name in USER_NAMES and real_name not in slack_users:
- slack_users[real_name] = {"name": real_name, "profile_image": profile_image}
- matched_users.append(slack_users[real_name])
- print(f"Matched user: {real_name}")
-
- # Save matched users to JSON
- output_path = os.path.join(STATIC_DIR, "slack_users.json")
- with open(output_path, "w") as file:
- json.dump(matched_users, file, indent=4)
- print(f"Slack users saved to {output_path} ({len(matched_users)} matched users)")
-
-
-if __name__ == "__main__":
- fetch_slack_users()
diff --git a/src/components/SlackUsers.module.css b/src/components/SlackUsers.module.css
deleted file mode 100644
index 7b6baf95c..000000000
--- a/src/components/SlackUsers.module.css
+++ /dev/null
@@ -1,31 +0,0 @@
-.grid {
- display: flex;
- flex-wrap: wrap;
- gap: 20px;
- justify-content: center;
- margin-top: 20px;
-}
-
-.card {
- text-align: center;
- width: 120px;
- font-family: Arial, sans-serif;
-}
-
-.avatar {
- width: 100px;
- height: 100px;
- border-radius: 50%;
- box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
- margin-bottom: 10px;
-}
-
-p {
- margin: 0;
- font-size: 14px;
- color: #333;
-}
-
-p strong {
- font-weight: bold;
-}
diff --git a/src/components/slack_users.js b/src/components/slack_users.js
deleted file mode 100644
index 6ae129008..000000000
--- a/src/components/slack_users.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import React, { useEffect, useState } from 'react';
-import styles from './SlackUsers.module.css';
-
-const SlackUsers = () => {
- const [users, setUsers] = useState([]);
-
- useEffect(() => {
- fetch('/slack_users.json')
- .then((response) => response.json())
- .then((data) => setUsers(data))
- .catch((error) => {
- console.error('Error loading Slack users:', error);
- });
- }, []);
-
- return (
- <div>
- <div className={styles.grid}>
- {users.map((user) => (
- <div key={user.id} className={styles.card}>
- <img
- src={user.profile_image || 'https://via.placeholder.com/100'}
- alt={user.name}
- className={styles.avatar}
- />
- <p><strong>{user.name}</strong></p>
- <p>{user.email}</p>
- </div>
- ))}
- </div>
- </div>
- );
-};
-
-export default SlackUsers;
diff --git a/src/pages/team.md b/src/pages/team/index.md
similarity index 95%
rename from src/pages/team.md
rename to src/pages/team/index.md
index d4cfab20c..0527f2938 100644
--- a/src/pages/team.md
+++ b/src/pages/team/index.md
@@ -57,17 +57,16 @@ The path to becoming a committer typically involves:
Committer status recognizes your contributions and grants you additional responsibilities in shaping the project's future. We encourage all contributors to aim for this role by consistently participating in the project's development.
-import Contributors from '@site/src/components/contributors';
-import SlackUsers from '@site/src/components/slack_users';
+### New Committers
+
+- [Inviting New Committers](./team/new-committers)
+- [Sign the ICLA](./team/sign-icla)
+- [Setup the Apache email account](./team/setup-apache-email-account)
## Contributors wall
Our journey began in 2022, and we have built our foundation on PostgreSQL and Greenplum Database. We would not be where we are today without the invaluable contributions of the two project contributors. We extend our heartfelt thanks to them.
-### GitHub Committers and PPMC members
-
-<Contributors />
-
-### Slack Community
+import Contributors from '@site/src/components/contributors';
-<SlackUsers />
+<Contributors />
\ No newline at end of file
diff --git a/src/pages/team/new-committers.md b/src/pages/team/new-committers.md
new file mode 100644
index 000000000..d3df751e5
--- /dev/null
+++ b/src/pages/team/new-committers.md
@@ -0,0 +1,281 @@
+---
+title: Inviting New Committers
+description: This is the processes for adding new committers for Apache Cloudberry.
+---
+
+This process outlines the steps involved in adding new committers to Apache Cloudberry (Incubating), which follows the [Apache New Committer guidelines](https://community.apache.org/pmc/adding-committers.html#new-committer-process).
+
+## New Committer Process
+
+To go through the whole process of inviting a new committer, you need to be a Cloudberry PPMC member and go step by step according to the following table.
+
+| Steps | Notes | Templates [...]
+|--------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------- [...]
+| **Discussion** | If any PPMC member recognize someone has met our [requirements](/team#committers) and can be the potential committer, please start a discussion in the private@cloudberry.apache.org. It's recommended to provide the reason why you want to propose the new candidate. The discussion will last at least 7 days. | [[DISCUSS]](#committer-dis [...]
+| **Vote** | If the proposed candidate seems to be received positively by a majority of those responding, please start a new thread to vote the candidate. Let the Vote thread run for one week. | [[VOTE]](#committer-vote-t [...]
+| **Announcing results** | No matter whether the result is positive or negative, please raise a new thread to summarize. If the result is negative, dismiss the following steps. | [[RESULT] [VOTE]](#committ [...]
+| **Sending the invitation** | If the result is positive (achieved at least 3 +1 votes and no vetoes), then send a invitation to the new committer candidate. We give candidates a chance to decline committership in private. They can post a reply to the PMC mailing list. If the new committer candidate accepts, go to next. Otherwise, express the gratitude of Cloudberry community and stop here. | [Invitation](#committer-in [...]
+| **Committer Account Creation** | The new committer should file the ICLA file to the secretary@apache.org. Here are the guide on [signing the ICLA](/team/sign-icla). We need the mentors to help reqeust a new Apache ID for the new committer, see the template. After the new account is created (will receive *[NOTICE] Account created: xxx* from root@apache.org), then the new committer needs [set up the apache.org email account](/team/setup-apache-email-account). | [Request to create a Apach [...]
+| **Welcome** | Send a welcome email to the new committer. | [Welcome](#welcome-the-new [...]
+| **Announcement** | Announcing the new committer in the dev@cloudberry.apache.org mailing list. | [[ANNOUNCEMENT]](#new-comm [...]
+| **News** | Share the news accross the community channels. | [...]
+
+## Email Templates
+
+### Committer discussion template
+
+```
+To: private@cloudberry.apache.org
+Subject: [DISCUSS] [Candidate Name] for Cloudberry Committer
+
+Hi everyone,
+
+I would like to nominate [Candidate Name] (GitHub ID: xxx) as a Cloudberry
+Committer.
+
+[State reasons that you believe they are a good candidate.]
+
+[State contribution statistics, if available and relevant.]
+
+This is still in the discussion phase. If everything goes
+smoothly, we will proceed with the official vote in a separate email.
+
+Looking forward to your thoughts and feedback.
+```
+
+### Committer vote template
+
+```
+To: private@cloudberry.apache.org
+Subject: [VOTE] [Candidate Name] for Cloudberry Committer
+
+Hi all,
+
+This is a VOTE to add [Candidate Name] (GitHub Id: xxx) as a committer.
+
+This has been discussed here: [Link to DISCUSS thread on
+lists.apache.org] If you have more to add to the discussion, please do
+so there, rather than in this VOTE thread.
+
+-----
+
+Please vote accordingly:
+
+[+1] Yes, add this committer
+[0] Abstain
+[-1] No, do not add this committer (please provide a reason)
+
+-----
+
+Voting ends one week from today, until midnight UTC on YYYY-MM-DD
+https://www.timeanddate.com/counters/customcounter.html?year=YYYY&month=MM&day=DD
+
+See voting guidelines at
+https://community.apache.org/pmc/adding-committers.html
+```
+
+### Committer vote results template
+
+```
+To: private@cloudberry.apache.org
+Subject: [RESULT] [VOTE] [Candidate Name] for Cloudberry Committer
+
+Hi Cloudberry PPMC,
+
+The vote has now closed. The results are:
+
++1 N binding, M non-binding
+ 0 N binding, M non-binding
+-1 N binding, M non-binding
+
+The vote is ***successful***.
+
+Then I'm going to invite [Candidate Name] to join us.
+
+[Include link to VOTE thread on lists.apache.org]
+```
+
+### Committer invite template
+
+```
+To: NewCommiter@domain.com
+Cc: private@cloudberry.apache.org
+Subject: Invitation to become Cloudberry committer: [Candidate Name]
+
+Hello [Candidate Name],
+
+The Cloudberry Podling Project Management Committee (PPMC)
+hereby offers you committer privileges to the project.
+
+These privileges are offered on the understanding that you'll use them
+reasonably and with common sense. We like to work on trust
+rather than unnecessary constraints.
+
+Being a committer enables you to more easily make
+changes without needing to go through the patch
+submission process.
+
+Being a committer does not require you to
+participate any more than you already do. It does
+tend to make one even more committed. You will
+probably find that you spend more time here.
+
+Of course, you can decline and instead remain as a
+contributor, participating as you do now.
+
+This personal invitation is a chance for you to accept or decline in private.
+Please let us know in reply to this message whether you accept or decline.
+
+If you accept, you will need an Apache account (id) with privileges.
+Please follow these instructions.
+
+A. If you already have an ICLA on file:
+
+ 1. If you already have an Apache account, let us know your id and we
+will grant you privileges on the project repositories.
+
+ 2. If you have previously sent an ICLA, let us know the email address
+and public name used on the ICLA and your preferred Apache id, and
+we will request your account.
+
+ 3. If the email address on the previously submitted ICLA is no longer
+valid, let us know the email address and public name used on the new ICLA,
+and your preferred Apache id. Continue to step B below and file your new ICLA.
+
+Look to see if your preferred ID is already taken at
+https://people.apache.org/committer-index.html
+
+B. If there is not already an ICLA on file, you need to submit an ICLA:
+
+ 1. Details of the ICLA and the forms are found
+ through this link: https://www.apache.org/licenses/#clas
+
+ 2. Instructions for its completion and return to
+ the Secretary of the ASF are found at
+ https://www.apache.org/licenses/contributor-agreements.html#submitting
+
+ Do not copy the project or any other individual on your message
+ to Secretary, as the form contains Personally Identifiable Information
+ that should be kept private.
+
+ 3. When you complete the ICLA form, be sure to include in the form
+ the Apache [Project] project and choose a
+ unique Apache ID. Look to see if your preferred
+ ID is already taken at
+ https://people.apache.org/committer-index.html
+ This will allow the Secretary to notify the PMC
+ when your ICLA has been recorded.
+
+When recording of your ICLA is noted, you will
+receive a follow-up message with the next steps for
+establishing you as a committer.
+
+Yours,
+The Apache Cloudberry PPMC
+```
+
+### Request to create a new Apache ID for new Committer template
+
+```
+To: private@cloudberry.apache.org
+Subject: Request to create a new Apache ID for [Candidate Name]
+
+Hi Dear Mentors,
+
+We need your help to request a new Apache ID for our new committer [Candidate Name].
+
+Name: [Candidate Name]
+Apache ID: [Candidate Apache ID]
+Email Address: [Candidate Email Address]
+
+You can open this link to see his ICLA files:
+https://whimsy.apache.org/officers/unlistedclas.cgi .
+
+For reference: https://www.apache.org/dev/pmc.html#noncommitter
+
+If the new account information is not provided on the ICLA, the
+PMC chair is responsible to get the new committer's desired account ID
+and request the new account.
+
+Once the ICLA has been filed, use the ASF New Account Request form
+(https://whimsy.apache.org/officers/acreq) to generate the request.
+Should the PMC chair be unavailable for any reason, any ASF member can
+act on their behalf.
+```
+
+### Welcome the new committer to the community template
+
+```
+To: NewCommitterID@apache.org, private@cloudberry.apache.org
+Subject: Welcome, [Committer Name], New Committer!
+
+Hello, [Committer Name],
+
+As you know, the ASF Infrastructure has set up your committer account
+with the username `[apacheID]`.
+
+You will now be able to merge approved PRs on GitHub for this project.
+(You'll need to associate your GitHub account with your Apache email
+address.)
+
+You can manage your account settings at https://id.apache.org/
+
+The developer section of the website describes roles within the ASF and
+provides other resources:
+ https://www.apache.org/foundation/how-it-works.html
+ https://www.apache.org/dev/
+
+The incubator also has some useful information for new committers
+in incubating projects:
+ https://incubator.apache.org/guides/committer.html
+ https://incubator.apache.org/guides/ppmc.html
+
+You now have expanded access to portions of the Whimsy toolset
+specific to committers: https://whimsy.apache.org/
+
+As an ASF committer, you now also have commit access to specific
+sections of the ASF Foundation repository, as follows:
+
+The general "committers" at:
+https://svn.apache.org/repos/private/committers
+
+Just as before you became a committer, participation in any ASF community
+requires adherence to the ASF Code of Conduct:
+ https://www.apache.org/foundation/policies/conduct.html
+
+If you have any questions during this phase, then please
+see the following resources:
+
+Apache developer's pages: https://www.apache.org/dev/
+Incubator committer guide: https://incubator.apache.org/guides/committer.html
+
+Naturally, if you don't understand anything be sure to ask us on the
+Cloudberry dev mailing list. Documentation is maintained by volunteers
+and hence can be out-of-date and incomplete - of course you can now
+help fix that.
+
+A PPMC member will announce your election to the dev list, and we
+encourage you to introduce yourself there.
+
+[Your Name]
+On behalf of the Cloudberry PPMC
+```
+
+### New committer announcement template
+
+```
+To: dev@cloudberry.apache.org
+Subject: [ANNOUNCEMENT] New Committer: [Committer Name]
+
+The Podling Project Management Committee (PPMC) for Apache Cloudberry
+has invited [Committer Name] to become a committer and we are pleased
+to announce that he has accepted.
+
+[State New Committers's contribution, if available and relevant.]
+
+Please join us in welcoming [Committer Name] to his new role and
+responsibility in our project community.
+
+[Your Name]
+On behalf of the Cloudberry PPMC
+```
diff --git a/src/pages/team/setup-apache-email-account.md b/src/pages/team/setup-apache-email-account.md
new file mode 100644
index 000000000..c93be58ca
--- /dev/null
+++ b/src/pages/team/setup-apache-email-account.md
@@ -0,0 +1,33 @@
+---
+title: Set up your Apache.org email account
+description: Follow these steps to set up your Apache.org email address in Gmail, including SMTP server configuration and email confirmation.
+---
+
+1. Open Gmail and go to Settings. Then navigate to the `Accounts and Import` table: https://mail.google.com/mail/u/0/#settings/accounts.
+
+2. Click the `Add another email address` button in the `Send mail as` section.
+
+
+
+3. In the pop-up dialogue, enter your Apache email address, and click `Next Step`.
+
+
+
+4. Set up the SMTP server & port. Enter your Apache username and password, then click `Add Account` to proceed:
+
+* SMTP Server: `mail-relay.apache.org`
+* Port: `465`
+* Username and Password: `enter your own Apache ID and password`
+* Select `Secured connection using SSL (recommended)`
+
+
+
+5. A confirmation window will appear, indicating that you have successfully added your email address. Then go to the Gmail homepage, and open the new email `Gmail Confirmation - Send Mail as xx@apache.org` to click the link to confirm your request.
+
+
+
+6. Send a test email from another email account to your Apache email address to confirm that you can receive it in your Gmail.
+
+When composing a new email, you can select your Apache email address as the sender.
+
+
\ No newline at end of file
diff --git a/src/pages/team/sign-icla.md b/src/pages/team/sign-icla.md
new file mode 100644
index 000000000..79989376d
--- /dev/null
+++ b/src/pages/team/sign-icla.md
@@ -0,0 +1,70 @@
+---
+title: Quick guide and example on signing your ICLA
+description: Follow these steps to sign your ICLA for Apache, including detailed instructions for MacOS, Apple iOS, and Android.
+---
+
+1. [Download the ICLA file from the Apache website](https://www.apache.org/licenses/icla.pdf) to your local machine.
+
+2. If you don’t have a physical printer, use software to help you sign the ICLA.
+
+ **MacOS uers**
+
+ 1. Use your browser to navigate to the .pdf form and download the form to a local file using the save-as function.
+ 2. Open the file using `Preview`, the standard PDF viewer/editor.
+ 3. Fill the form fields using the keyboard. For the signature, use the `Tools-Annotate-Signature` function to attach a signature.
+ 4. Save the completed form.
+ 5. Open the email client and create a message to secretary@apache.org, attach the completed form and send it to secretary.
+ 6. Keep the completed form for your records.
+
+ **Apple iOS users**
+
+ 1. Use your browser to navigate to the .pdf form and download the form using the `Files` feature.
+ 2. Open the form using Files, the standard file viewer.
+ 3. Fill the form fields using the keyboard. For the signature, use the Signature function to attach your signature.
+ 4. Save the completed form.
+ 5. Share the file to the email client and send the message with the attached form to secretary@apache.org.
+ 6. Keep the completed form for your records.
+
+ **Android users**
+
+ You need a third-party tool to fill and attach a signature. First, install a PDF tool such as Adobe Acrobat. These instructions may differ somewhat if you are not using Adobe Acrobat.
+
+ 1. Use your web browser to navigate to the .pdf form and download the form to a local file. The file should automatically open in the PDF tool.
+ 2. Fill the form fields using the keyboard. For the signature, use the `Edit` function and choose `Fill & Sign` to attach a signature.
+ 3. Save the completed form.
+ 4. Share the file via Share a copy to the email client and send the message with the attached form to secretary@apache.org.
+ 5. Keep the completed form for your records.
+
+3. Fill the fields with your personal information
+
+* Full Name: Please enter your full name.
+* Public Name: Can enter your full name or a new name. If you do not enter a public name, your full name will be public.
+* Postal Address: You need to make it more detailed to the door number. If not, it will be rejected by Apache. (Apache will not publish your postal address).
+* Email: Please enter your commonly used email address.
+* (optional) preferred Apache id(s): This will used for the xxx@apache.org email.
+* notify project: Apache Cloudberry
+
+Create your signature on MacOS:
+
+
+Move your signature to the right place, then save the doc:
+
+
+4. Create one email to Apache.
+
+* Recipients: secretary@apache.org (Please don’t copy others)
+* Subject: ICLA from [Your Name] for Project Cloudberry
+* Message Body:
+
+ ```
+ Hi there,
+
+ The attachment ICLA is from [Your Name], one new committer for the Cloudberry podling.
+
+ If any questions about the signed doc, please let me know.
+
+ Thanks!
+ ```
+
+* Attach your completed ICLA file to the email.
+* Send.
\ No newline at end of file
diff --git a/static/contributors_and_team.json b/static/contributors_and_team.json
index bdd6ddede..496b3da25 100644
--- a/static/contributors_and_team.json
+++ b/static/contributors_and_team.json
@@ -59,6 +59,10 @@
"login": "tuhaihe",
"avatar_url": "https://avatars.githubusercontent.com/tuhaihe"
},
+ {
+ "login": "TomShawn",
+ "avatar_url": "https://avatars.githubusercontent.com/TomShawn"
+ },
{
"login": "weinan003",
"avatar_url": "https://avatars.githubusercontent.com/weinan003"
diff --git a/static/img/team/apache-email-2.jpeg b/static/img/team/apache-email-2.jpeg
new file mode 100644
index 000000000..5c96ed776
Binary files /dev/null and b/static/img/team/apache-email-2.jpeg differ
diff --git a/static/img/team/apache-email-3.jpeg b/static/img/team/apache-email-3.jpeg
new file mode 100644
index 000000000..0ce18ce5a
Binary files /dev/null and b/static/img/team/apache-email-3.jpeg differ
diff --git a/static/img/team/apache-email-4.jpeg b/static/img/team/apache-email-4.jpeg
new file mode 100644
index 000000000..c6b87e2d7
Binary files /dev/null and b/static/img/team/apache-email-4.jpeg differ
diff --git a/static/img/team/apache-email-5.jpeg b/static/img/team/apache-email-5.jpeg
new file mode 100644
index 000000000..7b299f79b
Binary files /dev/null and b/static/img/team/apache-email-5.jpeg differ
diff --git a/static/img/team/apache-email-6.jpeg b/static/img/team/apache-email-6.jpeg
new file mode 100644
index 000000000..46bbe7192
Binary files /dev/null and b/static/img/team/apache-email-6.jpeg differ
diff --git a/static/img/team/sign-apache-icla-1.jpeg b/static/img/team/sign-apache-icla-1.jpeg
new file mode 100644
index 000000000..959fba140
Binary files /dev/null and b/static/img/team/sign-apache-icla-1.jpeg differ
diff --git a/static/img/team/sign-apache-icla-2.jpeg b/static/img/team/sign-apache-icla-2.jpeg
new file mode 100644
index 000000000..29ca2d940
Binary files /dev/null and b/static/img/team/sign-apache-icla-2.jpeg differ
diff --git a/static/slack_users.json b/static/slack_users.json
deleted file mode 100644
index c4dd713e7..000000000
--- a/static/slack_users.json
+++ /dev/null
@@ -1,194 +0,0 @@
-[
- {
- "name": "Ryan Wei",
- "profile_image": "https://avatars.slack-edge.com/2023-06-16/5449454763825_0ae253a51a5d524fe93a_512.jpg"
- },
- {
- "name": "Dianjin Wang",
- "profile_image": "https://avatars.slack-edge.com/2024-04-23/7029674500336_cda6b2ff4aae5ac12188_512.png"
- },
- {
- "name": "Max Yang",
- "profile_image": "https://secure.gravatar.com/avatar/0b093e09789280920dabda5e27102a26.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0020-512.png"
- },
- {
- "name": "Zhang Mingli",
- "profile_image": "https://avatars.slack-edge.com/2023-07-12/5557615873222_37922453b37b3ab89bf2_512.png"
- },
- {
- "name": "Xuebin",
- "profile_image": "https://secure.gravatar.com/avatar/c207a8faaaea4a8d25c2dbddeaf11044.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0012-512.png"
- },
- {
- "name": "Nikolay",
- "profile_image": "https://secure.gravatar.com/avatar/32743e2065b79dbc9c30c6ce69901318.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0006-512.png"
- },
- {
- "name": "Louis Mugnano",
- "profile_image": "https://avatars.slack-edge.com/2024-05-30/7185480733959_09d8f9d7b48f16f3c56e_512.jpg"
- },
- {
- "name": "Sharon",
- "profile_image": "https://secure.gravatar.com/avatar/8d5b2e76166c4cf50ad304dac77b1c29.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png"
- },
- {
- "name": "Eddie Espino",
- "profile_image": "https://avatars.slack-edge.com/2024-06-05/7243045768017_c4eb6614509041758d97_512.jpg"
- },
- {
- "name": "Tushar Pednekar",
- "profile_image": "https://secure.gravatar.com/avatar/f22d0b4cd39f864aec2f0d90117fa933.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0011-512.png"
- },
- {
- "name": "Nadir Pervez",
- "profile_image": "https://secure.gravatar.com/avatar/bd9d9cb2f48691616bd6a20b5be21a43.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-512.png"
- },
- {
- "name": "David",
- "profile_image": "https://secure.gravatar.com/avatar/457887abf01f295c98f6a5f0e97daee5.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-512.png"
- },
- {
- "name": "Antonio Petrole",
- "profile_image": "https://avatars.slack-edge.com/2024-07-12/7429103314481_c65557e3b1ed7beed763_512.jpg"
- },
- {
- "name": "Joaquim Oliveira",
- "profile_image": "https://secure.gravatar.com/avatar/3e36e8ffb3a043fbf6971f616d8f7bab.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-512.png"
- },
- {
- "name": "Leon Cheng",
- "profile_image": "https://secure.gravatar.com/avatar/b2eb7911503867e44720570fa5e20413.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0013-512.png"
- },
- {
- "name": "Andreas Eschbacher",
- "profile_image": "https://avatars.slack-edge.com/2024-08-30/7656572199444_9930f59434ad90f98d88_512.jpg"
- },
- {
- "name": "franck sidi",
- "profile_image": "https://avatars.slack-edge.com/2024-06-28/7347197911938_c6d58b6a2b1818805ab4_512.png"
- },
- {
- "name": "jiaqizho",
- "profile_image": "https://secure.gravatar.com/avatar/5c06c1e58ab16a4f01b0a8533ca35132.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0024-512.png"
- },
- {
- "name": "ZhangBaowen",
- "profile_image": "https://secure.gravatar.com/avatar/b2bf10918d9fe845cbfb5f075b026cb1.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png"
- },
- {
- "name": "Greg Spiegelberg",
- "profile_image": "https://avatars.slack-edge.com/2024-07-04/7399744955184_cc6d9fbd541670e89710_512.jpg"
- },
- {
- "name": "Tony Wasson",
- "profile_image": "https://avatars.slack-edge.com/2024-07-03/7395668799520_9e41a4e982117b173cae_512.png"
- },
- {
- "name": "Bernard",
- "profile_image": "https://secure.gravatar.com/avatar/44c0e409ff5883f10d43aa12fe36ca2f.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0025-512.png"
- },
- {
- "name": "Liang Chen",
- "profile_image": "https://secure.gravatar.com/avatar/cb2cfd8b82fb649cb0987f9cd9159bde.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png"
- },
- {
- "name": "Lirong Jian",
- "profile_image": "https://avatars.slack-edge.com/2024-07-18/7437673719478_aea62ef15cee46a82d3f_512.jpg"
- },
- {
- "name": "Albert Dong",
- "profile_image": "https://avatars.slack-edge.com/2024-10-17/7894298916531_cb8bee080789cf918f86_512.jpg"
- },
- {
- "name": "\u0410\u0439\u0434\u0430\u0440\u0445\u0430\u043d\u043e\u0432 \u0414\u0430\u0443\u0440\u0435\u043d",
- "profile_image": "https://avatars.slack-edge.com/2024-08-24/7622859611941_950bf7e47b98a13d6d92_512.jpg"
- },
- {
- "name": "Jacque Istok",
- "profile_image": "https://avatars.slack-edge.com/2024-09-04/7679909438834_3547956376770d3dbcca_512.png"
- },
- {
- "name": "roseduan",
- "profile_image": "https://avatars.slack-edge.com/2024-08-30/7654152866067_12c367633cc72be748e5_512.png"
- },
- {
- "name": "Chuck Renaud",
- "profile_image": "https://avatars.slack-edge.com/2024-09-05/7689455648308_44287f728297ae34283e_512.png"
- },
- {
- "name": "Amy Levine",
- "profile_image": "https://avatars.slack-edge.com/2024-09-09/7703764836516_e525e915b0a37dbdeb23_512.png"
- },
- {
- "name": "Hao Wu",
- "profile_image": "https://secure.gravatar.com/avatar/b8142e43a413ce1ed2589e501819ac0c.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png"
- },
- {
- "name": "Luis Macedo",
- "profile_image": "https://secure.gravatar.com/avatar/b18d6db60aab1d18fa48070c58e4660b.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0014-512.png"
- },
- {
- "name": "Shine Zhang \u5f20\u8f9b",
- "profile_image": "https://avatars.slack-edge.com/2024-09-17/7740011265522_399356ac2af6767aada7_512.jpg"
- },
- {
- "name": "Travis L",
- "profile_image": "https://secure.gravatar.com/avatar/0b5057a246e7d5401acd1f2317ca44d2.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0011-512.png"
- },
- {
- "name": "Albert C",
- "profile_image": "https://secure.gravatar.com/avatar/b0e3d09f3163c55f9902f38e35f8a948.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0026-512.png"
- },
- {
- "name": "Leonid Borchuk",
- "profile_image": "https://secure.gravatar.com/avatar/918649609a3908a4c486dafb44f5e3fd.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0014-512.png"
- },
- {
- "name": "sai",
- "profile_image": "https://secure.gravatar.com/avatar/4080a5f227c5d7987df5e6400b3f8dcf.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0008-512.png"
- },
- {
- "name": "Way Dev",
- "profile_image": "https://secure.gravatar.com/avatar/7c25270474e5589e87a6587ca077a1da.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0000-512.png"
- },
- {
- "name": "Alwin",
- "profile_image": "https://secure.gravatar.com/avatar/b5287400b65b0b7d786882ef5e238f12.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0007-512.png"
- },
- {
- "name": "Jakub Sicner",
- "profile_image": "https://secure.gravatar.com/avatar/4a5f13ccc598fc3ea5fd69ace00e3c88.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0017-512.png"
- },
- {
- "name": "Nixon Daniel Hutahaean",
- "profile_image": "https://avatars.slack-edge.com/2024-10-17/7884697754599_61f6eed6b476ca3aee4d_512.jpg"
- },
- {
- "name": "Brad Howerter",
- "profile_image": "https://secure.gravatar.com/avatar/7b8608bfadec4140f88c736b0210f481.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-512.png"
- },
- {
- "name": "kris",
- "profile_image": "https://secure.gravatar.com/avatar/1bf4d4a7c79824be35d0e3bd319c9f76.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0019-512.png"
- },
- {
- "name": "Yuriy",
- "profile_image": "https://secure.gravatar.com/avatar/6862d222fd715e3846df3fa3dc783dbb.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0021-512.png"
- },
- {
- "name": "John Huang",
- "profile_image": "https://secure.gravatar.com/avatar/5129dccaaeb548023b7f119eaacee1ef.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0010-512.png"
- },
- {
- "name": "kalo",
- "profile_image": "https://secure.gravatar.com/avatar/3697c0a59c688b73911c8301fdf949f4.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0001-512.png"
- },
- {
- "name": "Himanshu Pandey",
- "profile_image": "https://secure.gravatar.com/avatar/a9ecad82f6d530ff0cdca5d18ccd7f8d.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0004-512.png"
- },
- {
- "name": "Abhi",
- "profile_image": "https://secure.gravatar.com/avatar/74b2cef4a56cb73d2c6e7ddb476efb9f.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0018-512.png"
- }
-]
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org