From 680f92242fd1ec2715a48387c81e7ed2c56a629b Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Wed, 3 Dec 2025 22:40:53 +0530 Subject: [PATCH 01/43] initial migration Signed-off-by: Rajesh-Nagarajan-11 --- src/collections/handbook/about/index.mdx | 112 +++ .../handbook/code-of-conduct/bullet.svg | 1 + .../handbook/code-of-conduct/index.mdx | 33 + .../handbook/community-roles/index.mdx | 216 ++++++ src/collections/handbook/community/bullet.svg | 1 + src/collections/handbook/community/index.mdx | 77 ++ .../handbook/connect-with-us/index.mdx | 134 ++++ .../handbook/contribution/compare-and-pr.webp | Bin 0 -> 4000 bytes .../handbook/contribution/create-pr.webp | Bin 0 -> 34010 bytes .../contribution/git-signoff-vscode.webp | Bin 0 -> 13168 bytes .../handbook/contribution/index.mdx | 160 +++++ .../handbook/contribution/slack.webp | Bin 0 -> 10590 bytes .../handbook/contribution/twitter.webp | Bin 0 -> 230 bytes src/collections/handbook/designer/index.mdx | 41 ++ src/collections/handbook/faq/index.mdx | 72 ++ .../handbook/github-process/index.mdx | 134 ++++ .../handbook/instructions/index.mdx | 59 ++ src/collections/handbook/learning/index.mdx | 48 ++ .../handbook/mentorship-programs/index.mdx | 37 + .../mentorship-programs/programs-data.js | 84 +++ src/collections/handbook/projects/index.mdx | 97 +++ .../handbook/recognition/BadgeRow.js | 41 ++ .../handbook/recognition/badge-item.js | 57 ++ .../handbook/recognition/badges-data.js | 103 +++ .../handbook/recognition/index.mdx | 164 +++++ .../handbook/repository-overview/index.mdx | 218 ++++++ .../handbook/repository-overview/repo-data.js | 675 ++++++++++++++++++ .../security-vulnerabilities/index.mdx | 144 ++++ .../handbook/writing-program/content-form.js | 167 +++++ .../writing-program/content-form.style.js | 74 ++ .../handbook/writing-program/index.mdx | 199 ++++++ 31 files changed, 3148 insertions(+) create mode 100644 src/collections/handbook/about/index.mdx create mode 100644 src/collections/handbook/code-of-conduct/bullet.svg create mode 100644 src/collections/handbook/code-of-conduct/index.mdx create mode 100644 src/collections/handbook/community-roles/index.mdx create mode 100644 src/collections/handbook/community/bullet.svg create mode 100644 src/collections/handbook/community/index.mdx create mode 100644 src/collections/handbook/connect-with-us/index.mdx create mode 100644 src/collections/handbook/contribution/compare-and-pr.webp create mode 100644 src/collections/handbook/contribution/create-pr.webp create mode 100644 src/collections/handbook/contribution/git-signoff-vscode.webp create mode 100644 src/collections/handbook/contribution/index.mdx create mode 100644 src/collections/handbook/contribution/slack.webp create mode 100644 src/collections/handbook/contribution/twitter.webp create mode 100644 src/collections/handbook/designer/index.mdx create mode 100644 src/collections/handbook/faq/index.mdx create mode 100644 src/collections/handbook/github-process/index.mdx create mode 100644 src/collections/handbook/instructions/index.mdx create mode 100644 src/collections/handbook/learning/index.mdx create mode 100644 src/collections/handbook/mentorship-programs/index.mdx create mode 100644 src/collections/handbook/mentorship-programs/programs-data.js create mode 100644 src/collections/handbook/projects/index.mdx create mode 100644 src/collections/handbook/recognition/BadgeRow.js create mode 100644 src/collections/handbook/recognition/badge-item.js create mode 100644 src/collections/handbook/recognition/badges-data.js create mode 100644 src/collections/handbook/recognition/index.mdx create mode 100644 src/collections/handbook/repository-overview/index.mdx create mode 100644 src/collections/handbook/repository-overview/repo-data.js create mode 100644 src/collections/handbook/security-vulnerabilities/index.mdx create mode 100644 src/collections/handbook/writing-program/content-form.js create mode 100644 src/collections/handbook/writing-program/content-form.style.js create mode 100644 src/collections/handbook/writing-program/index.mdx diff --git a/src/collections/handbook/about/index.mdx b/src/collections/handbook/about/index.mdx new file mode 100644 index 0000000000000..0f1e395fa2d1c --- /dev/null +++ b/src/collections/handbook/about/index.mdx @@ -0,0 +1,112 @@ +--- +title: "About" +description: "Learn about Layer5's mission, goals, and how to get started contributing to our open-source community" +type: Handbook +--- + +import { HandbookWrapper } from "../../sections/Community/Handbook/Handbook.style.js"; +import { Container, Row, Col } from "../../reusecore/Layout"; +import NewcomersMap from "../../sections/Community/Newcomers-guide/newcomers-map"; +import IntraPage from "../../components/handbook-navigation/intra-page"; +import longArrow from "../../sections/Community/Newcomers-guide/long-arrow.svg"; +import { useState } from "react"; + +export const contents = [ + { id: 0, link: "#About Layer5", text: "About Layer5" }, + { id: 1, link: "#Goals", text: "Goals" }, + { id: 2, link: "#Newcomer's Path", text: "Newcomer's Path" }, + { id: 3, link: "#Working on your issue", text: "Working on your issue" }, + { id: 4, link: "#While your issue is under review", text: "While your issue is under review" }, +]; + +export const JourneySection = () => { + const [hover, setHover] = useState(false); + return ( + + setHover(true)} + onMouseOut={() => setHover(false)} + > +

Contributor's Journey

+
+
Start Here
+ longArrow +
+ + + + +
+ ); +}; + + +

About Layer5

+
+ +At Layer5, we champion developer-defined infrastructure, giving engineers the power to reshape application delivery. We empower operators in reimagining how they manage modern infrastructure: collaboratively. +
+Layer5 is not just a company, we are also: + +#### Community First + +The Layer5 community builds projects to provide learning environments, deployment, and operational best practices, performance benchmarks, create documentation, share networking opportunities, and more. Our shared commitment to the open-source spirit pushes Layer5 projects forward. New members are always welcome. + +#### Open Source First + +All Layer5 projects are open-source. Anyone can download, use, work on, and share it with others. It's built on principles like collaboration, globalism, and innovation. Layer5 projects are distributed under the terms of Apache v2. + + +

Goals

+
+ +- To build a large collection of cloud native technologies. +- To build products that are accessible and easy to use. +- To build a welcoming community for open-source contributions. + + +

Newcomer's Path

+
+ +Thank you for your interest in contributing to Layer5 open source initiatives! + + + +In combination with the Layer5 Community Guide and Contributing Guide, the following set of instructions are to encourage and support first-time (or near first-time) open-source contributors. + + +

How to contribute?

+
+ +The following steps outline the process by which you can openly engage, learn, and participate in the broad set of open source projects at Layer5. + +1. Browse the list of Layer5 org issues bearing the "good first issue", "first-timers-only" or the "help wanted" label. + +2. Alternatively, find an area of interest by checking out the Layer5 Repository Overview section of this handbook. + +3. After identifying the issue you wish to work on, check if it has been assigned by taking a look at the assignee section on the issue, otherwise signal your interest by commenting on the issue so that it can be assigned to you. + + +

Working on your issue

+
+ +Once an issue has been assigned to you, it's time to get started! + +1. Be sure to sign off on your commits + +2. Contributions of all sizes are welcome. + +3. If you need some additional help, please join the Layer5 Slack workspace and find your way to the #newcomers channel. Feel free to ask questions. + + +

While your issue is under review

+
+ +1. Please double-check that you have signed off on all of your git commits. + +2. Be patient. There are a large number of contributors and only a small number of maintainers/reviewers. All contributors are equally important to us, and we'll be sure to get to you as soon as possible. In the meanwhile, you are welcome to join our Slack workspace and take a look at all our projects. + + diff --git a/src/collections/handbook/code-of-conduct/bullet.svg b/src/collections/handbook/code-of-conduct/bullet.svg new file mode 100644 index 0000000000000..d0b98be5d8be6 --- /dev/null +++ b/src/collections/handbook/code-of-conduct/bullet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/handbook/code-of-conduct/index.mdx b/src/collections/handbook/code-of-conduct/index.mdx new file mode 100644 index 0000000000000..28efadd441f21 --- /dev/null +++ b/src/collections/handbook/code-of-conduct/index.mdx @@ -0,0 +1,33 @@ +--- +title: "Code of Conduct" +description: "Layer5 follows the CNCF Code of Conduct to ensure a welcoming and inclusive community" +type: Handbook +--- + +import { HandbookWrapper } from "../../sections/Community/Handbook/Handbook.style.js"; +import { Container } from "../../reusecore/Layout"; +import Point from "../community/bullet.svg"; + +

Community Code of Conduct

+ +Layer5 follows the CNCF Code of Conduct which states that: + +As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, to post feature requests, to update documentation, to submit pull requests or patches, and other activities. + +We are committed to participating in this project as a harassment-free experience for everyone, regardless of the level of experience, gender, gender identity, and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +

PointThe use of sexualized language or imagery

+

PointPersonal attacks

+

PointTrolling or insulting/derogatory comments

+

PointPublic or private harassment

+

PointPublishing other's private information, such as physical or electronic addresses, without explicit permission

+

PointOther unethical or unprofessional conduct

+ +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. + +This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting community@layer5.io. + diff --git a/src/collections/handbook/community-roles/index.mdx b/src/collections/handbook/community-roles/index.mdx new file mode 100644 index 0000000000000..59058bcd754be --- /dev/null +++ b/src/collections/handbook/community-roles/index.mdx @@ -0,0 +1,216 @@ +--- +title: "Community Roles" +description: "Learn about the different roles and leadership positions within the Layer5 community" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import { Link } from "gatsby"; +import IntraPage from "../../components/handbook-navigation/intra-page"; + +export const contents = [ + { id: 0, link: "#top", text: "What are the different roles in the Layer5 community?" }, + { id: 1, link: "#Community Manager", text: "Community Manager" }, + { id: 2, link: "#MeshMate", text: "MeshMate" }, + { id: 3, link: "#Maintainer", text: "Maintainer" }, + { id: 4, link: "#ReleaseManager", text: "Release Manager" }, + { id: 5, link: "#GitHubCzar", text: "GitHub Czar" }, +]; + + +

Layer5 community leaders undertake different roles

+
+ +A leader is someone who can contribute to the Layer5 Community's growth by faithfully upholding one of the responsibilities outlined in the roles below. + +### Community Manager + +Layer5 Community Managers generally oversee community activities and support ongoing initiatives. They are responsible for the health and growth of the community. Community Managers cultivate an environment which attracts new community members by ensuring that timely and completed responses are provided to questions asked. Community Managers work to ensure that existing community members are retained by helping those members stay engaged in projects on an ongoing basis. Aspects of marketing including member and project promotion as well as aspects of project management by organizing meetings and triaging issues are under the purview of Community Managers. + +A Community Manager is a person who has an innate drive to contribute to the community's prosperity. A community manager serves as a link between the organisation and its community, overcoming obstacles as they arise—or even before they arise!—by collaborating with other departments and the community to find solutions that benefit the entire community. + +**Role:** + +1. Moderating, engaging, and supporting community members on platforms like Slack, GitHub etc. +2. Building healthy relationships among community members. +3. Celebrating community successes, sending swag, and recognizing top contributors. +4. Regularly updating the community on the metrics performance. +5. Creating and managing new community programs. +6. Organizing meetups, events, and other engagements. +7. Coordinating with other departments—such as product, engineering, and content marketing—to support community initiatives. + +**Responsibilities of Community Managers** + +The responsibilities of a Community Manager involves building, stewarding, and organizing the Layer5 Community. + +#### Daily: +1. Issue Triage on GitHub (Issue squatters) + - Make use of `issue/remind` and `issue/dco`. + - Issue squatters are to be politely, but briskly brushed aside + - Remove assignment if not response from the assignee. + - Search Link: All Open Issues Across Layer5 Orgs (Sorted by Oldest First) + +#### Weekly: +2. Assess as a candidate for GitHub org invitation. + - Make use of `issue/invite` (on issues only, not PRs). +3. Assess as a candidate for community member profile. + - See sample message. +4. Weekly evaluation and nomination of community members for the next step in the contributor ladder. +5. Review Community Members spreadsheet. Identify members that need extra attention. + +#### Monthly: +- Assess each community member profile for transition to inactive. Use a period of two months of inactivity as the metric. +- Monthly evaluation of Social sharing and SEO tracker. +- Monthly evaluation of DevStats +- Every week on Thursday at 8:30 pm | 10:00 am CT - meeting and minutes. +- Event management (Workshops, Webinars, Conferences, CFPs) +- Reset the Slack invitation on slack.layer5.io and slack.meshery.io monthly. + + +

MeshMate

+
+ +**Role** + +**Layer5 MeshMates** is a community member onboarding and mentoring program. Layer5 MeshMates are committed to helping community members be successful contributors. MeshMates aid in identifying areas of projects to engage within, working groups to join, and in helping community members grow in their open source and cloud native knowledge. By connecting one-on-one, MeshMates will share tips on how to have the best community experience possible. + +The role of the **Community Manager** and the **MeshMate** are intertwined. It is not uncommon for an individual to be both a Community Manager and a MeshMate. The role of a Community Manager involves stewarding, building, and organizing the Layer5 Community. + +Layer5 MeshMates are committed to helping community members be successful contributors. MeshMates aid in identifying areas of projects to engage within, working groups to join, and helping community members grow in their open-source and cloud-native knowledge. By connecting one-on-one, MeshMates will share tips on how to have the best community experience possible. + +- Increasing awareness of the community to others +- Helping newbies in the community get familiar with all of the projects +- Providing necessary resources to contributors +- Mentoring members of the community +- Facilitate newcomers call + + +

Maintainer

+
+ +Roles/Responsibilities: +
+Maintainers are those who are responsible for managing the growth and performance of the project. They are incharge of the project's wellbeing, reviewing and merging the PR, updating the libraries and dependencies in that project, monitoring the codebase and so much more. + +- Send a reminder about meetings +- Prepare meetings +- Lead meetings +- Make sure meeting minutes are kept +- Facilitate the creation and advancement of metrics/software +- Answer questions about the progress of Layer5 projects +- Report on weekly community call progress on a project +- Review issues on the repository +- Review and merge pull requests +- Regularly check the repository for stale content +- Monitor issue tracker and pull requests + +**Checklist before becoming a Maintainer** + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +

Release Manager Role

+
+ +Roles/Responsibilities:
+The role of release manager for a release lasts a total of about 6 months. This is divided up among activities before the initial release comes out and activities after the initial release while the release is within active maintenance. The majority of the time is spent in the month before the first release. After that, there is 6 months of time during which point releases come out on approximately a 3 week cycle. During three of these months, the release manager is working on the latest release. This 6 month time period is divided into two sections. In the first three months, this is the primary release and all fixes get cherry-picked from master here. After 3 months, the next release of the Meshery project comes out and there are three more months of support before this release goes to the end of life. + +#### Before Release +- Cutting branches -- 8 to 16 hours divided between all release managers. +- Testing days -- 8 to 16 hours divided between all release managers spread over two weeks. +- Spreadsheets, Prioritization, Chasing people to get things done +- Prioritization of issues in step with workgroups +- Release management meetings -- 45 minutes to 1 hour every week +- Release notes/upgrade notes for point release -- 1 week +- Code reviews from docs team as well as workgroup leads +- Generation of release notes using automated tooling +- Updating release notes to make them more readable +- Announcement of release on Twitter/Discuss/Slack + +#### Ongoing for all releases +- Watching for release blockers +- Code reviews/deciding whether to accept cherry picks -- about an hour per day +- Minor release every 3 weeks +- Release notes - 1 hour for a single release manager +- Creating releases - 8 hours spread across all release managers +- 48 hour testing +- Handle vulnerability fix integration in step with product security workgroup +- Meshery build and release meetings -- one hour per release manager per week +- End Of Life for release -- 8 hours + +#### Qualifications for Release Manager +- A member of the Layer5 community and active for the last 3 months +- Approved by a majority vote of current maintainers +- At least one release manager for each version needs to meet requirements for access info in case of vulnerabilities + +### Process for volunteering for release management +Contact a current maintainer to volunteer or nominate yourself. + + +

GitHub Czar

+
+ +**Role:**
+The **GitHub Czar** is a GitHub-focused role within the Layer5 community responsible for keeping the organization's GitHub repositories well-maintained, active, and contributor-friendly. This role exists as a specialized extension of the Community Manager role and works closely with maintainers and community leaders to support the technical and collaborative health of Layer5's GitHub ecosystem. + +GitHub Czars ensure that issues and pull requests are actively triaged, contributors are appropriately engaged, and the repositories reflect up-to-date, community-driven activity. + +**Responsibilities:** + +Daily / Ongoing: +- Triage GitHub Issues: Apply labels such as `issue/remind`, `issue/dco`, `good-first-issue`; close outdated or duplicate issues. +- Monitor Issue Assignees: Gently remind inactive assignees and reclaim issues after ~7–10 days. +- Review Pull Requests: Perform initial checks and tag reviewers/maintainers. +- Enforce Contribution Standards: Ensure compliance with DCO, PR templates, and commit guidelines. +- Bump Off Squatters: Use labels/comments to reclaim blocked or inactive issues. + +Weekly: +- Contributor Engagement: Highlight contributors, recommend org invitations, and thank new contributors. +- Support Issue Curation: Maintain `help-wanted`, `good-first-issue`, and project boards. +- Identify Gaps: Escalate repo health concerns like outdated PRs, untested code, etc. + +**Checklist before becoming a GitHub Czar** + + + + + + + + + + + + + + + + + diff --git a/src/collections/handbook/community/bullet.svg b/src/collections/handbook/community/bullet.svg new file mode 100644 index 0000000000000..d0b98be5d8be6 --- /dev/null +++ b/src/collections/handbook/community/bullet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/collections/handbook/community/index.mdx b/src/collections/handbook/community/index.mdx new file mode 100644 index 0000000000000..c027591447860 --- /dev/null +++ b/src/collections/handbook/community/index.mdx @@ -0,0 +1,77 @@ +--- +title: "Community" +description: "Community guidelines and resources for the Layer5 open source community" +type: Handbook +--- + +import { HandbookWrapper } from "../../sections/Community/Handbook/Handbook.style.js"; +import { Container } from "../../reusecore/Layout"; +import { Link } from "gatsby"; +import Point from "./bullet.svg"; +import IntraPage from "../../components/handbook-navigation/intra-page"; + +export const contents = [ + { id: 0, link: "#Community Guidelines", text: "Guidelines" }, + { id: 1, link: "#Resources", text: "Resources" }, +]; + + +

Community Guidelines

+
+ +Welcome to the Layer5 community! We're happy to have you here and handhold you for your first contribution. Here are some tips to help you get started: + +

+ Point + For Easy Identification - When setting up your slack workspace, your display name should be the same as your GitHub username for easy identification, engage freely, and in whatever form you will: as a listener, user, contributor, maintainer, ambassador, or bystander. Involvement in any way is warmly received. +

+ +

+ Point + Familiarize with the community - As you get to familiarize yourself with the community, know that there are multiple initiatives for you to explore. Some initiatives have working groups that meet at different times each week, while others use the weekly community meeting as their place of discussion. Details of each can be found on the community calendar. Everyone is welcome to join the calls and engage with other community members over Slack, the mailing list, and so on. +

+ +

+ Point + Familiarize with the projects - The following is a sample of the many active, ongoing community projects. One way of doing so is to review the Layer5 Repository Overview section of this handbook to get a better understanding of each project. This document will help you to understand the projects based on their technology domain(s). Be sure to star the community's repositories on GitHub! +

+ +

+ Point + Be friendly and open-minded - We encourage you to be welcoming to new collaborators and those just getting started. Other contributors might not have the same degree of experience or background as you, but that doesn't mean they can't provide useful ideas. +

+ +

+ Point + Be honest - "A half-truth is a whole lie." Being truthful allows you to reach a better agreement. As a result, be open and honest about who you are, what you do, and how you want to accomplish it. +

+ +

+ Point + Be respectful and inclusive - We are a diverse group of people with diverse backgrounds and opinions. We expect everyone to be civil and professional in their activities. Disrespectful behavior is not tolerated. Do not publish anything that would be considered insulting, abusive, or hate speech by a reasonable person. +

+ +

+ Point + Collaborate and Contribute - Members are expected to attend community and workgroup meetings, find ways to help, check up on our Github page regularly etc. Within the community and outside, we encourage teamwork. +

+ +

+

Resources

+

+ Point + Be sure to access the resources community drive. +

+

+ Point + Sign-up on the community mailer. +

+

+ Point + Ask for a copy of The Enterprise Path to Service Mesh Architectures. +

+

+ +Please refer to the Code of Conduct for more details. + + diff --git a/src/collections/handbook/connect-with-us/index.mdx b/src/collections/handbook/connect-with-us/index.mdx new file mode 100644 index 0000000000000..01b84e8b46d15 --- /dev/null +++ b/src/collections/handbook/connect-with-us/index.mdx @@ -0,0 +1,134 @@ +--- +title: "Connect with Us" +description: "Find all the ways to connect with the Layer5 community - Slack, Newsletter, Social Media, and more" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import { ReactComponent as TwitterIcon } from "../../assets/images/socialIcons/twitter.svg"; +import mail_icon from "./socialIcons/mail_keppel.svg"; +import youtube_icon from "./socialIcons/youtube-light.svg"; +import github_icon from "./socialIcons/github-light.svg"; +import linkedin_icon from "./socialIcons/linkedin-light.svg"; +import docker_icon from "./socialIcons/docker-light.svg"; +import slack_icon from "./socialIcons/slack-light.svg"; +import IntraPage from "../../components/handbook-navigation/intra-page"; + +export const contents = [ + { id: 0, link: "#Newsletter", text: "Newsletter" }, + { id: 1, link: "#Mailing Lists", text: "Mailing Lists" }, + { id: 2, link: "#Calendar", text: "Calendar" }, + { id: 3, link: "#Slack Community", text: "Slack Community" }, + { id: 4, link: "#Discussion Forum", text: "Discussion Forum" }, + { id: 5, link: "#Social Media", text: "Social Media" }, +]; + +

Subscribe to Newsletter

+ +Don't miss out on anything, sign up to receive updates on our newest releases, latest blog posts and any relevant information. + +- Meshery mailing list +- Layer5 mailing list +- Cloud Native Performance mailing list + +

Mailing Lists

+ +- Layer5 Maintainers +- Discussion Forum Moderators +- Meshery Developers +- Meshery Users +- Meshery Contributors +- Meshery Maintainers +- Meshery Security and Vulnerability Reports +- Meshery Community +- Nighthawk Developers +- Nighthawk Maintainers +- Nighthawk Users +- Cloud Native Performance Community +- Cloud Native Performance Maintainers +- Cloud Native Performance Users +- Layer5 Community Managers + +

Calendar

+ +Don't miss out on any of the activities in the community. Join any or all of the weekly meetings subscribing to the community calendar . + +

Slack Community

+ +We are a community of like-minded people with thousands of members. + +Join our Slack Workspace introduce yourself and interact with the community. There are different channels in the workspace to engage within. + +
+

#general - For workspace-wide communication and announcements.

+

#meshery - For discussion on topics in and around Meshery.

+

#meshery-adapters - Discuss topics related to meshery-adapters.

+

#meshery-ci - For discussion on topics related to Meshery Build, Release, Workflows, DevOps.

+

#meshery-meshsync - For discussions on issues related to MeshSync.

+

#mesheryctl - For discussions on Meshery's CLI

+

#newcomers - For welcoming first-time contributors and community newcomers.

+

#performance - For discussions related to measuring and evaluating cloud native performance.

+

#wasm - For discussions on webassembly, rust, envoy filters.

+

#websites - For discussions related to the UI/UX of Layer 5 project sites.

+
+ +

Discussion Forum

+ +Join us on our cloud native community's Discussion Forum + + + +

Social Media

+ +Layer5 is dedicated to empowering engineers and supporting the open source community that create them. Learn more about Layer5 and connect with the community by following and engaging with us on our social media accounts. + + + + diff --git a/src/collections/handbook/contribution/compare-and-pr.webp b/src/collections/handbook/contribution/compare-and-pr.webp new file mode 100644 index 0000000000000000000000000000000000000000..71c559e12c85d026732720ecf6c020d693789beb GIT binary patch literal 4000 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 GkN^O}TXo8>L1-}SJ$qt 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 literal 0 HcmV?d00001 diff --git a/src/collections/handbook/contribution/git-signoff-vscode.webp b/src/collections/handbook/contribution/git-signoff-vscode.webp new file mode 100644 index 0000000000000000000000000000000000000000..9f30e64510f861f81177ac9d7aaa86ff78676218 GIT binary patch literal 13168 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 literal 0 HcmV?d00001 diff --git a/src/collections/handbook/contribution/index.mdx b/src/collections/handbook/contribution/index.mdx new file mode 100644 index 0000000000000..8b617148f4bd7 --- /dev/null +++ b/src/collections/handbook/contribution/index.mdx @@ -0,0 +1,160 @@ +--- +title: "Contribution" +description: "Learn how to contribute to Layer5 projects using GitHub flow" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import Code from "../../components/CodeBlock"; +import IntraPage from "../../components/handbook-navigation/intra-page"; +import { StaticImage } from "gatsby-plugin-image"; + +export const contents = [ + { id: 0, link: "#Clone your fork", text: "Clone your fork" }, + { id: 1, link: "#Checkout a new branch", text: "Checkout a new branch" }, + { id: 2, link: "#Commit your changes", text: "Commit your changes" }, + { id: 3, link: "#Sign-off commits", text: "Sign-off commits" }, + { id: 4, link: "#Push changes to Github", text: "Push changes to Github" }, + { id: 5, link: "#Create a pull request", text: "Create a pull request" }, +]; + +export const Signoff = "./git-signoff-vscode.webp"; +export const compareAndPR = "./compare-and-pr.webp"; +export const createPR = "./create-pr.webp"; + +

General contribution flow

+ +Pull requests (PRs) are the best ways to propose changes to a project repository. At Layer5 org, we use the Github Flow: + +

Clone your fork to your local machine

+ +- Fork the repository you are working on. +- Go to your GitHub account, open the forked repository, click on the code button and then click the "copy to clipboard" icon if you intend to use a command-line tool. +- Open the terminal and run the following git command: +
+ +
+ +### Add 'upstream' repo to list of remotes + +- Keeping your fork up to date while this isn't a necessary step. If you plan on doing anything more than a tiny quick fix, you'll want to make sure you keep your fork up to date by tracking the original "upstream" repo that you forked earlier. +- To do this, you'll need to add a remote. An example of the command is given below: +
+ +
+ Here "layer5" is used as the example repo. Be sure to reference the actual repo you are contributing to. + +

Create and checkout a new branch

+ +- Whenever you begin to work on a new feature or bugfix, it's important that you create a new branch. Not only is it a proper git workflow, but it also keeps your changes organized and separated from the master branch so that you can easily submit and manage multiple pull requests for every task completed. +- Perform the flow: +
+ +
+ For example, +
+ +
+ (feature being a branch name) + +### Make the necessary changes to your file. + +- To add the changes you have made to your branch, use: +
+ +
+- If you add multiple file changes to the branch, you simply use: +
+ +
+ +

Commit the changes made

+ +- Now commit those changes using the git commit command: +
+ +
+ +

Make sure to Sign-off on your Commits (Developer Certificate of Origin)

+ +To contribute to this project, you must agree to the Developer Certificate of Origin (DCO) for each commit you make. The DCO is a simple statement that you, as a contributor, have the legal right to contribute. + +To signify that you agree to the DCO for contributions, you simply add a line to each of your git commit messages: + +
+ +
+ +In most cases, you can add this signoff to your commit automatically with the -s or --signoff flag to git commit. You must use your real name and a reachable email address (sorry, no pseudonyms or anonymous contributions). An example of signing off on a commit: + +
+ +
+ +To ensure all your commits are signed, you may choose to add this alias to your global .gitconfig: + +
+ +
+ +Or you may configure your IDE, for example, Visual Studio Code to automatically sign-off commits for you: + + + +

Push changes to Github

+ +- To push your changes, run the git command: +
+ +
+ +

Create a pull request (PR)

+ +- Head over to your forked repository on GitHub and you'll see a Compare & pull request button. Click on that button. +
+ Note: Please ensure that the right branch is selected for the PR. +
+
+ +
+ +- Once you click on the button, you'll be taken to the Pull Request page. Here, you can add a title and description to your pull request that explains your contribution. Once you're done, click on the Create pull request button. +
+
+ +
+
+ +## Handling PRs Made Without Being Assigned + +At [Layer5](https://layer5.io/), we usually suggest to contributors that they ask maintainers to assign them to the issue they want to work on. But sometimes, pull requests that aren't assigned to anyone can be found. In such cases, it's important to be flexible and ready to adapt. Here are some simple guidelines for dealing with these unassigned contributions: + +1. **We value getting things done:** + - **Evaluate the PR:** First, assess the quality and significance of the PR. Is it a valuable contribution to the project? Does it fix a bug or add a meaningful feature? If the PR aligns with the project's goals and standards, it's worth considering. + - **Review the code:** Ensure that the code in the PR meets the project's coding guidelines and standards. If the code quality is high and the changes are beneficial, it's a positive sign. + +2. **We value our contributors' feelings:** + - **Communication:** Reach out to the contributor who made the unassigned PR in a friendly and respectful manner. Express gratitude for their contribution and explain the importance of assigning PRs to maintain transparency and collaboration within the community. + - **Offer assistance:** If the contributor is willing, help them understand the process of assigning PRs and offer guidance on how to do it correctly in the future. + - **Encourage participation:** Emphasize that their contribution is valuable and that the project welcomes their involvement. Encourage them to continue contributing. + +3. **Attempt to uphold the spirit of #2 while ensuring that #1 happens:** + - **Balance:** Strive to strike a balance between maintaining a welcoming and inclusive community (#2) and ensuring that the project continues to make progress (#1). + - **Collaboration:** If the contributor is receptive and willing to work together, consider helping them assign the PR correctly, and possibly collaborate on improving the PR if necessary. + - **If necessary, reassign:** If the contributor is unresponsive or unable to assign the PR correctly, you may consider reassigning the PR to an appropriate contributor or assigning it to yourself to ensure it doesn't go unnoticed. + +4. **Contributor Guidance:** + - **How you should:** As a contributor, it's important to follow the project's guidelines. Start by identifying a suitable issue or create one if necessary. Afterward, kindly request assignment or express your interest in working on the issue by commenting on it. This ensures that maintainers are aware of your intentions and can provide guidance or assign the issue appropriately. Once assigned, proceed with your work and submit a pull request. +
**Example:** [Hover animation on different integration category #3889](https://github.com/layer5io/layer5/issues/3889) + - **How you should not:** Avoid starting work on an issue and creating a pull request without prior communication or assignment. Jumping directly into the code can lead to misunderstandings and duplicate efforts. Instead, take a moment to engage with the maintainers and community by discussing your interest in the issue and seeking assignment before submitting a pull request. This promotes transparency and effective collaboration within the project. +
**Example:** [[MeshModel] [UX]: Icon for Kubernetes Component - Endpoints #8757](https://github.com/meshery/meshery/issues/8757) + - **Requesting Reassignment:** If you are interested in working on an issue that is already assigned to someone else, it's important to respect their efforts and contributions. First, politely reach out to the assignee and express your interest in collaborating on the issue. Discuss the possibility of working together or sharing the workload. If the assignee agrees or is open to collaboration, you can proceed. If the assignee is not responsive or there has been no progress on the issue for a long time and the issue aligns with your skills and interests, kindly request reassignment from the maintainers, providing a clear and courteous explanation for the request. +
**Example:** [[chore] update Go to 1.21, and update relevant pkgs #169](https://github.com/meshery/meshery-nsm/issues/169) + + diff --git a/src/collections/handbook/contribution/slack.webp b/src/collections/handbook/contribution/slack.webp new file mode 100644 index 0000000000000000000000000000000000000000..6478dcb882e91068eb1a5e5a6d8403dd40895cb1 GIT binary patch literal 10590 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 literal 0 HcmV?d00001 diff --git a/src/collections/handbook/contribution/twitter.webp b/src/collections/handbook/contribution/twitter.webp new file mode 100644 index 0000000000000000000000000000000000000000..b51f7b89a50571ed92e8b3ecded3868aadb4214e GIT binary patch literal 230 zcmWIYbaT7Mz`zjh>J$(bU=hIuWD5YXFc>-d1b8$7d5i@~x36v5v(=;ikZ`BupQ%}s z3$&)X6ltB*GA>yCE@ZpQCdMD%PglqPViyn;W{Ao;?(_7y;j4~>sWz8Vdp3q&Ybm)I z!?MB1gdwBB(5&M5m63ZvAS%c*LzRvjd zg3&KKt0HxGm;=LEHlW)S%z!R2U}l)hs3pQ6!eAGx((Af-k)re$1`F0BTN)U`%q`P9 b>=+pS{j84pA6EY>eer*WrRD#vIT#oKWT92? literal 0 HcmV?d00001 diff --git a/src/collections/handbook/designer/index.mdx b/src/collections/handbook/designer/index.mdx new file mode 100644 index 0000000000000..04603153c9796 --- /dev/null +++ b/src/collections/handbook/designer/index.mdx @@ -0,0 +1,41 @@ +--- +title: "Designer" +description: "Design with Layer5 - Contribute to UI/UX across our projects" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import { Link } from "gatsby"; +import Button from "../../reusecore/Button"; + +

UI/UX

+ +The UI/UX badge is given to community members who contribute towards creating or improving the visual design or user flow of various aspects such as websites, flyers, promotions, Meshery UI, and more. This recognition is awarded as an appreciation of their efforts in enhancing the user experience. The badge serves as a symbol of their expertise in UI/UX design and acknowledges their valuable contribution to the community. +We are always looking for ways to improve the user experience of our projects. If you have ideas for how to improve + + the user experience of any of our projects, please share them with us. + +## Where can you contribute? + +You can contribute to the Meshery project website redesign and creation of new video-based content. The site structure and content need a revamp, and contributors will use the existing brand guide, colors, and logos in their designs. The project also requires video editing and graphic/illustration creation skills. If you want to participate in the project and build your portfolio in collaboration with the Meshery team, you can submit your interest by filling out the form provided. + +## What is the process? + +
+
+

If you're interested in the Layer5 Design Program, please submit your information to get started. Don't know where to start? Don't worry, we have plenty of suggestions for you.

+ +
+
+

Upon being accepted, you'll work with a coordinator on the content team to decide on a topic, develop a project plan, and discuss submission details.

+
+
+ +### Additional Resources +- List of website maintainers +- Contributing to Layer5 Resources +- View open Design enhancing issues +- Join the Layer5 Discussion Forum +- Explore our Resource Library +- Learn Cloud Native diff --git a/src/collections/handbook/faq/index.mdx b/src/collections/handbook/faq/index.mdx new file mode 100644 index 0000000000000..b61edb1e0f29e --- /dev/null +++ b/src/collections/handbook/faq/index.mdx @@ -0,0 +1,72 @@ +--- +title: "FAQs" +description: "Frequently asked questions about Layer5 and contributing to the community" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import { Link } from "gatsby"; + +

General FAQs:

+
+ +#### Q: Are Layer5's solutions open source? +A: Yes, all Layer5 projects are licensed under Apache V2. Layer5 also offers extensions to the Meshery project in which Enterprise-centric functionality is commercially offered and supported. + +#### Q: I am new to Open Source, where do I begin? +A: You can start by going through the Newcomers' Welcome Guide. + +#### Q: What exactly is a MeshMate? +A:Layer5 MeshMates are individuals committed to helping community members be successful contributors. Meshmates are there to guide and support the community members, helping them identify projects they can contribute to depending on their areas of interest, directing them on groups to join and helping them grow in their open-source and cloud native knowledge. + +#### Q: How do I join the mailing list? +A: You can subscribe to the Layer5 mailing here. + +#### Q: How do I get an internship in Layer5? +A: To best position your candidacy for an internship with Layer5, engage in the community and its projects. Start contributing and keep contributing. Community members who consistently contribute are the first individuals to be awarded internships when new internship opportunities open up - particularly members who are making significantly impactful contributions. + +#### Q: How do I follow up on the meetings? +A: To follow up on the community meetings, you can view and add the community calendar to your calendar list. + +#### Q: I see works of other contributors being highlighted, will my contributions be highlighted too? +A: We might not get to everyone, but we try to elevate the works of all of our contributors. All of our community members are proud of their work and so are we! We want their work and names to be recognized across our collective technology industry. Be sure to follow and engage with the Twitter, Youtube, and Linkedin accounts. + +#### Q: I am not a coder, can I contribute too? +A: Some community members join to contribute to open source projects, others jump in to put those projects to use, some are here to help cultivate and steward our community, while others are here just to hangout and absorb. All members are most welcome. Be sure to introduce yourself in the Layer5 slack and let other community members get acquainted with you and vice-versa. + +#### Q: How should I approach assigning and working on issues within the community? +A: To ensure efficiency and positive collaboration, please follow these guidelines: + +- Assignment Confirmation: Verify issue validity to avoid wasted effort and address only relevant problems. +- Avoiding Conflict: Treat fellow contributors kindly, respecting their contributions to foster a harmonious environment and maintain project momentum. +- Minimize Maintainer Burden: Adhere to guidelines to reduce maintainers' time spent on clarifications and resolving conflicts, enabling them to focus on essential tasks. + +#### Q: What should I consider when assigning issues to contributors? +A: When assigning issues, follow these principles: + +- Valid Issue: Assign issues that require attention. +- Fix the Issue: Prioritize resolving them promptly. +- Assignment Order: Generally chronological, with exceptions: + - Unqualified to perform this task currently. + - Unavailable and/or incapable of performing the task promptly. + - Lack of context when another contributor has it. + - Requesting contributor has existing open assignments. + +These guidelines aim to create a supportive and efficient community where everyone can contribute effectively. + +#### Q: What if I can't find an open issue to work on? +A: Check if any assigned issues are stale. ( Assigned some time back, but no discussions have happened or is not updated for a long time ). If you find such issues, comment to ask if you can help. Alternatively, Look to find the help-wanted issues. + +#### Q: In addition to the routinely scheduled project meetings, do project contributors ever meet separately to deep-dive on special topics? +A: Yes, outside of the regularly scheduled meetings on the community calendar, there are any number of other meetings that occur to facilitate deeper levels or more concentrated attention to particular bodies of work (e.g. a design spec review). On occasion, these one-off meetings are scheduled in advance and put onto the community calendar, while other times they are simply self-organized by interested contributors. Often contributors will use Slack huddles or Zoom meetings to facilitate the discussion. If you need a new meeting placed onto the community calendar, please reach out to a Community Manager. + +#### Q: How do I access the community docs? +A: To access the community documentation, follow these steps: + +1. Ensure you have filled out the community member form. If you haven't, please do. + +2. Go to the "Shared Drives" section of your Google Drive using the same email address you used to fill out the form. + +3. Look for "Layer5 Community" within the Shared Drives section. + +Once you've completed these steps, you should have access to the community docs, otherwise please reach out to any of the Community Managers or MeshMates. diff --git a/src/collections/handbook/github-process/index.mdx b/src/collections/handbook/github-process/index.mdx new file mode 100644 index 0000000000000..5d77c936a79af --- /dev/null +++ b/src/collections/handbook/github-process/index.mdx @@ -0,0 +1,134 @@ +--- +title: "GitHub Process" +description: "Layer5's GitHub process for issue and PR labels, templates, bots, and workflows" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; + +

Issue and PR Labels and Templates, Bots


+

Overview


+ +The Layer5 GitHub Process emphasizes consistent pull requests and issue labels to streamline continuous integration and reduce overhead across the growing repository collection. + +The number of repositories under the "Layer5io" organization is growing. In order to ensure consistency across the repositories and to decrease the time it takes for a continuous integration (GitHub Actions) to execute, consistent use of pull request and issue labels will aid in the reduction of overhead. + +### Issue and Pull Request Templates +Layer5 uses issue and pull request templates. See the `.github` folder in any repo for examples. + +### Template Repositories +Layer5 uses the following repository templates: +- layer5-repo-template +- meshery-adapter-template + +### Branch Protection +Layer5 protects the **master** branch by requiring reviews from at least one approver. + +### Organization Secrets +Layer5 has the following org-wide secrets available: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Secret NameDescription
CYPRESS_RECORD_KEYNeeded for recording the Cypress run in the Cypress Dashboard
DOCKER_PASSWORDBelongs to user "mesheryci"
DOCKER_USERNAME"mesheryci"
NETLIFY_AUTH_TOKENNetlify authentication token used for deployment.
NETLIFY_SITE_IDUnique ID of the Netlify site to deploy to.
RELEASEDRAFTER_PATBelongs to user "l5io"
RELEASE_NOTES_PATBelongs to user "l5io"
SLACK_BOT_TOKENAuthentication token for the Slack bot integration.
GITHUB_TOKENFor the community scope repo that can be use commit and release
NODE_VERSION"v18" as of Nov 15, 2022.
GO_VERSION1.19
PROVIDER_TOKENInfinite Meshery Cloud token
NPM_TOKENl5io user's token for publishing packages
INTEGRATION_SPREADSHEET_CREDBase64 encoded cred for accessing integration spreadsheet on behalf of user no-reply@layer5.io
PLAYGROUND_CONFIGBase64 encoded kubeconfig of Playground
METAL_SSH_KEYSMP Project-wide SSH private key
METAL_AUTH_TOKENMetal cli auth token
METAL_SERVER1ID of 1st metal server running playground
METAL_SERVER2ID of 2nd metal server running playground
+
+ +## Layer5 Issue Labels Guide + +Well-chosen issue labels keep our repositories organized, make contributing easier, and help everyone—from maintainers to first-time contributors—find relevant tasks quickly. Below, we explain each major label category and when to use them. + +### Area Labels +Area labels specify which part of the project an issue or PR relates to—such as documentation, user interface, or continuous integration. Using area labels helps contributors with specific interests or expertise find and filter issues that are relevant to them, and helps project maintainers prioritize or assign tasks more efficiently. Assign an area label any time you create or triage an issue/PR that falls within a specific domain (docs, UI, CI, performance, etc.). + +
+ + + + + + + + + + + + + + +
LabelDescriptionColor
area/ciContinuous integration, build & release#5319e1
area/docsImprovements/additions to documentation#5319e2
area/lifecycleLifecycle management (install, uninstall, configure)#5319e3
area/performancePerformance management#5319e4
area/testsTesting / quality assurance#5319e5
area/uiUser interface#5319e6
area/workloadsApplications / services#5319e7
area/helmHelm charts issues#5319e8
+
+ +### Component Labels +Component labels indicate which software module or subsystem is affected by an issue. This ensures issues are routed to the right maintainers and allows more detailed filtering beyond the broader area labels. Attach a component label when your issue/PR impacts a specific module (e.g., a CLI tool, API, or pattern engine). + +### Programming Language Labels +Programming language labels highlight the primary language used in the issue or PR. This helps contributors looking for language-specific work, and aids in code review or help requests. Use a programming language label if the change, bug, or feature is specific to a particular language (e.g., a Go backend bug, a JavaScript UI enhancement). + +### PR (Pull Request) Labels +PR labels manage the state or special requirements of a pull request, like indicating it's a draft, dependent on others, or not yet ready for merging. Apply a PR label if your pull request isn't ready, should not be merged, updates dependencies, or is on hold. + +### Issue Process & Status Labels +These labels show the current status of an issue—such as blocked, duplicate, in need of a design, or if an action (like an invitation) should be triggered. Some are used by bots to automate reminders or mark stale issues. Apply these when the situation applies (e.g. "blocked" if work can't proceed, "design required" if more planning is needed). + +### Kind Labels +Kind labels classify the general type of change or discussion: bug, feature, chore, enhancement, epic, question, or proposal. This improves searchability and helps teams organize their workflows. Use the kind label that best describes your issue or PR. + +### Priority Labels +Priority labels help teams triage and allocate attention, making it clear which issues are urgent and which can wait. Always apply a priority label, adjusting as priorities shift or as issues are escalated or downgraded. + +### Service Mesh Labels +Service mesh labels point out which mesh technology or ecosystem the issue pertains to. This is vital for projects supporting multiple meshes, enabling modular attention and expertise. Use these when your change or report is specific to one mesh (like Istio or Linkerd). + +### Help & Onboarding Labels +Help labels signal issues where some support is needed, or which are especially suitable for newcomers. These labels foster open source engagement and make onboarding easier for new contributors. Apply these to issues where you'd appreciate community help (`help wanted`) or for issues that are clearly documented, small in scope, and ideal for first-timers (`good first issue`). + +### Best Practices & Example +- **Apply all relevant labels**: an issue may belong to an area, a component, a kind, have a priority, AND be language-specific. +- **Update labels as issues evolve**: don't hesitate to add or remove as information changes. +- **When in doubt, ask!**: The Layer5 community Slack is a welcoming place. + +**Example:**
+If you find a documentation error regarding Meshery's CLI, that's an easy fix, you might use these labels:
+`area/docs, component/mesheryctl, kind/bug, priority/low, good first issue` + +### Questions or Suggestions? +Labels missing? Unclear usage? Open a discussion or tag a maintainer in your issue, or bring it up in community Slack. + +### Bots +Layer5 uses the following bots: +- Triage bot +- Stale bot +- Welcome bot +- DCO bot + +### Actions +- Labeler.yml +- label-commenter.yml + +Good resource - https://github.com/sdras/awesome-actions#pull-requests diff --git a/src/collections/handbook/instructions/index.mdx b/src/collections/handbook/instructions/index.mdx new file mode 100644 index 0000000000000..c61241eb46739 --- /dev/null +++ b/src/collections/handbook/instructions/index.mdx @@ -0,0 +1,59 @@ +--- +title: "Instructions" +description: "GitHub Organization Membership guidelines for Layer5 contributors" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import IntraPage from "../../components/handbook-navigation/intra-page"; + +export const contents = [ + { id: 0, link: "#top", text: "GitHub Organization Membership" }, + { id: 1, link: "#Requirements", text: "Membership Requirements" }, + { id: 2, link: "#InvitationProcess", text: "Invitation Process" }, + { id: 3, link: "#TemplateMessage", text: "Template Message for Invitations" }, + { id: 4, link: "#SendingInvitation", text: "Sending the GitHub Invitation" }, +]; + +

GitHub Organization Membership

+ +Membership to the GitHub organizations is a significant milestone for contributors who have shown persistent commitment and dedication to Layer5 projects. It is not solely about writing code but rather the consistency of engagement and alignment of mentality. + +

Membership Requirements

+ +Contributors who may be invited typically: +- Have been actively involved in the community for several weeks +- Make regular updates to projects +- Help other community members +- Attend development meetings +- Demonstrate a willingness to learn and share knowledge +- Show a genuine desire to improve themselves, others, and the projects + +

Invitation Process

+ +Depending on the number and quality of contributions made across the five GitHub organizations of Layer5, contributors can receive an invitation to any or all of these orgs. The process involves: +1. Sending a group DM +2. Executing Slack slash command in #community-management + +

Group Message for Invitations

+ +When you identify a worthy contributor, send a message in a group DM that includes the individual and other maintainers/appropriate members: look in Community Managers' docs to see some examples. + +

Sending the GitHub Invitation

+ +To send the invitation to join the GitHub organization, use the following slash command in #community-management channel: + +
+ /invite-github [email address] [organization name] +
+ +Where **[organization name]** should be either: +- **layer5io** - to send the invite to the email address to join Layer5 GitHub org under the "layer5-contributors" team +- **meshery** - to send the invite to the email address to join Meshery GitHub organization under the "contributors" team + +For example: +
+ /invite-github contributor@example.com layer5io +
+ + diff --git a/src/collections/handbook/learning/index.mdx b/src/collections/handbook/learning/index.mdx new file mode 100644 index 0000000000000..99d68e2724309 --- /dev/null +++ b/src/collections/handbook/learning/index.mdx @@ -0,0 +1,48 @@ +--- +title: "Learning" +description: "Learn cloud native with Layer5 Academy, labs, books, workshops, and more" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import { Link } from "gatsby"; +import IntraPage from "../../components/handbook-navigation/intra-page"; + +export const contents = [ + { id: 0, link: "#Learning", text: "Learning" }, + { id: 1, link: "#Academy", text: "Academy" }, + { id: 2, link: "#Eventing", text: "Eventing" }, + { id: 3, link: "#Blogging", text: "Blogging" }, +]; + +

Learning together

+ +As a community, we have put together an excellent set of learning materials and training resources to guide you through learning about cloud native infrastructure. + +You can review the complete list of learning resources or jump straight to the type of training you prefer: + +- Interactive cloud native labs +- Free cloud native books +- Self-paced cloud native workshops +- Recorded training and talks on the Layer5 YouTube Channel +- Multi-course, multi-mesh cloud native learning paths + +These materials were created to be interactive, easy to use, and free for all. + +

Layer5 Academy

+ +Layer5 Academy is a learning platform built into Layer5 Cloud. Get structured learning paths, interactive challenges, and professional certifications. Content spans beginner to advanced levels for both developers and organizations. + +For more details, check out the Academy documentation and explore our GitHub collections. + +

Sharing what you've learned at a technical event

+ +At Layer5, we participate in many different technical conferences, in international events, in online workshops, at meetups, and so on. Our engagement in these events ranges across various cloud native and open source topics and varies between speaking, hosting workshops, managing project booths, and so on. Our engagement in these events, increases awareness about our projects and the individual community members that contribute to the projects. + +A member of the Layer5 community has presented at every KubeCon since its inception. Join us at the many events we host or participate in. Check out Layer5 events to for a current list of events. + +

Sharing what you've learned on our blog

+ +Write down what you've learned, what you've built, and what experiences that you have had in the community. All community members are welcome to contribute to the Layer5 blog. + + diff --git a/src/collections/handbook/mentorship-programs/index.mdx b/src/collections/handbook/mentorship-programs/index.mdx new file mode 100644 index 0000000000000..6f641269c52b6 --- /dev/null +++ b/src/collections/handbook/mentorship-programs/index.mdx @@ -0,0 +1,37 @@ +--- +title: "Mentorship Programs" +description: "Learn about mentorship programs available through the Layer5 community" +type: Handbook +--- + +import { Container, Row, Col } from "../../reusecore/Layout"; +import Button from "../../reusecore/Button"; +import { programs_data } from "./programs-data"; +import { isValidElement } from "react"; + +export const data = programs_data; + +{data.map((program) => { + const { id, name, description, buttonLink, imageLink, imagePosition } = program; + return ( +
+
+ + +
+

{name}

+

{description}

+
+ + + { isValidElement(imageLink) + ? imageLink + : {name} + } + +
+
+
+ ); +})} diff --git a/src/collections/handbook/mentorship-programs/programs-data.js b/src/collections/handbook/mentorship-programs/programs-data.js new file mode 100644 index 0000000000000..c2195570487b3 --- /dev/null +++ b/src/collections/handbook/mentorship-programs/programs-data.js @@ -0,0 +1,84 @@ +import React from "react"; +import { ReactComponent as SCA } from "../../../collections/programs/sca-contributhon/sca.svg"; +import { ReactComponent as MLH } from "../../../collections/programs/mlh-2020/mlh.svg"; +import { ReactComponent as LFX } from "../../../collections/programs/lfx-2022/lfx-white.svg"; +import { ReactComponent as Hacktoberfest } from "../../../assets/images/programs/hacktoberfest.svg"; +import { ReactComponent as Layer } from "../../../assets/images/app/layer5-colorMode.svg"; +import { ReactComponent as Bridge } from "../../../collections/programs/communitybridge/communitybridge_logo.svg"; +import GSOC from "../../../collections/programs/gsoc-2020/gsoc.svg"; +import GSOD from "../../../collections/programs/gsod/gsod.webp"; + +export const programs_data = [ + { + id: 1, + name: "Google Season of Docs", + description: + "Google Season of Docs provides support for open source projects to improve their documentation and allows professional technical writers to gain experience in open source. This is to raise awareness of open source, docs, and technical writing. Google season of docs started in 2019. Each year, layer5 submits a new project idea for technical writers to contribute to for a particular period. Also, stipends are awarded to the contributors.", + buttonLink: "/programs/gsod", + imageLink: GSOD, + imagePosition: "second", + }, + { + id: 2, + name: "Google Summer of Code", + description: + "Google Summer of Code is a global program focused on bringing more student developers into open source software development. Students work with an open-source organization on a 10-week programming project during their break from school.Every Summer, Layer5 submits a new project idea for student developers to contribute to for a particular period. Also, stipends are awarded at the end of the program to the --contributors.The critical component of these projects is our Community. This community, which you will join as a participant in Google Summer of Code, improves the world of diverse cloud-native systems. Your contributions will affect people you've never met. The Layer5 community includes software engineers, researchers, students, artists, system administrators, operators, and web designers, all of whom will be happy to help you get started.We believe that all contributors should expect and be part of a safe and friendly environment for constructive contribution. We can more effectively and successfully compare and challenge different ideas to find the best solutions for advancement while building our community’s size, diversity, and strength.", + buttonLink: "/programs/gsoc", + imageLink: GSOC, + imagePosition: "first", + }, + { + id: 3, + name: "Hacktoberfest", + description: + "Hacktoberfest is open to everyone in the global community. Whether you’re a developer, student learning to code, event host, or a company of any size, you can help drive the growth of open source and make positive contributions to an ever-growing community. All backgrounds and skill levels are encouraged to complete the challenge. Every year in October, Hacktoberfest is held. So far, Layer5 has been a participant organization with different projects and issues such as first-timers-only, help-wanted, and good-first-issues for open-source contributors. This is to help towards completing the Hacktoberfest challenge.", + buttonLink: "/programs/hacktoberfest", + imageLink: , + imagePosition: "second", + }, + { + id: 4, + name: "Linux Foundation", + description: + "The Linux Foundation (Mentorship Programs) are designed to help developers with the necessary skills–many of whom are first-time open source contributors–experiment, learn, and contribute effectively to open source communities. Layer5, as an organization, has been participating in the Linux Foundation mentorship program since 2019. ", + buttonLink: "/programs/lfx", + imageLink: , + imagePosition: "first", + }, + { + id: 5, + name: "MLH Fellowship Program", + description: + "The MLH Fellowship is a 12-week internship alternative for students interested in becoming software engineers. Instead of an internship at a single company, you'll contribute to the type of Open Source projects that every company depends on. The programs pair fun, educational curriculum with practical experience that you can put on your resume right away. It's collaborative, remote, and happens under the guidance of expert mentors.Layer5, as an organization, participates in the program by submitting a project idea for contributors to work on and also provides mentorship during the time phase given.", + buttonLink: "/programs/mlh", + imageLink: , + imagePosition: "second", + }, + { + id: 6, + name: "CommunityBridge", + description: + "The Linux Foundation's CommunityBridge is building a healthy ecosystem around the open source software by funding projects, securing code, and connecting with talented developers. Layer5 has been participating in the CommunityBridge's mentorship program since 2019.", + buttonLink: "/programs/communitybridge", + imageLink: , + imagePosition: "first", + }, + { + id: 7, + name: "Layer5", + description: + "At Layer5, we take our internships seriously. Interns are expected to work hard, learn much, and be recognized for doing so. Past interns have presented their projects at KubeCon, DockerCon, and similar technical conferences. Our community of contributors is the key ingredient to the success of every one of our projects. Interns engage as part of the community. Whether interning directly with Layer5 or through one of Layer5's partner programs, your contributions will affect people you've never met as the Layer5 projects are being broadly referenced and used in organizations large and small.", + buttonLink: "/careers/internships/", + imageLink: , + imagePosition: "second", + }, + { + id: 8, + name: "She Code Africa Contributhon", + description: + "She Code Africa is a non-profit organization focused on celebrating and empowering young girls and women in tech across Africa.The She Code Africa Contributhon Program is a virtual open-source boot camp for 4 weeks where ladies get the opportunity to work with open source organizations on selected projects with dedicated mentorship and on completion of the program, a stipend of $500 is awarded. This program aims to create a more diverse, inclusive, and innovative culture within the African open source ecosystem by matching African women in technology with sponsors and mentor open source organizations to work on projects used by millions of people all over the world.Layer5 is participating in Contributhon as a Mentoring Organization. This program engages more with the open-source ecosystem in Africa and diversifies contributions. Most especially, we love making an impact. Various project ideas are submitted for the selected ladies to contribute during the one-month time phase.", + buttonLink: "/programs/sca-contributhon", + imageLink: , + imagePosition: "first", + }, +]; diff --git a/src/collections/handbook/projects/index.mdx b/src/collections/handbook/projects/index.mdx new file mode 100644 index 0000000000000..76b6431aeb582 --- /dev/null +++ b/src/collections/handbook/projects/index.mdx @@ -0,0 +1,97 @@ +--- +title: "Projects" +description: "Overview of Layer5 projects: Layer5, Meshery, Cloud Native Performance, and Cloud Native Patterns" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import {Link} from "gatsby"; +import IntraPage from "../../components/handbook-navigation/intra-page"; +import meshery from "../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +import layer5icon from "../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; +import hawkIcon from "../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; +import meshmateicon from "../../assets/images/meshmate/meshmate-icon.svg"; +import PatternsLogo from "../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +import servicemeshperformance from "../../assets/images/service-mesh-performance/icon/smp-dark.svg"; +import mesheryoperatoricon from "../../assets/images/meshery-operator/meshery-operator.svg"; +import mesherysyncicon from "../../assets/images/meshsync/meshsync.svg"; + +export const contents = [ + { id: 0, link: "#Layer5", text: "Layer5" }, + { id: 1, link: "#Meshery", text: "Meshery" }, + { id: 2, link: "#Cloud Native Performance", text: "Cloud Native Performance" }, + { id: 3, link: "#Cloud Native Patterns", text: " Cloud Native Patterns" }, +]; + + +

+ + Layer5 +   Layer5 + +

+ + +Its cloud native community represents the largest collection of cloud native projects. Emerging projects like Nighthawk Nighthawk Icon , community with MeshMate icon MeshMates , catch-all org, "home base". + +- #### Layer5 : + Layer5 is the official website of the Layer5 community showing an overview of the Layer5 projects. The different cloud native landscapes, resources to learn about cloud native, and communities. + +- #### Image-Hub : + Image Hub is a sample application written to run on Consul for exploring WebAssembly modules used as Envoy filters are written in Rust. These modules can be used to implement multi-tenancy or to implement per-user rate-limiting in your application's endpoints. This application was first demonstrated at DockerCon 2020. + +- #### Nighthawk : + This Is a Layer 7 (HTTP/HTTPS/HTTP2) performance characterization tool. Nighthawk is Envoy's load generator and is written in C++. Meshery integrates Nighthawk as one of (currently) three choices of load generators for characterizing and managing the performance of cloud native infrastructure (e.g. Kubernetes and Docker) and their services. + +- #### Layer5 Academy : + Layer5 Academy is a learning platform built into Layer5 Cloud. It offers structured learning paths, interactive challenges, and professional certifications. Content spans beginner to advanced levels, helping both developers and organizations skill up in cloud native technologies. + + +

+ + Meshery +   Meshery + +

+ + +Meshery and its components Meshery Operator Meshery Operator Icon and MeshSync MeshSync icon + +- #### Meshery + It is a cloud native management plane offering lifecycle management of more types of cloud native infrastructure than any other tool available today. Meshery facilitates adopting, configuring, operating, and managing the performance of Kuberenetes workloads and incorporates the collection and display of metrics. + +- #### Meshery.io + Website for Meshery, the cloud native manager. + +- #### Meshery-operator : + Meshery Operator is the multi-cloud native operator and implementation of MeshSync. + +- #### Meshery-docker-extension : + The Docker Extension for Meshery extends Docker Desktop's position as the cloud native developer's go-to Kubernetes environment with easy access to the next layer of cloud native infrastructure: cloud native infra. + +- #### Meshery Catalog : + As a central hub for sharing cloud native infrastructure designs, Meshery Catalog enables the exchange of the best practices, reusable templates, and Kubernetes-based operational patterns for multi-cluster Kubernetes clusters and distributed applications. + + +

+ + cloud native performance +   Cloud Native Performance + +

+ + +The Cloud Native Performance (SMP) is a vendor-neutral specification for capturing details of environment and infrastructure details, cloud native infrastrcture and it's configuration, service/application details, and bundling of statistical analysis of the result. + + +

+ + cloud native patterns +   Cloud Native Patterns + +

+ + +A collection of curated patterns of cloud native use cases compatible with Meshery. + + diff --git a/src/collections/handbook/recognition/BadgeRow.js b/src/collections/handbook/recognition/BadgeRow.js new file mode 100644 index 0000000000000..c97fc52853ac9 --- /dev/null +++ b/src/collections/handbook/recognition/BadgeRow.js @@ -0,0 +1,41 @@ +import React from "react"; +import PropTypes from "prop-types"; + +const cell = { padding: "12px", verticalAlign: "middle" }; +const badgeImg = { height: "50px", width: "50px", verticalAlign: "middle" }; + +const BadgeRow = ({ image, name, title, badgeKey, keycode, keyProp, description }) => { + const displayName = name || title || "—"; + const displayKey = badgeKey || keycode || keyProp || "—"; + + return ( + + + {typeof image === "string" ? ( + {displayName} + ) : ( + image + )} + + + {displayName} + + + {displayKey} + + {description || "—"} + + ); +}; + +BadgeRow.propTypes = { + image: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), + name: PropTypes.string, + title: PropTypes.string, + badgeKey: PropTypes.string, + keycode: PropTypes.string, + keyProp: PropTypes.string, + description: PropTypes.node, +}; + +export default BadgeRow; diff --git a/src/collections/handbook/recognition/badge-item.js b/src/collections/handbook/recognition/badge-item.js new file mode 100644 index 0000000000000..6b90ce71c58fb --- /dev/null +++ b/src/collections/handbook/recognition/badge-item.js @@ -0,0 +1,57 @@ +import React from "react"; +import PropTypes from "prop-types"; + +const imgStyle = { + height: "50px", + width: "50px", + verticalAlign: "middle", + marginRight: "1rem", +}; + + +const BadgeItem = ({ title, description, image, href, to }) => { + const content = ( + <> + {typeof image === "string" ? ( + {title} + ) : ( + image + )} + {title} + {description ? <> — {description} : null} + + ); + + if (href) { + return ( +
  • + + {content} + +
  • + ); + } + + if (to) { + return ( +
  • + {content} +
  • + ); + } + + return
  • {content}
  • ; +}; + +BadgeItem.propTypes = { + title: PropTypes.string.isRequired, + description: PropTypes.node, + image: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.node, + ]), + href: PropTypes.string, + to: PropTypes.string, +}; + +export default BadgeItem; diff --git a/src/collections/handbook/recognition/badges-data.js b/src/collections/handbook/recognition/badges-data.js new file mode 100644 index 0000000000000..4a3c59b243be4 --- /dev/null +++ b/src/collections/handbook/recognition/badges-data.js @@ -0,0 +1,103 @@ +import React from "react"; + +import DesignPioneerLogo from "../../../assets/images/design-pioneer/design-pioneer.svg"; +import ApplicationPioneerLogo from "../../../assets/images/application-pioneer/application-pioneer.svg"; +import SharingIsCaringLogo from "../../../assets/images/sharing-is-caring/sharing-is-caring.svg"; +import ShippedLogo from "../../../assets/images/shipped/shipped.svg"; +import NeedForSpeedLogo from "../../../assets/images/need-for-speed/need-for-speed.svg"; +import HipHackerLogo from "../../../assets/images/hip-hacker/hip-hacker.svg"; +import StreamerLogo from "../../../assets/images/streamer/streamer.svg"; +import GitOPsWithFriendsLogo from "../../../assets/images/gitops-with-friends/gitops-with-friends.svg"; +import BringABuddyLogo from "../../../assets/images/bring-a-buddy/bring-a-buddy.svg"; +import CodeCleanupCrewLogo from "../../../assets/images/code-cleanup-crew/code-cleanup-crew.svg"; +import SecuritySentinelLogo from "../../../assets/images/security-sentinel/security-sentinel.webp"; +import LogevityLegendLogo from "../../../assets/images/longevity-legend/longevity-legend.svg"; +import ReviewRockstarLogo from "../../../assets/images/review-rockstar/review-rockstar.svg"; +import KanvasSnapshotLogo from "../../../assets/images/kanvas-snapshot/kanvas-snapshot.svg"; +import SistentContributorLogo from "../../../assets/images/sistent/badges/sistent-contributor.svg"; +import ContinuousContributorLogo from "../../../assets/images/continuous-contributor/continuous-contributor.svg"; + +import ImageHubLogo from "../../../assets/images/image-hub/layer5-image-hub.svg"; +import kanvasLogo from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; +import ServiceMeshPerformance from "../../../assets/images/service-mesh-performance/stacked/smp-dark-text.svg"; +import AcademyLogo from "../../../assets/images/academy/academy.svg"; +import CommunityLogo from "../../../assets/images/community/community-green.svg"; +import MesheryLogo from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; +import PatternsLogo from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +import LandscapeGreen from "../../../assets/images/landscape/layer5_landscape_green.svg"; +import writersLogo from "../../../assets/images/writer-program/writer-program-badge.svg"; +import NightHawkLogo from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; +import uiuxrLogo from "../../../assets/images/uiuxr/uiuxr.svg"; +import MesheryCatalogLogo from "../../../assets/images/meshery/meshery-catalog.svg"; +import DockerExtension from "../../../assets/images/docker-extension/docker-extension-meshery-logo.svg"; +import DocsLogo from "../../../assets/images/docs/docs.svg"; + +export const activityBadges = [ + { name: "Design Pioneer", title: "Design Pioneer", badgeKey: "first-design", image: DesignPioneerLogo, description: "Awarded to the Layer5 cloud users when they create their first design." }, + { name: "Application Pioneer", title: "Application Pioneer", badgeKey: "first-application", image: ApplicationPioneerLogo, description: "Awarded to the Layer5 cloud users when they create their first application." }, + { name: "Sharing is Caring", title: "Sharing is Caring", badgeKey: "first-share", image: SharingIsCaringLogo, description: "This badge is awarded upon first-time sharing one of your designs." }, + { name: "Shipped", title: "Shipped", badgeKey: "first-deployment", image: ShippedLogo, description: "This badge is awarded upon the success of your first design deployment." }, + { name: "Need for Speed", title: "Need for Speed", badgeKey: "need-for-speed", image: NeedForSpeedLogo, description: "This badge is awarded upon successful execution of your first performance test." }, + { name: "Hip Hacker", title: "Hip Hacker", badgeKey: "first-interactive-terminal-session", image: HipHackerLogo, description: "First Interactive Terminal Session - awarded the first time that you establish an interactive terminal session with a Kubernetes Pod." }, + { name: "Streamer", title: "Streamer", badgeKey: "first-log-streaming-session", image: StreamerLogo, description: "First Log Streaming Session - awarded the first time that you stream logs from a Kubernetes Pod." }, + { name: "GitOps with Friends", title: "GitOps with Friends", badgeKey: "first-collaborator", image: GitOPsWithFriendsLogo, description: "First Collaborator - awarded the first time a collaborator saves changes to one of your designs." }, + { name: "Bring a Buddy", title: "Bring a Buddy", badgeKey: "bring-a-buddy", image: BringABuddyLogo, description: "Awarded to the users who invite someone to Layer5 cloud." }, + { name: "Code Cleanup Crew", title: "Code Cleanup Crew", badgeKey: "code-cleanup-crew", image: CodeCleanupCrewLogo, description: "Awarded to contributors who help maintain code quality and cleanliness." }, + { name: "Security Sentinel", title: "Security Sentinel", badgeKey: "security-sentinel", image: SecuritySentinelLogo, description: "Awarded to individuals who contribute to identifying and fixing security vulnerabilities." }, + { name: "Longevity Legend", title: "Longevity Legend", badgeKey: "longevity-legend", image: LogevityLegendLogo, description: "Awarded for long-term, sustained contributions to the project over the years." }, + { name: "Review Rockstar", title: "Review Rockstar", badgeKey: "review-rockstar", image: ReviewRockstarLogo, description: "Awarded to individuals who provide thorough and valuable code reviews." }, + { name: "Kanvas Snapshot", title: "Kanvas Snapshot", badgeKey: "meshmap-snapshot", image: KanvasSnapshotLogo, description: "Awarded to users upon creation of their first infrastructure screenshot directly in their pull request." }, + { name: "Continuous Contributor", title: "Continuous Contributor", badgeKey: "continuous-contributor", image: ContinuousContributorLogo, description: "Awarded to the community members who make consistent and impactful contributions for a long period of time in Layer5 projects in recognition and appreciation of their efforts." }, + { name: "Sistent Contributor", title: "Sistent Contributor", badgeKey: "sistent-contributor", image: SistentContributorLogo, description: "Awarded to the community members who make consistent and impactful contributions to the Sistent project as a recognition and appreciation of their efforts." }, + + { name: "GitOps Connected", title: "GitOps Connected", badgeKey: "gitops-connected", image: "https://badges.layer5.io/assets/badges/gitops-connected/gitops-connected.png", description: "Awarded to users upon establishment of a connection with Meshery GitHub App.", href: "https://badges.layer5.io/assets/badges/gitops-connected/gitops-connected.png" }, + { name: "MeshMate", title: "MeshMate", badgeKey: "meshmate", image: "https://badges.layer5.io/assets/badges/meshmate/meshmate.png", description: "Awarded to community members who actively support and guide others, embodying the spirit of collaboration and knowledge sharing in the Layer5 community." }, + { name: "Hacktoberfest Contributor", title: "Hacktoberfest Contributor", badgeKey: "hacktoberfest-contributor", image: "https://badges.layer5.io/assets/badges/hacktoberfest-contributor/hacktoberfest-contributor.png", description: "Awarded to the contributors who contribute to any Layer5 project during Hacktoberfest." }, + { name: "Hacktoberfest '24 Contributor", title: "Hacktoberfest '24 Contributor", badgeKey: "hacktoberfest-24-contributor", image: "https://badges.layer5.io/assets/badges/hacktoberfest-contributor-2024/layer5-hacktoberfest-badge-2024.png", description: "Awarded to the contributors who contribute to any Layer5 project during Hacktoberfest 2024." }, + { name: "Hacktoberfest 2025 Contributor", title: "Hacktoberfest 2025 Contributor", badgeKey: "hacktoberfest25", image: "https://badges.layer5.io/assets/badges/hacktoberfest-contributor-2025/hacktoberfest25-badge.png", description: "Awarded to community members who participate in Hacktoberfest 2025 by making meaningful contributions to Layer5 projects during the month of October 2025." }, +]; + +export const projectBadges = [ + { name: "Image Hub", title: "Image Hub", badgeKey: "image-hub", image: ImageHubLogo, description: "Awarded to the community members who make consistent and impactful contributions to the Image Hub project in recognition and appreciation of their efforts." }, + { name: "Kanvas", title: "Kanvas", badgeKey: "kanvas", image: kanvasLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Kanvas project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer. }, + { name: "Cloud Native Performance", title: "Cloud Native Performance", badgeKey: "cloud-native-performance", image: ServiceMeshPerformance, description: "Awarded to the community members who make consistent and impactful contributions to the Cloud Native Performance project. Community members who earn this badge occasionally become a project maintainer." }, + { name: "Academy", title: "Academy", badgeKey: "academy", image: AcademyLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Layer5 Academyproject in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer. }, + { name: "MeshMap", title: "MeshMap", badgeKey: "meshmap", image: "https://badges.layer5.io/assets/badges/meshmap/meshmap.svg", description: "Awarded to the community members who make consistent and impactful contributions to the MeshMap project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer." }, + { name: "MeshSync", title: "MeshSync", badgeKey: "meshsync", image: "https://badges.layer5.io/assets/badges/meshsync/meshsync.png", description: "Awarded to the community members who make consistent and impactful contributions to MeshSync in recognition and appreciation of their efforts." }, + { name: "Community", title: "Community", badgeKey: "community", image: CommunityLogo, description: "WAwarded to the community members who repeatedly engage in welcoming, encouraging, and supporting other Layer5 community members. Community members who earn this badge occasionally graduate to undertaking the Community Manager role." }, + { name: "Meshery", title: "Meshery", badgeKey: "meshery", image: MesheryLogo, description: "Awarded to the community members who make consistent and impactful contributions to the Meshery project. Community members who earn this badge occasionally become a project maintainer." }, + { name: "Meshery Operator", title: "Meshery Operator", badgeKey: "meshery-operator", image: MesheryOperator, description: "Awarded to the community members who make consistent and impactful contributions to Meshery Operator of the Meshery project in recognition and appreciation of their efforts." }, + { name: "Patterns", title: "Patterns", badgeKey: "patterns", image: PatternsLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Cloud Native Patterns project in recognition and appreciation of their efforts. }, + { name: "Landscape", title: "Landscape", badgeKey: "landscape", image: LandscapeGreen, description: "Awarded to the community members who make consistent and impactful contributions to the layer5.io website." }, + { name: "Writer's Program", title: "Writer's Program", badgeKey: "writers-program", image: writersLogo, description: "Awarded to the community members who make with two or more published writings whether in article, blog post, project documentation or other form in recognition and appreciation of their efforts." }, + { name: "Nighthawk", title: "Nighthawk", badgeKey: "nighthawk", image: NightHawkLogo, description: "Awarded to the community members who make consistent and impactful contributions to the NightHawk project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer." }, + { name: "UI/UX", title: "UI/UX", badgeKey: "ui-ux", image: uiuxrLogo, description: "Awarded to the community members who create or improve designs for visual aspects or user flow for any of the websites, flyers, promotions, Meshery UI, and so on in recognition and appreciation of their efforts." }, + { name: "Meshery Catalog", title: "Meshery Catalog", badgeKey: "meshery-catalog", image: MesheryCatalogLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Meshery Catalog of Meshery project in recognition and appreciation of their efforts. }, + { name: "Docker Extension", title: "Docker Extension", badgeKey: "docker-extension", image: DockerExtension, description: "Awarded to the community members who make consistent and impactful contributions to the Docker Extension of meshery project in recognition and appreciation of their efforts." }, + { name: "Docs", title: "Docs", badgeKey: "docs", image: DocsLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Meshery docs in recognition and appreciation of their efforts. }, +]; + +export const specialBadges = [ + { + key: "certified-meshery-contributor", + name: "Certified Meshery Contributor", + title: "Certified Meshery Contributor", + image: "https://badges.layer5.io/static/certification-program-6ea140e34c1dd08074ec896d0b98c0f8.png", + description: "Recognition of contributor expertise." + }, + { + key: "cncf-ambassador", + name: "CNCF Ambassador", + title: "CNCF Ambassador", + image: "https://badges.layer5.io/assets/badges/cncf-ambassador/cncf-ambassador.png", + description: "This is a special edition badge awarded to CNCF Ambassadors." + }, + { + key: "docker-captain", + name: "Docker Captain", + title: "Docker Captain", + image: "https://badges.layer5.io/assets/badges/docker-captain/docker-captain.png", + description: "This is a special edition badge awarded to Docker Captains." + }, +]; diff --git a/src/collections/handbook/recognition/index.mdx b/src/collections/handbook/recognition/index.mdx new file mode 100644 index 0000000000000..215307d8d9c13 --- /dev/null +++ b/src/collections/handbook/recognition/index.mdx @@ -0,0 +1,164 @@ +--- +title: "Recognition" +description: "How Layer5 recognizes and appreciates community members through badges, profiles, and social media" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import { Link } from "gatsby"; +import IntraPage from "../../components/handbook-navigation/intra-page"; +import BadgeRow from "./BadgeRow"; +import { activityBadges, projectBadges, specialBadges } from "./badges-data"; + +export const contents = [ + { id: 0, link: "#Profile Bages", text: "Profile Bages" }, + { id: 1, link: "#Membership", text: "Membership to GitHub" }, + { id: 2, link: "#Community_member_profile", text: "Community Member Profile" }, + { id: 3, link: "#Badges", text: "Community Member Profile Badges" }, + { id: 4, link: "#SocialMedia", text: "Recognition on Social Media Platforms" }, +]; + +export const tableWrap = { overflowX: "auto" }; +export const table = { width: "100%", borderCollapse: "collapse", marginBottom: "2rem" }; +export const theadRow = { borderBottom: "2px solid var(--text-color, #ddd)", backgroundColor: "rgba(0, 0, 0, 0.05)" }; +export const th = { textAlign: "left", padding: "12px", fontWeight: 600 }; +export const recognitionsstyle = { marginBottom: "0.5rem" }; + +export const normalizeBadge = (b) => { + const name = b?.name || b?.title || ""; + const rawKey = b?.key || b?.badgeKey || b?.keycode || b?.keyProp; + const key = rawKey || (name ? name.toLowerCase().replace(/\s+/g, "-") : ""); + return{ + image: b?.image, + name, + key, + description: b?.description, + }; +}; + +export const activity = (activityBadges || []).map(normalizeBadge); +export const projects = (projectBadges || []).map(normalizeBadge); +export const specials = (specialBadges || []).map(normalizeBadge); + + +

    Your Efforts Do Not Go Unnoticed or Unappreciated

    +
    + +As an open source-first community, we very much appreciate the engagement of individuals within the Layer5 community. We wouldn't be here without you. Our success is a collective one. Consequently, we are quite intentional about defining and encouraging the journey for each individual community member. No small part of their journey is that of recognizing their accomplishments and publicly celebrating their accolades. We do so in a number of ways. + +

    Membership to the Github organizations

    + +Membership to the Github organizations is a significant milestone for contributors who have shown persistent commitment and dedication to Layer5 projects. It is not solely about writing code but rather the consistency of engagement and alignment of mentality. Those who have been actively involved in the community for several months, making updates, helping others, attending meetings, and demonstrating a willingness to learn and share their knowledge, are the ones who are likely to receive an invite. Such individuals demonstrate a genuine desire to improve themselves, others, and the projects they are working on. Depending on the number of contributions made across the five GitHub organizations of Layer5, contributors can expect to receive an invitation to any or all of these organizations. We value and appreciate the hard work and dedication of our contributors, and we are delighted to reward their efforts with access to our Github organizations. Our Community Managers and MeshMates recognize potential contributors on a weekly basis and typically invite individuals after 6 to 8 weeks of continuous, active participation. + + +

    Community Member Profiles

    +
    + +Once a contributor joins the Layer5 community by filling in the community member form, they are automatically classified as members of Layer5. Although, you earn a member profile after consistent contributions to the community for and projects. You can find out more about the Members profile on the Layer5 website. + +Member profiles carry a number of specific designations, depending upon how a community member is participating. One of those designations is that of whether the member is actively particpating or has gone dormant. We define "active" and "inactive" members in the following way: + +- **Active** - Members who are engaged and participating in any aspect of the community and/or its projects. Activities vary broadly from meeting attendance to helping other contributors to using and providing feedback on projects, to code contribution, and so on. +- **Inactive** - Members who have previously engaged but have not participated in the community or projects within ~two months. + +

    Community Member Profile Badges

    + +Badges are awarded to community members who have been consistently engaged and impactful within a given area of the community or on a specific project. Every community member, whether contributing with code or not, has the opportunity to obtain any number of badges of recognition of their efforts. Community members are encouraged to collect the whole set! + +
    +

    Activity Badges

    + + + + + + + + + + + {activity.map((b, i) => ( + + ))} + +
    BadgeNameBadge KeyDescription
    + +

    Project Badges

    + + + + + + + + + + + {projects.map((b, i) => ( + + ))} + +
    BadgeNameBadge KeyDescription
    + +

    Special Recognition Badges

    + + + + + + + + + + + {specials.map((b, i) => ( + + ))} + +
    BadgeNameBadge KeyDescription
    +
    + +

    How can I Earn Badges?

    + +Earning Layer5 badges is both rewarding and straightforward. As you continue to contribute to our projects, your accomplishments will be recognized with badges that reflect your dedication and expertise. Each badge is tied to specific activities. Here are some ways you can earn Layer5 Badges: + +For users, badges for activities such as using our projects, talking about the projects, sharing your successes and what you like about them. For contributors, badges include activities such as submitting code, reviewing Pull Requests, assisting with documentation, participating in community events, and more. As you accumulate contributions in various areas, you'll begin to unlock badges that showcase your multifaceted involvement. These badges will be prominently displayed on your Layer5 Cloud profile, visually representing your journey. Not only does this serve as a source of personal pride, but it also helps others in the community recognize your expertise and dedication. + +- Activity Badges are the badges that are assigned when a user completes a task like sharing a design, creating a design for the first time, etc. +- Project Badges are assigned to the user when a user contributes to a particular project. + +The description and criteria for all the badges are listed above. + +

    How can I Share My Badge On My Profile?

    + +To share your badges on other social profiles, utilize the provided embedded code and direct share functionality. Access your badges from the Layer5 Cloud profile badges section, and then use it to post your achievements on social media platforms seamlessly. This enables you to showcase your Layer5 contributions and milestones to a wider audience: + +To display badge on your GitHub profile, follow below steps: +- Visit your Layer5 Cloud Profile to see the badges +- Click on the badge, which you wanted to display +- Copy the markdown code by clicking the Embed Code icon +- Paste the code in your GitHub profile README. + +

    Recognition on Social Media Platforms

    + +We highly encourage you to share your engagement and contributions to the Layer5 community on social media like LinkedIn and Twitter. We support every contribution by liking your posts and retweeting them. Your contributions and engagement in different ways are what make us a successful and collaborative open-source community. We love celebrating your every accomplishment with Layer5 publicly and encourage you in every way we can. + + diff --git a/src/collections/handbook/repository-overview/index.mdx b/src/collections/handbook/repository-overview/index.mdx new file mode 100644 index 0000000000000..de69d7c1f8301 --- /dev/null +++ b/src/collections/handbook/repository-overview/index.mdx @@ -0,0 +1,218 @@ +--- +title: "Repository Overview" +description: "Overview of GitHub organizations and repositories in the Layer5 community" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import { repo_data } from "./repo-data"; +import github from "../../assets/images/socialIcons/github.svg"; +import layer5icon from "../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; +import mesheryExtensionsIcon from "../../assets/images/meshery-extensions/icon-only/meshery-extensions-color.svg"; +import MesheryOperator from "../../assets/images/meshery-operator/meshery-operator-dark.svg"; +import MeshSync from "../../assets/images/meshsync/meshsync.svg"; +import servicemeshperformance from "../../assets/images/service-mesh-performance/icon/smp-dark.svg"; +import meshery from "../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +import servicemeshpattern from "../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +import IntraPage from "../../components/handbook-navigation/intra-page"; +import Kanvas from "../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; +import layer5AcademyIcon from "../../assets/images/academy/academy.svg"; +import { Link } from "gatsby"; + +export const contents = [ + { id: 0, link: "#top", text: "GitHub Organizations and Repositories" }, + { id: 1, link: "#Frontend Projects", text: "Frontend Projects" }, + { id: 2, link: "#Backend Projects", text: "Backend Projects" }, +]; + +export const data = repo_data; +export const frontendProjects = data.filter((d) => d.category === "Frontend"); +export const backendProjects = data.filter((d) => d.category !== "Frontend"); + + +

    GitHub Organizations and Repositories

    +
    + +A brief introduction to all of the Github repositories of Layer5 organization is offered below. This overview serves as a resource to newcomers seeking a perspective of the collective community efforts (from a code-centric perspective). See Layer5 GitHub Process for more related information. + +Note that the Layer5 community spans **six** GitHub organizations and **one** multi-repository collection: + + + +
    + A note on *program participation / *invite-only projects +

    Some of our projects, particularly those dealing with sensitive user data or playing a key role in our managed services, require a slightly more structured approach to development. This means that we invite trusted contributors, core team members and maintainers to participate directly in these projects. This ensures the highest standards of security and reliability. We're always on the lookout for talented individuals who can contribute to these efforts, so if you're interested in getting involved, keep an eye out for announcements and opportunities to showcase your skills!

    +

    Contributors are frequently invited to participation in the development of these projects extensions that contain either sensitive information (e.g. Meshery Remote Provider user accounts), contain privileged access to community environments (e.g. the hosted Meshery Playground) or grant administrative rights and control (e.g. assignment of recognition badges). Participation in these projects is by invitation only and requires a high level of trust and commitment to the Layer5 community.

    +

    Hundreds of contributors have participated in these projects, and many have gone on to become maintainers and core team members. We want you to be one of them! If you are interested in participating in these projects, please reach out to the project maintainers or the Layer5 community team.

    +

    Projects listed with *program participation required:

    +
      +
    • Kanvas
    • +
    • Layer5 Cloud
    • +
    +
    + + +

    Frontend Projects

    +
    + +{frontendProjects.map((frontendProject, index) => { + const { category } = frontendProject; + return ( +
    + + + + + + + + + + + {frontendProject.subdata.map((subdata) => { + const { project, language, repository, maintainers_name, site, image, link, accessRequired } = subdata; + return ( + + + + + + + + + + ); + })} +
    SiteProjectFrameworkMaintainersRepo
    + + site-icon + + {project}{language} + {maintainers_name.map((mname, index) => { + return ( + + {index > 0 ? ", " : ""}{mname} + + ); + })} + + + github-icon + +
    { accessRequired != "" ? accessRequired : ""}
    +
    +
    + ); +})} + + +

    Backend Projects

    +
    + +{backendProjects.map((backendProject, index) => { + const { category } = backendProject; + return ( +
    + + + + + + + + + + + {backendProject.subdata.map((subdata) => { + const { project,image,language,description,repository,link,maintainers_name,accessRequired } = subdata; + const smpClass = project === "SMP Action"; + const siteIconClasses = smpClass ? "site-icon inline smp-action" : "site-icon inline"; + return ( + + + + + + + + + + ); + })} +
    {category}LanguageDescriptionMaintainersRepo
    + project {project} + {language}{description} + {maintainers_name?.map((mname, index) => { + return ( + + {index > 0 ? ", " : ""} + {mname} + + ); + })} + + + github-icon + +
    { accessRequired != "" ? accessRequired : ""}
    +
    +
    + ); +})} + + diff --git a/src/collections/handbook/repository-overview/repo-data.js b/src/collections/handbook/repository-overview/repo-data.js new file mode 100644 index 0000000000000..5bebb98174915 --- /dev/null +++ b/src/collections/handbook/repository-overview/repo-data.js @@ -0,0 +1,675 @@ +import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +import five from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; +import gnh from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; +import smp from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; +import imagehub from "../../../assets/images/image-hub/layer5-image-hub.svg"; +import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator.svg"; +import MeshSync from "../../../assets/images/meshsync/meshsync.svg"; +import patterns from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +import github from "../../../assets/images/socialIcons/github.svg"; +import istioLogo from "../../../assets/images/service-mesh-icons/istio.svg"; +import linkerdLogo from "../../../assets/images/service-mesh-icons/linkerd.svg"; +import consulLogo from "../../../assets/images/service-mesh-icons/consul.svg"; +import kumaLogo from "../../../assets/images/service-mesh-icons/kuma.svg"; +import nsmLogo from "../../../assets/images/service-mesh-icons/nsm.svg"; +import nginxLogo from "../../../assets/images/service-mesh-icons/nginx-service-mesh.svg"; +import traefikLogo from "../../../assets/images/service-mesh-icons/traefik.svg"; +import smiLogo from "../../../assets/images/service-mesh-icons/service-mesh-interface/icon/color/servicemeshinterface-icon-color.svg"; +import appmeshLogo from "../../../assets/images/service-mesh-icons/aws-app-mesh.svg"; +import ciliumLogo from "../../../assets/images/service-mesh-icons/cilium.svg"; +import wasm from "../../../assets/images/webassembly/webssembly_icon.svg"; +import recognitionLogo from "../../../assets/images/recognition-program/recognition-program.webp"; +import kanvasLogo from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; +import sistent from "../../../assets/images/sistent/icon-only/sistent-icon-color.svg"; + +export const repo_data = [ + { + category: "Frontend", + subdata: [ + { + project: "Layer5.io", + image: five, + site: "https://layer5.io/", + language: "Gatsby", + maintainers_name: ["Rajesh Nagarajan"], + link: ["https://layer5.io/community/members/rajesh-nagarajan"], + repository: "https://github.com/layer5io/layer5", + }, + { + project: "Meshery.io", + image: meshery, + site: "https://meshery.io", + language: "Jekyll", + maintainers_name: ["Vacant"], + link: [""], + repository: "https://github.com/meshery/meshery.io", + }, + { + project: "Meshery Documentation", + image: meshery, + site: "http://docs.meshery.io", + language: "Jekyll", + maintainers_name: ["Vacant"], + link: [""], + repository: "https://github.com/meshery/meshery/tree/master/docs", + }, + { + project: "Meshery UI", + image: meshery, + site: "https://github.com/meshery/meshery/tree/master/ui", + language: "NextJS, React.js, MaterialUI and Billboard.js", + maintainers_name: ["Antonette Caldwell", "Aabid Sofi", "Ian Whitney"], + link: [ + "https://layer5.io/community/members/antonette-caldwell", + "https://layer5.io/community/members/aabid-sofi", + "https://layer5.io/community/members/ian-whitney" + ], + repository: "https://github.com/meshery/meshery/tree/master/ui", + }, + { + project: "Service Mesh Performance", + image: smp, + site: "https://smp-spec.io", + language: "Jekyll", + maintainers_name: ["Aaditya Subedy"], + link: ["https://layer5.io/community/members/aaditya-narayan-subedy"], + repository: + "https://github.com/service-mesh-performance/service-mesh-performance", + }, + { + project: "Nighthawk", + image: gnh, + site: "https://getnighthawk.dev", + language: "Jekyll", + maintainers_name: ["Vacant"], + link: [""], + repository: "https://github.com/layer5io/getnighthawk", + }, + { + project: "Kanvas", + image: kanvasLogo, + site: "/cloud-native-management/kanvas", + language: "React.js, Cytoscape.js", + maintainers_name: ["Aabid Sofi"], + link: ["https://layer5.io/community/members/aabid-sofi"], + description: + "A collaborative, visual topology to design and operate cloud native infrastructure.", + repository: "https://github.com/layer5labs/meshery-extensions", + accessRequired: "*program participation required", + }, + { + project: "Discussion Forum", + image: five, + site: "https://discuss.layer5.io", + language: "Discourse", + maintainers_name: ["Vacant"], + link: [""], + repository: " https://discuss.layer5.io", + }, + { + project: "Cloud Native Patterns", + image: patterns, + site: "https://service-mesh-patterns.github.io/service-mesh-patterns/", + language: "Gatsby", + maintainers_name: ["Nic Jackson"], + link: ["https://layer5.io/community/members/nic-jackson"], + repository: + "https://github.com/service-mesh-patterns/service-mesh-patterns", + }, + { + project: "Cloud Native Playground", + image: meshery, + site: "https://play.meshery.io", + language: "React.js", + maintainers_name: ["Sangram Rath"], + link: ["#"], + repository: "https://github.com/meshery/play", + }, + { + project: "Layer5 Cloud", + image: meshery, + site: "https://cloud.layer5.io/", + language: "React.js", + maintainers_name: ["Vacant"], + link: ["#"], + repository: "https://github.com/layer5io/meshery-cloud", + accessRequired: "*program participation required", + }, + { + project: "Recognition Program", + image: recognitionLogo, + site: "https://badges.layer5.io/", + language: "Gatsby", + maintainers_name: ["Vacant"], + link: [""], + repository: + "https://github.com/layer5labs/meshery-extensions-packages/", + }, + { + project: "Sistent Design System", + image: sistent, + site: "https://github.com/layer5io/sistent", + language: "React.js, Typescript", + maintainers_name: [ + "Antonette Caldwell", + "Aabid Sofi", + ], + link: [ + "https://layer5.io/community/members/antonette-caldwell", + "https://layer5.io/community/members/aabid-sofi", + ], + repository: "https://github.com/layer5io/sistent", + }, + { + project: "Layer5 Documentation", + image: five, + site: "https://docs.layer5.io/", + language: "Hugo", + maintainers_name: ["Vacant"], + link: ["#"], + repository: "https://github.com/layer5io/docs", + }, + { + project: "Academy Theme", + image: five, + site: "https://github.com/layer5io/academy-theme", + language: "Hugo", + maintainers_name: ["Aabid Sofi"], + link: [ + "#", + "https://layer5.io/community/members/aabid-sofi" + ], + repository: "https://github.com/layer5io/academy-theme", + }, + { + project: "Academy Build", + image: five, + site: "https://github.com/layer5io/academy-build", + language: "Hugo build / GitHub Action", + maintainers_name: ["Aabid Sofi"], + link: ["https://layer5.io/community/members/aabid-sofi"], + repository: "https://github.com/layer5io/academy-build", + }, + { + project: "Academy Example", + image: five, + site: "https://github.com/layer5io/academy-example", + language: "Hugo", + maintainers_name: ["Vacant"], + link: ["#"], + repository: "https://github.com/layer5io/academy-example", + }, + { + project: "Exoscale Academy", + image: five, + site: "https://github.com/layer5io/exoscale-academy", + language: "Hugo", + maintainers_name: ["Vacant"], + link: ["#"], + repository: "https://github.com/layer5io/exoscale-academy", + }, + { + project: "Layer5 Academy", + image: five, + site: "https://github.com/layer5io/layer5-academy", + language: "Hugo", + maintainers_name: ["Vacant"], + link: ["#"], + repository: "https://github.com/layer5io/layer5-academy", + }, + ], + }, + + { + category: "Cloud Native Learning Paths", + subdata: [ + { + project: "Cloud Native Labs", + image: five, + language: "yaml", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A variety of interactive labs spanning different cloud native infrastructure. See https://layer5.io/learn/kanvas-labs.", + repository: "https://github.com/layer5io/service-mesh-labs", + }, + { + project: "Istio Service Mesh Workshop", + image: istioLogo, + language: "Meshery", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A workshop that teaches about modern infrastructure through the lens of Istio.", + repository: "https://github.com/layer5io/istio-service-mesh-workshop", + }, + { + project: "Advanced Istio Service Mesh Workshop", + image: istioLogo, + language: "Meshery", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "An advanced workshop that teaches about modern infrastructure through the lens of Istio.", + repository: + "https://github.com/layer5io/advanced-istio-service-mesh-workshop", + }, + { + project: "Linkerd Service Mesh Workshop", + image: linkerdLogo, + language: "Meshery", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A workshop that teaches about modern infrastructure through the lens of Linkerd.", + repository: "https://github.com/layer5io/linkerd-service-mesh-workshop", + }, + { + project: "Containers 101 Workshop", + image: five, + language: "Docker", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A workshop that introduces Linux containers through concepts in slides and hands-on labs.", + repository: "https://github.com/layer5io/containers-101-workshop", + }, + { + project: "Cloud Native Playground", + image: meshery, + language: "Meshery", + maintainers_name: ["Vacant"], + link: ["#"], + description: "Cloud Native Playground for Kubernetes and CNCF projects", + repository: "https://github.com/meshery/play", + }, + ], + }, + + { + category: "Cloud Native Management Repos", + subdata: [ + { + project: "Meshery", + image: meshery, + language: "Golang, gRPC", + maintainers_name: ["Antonette Caldwell"], + link: [ + "https://layer5.io/community/members/antonette-caldwell", + ], + description: + "the cloud native management plane to provide governance and backend system integration. Golang, gRPC, NATS, CloudEvents", + repository: "https://github.com/meshery/meshery", + }, + { + project: "SMI Conformance", + image: smiLogo, + language: "GitHub Action", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A utility for validating the conformance of service mesh implementations and their adherence to the Service Mesh Interface specifications.", + repository: + "https://github.com/layer5io/meshery-smi-conformance-action", + accessRequired: "*archived", + }, + { + project: "Meshery Operator", + image: MesheryOperator, + language: "Golang, Kubernetes Operator", + maintainers_name: ["Aisuko Li"], + link: ["https://layer5.io/community/members/aisuko-li"], + description: + "Meshery Operator is the multi-cloud native operator and implementation of MeshSync.", + repository: "https://github.com/meshery/meshery-operator", + }, + { + project: "MeshSync", + image: MeshSync, + language: "Golang and NATS", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "MeshSync is a multi-cluster resource discovery application which is also a custom Kubernetes controller.", + repository: "https://github.com/meshery/meshsync", + }, + { + project: "Learn-Layer5", + image: five, + language: "Golang, Kuttl", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A utility for validating the conformance of cloud native implementations and their adherence to the Cloud Native Interface specifications.", + repository: + "https://github.com/layer5io/meshery-smi-conformance-action", + }, + { + project: "Layer5 Cloud", + image: meshery, + language: "Golang", + maintainers_name: ["Vacant"], + link: ["#"], + description: "A Meshery Remote Provider.", + repository: "https://github.com/layer5io/meshery-cloud", + accessRequired: "*program participation required", + }, + // { + // project: "MeshMonkey", + // language: "Golang", + // repository: "https://github.com/layer5io/meshmonkey", + // }, + { + project: "Kanvas Snapshot", + image: kanvasLogo, + site: "https://layer5.io/solutions/gitops/snapshot", + language: "GitHub Actions", + maintainers_name: ["Vacant"], + link: [""], + description: + "Generates visual snapshots of infrastructure as code (e.g., Kubernetes manifests, Helm charts) and delivers them to pull requests for automated review.", + repository: "https://github.com/layer5labs/kanvas-snapshot", + }, + { + project: "Helm Kanvas Snapshot", + image: kanvasLogo, + language: "Golang", + maintainers_name: ["Vacant"], + link: [""], + description: + "The Kanvas Snapshot Helm Plugin allows users to generate a visual snapshot of their Helm charts directly from the command line.", + repository: "https://github.com/meshery/helm-kanvas-snapshot", + }, + { + project: "Kubectl Kanvas Snapshot", + image: kanvasLogo, + language: "Golang", + maintainers_name: ["Vacant"], + link: [""], + description: "A Kubectl Kanvas Snapshot is a native kubectl plugin designed to conveniently create a visual snapshot of the combination of multiple Kubernetes manifest files.", + repository: "https://github.com/meshery/kubectl-kanvas-snapshot", + }, + ], + }, + + { + category: "WebAssembly Repos", + subdata: [ + { + project: "Image Hub", + image: imagehub, + language: "Vuejs", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A sample application written to run on Istio or Consul for exploring WebAssembly modules used as Envoy filters.", + repository: "https://github.com/layer5io/image-hub", + }, + { + project: "WASM Filters", + image: wasm, + language: "C, C++, Rust", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A collection of WebAssemby filters for Envoy proxy written in C, C++, and Rust for exercising different features provided by envoy-wasm.", + repository: "https://github.com/layer5io/wasm-filters", + }, + ], + }, + + { + category: "Cloud Native Performance Repos ", + subdata: [ + { + project: "Cloud Native Performance", + image: smp, + language: "Protobuf", + maintainers_name: [ + "Lee Calcote", + "Nic Jackson", + "Otto Van Der Schaaf", + "Xin Huang", + "Aaditya Narayan Subedy", + ], + link: [ + "https://layer5.io/community/members/lee-calcote", + "https://layer5.io/community/members/nic-jackson", + "https://layer5.io/community/members/otto-van-der-schaaf", + "https://layer5.io/community/members/xin-huang", + "https://layer5.io/community/members/aaditya-narayan-subedy", + ], + description: + "a common format for capturing and describing cloud native infrastucture performance and services.", + repository: + "https://github.com/layer5io/service-mesh-performance-specification", + }, + { + project: "Wrk2", + image: meshery, + language: "C", + maintainers_name: ["Otto Van Der Schaaf"], + link: ["https://layer5.io/community/members/otto-van-der-schaaf"], + description: + "a C-based load generator. A fork of wrk2, which includes the concept of coordinated omission.", + repository: "https://github.com/giltene/wrk2", + }, + { + project: "Gowrk2", + image: meshery, + language: "Golang", + maintainers_name: ["Vacant"], + link: [""], + description: + "Augmentation of wrk2 to produce output compatible with Meshery’s visualization of performance test results.", + repository: "https://github.com/layer5io/gowrk2", + }, + { + project: "Nighthawk", + image: gnh, + language: "Golang, gRPC", + maintainers_name: ["Vacant"], + link: [""], + description: + "Augmentation of Envoy Nighthawk to produce output compatible with Meshery’s visualization of performance test results", + repository: "https://github.com/layer5io/nighthawk-go", + }, + { + project: "SMP Action", + image: github, + language: "shell", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "GitHub Action to run SMP Performance Benchmarks on CI/CD pipelines.", + repository: "https://github.com/layer5io/meshery-smp-action", + }, + { + project: "Meshery Nighthawk", + image: meshery, + language: "Golang", + maintainers_name: ["Xin Huang"], + link: ["https://layer5.io/community/members/xin-huang"], + description: + "meshery-perf is a Meshery component used to run performance tests", + repository: "https://github.com/meshery/meshery-perf", + }, + ], + }, + + { + category: "Cloud Native Pattern Repos", + subdata: [ + { + project: "Cloud Native Patterns", + image: patterns, + language: "Yaml", + maintainers_name: ["Lee Calcote", "Nic Jackson"], + link: [ + "https://layer5.io/community/members/lee-calcote", + "https://layer5.io/community/members/nic-jackson", + ], + description: + "A collection of functional examples to be used as patterns for operationalizing cloud native infrastruture and application deployments and applying best practices.", + repository: + "https://github.com/service-mesh-patterns/service-mesh-patterns", + }, + { + project: "Cloud Native Patterns Action", + image: patterns, + language: "shell", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "GitHub Action to deploy Cloud Native Patterns on CI/CD pipelines.", + repository: + "https://github.com/layer5io/meshery-cloud-native-patterns-action", + }, + ], + }, + { + category: "Meshery Adapter Repos", + subdata: [ + { + project: "Meshery Adapter for Istio", + image: istioLogo, + language: "Golang, gRPC", + maintainers_name: ["Aisuko Li"], + link: ["https://layer5.io/community/members/aisuko-li"], + description: "Meshery adapter for management of Istio.", + repository: "https://github.com/layer5io/meshery-istio", + }, + { + project: "Meshery Adapter for Linkerd", + image: linkerdLogo, + language: "Golang, gRPC", + maintainers_name: ["Hussaina Begum"], + link: ["https://layer5.io/community/members/hussaina-begum"], + description: "Meshery adapter for management of Linkerd.", + repository: "https://github.com/layer5io/meshery-linkerd", + }, + { + project: "Meshery Adapter for NSM", + image: nsmLogo, + language: "Golang, gRPC", + maintainers_name: ["Michael Gfeller"], + link: ["https://layer5.io/community/members/michael-gfeller"], + description: "Meshery adapter for management of Network Service Mesh.", + repository: "https://github.com/layer5io/meshery-nsm", + }, + // { + // project: "Meshery Adapter for Octarine", + // image: meshery, + // language: "Golang, gRPC", + // maintainers_name: ["Lee Calcote"], + // link: ["https://layer5.io/community/members/lee-calcote"], + // description: "Meshery adapter for management of Octarine.", + // repository: "https://github.com/layer5io/meshery-octarine", + // }, + { + project: "Meshery Adapter for Traefik Mesh", + image: traefikLogo, + language: "Golang, gRPC", + maintainers_name: ["Antonette Caldwell"], + link: ["https://layer5.io/community/members/antonette-caldwell"], + description: "Meshery adapter for management of Traefik Mesh.", + repository: "https://github.com/layer5io/meshery-traefik-mesh", + }, + { + project: "Meshery Adapter for Kuma", + image: kumaLogo, + language: "Golang, gRPC", + maintainers_name: ["Michael Gfeller"], + link: ["https://layer5.io/community/members/michael-gfeller"], + description: "Meshery adapter for management of Kuma.", + repository: "https://github.com/layer5io/meshery-kuma", + }, + { + project: "Meshery Adapter for Consul", + image: consulLogo, + language: "Golang, gRPC", + maintainers_name: ["Hussaina Begum"], + link: ["https://layer5.io/community/members/hussaina-begum"], + description: "Meshery adapter for management of Consul", + repository: "https://github.com/layer5io/meshery-consul", + }, + { + project: "Meshery Adapter for CPX", + image: meshery, + language: "Golang, gRPC", + maintainers_name: ["Vacant"], + link: ["#"], + description: "Meshery adapter for management of Citrix CPX", + repository: "https://github.com/layer5io/meshery-cpx", + }, + { + project: "Meshery Adapter for App Mesh", + image: appmeshLogo, + language: "Golang, gRPC", + maintainers_name: ["Antonette Caldwell"], + link: ["https://layer5.io/community/members/antonette-caldwell"], + description: "Meshery adapter for management of AWS App Mesh", + repository: "https://github.com/layer5io/meshery-app-mesh", + }, + { + project: "Meshery Adapter for Tanzu Service Mesh", + image: meshery, + language: "Golang, gRPC", + maintainers_name: ["Hussaina Begum"], + link: ["https://layer5.io/community/members/hussaina-begum"], + description: + "Meshery adapter for management of VMware Tanzu Service Mesh", + repository: "https://github.com/layer5io/meshery-tanzu-sm", + }, + { + project: "Meshery Adapter for NGINX Service Mesh", + image: nginxLogo, + language: "Golang, gRPC", + maintainers_name: ["Hussaina Begum"], + link: ["https://layer5.io/community/members/hussaina-begum"], + description: "Meshery adapter for management of NGINX Service Mesh", + repository: "https://github.com/layer5io/meshery-nginx-sm", + }, + { + project: "Meshery Adapter for Cilium Service Mesh", + image: ciliumLogo, + language: "Golang, gRPC", + maintainers_name: ["Vacant"], + link: [""], + description: "Meshery adapter for management of Cilium Service Mesh.", + repository: "https://github.com/meshery/meshery-cilium", + }, + { + project: "MeshKit", + image: meshery, + language: "Golang,Cuelang", + maintainers_name: ["Aisuko Li"], + link: ["https://layer5.io/community/members/aisuko-li"], + description: "Toolkit for Layer5's microservices.", + repository: "https://github.com/layer5io/meshkit", + }, + { + project: "Meshery Adapter Library", + image: meshery, + language: "Golang, gRPC", + maintainers_name: ["Michael Gfeller"], + link: ["https://layer5.io/community/members/michael-gfeller"], + description: + "A common and consistent set of functionality for Meshery Adapters.", + repository: "https://github.com/layer5io/meshery-adapter-library", + }, + { + project: "Meshery Adapter Template", + image: meshery, + language: "Golang, gRPC", + maintainers_name: ["Vacant"], + link: ["#"], + description: + "A GitHub repo used as a template for new Meshery Adapters.", + repository: "https://github.com/layer5io/meshery-adapter-template", + }, + ], + }, +]; + + diff --git a/src/collections/handbook/security-vulnerabilities/index.mdx b/src/collections/handbook/security-vulnerabilities/index.mdx new file mode 100644 index 0000000000000..3638072b65aae --- /dev/null +++ b/src/collections/handbook/security-vulnerabilities/index.mdx @@ -0,0 +1,144 @@ +--- +title: "Security Vulnerabilities" +description: "How to report security vulnerabilities in Layer5 projects" +type: Handbook +--- + +import { Container } from "../../reusecore/Layout"; +import layer5icon from "../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; +import MesheryOperator from "../../assets/images/meshery-operator/meshery-operator-dark.svg"; +import MeshSync from "../../assets/images/meshsync/meshsync.svg"; +import servicemeshperformance from "../../assets/images/service-mesh-performance/icon/smp-dark.svg"; +import meshery from "../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +import mesheryextension from "../../assets/images/meshery-extensions/icon-only/meshery-extensions-color.svg"; +import servicemeshpattern from "../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +import Kanvas from "../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; + +

    Reporting a vulnerability


    + +We are very grateful to the security researchers and users that report security vulnerabilities. We investigate each report thoroughly. + +To make a report, send an email to the private security-vulns-reports@layer5.io mailing list with the vulnerability details. For normal product bugs unrelated to latent security vulnerabilities, please head to the appropriate repository and submit a new issue. + +Note that the Layer5 community spans six GitHub organizations: + + + +You can find the list of all the Layer5 project repositories here + +### When to report a security vulnerability? +Send us a report whenever you: +- Think Layer5 projects have a potential security vulnerability. +- Are unsure whether or how a vulnerability affects the project. +- Think a vulnerability is present in another project that Layer5 projects depends on (Docker for example). + +### When not to report a security vulnerability? +Don't send a vulnerability report if: +- You need help tuning Layer5 project components for security. +- You need help applying security related updates. +- Your issue is not security related. + +Instead, join the community Slack and ask questions. + +### Evaluation +The Layer5 team acknowledges and analyzes each vulnerability report within 10 working days. + +Any vulnerability information you share with the Layer5 team stays within the respective Layer5 project. We don't disseminate the information to other projects. We only share the information as needed to fix the issue. + +We keep the reporter updated as the status of the security issue is addressed. + +### Fixing the issue +Once a security vulnerability has been fully characterized, a fix is developed by the Layer5 team. The development and testing for the fix happens in a private GitHub repository in order to prevent premature disclosure of the vulnerability. + +### Early disclosures +The Layer5 project maintains a mailing list for private early disclosure of security vulnerabilities. The list is used to provide actionable information to close Layer5 partners. The list is not intended for individuals to find out about security issues. + +### Public disclosures +On the day chosen for public disclosure, a sequence of activities takes place as quickly as possible: +- Changes are merged from the private GitHub repository holding the fix into the appropriate set of public branches. +- Layer5 team ensures all necessary binaries are promptly built and published. +- Once the binaries are available, an announcement is sent out on the following channels: + - The Layer5 blog + - The Layer5 Twitter feed + - The #announcements channel on community Slack + +As much as possible this announcement will be actionable, and include any mitigating steps customers can take prior to upgrading to a fixed version. + +## List of Announced Vulnerabilities: + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    DATE ANNOUNCEDCVE IDDESCRIPTIONAFFECTED COMPONENTVULNERABLE VERSIONPATCHED VERSIONFIX DETAILSLINKS
    2021-04-28CVE-2021-31856A SQL Injection vulnerability in the REST API in Layer5 Meshery 0.5.2 allows an attacker to execute arbitrary SQL commands via the /experimental/patternfiles endpoint (order parameter in GetMesheryPatterns in models/meshery_pattern_persister.go).REST APIv0.5.2v0.5.3fix pullmitre, details
    +
    diff --git a/src/collections/handbook/writing-program/content-form.js b/src/collections/handbook/writing-program/content-form.js new file mode 100644 index 0000000000000..3bbe5a82b9518 --- /dev/null +++ b/src/collections/handbook/writing-program/content-form.js @@ -0,0 +1,167 @@ +import React, { useState, useEffect } from "react"; +import Button from "../../../../reusecore/Button"; +import axios from "axios"; +import { Field, Form, Formik } from "formik"; +import ContentFormWrapper from "./content-form.style"; +import layer5_img from "../../../../assets/images/layer5/layer5-only/svg/layer5-white-no-trim.svg"; + +const ContentForm = () => { + const [memberFormOne, setMemberFormOne] = useState({}); + const [stepNumber, setStepNumber] = useState(0); + const [submit, setSubmit] = useState(false); + // Form values + const [validateContent, setValidateContent] = useState(false); + const [validateSlack, setValidateSlack] = useState(false); + const [email, setEmail] = useState(""); + const [name, setName] = useState(""); + const [content, setContent] = useState(""); + const [slack, setSlack] = useState(""); + const [title, setTitle] = useState(""); + const [details, setDetails] = useState(""); + const [comment, setComment] = useState(""); + const [slackName, setSlackName] = useState(""); + + + useEffect(() => { + if (submit) { + axios.post("https://hook.us1.make.com/7c1op88rysnmeitovt35fxzcv2spspp0", { + memberFormOne, + }); + } + }, [submit]); + + return ( + + { + stepNumber === 0 && +
    + { + setEmail(values.email); + setName(values.name); + setSlackName(values.slackName); + setTitle(values.title); + setDetails(values.details); + setComment(values.details); + setSlack(values.slack); + setContent(values.content); + + if (values.slack && values.content) { + setMemberFormOne(values); + setStepNumber(1); + setSubmit(true); + } else { + if (!values.slack) { + setValidateSlack(true); + } else { + setValidateSlack(false); + } + if (!(values.content)) { + setValidateContent(true); + } else { + setValidateContent(false); + } + } + }} + > +
    + + + + + + + + + {validateSlack &&

    Please fill in this field

    } +
    + + +
    + + + + + + {validateContent &&

    Please provide your choice of content.

    } +
    + + + + + + +
    + + + + + + + + + + +
    +
    + +
    +
    + } + { + stepNumber === 1 && + + } +
    + ); +}; + +const ThankYou = () => { + return ( +
    +

    Thank you for your interest in the Layer5 Writing Program!

    +

    You will soon receive detailed guidance from our content team. We'll get back to you as soon as we can.

    +

    In the meantime, please visit our community forum or join us in our community Slack.

    +

    - Team Layer5

    +
    + ); +}; + +export default ContentForm; diff --git a/src/collections/handbook/writing-program/content-form.style.js b/src/collections/handbook/writing-program/content-form.style.js new file mode 100644 index 0000000000000..691f5968faf9a --- /dev/null +++ b/src/collections/handbook/writing-program/content-form.style.js @@ -0,0 +1,74 @@ +import styled from "styled-components"; + +const ContentFormWrapper = styled.section` + .validation{ + margin: 0; + font-size: 0.7rem; + color: red; + } + .thank-you-box { + padding: 2rem; + margin: 1rem; + background-color: ${props => props.theme.darkJungleGreenColor}; + border-radius: 0.1rem; + min-height: 20rem; + + h2, h3 { + color: white; + } + h2{ + margin-top: 1rem; + margin-bottom: 2rem; + } + p { + margin-top: .85rem; + color: white; + } + } + .form{ + font-size: .9rem; + margin: 0 1rem 1rem; + padding: 1rem; + overflow: auto; + height: 600px; + &::-webkit-scrollbar { + display: none; + } + + label { + display: block; + font-size: 1rem; + } + + .required-sign { + color: #8b0000; + } + + .form-name { + font-weight: 600; + margin: 20px 0px 5px 3px; + display: block; + } + + .text-field { + width: 100%; + border: 1px solid black; + border-radius: 10px; + padding: .5rem .5rem; + font-size: .85rem; + } + + .text-field:focus { + border: 2px solid #00B39F; + } + + .btn { + margin: 1.9rem auto; + display: block; + width: auto; + } + + } +`; + +export default ContentFormWrapper; diff --git a/src/collections/handbook/writing-program/index.mdx b/src/collections/handbook/writing-program/index.mdx new file mode 100644 index 0000000000000..6bb5daf2d216d --- /dev/null +++ b/src/collections/handbook/writing-program/index.mdx @@ -0,0 +1,199 @@ +--- +title: "Writing Program" +description: "Join the Layer5 Writing Program to share your expertise and contribute to cloud native content" +type: Handbook +--- + +import { Container, Row, Col } from "../../reusecore/Layout"; +import { Link } from "gatsby"; +import Button from "../../reusecore/Button"; +import ContentForm from "./content-form"; + +import blog from "./images/blogs.svg"; +import event from "./images/event.svg"; +import talks from "./images/talks.svg"; +import videos from "./images/videos.svg"; +import workshop from "./images/workshop.svg"; +import resources from "./images/resources.svg"; + +

    What is Layer5 Writing Program?

    + +The Layer5 Writing Program is a way to demonstrate your expertise, give back to the community, and help us produce great content. We collaborate with authors and technologists from around the world to produce high quality articles, blog posts, tutorials and other cloud native resources on Meshery, Kubernetes, CNCF, Docker and related technologies. + +## Why should you participate? + +
    + + +
    + + + + + + + + + + + + + +
    + + + + + +

    Improve your writing and
    communication skills

    + Publishing is a feedback-driven process that can help you understand your audience better, explain complex topics more clearly, and improve your overall communication skills. +
    + + + + + +

    Demonstrate your expertise

    + Writing about a topic is one of the best ways to learn it deeply and demonstrate your knowledge to others. +
    + + + + + +

    Grow your professional network

    + Connect with other writers, technologists, and community members who share your interests. +
    +
    + + +
    + + + + + + + + + + + + + +
    + + + + + +

    Build your personal brand

    + Establish yourself as a thought leader in your field and build credibility. +
    + + + + + +

    Contribute to open source

    + Help the open source community grow by sharing your knowledge and experience. +
    + + + + + +

    Get recognized

    + Published authors receive recognition through social media, community highlights, and contributor profiles. +
    +
    + +
    +
    + +## What types of content can you contribute? + + + +
    + blogs +

    Blog posts

    +

    Technical deep-dives, tutorials, how-tos, and thought leadership pieces

    +
    + + +
    + talks +

    Conference talks

    +

    Submit proposals and present at conferences and meetups

    +
    + + +
    + videos +

    Video content

    +

    Tutorials, demos, interviews, and educational videos

    +
    + + +
    + workshop +

    Workshops

    +

    Hands-on training sessions and interactive learning experiences

    +
    + + +
    + event +

    Events

    +

    Host or speak at community events, webinars, and meetups

    +
    + + +
    + resources +

    Resources

    +

    Guides, documentation, cheat sheets, and reference materials

    +
    + +
    + +## How to get started? + +
    +
    +

    If you're interested in the Layer5 Writing Program, please submit your content proposal to get started. Don't know where to start? We have plenty of topic suggestions for you.

    + +
    +
    +

    Upon being accepted, you'll work with a coordinator on the content team to finalize your topic, develop an outline, and discuss submission details.

    +
    +
    +

    After your content is published, we'll help promote it across our social media channels and community platforms.

    +
    +
    + +## Content Guidelines + +- **Original**: All content must be original and not published elsewhere +- **Technical**: Focus on technical topics related to cloud native, Kubernetes, service mesh, and related technologies +- **Helpful**: Provide practical value to readers through tutorials, guides, or insights +- **Well-written**: Follow good writing practices with clear structure and proper grammar +- **Accurate**: Ensure all technical information is correct and up-to-date + +## Recognition + +Published authors receive: +- **Byline**: Credit on published content +- **Profile**: Featured on the community members page +- **Badge**: Writer badge on your community profile +- **Promotion**: Social media promotion of your content +- **Swag**: Layer5 swag for significant contributions + +## Additional Resources + +- Contributing to Layer5 Resources +- Join the Layer5 Discussion Forum +- Explore our Resource Library +- Learn Cloud Native +- Connect with us on Slack From 0d112d039074566e4600c5434d4cea503536811c Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Wed, 3 Dec 2025 22:41:46 +0530 Subject: [PATCH 02/43] handbook template Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook-single/HandbookPagination.js | 26 +++++++++ .../Handbook/handbook-single/HandbookTOC.js | 24 +++++++++ .../Handbook/handbook-single/index.js | 32 +++++++++++ src/templates/handbook-template.js | 54 +++++++++++++++++++ 4 files changed, 136 insertions(+) create mode 100644 src/sections/Community/Handbook/handbook-single/HandbookPagination.js create mode 100644 src/sections/Community/Handbook/handbook-single/HandbookTOC.js create mode 100644 src/sections/Community/Handbook/handbook-single/index.js create mode 100644 src/templates/handbook-template.js diff --git a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js new file mode 100644 index 0000000000000..f8e7a7144b455 --- /dev/null +++ b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js @@ -0,0 +1,26 @@ +import React from "react"; +import { Link } from "gatsby"; +import { PaginationWrapper } from "../../handbook-navigation/TocPagination.style"; + +const HandbookPagination = ({ pages, currentSlug }) => { + const currentIndex = pages.findIndex(page => page.fields.slug === currentSlug); + const prevPage = currentIndex > 0 ? pages[currentIndex - 1] : null; + const nextPage = currentIndex < pages.length - 1 ? pages[currentIndex + 1] : null; + + return ( + + {prevPage && ( + + ← {prevPage.frontmatter.title} + + )} + {nextPage && ( + + {nextPage.frontmatter.title} → + + )} + + ); +}; + +export default HandbookPagination; diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js new file mode 100644 index 0000000000000..d6609dcda8bd4 --- /dev/null +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -0,0 +1,24 @@ +import React from "react"; +import { Link } from "gatsby"; +import { TocWrapper } from "../../handbook-navigation/toc.style"; + +const HandbookTOC = ({ pages, currentSlug }) => { + return ( + +
    +

    Community Handbook

    +
      + {pages.map((page, index) => ( +
    • + + {page.frontmatter.title} + +
    • + ))} +
    +
    +
    + ); +}; + +export default HandbookTOC; diff --git a/src/sections/Community/Handbook/handbook-single/index.js b/src/sections/Community/Handbook/handbook-single/index.js new file mode 100644 index 0000000000000..9ce510c13b971 --- /dev/null +++ b/src/sections/Community/Handbook/handbook-single/index.js @@ -0,0 +1,32 @@ +import React from "react"; +import { HandbookWrapper } from "../Handbook.style"; +import { Container } from "../../../../reusecore/Layout"; +import HandbookTOC from "./HandbookTOC"; +import HandbookPagination from "./HandbookPagination"; + +const HandbookSingle = ({ data, children }) => { + const { mdx, allHandbookPages } = data; + const currentSlug = mdx.fields.slug; + + return ( + +
    +

    {mdx.frontmatter.title}

    +
    + +
    + +
    + {children} +
    + +
    +
    +
    + ); +}; + +export default HandbookSingle; diff --git a/src/templates/handbook-template.js b/src/templates/handbook-template.js new file mode 100644 index 0000000000000..da2ab49dee446 --- /dev/null +++ b/src/templates/handbook-template.js @@ -0,0 +1,54 @@ +import React from "react"; +import { graphql } from "gatsby"; + +import SEO from "../components/seo"; +import HandbookSingle from "../sections/Community/Handbook/handbook-single"; + +export const query = graphql` + query HandbookBySlug($slug: String!) { + mdx(fields: { slug: { eq: $slug } }) { + frontmatter { + title + description + } + fields { + slug + } + } + allHandbookPages: allMdx( + filter: { fields: { collection: { eq: "handbook" } } } + sort: { frontmatter: { title: ASC } } + ) { + nodes { + frontmatter { + title + } + fields { + slug + } + } + } + } +`; + +const HandbookPage = ({ data, children }) => { + return ( + <> + + {children} + + + ); +}; + +export default HandbookPage; + +export const Head = ({ data }) => { + const { frontmatter } = data.mdx; + return ( + + ); +}; From 08312a2b66bc3c08874783bc54acf09e8f823476 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Wed, 3 Dec 2025 22:42:37 +0530 Subject: [PATCH 03/43] gatsby node update Signed-off-by: Rajesh-Nagarajan-11 --- gatsby-node.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/gatsby-node.js b/gatsby-node.js index b25100c9bcd35..c34c310a310c4 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -105,6 +105,9 @@ exports.createPages = async ({ actions, graphql, reporter }) => { const resourcePostTemplate = path.resolve("src/templates/resource-single.js"); const integrationTemplate = path.resolve("src/templates/integrations.js"); + const HandbookTemplate = path.resolve("src/templates/handbook-template.js"); + + const res = await graphql(` { allPosts: allMdx(filter: { frontmatter: { published: { eq: true } } }) { @@ -122,6 +125,19 @@ exports.createPages = async ({ actions, graphql, reporter }) => { } } } + handbookPages: allMdx( + filter: { fields: { collection: { eq: "handbook" } } } + ) { + nodes { + fields { + slug + collection + } + internal { + contentFilePath + } + } + } blogTags: allMdx( filter: { fields: { collection: { eq: "blog" } } @@ -253,6 +269,9 @@ exports.createPages = async ({ actions, graphql, reporter }) => { (nodes) => nodes.fields.collection === "integrations" ); + const handbook = res.data.handbookPages.nodes; + + const singleWorkshop = res.data.singleWorkshop.nodes; const labs = res.data.labs.nodes; @@ -408,6 +427,17 @@ exports.createPages = async ({ actions, graphql, reporter }) => { }); }); + handbook.forEach((page) => { + envCreatePage({ + path: page.fields.slug, + component: `${HandbookTemplate}?__contentFilePath=${page.internal.contentFilePath}`, + context: { + slug: page.fields.slug, + }, + }); + }); + + programs.forEach((program) => { envCreatePage({ path: `/programs/${program.frontmatter.programSlug}`, @@ -605,6 +635,9 @@ exports.onCreateNode = ({ node, actions, getNode }) => { if (node.frontmatter.published) slug = `/community/members/${node.frontmatter.permalink ?? slugify(node.frontmatter.name)}`; break; + case "handbook": + slug = `/community/handbook/${slugify(node.frontmatter.title)}`; + break; case "events": if (node.frontmatter.title) slug = `/community/events/${slugify(node.frontmatter.title)}`; From 72c1148b2619205fa3dc4911cb8ea7f7e5d63655 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Wed, 3 Dec 2025 22:43:19 +0530 Subject: [PATCH 04/43] remove static pages Signed-off-by: Rajesh-Nagarajan-11 --- src/components/handbook-navigation/content.js | 18 - .../community/handbook/code-of-conduct.js | 17 - .../community/handbook/community-roles.js | 17 - src/pages/community/handbook/community.js | 17 - .../community/handbook/connect-with-us.js | 17 - src/pages/community/handbook/contribution.js | 17 - .../community/handbook/contributor-journey.js | 17 - src/pages/community/handbook/designer.js | 17 - src/pages/community/handbook/faq.js | 17 - .../community/handbook/github-process.js | 17 - src/pages/community/handbook/instructions.js | 17 - src/pages/community/handbook/learn-layer5.js | 17 - .../community/handbook/mentorship-programs.js | 17 - src/pages/community/handbook/projects.js | 20 - src/pages/community/handbook/recognition.js | 17 - .../community/handbook/repository-overview.js | 17 - .../handbook/security-vulnerabilities.js | 17 - .../community/handbook/writing-program.js | 17 - src/sections/Community/Handbook/BadgeRow.js | 41 -- .../Handbook/BookComponent/BookComponent.js | 30 - .../BookComponent/BookComponent.style.js | 97 --- src/sections/Community/Handbook/badge-item.js | 57 -- .../Community/Handbook/badges-data.js | 103 --- .../Community/Handbook/community-roles.js | 345 --------- src/sections/Community/Handbook/community.js | 138 ---- src/sections/Community/Handbook/conduct.js | 43 -- src/sections/Community/Handbook/connect.js | 317 -------- .../Community/Handbook/contributing.js | 362 ---------- .../Community/Handbook/contributor-journey.js | 213 ------ src/sections/Community/Handbook/designer.js | 68 -- src/sections/Community/Handbook/faq.js | 117 --- .../Community/Handbook/github-process.js | 414 ----------- .../Community/Handbook/instructions.js | 126 ---- src/sections/Community/Handbook/learn5.js | 89 --- .../Community/Handbook/mentorships.js | 175 ----- .../Community/Handbook/programs-data.js | 84 --- src/sections/Community/Handbook/projects.js | 251 ------- .../Community/Handbook/recognition.js | 202 ------ src/sections/Community/Handbook/repo-data.js | 675 ------------------ src/sections/Community/Handbook/repository.js | 291 -------- .../Handbook/security-vulnerabilities.js | 194 ----- .../Community/Handbook/writing-program.js | 521 -------------- .../Handbook/writing-program/content-form.js | 167 ----- .../writing-program/content-form.style.js | 74 -- 44 files changed, 5504 deletions(-) delete mode 100644 src/components/handbook-navigation/content.js delete mode 100644 src/pages/community/handbook/code-of-conduct.js delete mode 100644 src/pages/community/handbook/community-roles.js delete mode 100644 src/pages/community/handbook/community.js delete mode 100644 src/pages/community/handbook/connect-with-us.js delete mode 100644 src/pages/community/handbook/contribution.js delete mode 100644 src/pages/community/handbook/contributor-journey.js delete mode 100644 src/pages/community/handbook/designer.js delete mode 100644 src/pages/community/handbook/faq.js delete mode 100644 src/pages/community/handbook/github-process.js delete mode 100644 src/pages/community/handbook/instructions.js delete mode 100644 src/pages/community/handbook/learn-layer5.js delete mode 100644 src/pages/community/handbook/mentorship-programs.js delete mode 100644 src/pages/community/handbook/projects.js delete mode 100644 src/pages/community/handbook/recognition.js delete mode 100644 src/pages/community/handbook/repository-overview.js delete mode 100644 src/pages/community/handbook/security-vulnerabilities.js delete mode 100644 src/pages/community/handbook/writing-program.js delete mode 100644 src/sections/Community/Handbook/BadgeRow.js delete mode 100644 src/sections/Community/Handbook/BookComponent/BookComponent.js delete mode 100644 src/sections/Community/Handbook/BookComponent/BookComponent.style.js delete mode 100644 src/sections/Community/Handbook/badge-item.js delete mode 100644 src/sections/Community/Handbook/badges-data.js delete mode 100644 src/sections/Community/Handbook/community-roles.js delete mode 100644 src/sections/Community/Handbook/community.js delete mode 100644 src/sections/Community/Handbook/conduct.js delete mode 100644 src/sections/Community/Handbook/connect.js delete mode 100644 src/sections/Community/Handbook/contributing.js delete mode 100644 src/sections/Community/Handbook/contributor-journey.js delete mode 100644 src/sections/Community/Handbook/designer.js delete mode 100644 src/sections/Community/Handbook/faq.js delete mode 100644 src/sections/Community/Handbook/github-process.js delete mode 100644 src/sections/Community/Handbook/instructions.js delete mode 100644 src/sections/Community/Handbook/learn5.js delete mode 100644 src/sections/Community/Handbook/mentorships.js delete mode 100644 src/sections/Community/Handbook/programs-data.js delete mode 100644 src/sections/Community/Handbook/projects.js delete mode 100644 src/sections/Community/Handbook/recognition.js delete mode 100644 src/sections/Community/Handbook/repo-data.js delete mode 100644 src/sections/Community/Handbook/repository.js delete mode 100644 src/sections/Community/Handbook/security-vulnerabilities.js delete mode 100644 src/sections/Community/Handbook/writing-program.js delete mode 100644 src/sections/Community/Handbook/writing-program/content-form.js delete mode 100644 src/sections/Community/Handbook/writing-program/content-form.style.js diff --git a/src/components/handbook-navigation/content.js b/src/components/handbook-navigation/content.js deleted file mode 100644 index df576ebda8073..0000000000000 --- a/src/components/handbook-navigation/content.js +++ /dev/null @@ -1,18 +0,0 @@ -export const content = [ - { id: 0, link: "/community/handbook/contributor-journey", text: "About" }, - { id: 1, link: "/community/handbook/community", text: "Guidelines" }, - { id: 2, link: "/community/handbook/community-roles", text: "Roles" }, - { id: 3, link: "/community/handbook/contribution", text: "Contribution" }, - { id: 4, link: "/community/handbook/recognition", text: "Recognition" }, - { id: 5, link: "/community/handbook/repository-overview", text: "Repository Overview" }, - { id: 6, link: "/community/handbook/projects", text: "Projects" }, - { id: 7, link: "/community/handbook/mentorship-programs", text: "Mentorship Programs" }, - { id: 8, link: "/community/handbook/writing-program", text: "Writing Program" }, - { id: 9, link: "/community/handbook/designer", text: "UX Contributors" }, - { id: 10, link: "/community/handbook/learn-layer5", text: "Learning" }, - { id: 11, link: "/community/handbook/connect-with-us", text: "Connect with us" }, - { id: 12, link: "/community/handbook/code-of-conduct", text: "Code of Conduct" }, - { id: 13, link: "/community/handbook/security-vulnerabilities", text: "Security Vulnerabilities" }, - { id: 14, link: "/community/handbook/github-process", text: "GitHub Process" }, - { id: 15, link: "/community/handbook/faq", text: "FAQs" }, -]; diff --git a/src/pages/community/handbook/code-of-conduct.js b/src/pages/community/handbook/code-of-conduct.js deleted file mode 100644 index 718036bf4fcea..0000000000000 --- a/src/pages/community/handbook/code-of-conduct.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import ConductPage from "../../../sections/Community/Handbook/conduct"; - -const CommunityConduct = () => { - return ( - <> - - - - ); -}; -export default CommunityConduct; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/community-roles.js b/src/pages/community/handbook/community-roles.js deleted file mode 100644 index a1219dd3305b7..0000000000000 --- a/src/pages/community/handbook/community-roles.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import LeadershipPage from "../../../sections/Community/Handbook/community-roles"; - -const ContributorJourney = () => { - return ( - <> - - - - ); -}; -export default ContributorJourney; -export const Head = () => { - return ; -}; diff --git a/src/pages/community/handbook/community.js b/src/pages/community/handbook/community.js deleted file mode 100644 index d67747d41c328..0000000000000 --- a/src/pages/community/handbook/community.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import CommunityPage from "../../../sections/Community/Handbook/community"; - -const Community = () => { - return ( - <> - - - - ); -}; -export default Community; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/connect-with-us.js b/src/pages/community/handbook/connect-with-us.js deleted file mode 100644 index e10ec812ac547..0000000000000 --- a/src/pages/community/handbook/connect-with-us.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import ConnectPage from "../../../sections/Community/Handbook/connect"; - -const Connect = () => { - return ( - <> - - - - ); -}; -export default Connect; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/contribution.js b/src/pages/community/handbook/contribution.js deleted file mode 100644 index 3ad57354160ac..0000000000000 --- a/src/pages/community/handbook/contribution.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import ContributingPage from "../../../sections/Community/Handbook/contributing"; - -const Contributing = () => { - return ( - <> - - - - ); -}; -export default Contributing; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/contributor-journey.js b/src/pages/community/handbook/contributor-journey.js deleted file mode 100644 index d415a40a55097..0000000000000 --- a/src/pages/community/handbook/contributor-journey.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import AboutPage from "../../../sections/Community/Handbook/contributor-journey"; - -const CommunityAbout = () => { - return ( - <> - - - - ); -}; -export default CommunityAbout; -export const Head = () => { - return ; -}; diff --git a/src/pages/community/handbook/designer.js b/src/pages/community/handbook/designer.js deleted file mode 100644 index 1566fe509afb9..0000000000000 --- a/src/pages/community/handbook/designer.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import Designers from "../../../sections/Community/Handbook/designer"; - -const Faq = () => { - return ( - <> - - - - ); -}; -export default Faq; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/faq.js b/src/pages/community/handbook/faq.js deleted file mode 100644 index 3d713cc58a670..0000000000000 --- a/src/pages/community/handbook/faq.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import Faqs from "../../../sections/Community/Handbook/faq"; - -const Faq = () => { - return ( - <> - - - - ); -}; -export default Faq; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/github-process.js b/src/pages/community/handbook/github-process.js deleted file mode 100644 index 6cdaa28080833..0000000000000 --- a/src/pages/community/handbook/github-process.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import GitHubProcessPage from "../../../sections/Community/Handbook/github-process"; - -const GitHubProcess = () => { - return ( - <> - - - - ); -}; -export default GitHubProcess; -export const Head = () => { - return ; -}; diff --git a/src/pages/community/handbook/instructions.js b/src/pages/community/handbook/instructions.js deleted file mode 100644 index 2c9b0d4b617e7..0000000000000 --- a/src/pages/community/handbook/instructions.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import GitHubOrgMembership from "../../../sections/Community/Handbook/instructions"; - -const GithubOrgMember = () => { - return ( - <> - - - - ); -}; -export default GithubOrgMember; -export const Head = () => { - return ; -}; diff --git a/src/pages/community/handbook/learn-layer5.js b/src/pages/community/handbook/learn-layer5.js deleted file mode 100644 index 7d39c02f9fdcd..0000000000000 --- a/src/pages/community/handbook/learn-layer5.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import LearnPage from "../../../sections/Community/Handbook/learn5"; - -const CommunityLearn = () => { - return ( - <> - - - - ); -}; -export default CommunityLearn; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/mentorship-programs.js b/src/pages/community/handbook/mentorship-programs.js deleted file mode 100644 index 3ff04d4611e8b..0000000000000 --- a/src/pages/community/handbook/mentorship-programs.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import MentorshipPage from "../../../sections/Community/Handbook/mentorships"; - -const Mentorship = () => { - return ( - <> - - - - ); -}; -export default Mentorship; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/projects.js b/src/pages/community/handbook/projects.js deleted file mode 100644 index 43d93c4352a3d..0000000000000 --- a/src/pages/community/handbook/projects.js +++ /dev/null @@ -1,20 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import ProjectsPage from "../../../sections/Community/Handbook/projects"; - -const CommunityProjects = () => { - return ( - <> - - - - ); -}; -export default CommunityProjects; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/recognition.js b/src/pages/community/handbook/recognition.js deleted file mode 100644 index 69bb835c9334f..0000000000000 --- a/src/pages/community/handbook/recognition.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import RecognitionPage from "../../../sections/Community/Handbook/recognition"; - -const Recognition = () => { - return ( - <> - - - - ); -}; -export default Recognition; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/repository-overview.js b/src/pages/community/handbook/repository-overview.js deleted file mode 100644 index f361175b954c6..0000000000000 --- a/src/pages/community/handbook/repository-overview.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import RepoPage from "../../../sections/Community/Handbook/repository"; - -const CommunityRepository = () => { - return ( - <> - - - - ); -}; -export default CommunityRepository; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/security-vulnerabilities.js b/src/pages/community/handbook/security-vulnerabilities.js deleted file mode 100644 index 40f986b2a20e1..0000000000000 --- a/src/pages/community/handbook/security-vulnerabilities.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import SecurityVulnerabilitiesPage from "../../../sections/Community/Handbook/security-vulnerabilities"; - -const SecurtyVulnerabilities = () => { - return ( - <> - - - - ); -}; -export default SecurtyVulnerabilities; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/pages/community/handbook/writing-program.js b/src/pages/community/handbook/writing-program.js deleted file mode 100644 index 53248d3a905ee..0000000000000 --- a/src/pages/community/handbook/writing-program.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; - -import SEO from "../../../components/seo"; -import Writers from "../../../sections/Community/Handbook/writing-program"; - -const Faq = () => { - return ( - <> - - - - ); -}; -export default Faq; -export const Head = () => { - return ; -}; \ No newline at end of file diff --git a/src/sections/Community/Handbook/BadgeRow.js b/src/sections/Community/Handbook/BadgeRow.js deleted file mode 100644 index c97fc52853ac9..0000000000000 --- a/src/sections/Community/Handbook/BadgeRow.js +++ /dev/null @@ -1,41 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -const cell = { padding: "12px", verticalAlign: "middle" }; -const badgeImg = { height: "50px", width: "50px", verticalAlign: "middle" }; - -const BadgeRow = ({ image, name, title, badgeKey, keycode, keyProp, description }) => { - const displayName = name || title || "—"; - const displayKey = badgeKey || keycode || keyProp || "—"; - - return ( - - - {typeof image === "string" ? ( - {displayName} - ) : ( - image - )} - - - {displayName} - - - {displayKey} - - {description || "—"} - - ); -}; - -BadgeRow.propTypes = { - image: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - name: PropTypes.string, - title: PropTypes.string, - badgeKey: PropTypes.string, - keycode: PropTypes.string, - keyProp: PropTypes.string, - description: PropTypes.node, -}; - -export default BadgeRow; diff --git a/src/sections/Community/Handbook/BookComponent/BookComponent.js b/src/sections/Community/Handbook/BookComponent/BookComponent.js deleted file mode 100644 index 1a5aa0aeb56e7..0000000000000 --- a/src/sections/Community/Handbook/BookComponent/BookComponent.js +++ /dev/null @@ -1,30 +0,0 @@ -import React, { useEffect } from "react"; -import BookComponentWrapper from "./BookComponent.style"; -import handbookdark from "../images/handbook-dark.webp"; -import { Link } from "gatsby"; - -const BookComponent = () => { - useEffect(() => { - const bookElement = document.querySelector(".book"); - bookElement.classList.add("rot-on-rel"); - }, []); - return ( - - -
    - Community HandBook -
    - -
    - ); -}; - -export default BookComponent; diff --git a/src/sections/Community/Handbook/BookComponent/BookComponent.style.js b/src/sections/Community/Handbook/BookComponent/BookComponent.style.js deleted file mode 100644 index 08ee2d04984c7..0000000000000 --- a/src/sections/Community/Handbook/BookComponent/BookComponent.style.js +++ /dev/null @@ -1,97 +0,0 @@ -import styled from "styled-components"; - -const BookComponentWrapper = styled.div` -.book-container { - display: flex; - align-items: center; - justify-content: center; - perspective: 600px; -} - -@keyframes initAnimation { - 0% { - transform: rotateY(0deg); - } - 100% { - transform: rotateY(-30deg); - } -} - -.rot-on-rel { - transform: rotateY(0deg); -} - -.book { - min-width: 200px; - min-height: 300px; - position: relative; - transform-style: preserve-3d; - transform: rotateY(-30deg); - transition: 1s ease; - animation: 1s ease 0s 1 initAnimation; -} - -.book:hover { - transform: rotateY(0deg); -} - -.book > :first-child { - position: absolute; - top: 0; - left: 0; - background-color: red; - width: 200px; - height: 300px; - transform: translateZ(25px); - background-color: #171a12; - border-radius: 0 2px 2px 0; -} - -.book::before { - position: absolute; - content: ' '; - left: 0; - top: 3px; - width: 48px; - height: 294px; - transform: translateX(172px) rotateY(90deg); - background: linear-gradient(90deg, - #fff 0%, - #f9f9f9 5%, - #fff 10%, - #f9f9f9 15%, - #fff 20%, - #f9f9f9 25%, - #fff 30%, - #f9f9f9 35%, - #fff 40%, - #f9f9f9 45%, - #fff 50%, - #f9f9f9 55%, - #fff 60%, - #f9f9f9 65%, - #fff 70%, - #f9f9f9 75%, - #fff 80%, - #f9f9f9 85%, - #fff 90%, - #f9f9f9 95%, - #fff 100% - ); -} - -.book::after { - position: absolute; - top: 0; - left: 0; - content: ' '; - width: 200px; - height: 300px; - transform: translateZ(-25px); - background-color: #292929; - border-radius: 0 2px 2px 0; - box-shadow: -2px 1px 30px 2px #666; -} -`; - -export default BookComponentWrapper; \ No newline at end of file diff --git a/src/sections/Community/Handbook/badge-item.js b/src/sections/Community/Handbook/badge-item.js deleted file mode 100644 index 6b90ce71c58fb..0000000000000 --- a/src/sections/Community/Handbook/badge-item.js +++ /dev/null @@ -1,57 +0,0 @@ -import React from "react"; -import PropTypes from "prop-types"; - -const imgStyle = { - height: "50px", - width: "50px", - verticalAlign: "middle", - marginRight: "1rem", -}; - - -const BadgeItem = ({ title, description, image, href, to }) => { - const content = ( - <> - {typeof image === "string" ? ( - {title} - ) : ( - image - )} - {title} - {description ? <> — {description} : null} - - ); - - if (href) { - return ( -
  • - - {content} - -
  • - ); - } - - if (to) { - return ( -
  • - {content} -
  • - ); - } - - return
  • {content}
  • ; -}; - -BadgeItem.propTypes = { - title: PropTypes.string.isRequired, - description: PropTypes.node, - image: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.node, - ]), - href: PropTypes.string, - to: PropTypes.string, -}; - -export default BadgeItem; diff --git a/src/sections/Community/Handbook/badges-data.js b/src/sections/Community/Handbook/badges-data.js deleted file mode 100644 index 4a3c59b243be4..0000000000000 --- a/src/sections/Community/Handbook/badges-data.js +++ /dev/null @@ -1,103 +0,0 @@ -import React from "react"; - -import DesignPioneerLogo from "../../../assets/images/design-pioneer/design-pioneer.svg"; -import ApplicationPioneerLogo from "../../../assets/images/application-pioneer/application-pioneer.svg"; -import SharingIsCaringLogo from "../../../assets/images/sharing-is-caring/sharing-is-caring.svg"; -import ShippedLogo from "../../../assets/images/shipped/shipped.svg"; -import NeedForSpeedLogo from "../../../assets/images/need-for-speed/need-for-speed.svg"; -import HipHackerLogo from "../../../assets/images/hip-hacker/hip-hacker.svg"; -import StreamerLogo from "../../../assets/images/streamer/streamer.svg"; -import GitOPsWithFriendsLogo from "../../../assets/images/gitops-with-friends/gitops-with-friends.svg"; -import BringABuddyLogo from "../../../assets/images/bring-a-buddy/bring-a-buddy.svg"; -import CodeCleanupCrewLogo from "../../../assets/images/code-cleanup-crew/code-cleanup-crew.svg"; -import SecuritySentinelLogo from "../../../assets/images/security-sentinel/security-sentinel.webp"; -import LogevityLegendLogo from "../../../assets/images/longevity-legend/longevity-legend.svg"; -import ReviewRockstarLogo from "../../../assets/images/review-rockstar/review-rockstar.svg"; -import KanvasSnapshotLogo from "../../../assets/images/kanvas-snapshot/kanvas-snapshot.svg"; -import SistentContributorLogo from "../../../assets/images/sistent/badges/sistent-contributor.svg"; -import ContinuousContributorLogo from "../../../assets/images/continuous-contributor/continuous-contributor.svg"; - -import ImageHubLogo from "../../../assets/images/image-hub/layer5-image-hub.svg"; -import kanvasLogo from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; -import ServiceMeshPerformance from "../../../assets/images/service-mesh-performance/stacked/smp-dark-text.svg"; -import AcademyLogo from "../../../assets/images/academy/academy.svg"; -import CommunityLogo from "../../../assets/images/community/community-green.svg"; -import MesheryLogo from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; -import PatternsLogo from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import LandscapeGreen from "../../../assets/images/landscape/layer5_landscape_green.svg"; -import writersLogo from "../../../assets/images/writer-program/writer-program-badge.svg"; -import NightHawkLogo from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; -import uiuxrLogo from "../../../assets/images/uiuxr/uiuxr.svg"; -import MesheryCatalogLogo from "../../../assets/images/meshery/meshery-catalog.svg"; -import DockerExtension from "../../../assets/images/docker-extension/docker-extension-meshery-logo.svg"; -import DocsLogo from "../../../assets/images/docs/docs.svg"; - -export const activityBadges = [ - { name: "Design Pioneer", title: "Design Pioneer", badgeKey: "first-design", image: DesignPioneerLogo, description: "Awarded to the Layer5 cloud users when they create their first design." }, - { name: "Application Pioneer", title: "Application Pioneer", badgeKey: "first-application", image: ApplicationPioneerLogo, description: "Awarded to the Layer5 cloud users when they create their first application." }, - { name: "Sharing is Caring", title: "Sharing is Caring", badgeKey: "first-share", image: SharingIsCaringLogo, description: "This badge is awarded upon first-time sharing one of your designs." }, - { name: "Shipped", title: "Shipped", badgeKey: "first-deployment", image: ShippedLogo, description: "This badge is awarded upon the success of your first design deployment." }, - { name: "Need for Speed", title: "Need for Speed", badgeKey: "need-for-speed", image: NeedForSpeedLogo, description: "This badge is awarded upon successful execution of your first performance test." }, - { name: "Hip Hacker", title: "Hip Hacker", badgeKey: "first-interactive-terminal-session", image: HipHackerLogo, description: "First Interactive Terminal Session - awarded the first time that you establish an interactive terminal session with a Kubernetes Pod." }, - { name: "Streamer", title: "Streamer", badgeKey: "first-log-streaming-session", image: StreamerLogo, description: "First Log Streaming Session - awarded the first time that you stream logs from a Kubernetes Pod." }, - { name: "GitOps with Friends", title: "GitOps with Friends", badgeKey: "first-collaborator", image: GitOPsWithFriendsLogo, description: "First Collaborator - awarded the first time a collaborator saves changes to one of your designs." }, - { name: "Bring a Buddy", title: "Bring a Buddy", badgeKey: "bring-a-buddy", image: BringABuddyLogo, description: "Awarded to the users who invite someone to Layer5 cloud." }, - { name: "Code Cleanup Crew", title: "Code Cleanup Crew", badgeKey: "code-cleanup-crew", image: CodeCleanupCrewLogo, description: "Awarded to contributors who help maintain code quality and cleanliness." }, - { name: "Security Sentinel", title: "Security Sentinel", badgeKey: "security-sentinel", image: SecuritySentinelLogo, description: "Awarded to individuals who contribute to identifying and fixing security vulnerabilities." }, - { name: "Longevity Legend", title: "Longevity Legend", badgeKey: "longevity-legend", image: LogevityLegendLogo, description: "Awarded for long-term, sustained contributions to the project over the years." }, - { name: "Review Rockstar", title: "Review Rockstar", badgeKey: "review-rockstar", image: ReviewRockstarLogo, description: "Awarded to individuals who provide thorough and valuable code reviews." }, - { name: "Kanvas Snapshot", title: "Kanvas Snapshot", badgeKey: "meshmap-snapshot", image: KanvasSnapshotLogo, description: "Awarded to users upon creation of their first infrastructure screenshot directly in their pull request." }, - { name: "Continuous Contributor", title: "Continuous Contributor", badgeKey: "continuous-contributor", image: ContinuousContributorLogo, description: "Awarded to the community members who make consistent and impactful contributions for a long period of time in Layer5 projects in recognition and appreciation of their efforts." }, - { name: "Sistent Contributor", title: "Sistent Contributor", badgeKey: "sistent-contributor", image: SistentContributorLogo, description: "Awarded to the community members who make consistent and impactful contributions to the Sistent project as a recognition and appreciation of their efforts." }, - - { name: "GitOps Connected", title: "GitOps Connected", badgeKey: "gitops-connected", image: "https://badges.layer5.io/assets/badges/gitops-connected/gitops-connected.png", description: "Awarded to users upon establishment of a connection with Meshery GitHub App.", href: "https://badges.layer5.io/assets/badges/gitops-connected/gitops-connected.png" }, - { name: "MeshMate", title: "MeshMate", badgeKey: "meshmate", image: "https://badges.layer5.io/assets/badges/meshmate/meshmate.png", description: "Awarded to community members who actively support and guide others, embodying the spirit of collaboration and knowledge sharing in the Layer5 community." }, - { name: "Hacktoberfest Contributor", title: "Hacktoberfest Contributor", badgeKey: "hacktoberfest-contributor", image: "https://badges.layer5.io/assets/badges/hacktoberfest-contributor/hacktoberfest-contributor.png", description: "Awarded to the contributors who contribute to any Layer5 project during Hacktoberfest." }, - { name: "Hacktoberfest '24 Contributor", title: "Hacktoberfest '24 Contributor", badgeKey: "hacktoberfest-24-contributor", image: "https://badges.layer5.io/assets/badges/hacktoberfest-contributor-2024/layer5-hacktoberfest-badge-2024.png", description: "Awarded to the contributors who contribute to any Layer5 project during Hacktoberfest 2024." }, - { name: "Hacktoberfest 2025 Contributor", title: "Hacktoberfest 2025 Contributor", badgeKey: "hacktoberfest25", image: "https://badges.layer5.io/assets/badges/hacktoberfest-contributor-2025/hacktoberfest25-badge.png", description: "Awarded to community members who participate in Hacktoberfest 2025 by making meaningful contributions to Layer5 projects during the month of October 2025." }, -]; - -export const projectBadges = [ - { name: "Image Hub", title: "Image Hub", badgeKey: "image-hub", image: ImageHubLogo, description: "Awarded to the community members who make consistent and impactful contributions to the Image Hub project in recognition and appreciation of their efforts." }, - { name: "Kanvas", title: "Kanvas", badgeKey: "kanvas", image: kanvasLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Kanvas project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer. }, - { name: "Cloud Native Performance", title: "Cloud Native Performance", badgeKey: "cloud-native-performance", image: ServiceMeshPerformance, description: "Awarded to the community members who make consistent and impactful contributions to the Cloud Native Performance project. Community members who earn this badge occasionally become a project maintainer." }, - { name: "Academy", title: "Academy", badgeKey: "academy", image: AcademyLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Layer5 Academyproject in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer. }, - { name: "MeshMap", title: "MeshMap", badgeKey: "meshmap", image: "https://badges.layer5.io/assets/badges/meshmap/meshmap.svg", description: "Awarded to the community members who make consistent and impactful contributions to the MeshMap project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer." }, - { name: "MeshSync", title: "MeshSync", badgeKey: "meshsync", image: "https://badges.layer5.io/assets/badges/meshsync/meshsync.png", description: "Awarded to the community members who make consistent and impactful contributions to MeshSync in recognition and appreciation of their efforts." }, - { name: "Community", title: "Community", badgeKey: "community", image: CommunityLogo, description: "WAwarded to the community members who repeatedly engage in welcoming, encouraging, and supporting other Layer5 community members. Community members who earn this badge occasionally graduate to undertaking the Community Manager role." }, - { name: "Meshery", title: "Meshery", badgeKey: "meshery", image: MesheryLogo, description: "Awarded to the community members who make consistent and impactful contributions to the Meshery project. Community members who earn this badge occasionally become a project maintainer." }, - { name: "Meshery Operator", title: "Meshery Operator", badgeKey: "meshery-operator", image: MesheryOperator, description: "Awarded to the community members who make consistent and impactful contributions to Meshery Operator of the Meshery project in recognition and appreciation of their efforts." }, - { name: "Patterns", title: "Patterns", badgeKey: "patterns", image: PatternsLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Cloud Native Patterns project in recognition and appreciation of their efforts. }, - { name: "Landscape", title: "Landscape", badgeKey: "landscape", image: LandscapeGreen, description: "Awarded to the community members who make consistent and impactful contributions to the layer5.io website." }, - { name: "Writer's Program", title: "Writer's Program", badgeKey: "writers-program", image: writersLogo, description: "Awarded to the community members who make with two or more published writings whether in article, blog post, project documentation or other form in recognition and appreciation of their efforts." }, - { name: "Nighthawk", title: "Nighthawk", badgeKey: "nighthawk", image: NightHawkLogo, description: "Awarded to the community members who make consistent and impactful contributions to the NightHawk project in recognition and appreciation of their efforts. Community members who earn this badge occasionally become a project maintainer." }, - { name: "UI/UX", title: "UI/UX", badgeKey: "ui-ux", image: uiuxrLogo, description: "Awarded to the community members who create or improve designs for visual aspects or user flow for any of the websites, flyers, promotions, Meshery UI, and so on in recognition and appreciation of their efforts." }, - { name: "Meshery Catalog", title: "Meshery Catalog", badgeKey: "meshery-catalog", image: MesheryCatalogLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Meshery Catalog of Meshery project in recognition and appreciation of their efforts. }, - { name: "Docker Extension", title: "Docker Extension", badgeKey: "docker-extension", image: DockerExtension, description: "Awarded to the community members who make consistent and impactful contributions to the Docker Extension of meshery project in recognition and appreciation of their efforts." }, - { name: "Docs", title: "Docs", badgeKey: "docs", image: DocsLogo, description: <>Awarded to the community members who make consistent and impactful contributions to the Meshery docs in recognition and appreciation of their efforts. }, -]; - -export const specialBadges = [ - { - key: "certified-meshery-contributor", - name: "Certified Meshery Contributor", - title: "Certified Meshery Contributor", - image: "https://badges.layer5.io/static/certification-program-6ea140e34c1dd08074ec896d0b98c0f8.png", - description: "Recognition of contributor expertise." - }, - { - key: "cncf-ambassador", - name: "CNCF Ambassador", - title: "CNCF Ambassador", - image: "https://badges.layer5.io/assets/badges/cncf-ambassador/cncf-ambassador.png", - description: "This is a special edition badge awarded to CNCF Ambassadors." - }, - { - key: "docker-captain", - name: "Docker Captain", - title: "Docker Captain", - image: "https://badges.layer5.io/assets/badges/docker-captain/docker-captain.png", - description: "This is a special edition badge awarded to Docker Captains." - }, -]; diff --git a/src/sections/Community/Handbook/community-roles.js b/src/sections/Community/Handbook/community-roles.js deleted file mode 100644 index 425fb46319fbc..0000000000000 --- a/src/sections/Community/Handbook/community-roles.js +++ /dev/null @@ -1,345 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -import { Link } from "gatsby"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; - -const contents = [ - { id: 0, link: "#top", text: "What are the different roles in the Layer5 community?", }, - { id: 1, link: "#Community Manager", text: "Community Manager" }, - { id: 2, link: "#MeshMate", text: "MeshMate" }, - { id: 3, link: "#Maintainer", text: "Maintainer", }, - { id: 4, link: "#ReleaseManager", text: "Release Manager" }, - { id: 5, link: "#GitHubCzar", text: "GitHub Czar" }, -]; - -const CommunityGuide = () => { - return ( - - <> -
    -

    Community Roles

    -
    - -
    - -
    - -

    Layer5 community leader undertake different roles

    -
    -

    - A leader is someone who can contribute to the Layer5 Community's - growth by faithfully upholding one of the responsibilities outlined in the roles below. -

    -

    - Community Manager -

    -

    - Layer5 Community Managers generally oversee community activities and support ongoing initiatives. They are responsible for the health and growth of the community. Community Managers cultivate an environment which attracts new community members by ensuring that timely and completed responses are provided to questions asked. Community Managers work to ensure that existing community members are retained by helping those members stay engaged in projects on an ongoing basis. Aspects of marketing including member and project promotion as well as aspects of project management by organizing meetings and triaging issues are under the purview of Community Managers. -

    -

    - A Community Manager is a person who has an innate drive to contribute to the community's prosperity. A community manager serves as a link between the organisation and - its community, overcoming obstacles as they arise—or even before - they arise!—by collaborating with other departments and the - community to find solutions that benefit the entire community. -

    -

    Role:

    -
      -
    1. Moderating, engaging, and supporting community members on platforms like Slack, GitHub etc.
    2. -
    3. Building healthy relationships among community members.
    4. -
    5. Celebrating community successes, sending swag, and recognizing top contributors.
    6. -
    7. Regularly updating the community on the metrics performance.
    8. -
    9. Creating and managing new community programs.
    10. -
    11. Organizing meetups, events, and other engagements.
    12. -
    13. Coordinating with other departments—such as product, engineering, and content marketing—to support community initiatives.
    14. -
    -

    Responsibilities of Community Managers

    -

    - The responsibilities of a Community Manager involves building, stewarding, and organizing the Layer5 Community. -

    -

    Daily:

    -
      -
    1. Issue Triage on GitHub (Issue squatters) -
        -
      1. Make use of issue/remind and issue/dco.
      2. -
      3. Issue squatters are to be politely, but briskly brushed aside
      4. -
      5. Remove assignment if not response from the assignee.
      6. -
      7. Search Link: All Open Issues Across Layer5 Orgs (Sorted by Oldest First)
      8. -
      -
    2. -
    -

    Weekly:

    -
      -
    1. Assess as a candidate for GitHub org invitation. -
        -
      1. Make use of issue/invite (on issues only, not PRs).
      2. -
      -
    2. -
    3. Assess as a candidate for community member profile. -
        -
      1. See sample message.
      2. -
      -
    4. -
    5. Weekly evaluation and nomination of community members for the next step in the contributor ladder.
    6. -
    7. Review Community Members spreadsheet. Identify members that need extra attention.
    8. -
    -

    Monthly:

    -
      -
    1. Assess each community member profile for transition to inactive. Use a period of two months of inactivity as the metric.
    2. -
    3. Monthly evaluation of Social sharing and SEO tracker. -
        -
      1. For each Twitter account: -
          -
        1. Rate of new followership, Month over month count of followers.
        2. -
        -
      2. -
      3. For each LinkedIn account: -
          -
        1. Competitive comparison: total count, current month (new follower rate) and historical (rate)
        2. -
        -
      4. -
      5. For layer5.io site:
      6. -
      7. MailChimp: rate of new subscriber vs unsubscribers; most popular content; click rate
      8. -
      -
    4. -
    5. Monthly evaluation of DevStats -
        -
      1. Orbit: Evaluation -
          -
        1. Slack integration for Orbit?
        2. -
        -
      2. -
      -
    6. -
    7. Every week on Thursday at 8:30 pm | 10:00 am CT - meeting and minutes. -
        -
      1. Evaluation of suggested changes to community management process, tooling, or people. See Community Management Improvements.
      2. -
      -
    8. -
    9. Event management -
        -
      1. Workshops, Webinars, Conferences
      2. -
      3. CFPs
      4. -
      -
    10. -
    11. Reset the Slack invitation on slack.layer5.io and slack.meshery.io. -
        -
      1. Visit https://layer5io.slack.com/admin/invites
      2. -
      3. Deactivate existing invite link. Create new invite link.
      4. -
      5. Update both https://github.com/layer5io/slack/blob/master/index.html and https://github.com/meshery/slack/blob/master/index.html
      6. -
      -
    12. -
    - -

    - - MeshMate - -

    -
    -

    Role

    -

    - **Layer5 MeshMates** is a community member onboarding and mentoring program. Layer5 MeshMates are committed to helping community members be successful contributors. MeshMates aid in identifying areas of projects to engage within, working groups to join, and in helping community members grow in their open source and cloud native knowledge. By connecting one-on-one, MeshMates will share tips on how to have the best community experience possible. -

    -

    - The role of the **Community Manager** and the **MeshMate** are intertwined. It is not uncommon for an individual to be both a Community Manager and a MeshMate. The role of a Community Manager involves stewarding, building, and organizing the Layer5 Community. - - Layer5 MeshMates are committed to helping community members be - successful contributors. MeshMates aid in identifying areas of - projects to engage within, working groups to join, and helping - community members grow in their open-source and cloud-native - knowledge. By connecting one-on-one, MeshMates will share tips on how to have the best community experience possible. -

    -
      -
    • Increasing awareness of the community to others
    • -
    • Helping newbies in the community get familiar with all of the projects
    • -
    • Providing necessary resources to contributors
    • -
    • Mentoring members of the community
    • -
    • Facilitate newcomers call
    • -
    - -

    - Maintainer -

    -
    -

    - Roles/Responsibilities: -
    - Maintainers are those who are responsible for managing the growth - and performance of the project. They are incharge of the project's - wellbeing, reviewing and merging the PR, updating the libraries - and dependencies in that project, monitoring the codebase and so - much more. -

    -
      -
    • Send a reminder about meetings
    • -
    • Prepare meetings
    • -
    • Lead meetings
    • -
    • Make sure meeting minutes are kept
    • -
    • Facilitate the creation and advancement of metrics/software
    • -
    • Answer questions about the progress of Layer5 projects
    • -
    • Report on weekly community call progress on a project
    • -
    • Review issues on the repository
    • -
    • Review and merge pull requests
    • -
    • Regularly check the repository for stale content
    • -
    • Monitor issue tracker and pull requests
    • -
    -

    - Checklist before becoming a Maintainer -

    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    - -

    Release Manager Role

    -
    -

    - Roles/Responsibilities:
    - The role of release manager for a release lasts a total of about 6 months. This is divided up among activities before the initial release comes out and activities after the initial release while the release is within active maintenance. The majority of the time is spent in the month before the first release. After that, there is 6 months of time during which point releases come out on approximately a 3 week cycle. During three of these months, the release manager is working on the latest release. This 6 month time period is divided into two sections. In the first three months, this is the primary release and all fixes get cherry-picked from master here. After 3 months, the next release of the Meshery project comes out and there are three more months of support before this release goes to the end of life. -

    -

    Before Release

    -
      -
    • Cutting branches -- 8 to 16 hours divided between all release managers. Working on automating. Will still take a while with automation, probably around half a day. With automation, a lot of the time will be waiting for automated steps to complete as opposed to being directly involved.
    • -
    • Testing days -- 8 to 16 hours divided between all release managers spread over two weeks in order to orchestrate the testing events. This does not include any time that the release managers additionally devote to picking up and testing individual tests.
    • -
    • Spreadsheets
    • -
    • Prioritization
    • -
    • Chasing people to get things done
    • -
    • Prioritization of issues in step with workgroups
    • -
    • Release management meetings -- 45 minutes to 1 hour every week for each release manager. Increases as the release gets closer.
    • -
    • Release notes/upgrade notes for point release -- 1 week for of the release managers as well as reviewing from other release managers
    • -
    • Code reviews from docs team as well as workgroup leads
    • -
    • Generation of release notes using automated tooling
    • -
    • Updating release notes to make them more readable
    • -
    • Announcement of release on Twitter/Discuss/Slack -- 5 minutes for one release manager for Discuss/Slack. For Twitter, reach out to someone with access.
    • -
    -

    Ongoing for all releases

    -
      -
    • Watching for release blockers - part of the code review process. Wouldn't say it needs additional time
    • -
    • Code reviews/deciding whether to accept cherry picks -- about an hour per day for each release manager. Ramps up just before the initial release. Ramps down to an hour per week towards the EOL for a release
    • -
    • Minor release every 3 weeks.
    • -
    • Release notes - 1 hour for a single release manager
    • -
    • Creating releases - 8 hours spread across all release managers. Most of this is automated (i.e. update proxy and then wait for tests to complete, trigger a build and wait for tests to complete)
    • -
    • 48 hour testing -- this involves requesting those who run the tests to trigger the tests and waiting for 48 hours. There is very little needed from a release manager other than checking in to make sure everything is working well
    • -
    • Handle vulnerability fix integration in step with product security workgroup -- approximately 3 patch releases -- for private security releases, release managers are responsible for coordinating a flush release to get all fixes before the security fix out as well as ensuring they don't accept patches until the release is out. Most of the additional release related work is taken care of by the security fix lead although the release managers are expected to review release notes, build PRs, and other related content. The flush release takes about the same amount of time as a regular release.
    • -
    • Meshery build and release meetings -- one hour per release manager per week
    • -
    • End Of Life for release -- 8 hours
    • -
    -

    Qualifications for Release Manager

    -
      -
    • A member of the Layer5 community and active for the last 3 months
    • -
    • Approved by a majority vote of current maintainers.
    • -
    • At least one release manager for each version needs to meet requirements for access info in case of vulnerabilities
    • -
    -

    Process for volunteering for release management

    -

    Contact a current maintainer to volunteer or nominate yourself.

    - -

    GitHub Czar

    -
    - -

    Role:
    - The GitHub Czar is a GitHub-focused role within the Layer5 community responsible for keeping the organization’s GitHub repositories well-maintained, active, and contributor-friendly. This role exists as a specialized extension of the Community Manager role and works closely with maintainers and community leaders to support the technical and collaborative health of Layer5's GitHub ecosystem. -

    -

    - GitHub Czars ensure that issues and pull requests are actively triaged, contributors are appropriately engaged, and the repositories reflect up-to-date, community-driven activity. -

    - -

    Responsibilities:

    - -

    Daily / Ongoing: -

      -
    • Triage GitHub Issues: Apply labels such as issue/remind, issue/dco, good-first-issue; close outdated or duplicate issues.
    • -
    • Monitor Issue Assignees: Gently remind inactive assignees and reclaim issues after ~7–10 days.
    • -
    • Review Pull Requests: Perform initial checks and tag reviewers/maintainers.
    • -
    • Enforce Contribution Standards: Ensure compliance with DCO, PR templates, and commit guidelines.
    • -
    • Bump Off Squatters: Use labels/comments to reclaim blocked or inactive issues.
    • -
    -

    -

    Weekly: -

      -
    • Contributor Engagement: Highlight contributors, recommend org invitations, and thank new contributors.
    • -
    • Support Issue Curation: Maintain help-wanted, good-first-issue, and project boards.
    • -
    • Identify Gaps: Escalate repo health concerns like outdated PRs, untested code, etc.
    • -
    -

    - -

    - Checklist before becoming a GitHub Czar -

    - - - - - - - - - - -
    - -
    - -
    - -
    - ); -}; - -export default CommunityGuide; diff --git a/src/sections/Community/Handbook/community.js b/src/sections/Community/Handbook/community.js deleted file mode 100644 index 07460a413d6c3..0000000000000 --- a/src/sections/Community/Handbook/community.js +++ /dev/null @@ -1,138 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import { Link } from "gatsby"; -import Point from "./images/bullet.svg"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; - -const contents = [ - { id: 0, link: "#Community Guidelines", text: "Guidelines" }, - { id: 1, link: "#Resources", text: "Resources" }, -]; - -const CommunityGuide = () => { - return ( - -
    -

    Community

    -
    - -
    - -
    - {" "} - -

    Community Guidelines

    -
    -

    - Welcome to the Layer5 community! We’re happy to have you here and - handhold you for your first contribution. Here are some tips to - help you get started: -

    -

    - Point - For Easy Identification - When setting up your - slack workspace, your display name should be the same as your - GitHub username for easy identification, engage freely, and in - whatever form you will: as a listener, user, contributor, - maintainer, ambassador, or bystander. Involvement in any way is - warmly received. -

    -

    - Point - Familiarize with the community - As you get to - familiarize yourself with the community, know that there are - multiple initiatives for you to explore. Some initiatives have - working groups that meet at different times each week, while - others use the weekly community meeting as their place of - discussion. Details of each can be found on the{" "} - community calendar. Everyone - is welcome to join the calls and engage with other community - members over Slack, the mailing list, and so on. -

    -

    - Point - Familiarize with the projects - The following is - a sample of the many active, ongoing community projects. One way - of doing so is to review the{" "} - - Layer5 Repository Overview - {" "} - section of this handbook to get a better understanding of each - project. This document will help you to understand the projects - based on their technology domain(s). Be sure to star the - community’s repositories{" "} - on GitHub! -

    -

    - Point - Be friendly and open-minded - We encourage you to - be welcoming to new collaborators and those just getting started. - Other contributors might not have the same degree of experience or - background as you, but that doesn't mean they can't provide useful - ideas. -

    -

    - Point - Be honest - “A half-truth is a whole lie.” Being - truthful allows you to reach a better agreement. As a result, be - open and honest about who you are, what you do, and how you want - to accomplish it. -

    -

    - Point - Be respectful and inclusive - We are a diverse - group of people with diverse backgrounds and opinions. We expect - everyone to be civil and professional in their activities. - Disrespectful behavior is not tolerated. Do not publish anything - that would be considered insulting, abusive, or hate speech by a - reasonable person. -

    -

    - Point - Collaborate and Contribute - Members are expected - to attend community and workgroup meetings, find ways to help, - check up on our Github page regularly etc. Within the community - and outside, we encourage teamwork. -

    -

    -

    Resources

    -

    - Point - Be sure to access the resources{" "} - - community drive. - {" "} -

    -

    - Point - Sign-up on the{" "} - community mailer. -

    -

    - Point - Ask for a copy of{" "} - - The Enterprise Path to Service Mesh Architectures. - -

    -

    -

    - Please refer to the{" "} - - Code of Conduct - {" "} - for more details. -

    -
    - -
    - -
    -
    - ); -}; - -export default CommunityGuide; diff --git a/src/sections/Community/Handbook/conduct.js b/src/sections/Community/Handbook/conduct.js deleted file mode 100644 index a66c08d27de85..0000000000000 --- a/src/sections/Community/Handbook/conduct.js +++ /dev/null @@ -1,43 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import Point from "./images/bullet.svg"; -import TOC from "../../../components/handbook-navigation/index"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; - - -const CodeofConduct = () => { - return ( - -
    -

    Code of Conduct

    -
    - -
    - -
    -

    Community Code of Conduct

    -

    Layer5 follows the CNCF Code of Conduct which states that:

    -

    As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, to post feature requests, to update documentation, to submit pull requests or patches, and other activities.

    -

    We are committed to participating in this project as a harassment-free experience for everyone, regardless of the level of experience, gender, gender identity, and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.

    -

    Examples of unacceptable behavior by participants include:

    -
      -

      PointThe use of sexualized language or imagery

      -

      PointPersonal attacks

      -

      PointTrolling or insulting/derogatory comments

      -

      PointPublic or private harassment

      -

      PointPublishing other’s private information, such as physical or electronic addresses, without explicit permission

      -

      PointOther unethical or unprofessional conduct

      -
    -

    Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.

    -

    This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.

    -

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting community@layer5.io.

    -
    -
    -
    - -
    - ); -}; - -export default CodeofConduct; \ No newline at end of file diff --git a/src/sections/Community/Handbook/connect.js b/src/sections/Community/Handbook/connect.js deleted file mode 100644 index ba528acc78a68..0000000000000 --- a/src/sections/Community/Handbook/connect.js +++ /dev/null @@ -1,317 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import { ReactComponent as TwitterIcon } from "../../../assets/images/socialIcons/twitter.svg"; -import mail_icon from "../../../assets/images/socialIcons/mail_keppel.svg"; -import youtube_icon from "../../../assets/images/socialIcons/youtube-light.svg"; -import github_icon from "../../../assets/images/socialIcons/github-light.svg"; -import linkedin_icon from "../../../assets/images/socialIcons/linkedin-light.svg"; -import docker_icon from "../../../assets/images/socialIcons/docker-light.svg"; -import slack_icon from "../../../assets/images/socialIcons/slack-light.svg"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; - -const contents = [ - { - id: 0, - link: "#Newsletter", - text: "Newsletter", - }, - { id: 1, link: "#Mailing Lists", text: "Mailing Lists" }, - { id: 2, link: "#Calendar", text: "Calendar" }, - { id: 3, link: "#Slack Community", text: "Slack Community" }, - { id: 4, link: "#Discussion Forum", text: "Discussion Forum" }, - { id: 5, link: "#Social Media", text: "Social Media" }, -]; - -const Connect = () => { - return ( - -
    -

    Connect with Us

    -
    - -
    - -
    - - {" "} -

    Subscribe to Newsletter

    {" "} -
    -

    - Don’t miss out on anything, sign up to receive updates on our - newest releases, latest blog posts and any relevant information. -

    - - - {" "} -

    Mailing Lists

    {" "} -
    - - - {" "} -

    Calendar

    {" "} -
    -

    - Don’t miss out on any of the activities in the community. Join any - or all of the weekly meetings subscribing to the{" "} - - community calendar . - -

    {" "} - - {" "} -

    Slack Community

    {" "} -
    -

    - We are a community of like-minded people with thousands of - members. -

    -

    - Join our Slack Workspace{" "} - introduce yourself and interact with the community. There are - different channels in the workspace to engage within. -

    -
    -

    - - #general - {" "} - - For workspace-wide communication and announcements. -

    -

    - - #meshery - {" "} - - For discussion on topics in and around Meshery. -

    -

    - - #meshery-adapters - {" "} - - Discuss topics related to meshery-adapters. -

    -

    - - #meshery-ci - {" "} - - For discussion on topics related to Meshery Build, Release, Workflows, DevOps. -

    -

    - - #meshery-meshsync - {" "} - - For discussions on issues related to MeshSync. -

    -

    - - #mesheryctl - {" "} - - For discussions on Meshery’s CLI -

    -

    - - #newcomers - {" "} - - For welcoming first-time contributors and community newcomers. -

    -

    - - #performance - {" "} - - For discussions related to measuring and evaluating cloud native performance. -

    -

    - - #wasm - {" "} - - For discussions on webassembly, rust, envoy filters. -

    -

    - - #websites - {" "} - - For discussions related to the UI/UX of{" "} - Layer 5 project sites. -

    -
    - - {" "} -

    Discussion Forum

    {" "} -
    -

    - Join us on our cloud native community's{" "} - Discussion Forum -

    -
    - -
    - - {" "} -

    Social Media

    {" "} -
    -

    - Layer5 is dedicated to empowering engineers and supporting the - open source community that create them. Learn more about Layer5 - and connect with the community by following and engaging with us - on our social media accounts. -

    - -
    - -
    - - -
    -
    - ); -}; - -export default Connect; diff --git a/src/sections/Community/Handbook/contributing.js b/src/sections/Community/Handbook/contributing.js deleted file mode 100644 index 2b1ccc177bc23..0000000000000 --- a/src/sections/Community/Handbook/contributing.js +++ /dev/null @@ -1,362 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import Code from "../../../components/CodeBlock"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -import { StaticImage } from "gatsby-plugin-image"; - -const contents = [ - { id: 0, link: "#Clone your fork", text: "Clone your fork" }, - { id: 1, link: "#Checkout a new branch", text: "Checkout a new branch" }, - { id: 2, link: "#Commit your changes", text: "Commit your changes" }, - { id: 3, link: "#Sign-off commits", text: "Sign-off commits" }, - { id: 4, link: "#Push changes to Github", text: "Push changes to Github" }, - { id: 5, link: "#Create a pull request", text: "Create a pull request" }, -]; - -const contributingGuide = () => { - const Signoff = "../../../../.github/assets/images/git-signoff-vscode.webp"; - const compareAndPR = "../../../../.github/assets/images/compare-and-pr.webp"; - const createPR = "../../../../.github/assets/images/create-pr.webp"; - - return ( - -
    -

    Contribution

    -
    - -
    - -

    General contribution flow

    -

    - Pull requests (PRs) are the best ways to propose changes to a - project repository. At Layer5 org, we use the Github Flow: -

    -
    -

    Clone your fork to your local machine

    -
      -
    • Fork the repository you are working on.
    • -
    • - - Go to your GitHub account, open the forked repository, click - on the code button and then click the “copy to clipboard” icon - if you intend to use a command-line tool.{" "} - -
    • -
    • - - Open the terminal and run the following git command: -
      - -
      -
      -
    • -
    - -

    Add 'upstream' repo to list of remotes

    -
      -
    • - - Keeping your fork up to date while this isn't a necessary - step. If you plan on doing anything more than a tiny quick - fix, you'll want to make sure you keep your fork up to date by - tracking the original "upstream" repo that you forked earlier. - -
    • -
    • - - To do this, you'll need to add a remote. An example of the - command is given below: -
      - -
      - Here “layer5" is used as the example repo. Be sure to - reference the actual repo you are contributing to. -
      -
    • -
    - -

    Create and checkout a new branch

    -
      -
    • - - Whenever you begin to work on a new feature or bugfix, it's - important that you create a new branch. Not only is it a - proper git workflow, but it also keeps your changes organized - and separated from the master branch so that you can easily - submit and manage multiple pull requests for every task - completed. - -
    • -
    • - - Perform the flow: -
      - -
      - For example, -
      - -
      {" "} - (feature being a branch name) -
      -
    • -
    - -

    Make the necessary changes to your file.

    -
      -
    • - - To add the changes you have made to your branch, use: -
      - -
      -
      -
    • -
    • - - {" "} - If you add multiple file changes to the branch, you simply - use: -
      - -
      -
      -
    • -
    - -

    Commit the changes made

    -
      -
    • - - Now commit those changes using the git commit command: -
      - -
      -
      -
    • -
    - -

    - Make sure to{" "} - - Sign-off - {" "} - on your Commits (Developer Certificate of Origin) -

    - -

    - To contribute to this project, you must agree to the Developer - Certificate of Origin (DCO) for each commit you make. The DCO is a - simple statement that you, as a contributor, have the legal right to - contribute.{" "} -

    -

    - To signify that you agree to the DCO for contributions, you simply - add a line to each of your git commit messages: -

    -
    - -
    -

    - In most cases, you can add this signoff to your commit automatically - with the -s or --signoff flag to git commit. You must use your real - name and a reachable email address (sorry, no pseudonyms or - anonymous contributions). An example of signing off on a commit: -

    -
    - -
    -

    - To ensure all your commits are signed, you may choose to add this - alias to your global .gitconfig: -

    -
    - -
    -

    - Or you may configure your IDE, for example, Visual Studio Code to - automatically sign-off commits for you: -

    - - -

    Push changes to Github

    -
      -
    • - - To push your changes, run the git command: -
      - -
      -
      -
    • -
    -

    Create a pull request (PR)

    -
      -
    • - - Head over to your forked repository on GitHub and you'll see a Compare & pull request button. Click on that button. - -
      - - Note: Please ensure that the right branch is selected for the PR. - -
      -
      - -
      -
    • -
    -
      -
    • - - Once you click on the button, you'll be taken to the Pull Request page. Here, you can add a title and description to your pull request that explains your contribution. Once you're done, click on the Create pull request button. - -
      -
      - -
      -
      -
    • -
    -
    -

    Handling PRs Made Without Being Assigned

    -

    - At Layer5, we usually suggest to contributors that they ask maintainers to assign them to the issue they want to work on. But sometimes, pull requests that aren't assigned to anyone can be found. In such cases, it's important to be flexible and ready to adapt. Here are some simple guidelines for dealing with these unassigned contributions: -

    -
      -
    1. -

      - We value getting things done: -

      -
        -
      • -

        - Evaluate the PR: First, assess the quality - and significance of the PR. Is it a valuable contribution to - the project? Does it fix a bug or add a meaningful feature? - If the PR aligns with the project's goals and standards, - it's worth considering. -

        -
      • -
      • -

        - Review the code: Ensure that the code in - the PR meets the project's coding guidelines and standards. - If the code quality is high and the changes are beneficial, - it's a positive sign. -

        -
      • -
      -
    2. -
    3. -

      - We value our contributors' feelings: -

      -
        -
      • -

        - Communication: Reach out to the - contributor who made the unassigned PR in a friendly and - respectful manner. Express gratitude for their contribution - and explain the importance of assigning PRs to maintain - transparency and collaboration within the community. -

        -
      • -
      • -

        - Offer assistance: If the contributor is - willing, help them understand the process of assigning PRs - and offer guidance on how to do it correctly in the future. -

        -
      • -
      • -

        - Encourage participation: Emphasize that - their contribution is valuable and that the project welcomes - their involvement. Encourage them to continue contributing. -

        -
      • -
      -
    4. -
    5. -

      - - Attempt to uphold the spirit of #2 while ensuring that #1 - happens: - -

      -
        -
      • -

        - Balance: Strive to strike a balance - between maintaining a welcoming and inclusive community (#2) - and ensuring that the project continues to make progress - (#1). -

        -
      • -
      • -

        - Collaboration: If the contributor is - receptive and willing to work together, consider helping - them assign the PR correctly, and possibly collaborate on - improving the PR if necessary. -

        -
      • -
      • -

        - If necessary, reassign: If the contributor - is unresponsive or unable to assign the PR correctly, you - may consider reassigning the PR to an appropriate - contributor or assigning it to yourself to ensure it - doesn't go unnoticed. -

        -
      • -
      -
    6. -
    7. -

      - - Contributor Guidance: - -

      -
        -
      • -

        - How you should: As a contributor, it's important to follow the project's guidelines. Start by identifying a suitable issue or create one if necessary. Afterward, kindly request assignment or express your interest in working on the issue by commenting on it. This ensures that maintainers are aware of your intentions and can provide guidance or assign the issue appropriately. Once assigned, proceed with your work and submit a pull request. -
        Example: Hover animation on different integration category #3889 -

        -
      • -
      • -

        - How you should not: Avoid starting work on an issue and creating a pull request without prior communication or assignment. Jumping directly into the code can lead to misunderstandings and duplicate efforts. Instead, take a moment to engage with the maintainers and community by discussing your interest in the issue and seeking assignment before submitting a pull request. This promotes transparency and effective collaboration within the project. -
        Example: [MeshModel] [UX]: Icon for Kubernetes Component - Endpoints #8757 -

        -
      • -
      • -

        - Requesting Reassignment: If you are interested in working on an issue that is already assigned to someone else, it's important to respect their efforts and contributions. First, politely reach out to the assignee and express your interest in collaborating on the issue. Discuss the possibility of working together or sharing the workload. If the assignee agrees or is open to collaboration, you can proceed. If the assignee is not responsive or there has been no progress on the issue for a long time and the issue aligns with your skills and interests, kindly request reassignment from the maintainers, providing a clear and courteous explanation for the request. -
        Example: [chore] update Go to 1.21, and update relevant pkgs #169 -

        -
      • -
      -
    8. -
    - -
    - - -
    -
    - ); -}; - -export default contributingGuide; diff --git a/src/sections/Community/Handbook/contributor-journey.js b/src/sections/Community/Handbook/contributor-journey.js deleted file mode 100644 index 1f078fb4da1f9..0000000000000 --- a/src/sections/Community/Handbook/contributor-journey.js +++ /dev/null @@ -1,213 +0,0 @@ -import React, { useState } from "react"; -import { Container, Row, Col } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import NewcomersMap from "../Newcomers-guide/newcomers-map"; -import TOC from "../../../components/handbook-navigation/index"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -import longArrow from "../Newcomers-guide/long-arrow.svg"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; - -const contents = [ - { id: 0, link: "#About Layer5", text: "About Layer5" }, - { id: 1, link: "#Goals", text: "Goals" }, - { id: 2, link: "#Newcomer’s Path", text: "Newcomer’s Path", }, - { id: 3, link: "#Working on your issue", text: "Working on your issue" }, - { id: 4, link: "#While your issue is under review", text: "While your issue is under review", }, -]; - -const Intro = () => { - const [hover, setHover] = useState(false); - - return ( - -
    -

    About

    -
    - -
    - -
    - -

    About Layer5

    -
    -

    - At Layer5, we champion developer-defined infrastructure, giving engineers the power to reshape application delivery. We empower operators in reimagining how they manage modern infrastructure: collaboratively. -
    - Layer5 is not just a company, we are also: -

    -

    Community First

    -

    - The Layer5 community builds projects to provide - learning environments, deployment, and operational best practices, - performance benchmarks, create documentation, share networking - opportunities, and more. Our shared commitment to the open-source - spirit pushes Layer5 projects forward. New members are always - welcome. -

    -

    Open Source First

    -

    - All Layer5 projects are open-source. Anyone can download, use, - work on, and share it with others. It's built on principles like - collaboration, globalism, and innovation. Layer5 projects are - distributed under the terms of{" "} - - Apache v2 - - . -

    - - {" "} -

    Goals

    {" "} -
    -
      -
    • - To build a large collection of cloud native technologies. -
    • -
    • - - To build products that are accessible and easy to use. - -
    • -
    • - - To build a welcoming community for open-source contributions. - -
    • -
    - - - {" "} -

    Newcomer’s Path

    {" "} -
    -

    - Thank you for your interest in contributing to Layer5 open source - initiatives! -

    - - setHover(true)} - onMouseOut={() => setHover(false)} - > -

    Contributor's Journey

    -
    -
    Start Here
    - longArrow -
    - - - - -
    -

    - In combination with the Layer5 Community Guide and Contributing - Guide, the following set of instructions are to encourage and - support first-time (or near first-time) open-source contributors. -

    - - {" "} -

    How to contribute?

    {" "} -
    -

    - The following steps outline the process by which you can openly - engage, learn, and participate in the broad set of open source - projects at Layer5. -

    - -
      -
    1. - - Browse the list of{" "} - Layer5 org issues - bearing the{" "} - - “good first issue” - - ,{" "} - - “first-timers-only” - {" "} - or the{" "} - - “help wanted” - {" "} - label. - -
    2. -
    3. - - Alternatively, find an area of interest by checking out the - Layer5 Repository Overview section of this handbook. - -
    4. -
    5. - - After identifying the issue you wish to work on, check if it - has been assigned by taking a look at the assignee section on - the issue, otherwise signal your interest by commenting on the - issue so that it can be assigned to you. - -
    6. -
    - - {" "} -

    Working on your issue

    {" "} -
    -

    - Once an issue has been assigned to you, it’s time to get started! -

    - -
      -
    1. - - Be sure to{" "} - - sign off on your commits - - -
    2. -
    3. - Contributions of all sizes are welcome. -
    4. -
    5. - - If you need some additional help, please join the Layer5 Slack - workspace and find your way to the #newcomers channel. Feel - free to ask questions. - -
    6. -
    - - {" "} -

    While your issue is under review

    {" "} -
    - -
      -
    1. - - Please double-check that you have signed off on all of your - git commits. - -
    2. -
    3. - - Be patient. There are a large number of contributors and only - a small number of maintainers/reviewers. All contributors are - equally important to us, and we'll be sure to get to you as - soon as possible. In the meanwhile, you are welcome to join - our Slack workspace and take a look at all our projects.{" "} - -
    4. -
    -
    - -
    - -
    -
    - ); -}; - -export default Intro; diff --git a/src/sections/Community/Handbook/designer.js b/src/sections/Community/Handbook/designer.js deleted file mode 100644 index bf4665a64e18e..0000000000000 --- a/src/sections/Community/Handbook/designer.js +++ /dev/null @@ -1,68 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { Link } from "gatsby"; -import { HandbookWrapper } from "./Handbook.style"; -import Button from "../../../reusecore/Button"; -import TOC from "../../../components/handbook-navigation/index"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; - - - -const Designers = () => { - - return ( - -
    -

    Design with Layer5!

    -
    - -
    - -
    -

    UI/UX

    -

    - The UI/UX badge is given to community members who contribute towards creating or improving the visual design or user flow of various aspects such as websites, flyers, promotions, Meshery UI, and more. This recognition is awarded as an appreciation of their efforts in enhancing the user experience. The badge serves as a symbol of their expertise in UI/UX design and acknowledges their valuable contribution to the community. - We are always looking for ways to improve the user experience of our projects. If you have ideas for how to improve the user experience of any of our projects, please share them with us. -

    - -

    Where can you contribute?

    - -

    - You can contribute to the Meshery project website redesign and creation of new video-based content. The site structure and content need a revamp, and contributors will use the existing brand guide, colors, and logos in their designs. The project also requires video editing and graphic/illustration creation skills. If you want to participate in the project and build your portfolio in collaboration with the Meshery team, you can submit your interest by filling out the form provided. -
    -

    - -

    What is the process?

    - -
    -
    -

    If you’re interested in the Layer5 Design Program, please submit your information to get started. Don't know where to start? Don't worry, we have plenty of suggestions for you.

    - - -
    -
    -

    Upon being accepted, you'll work with a coordinator on the content team to decide on a topic, develop a project plan, and discuss submission details.

    -
    -
    - -

    Additional Resources

    - - - -
    -
    -
    -
    - ); -}; - -export default Designers; \ No newline at end of file diff --git a/src/sections/Community/Handbook/faq.js b/src/sections/Community/Handbook/faq.js deleted file mode 100644 index 01c66999930a9..0000000000000 --- a/src/sections/Community/Handbook/faq.js +++ /dev/null @@ -1,117 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import { Link } from "gatsby"; - - -const Faq = () => { - return ( - -
    -

    FAQs

    -
    - -
    - -
    -

    General FAQs:


    -

    Q: Are Layer5’s solutions open source?

    -

    A: Yes, all Layer5 projects are licensed under Apache V2. Layer5 also offers extensions to the Meshery project in which Enterprise-centric functionality is commercially offered and supported.

    - -

    Q: I am new to Open Source, where do I begin?

    -

    A: You can start by going through the Newcomers’ Welcome Guide.

    - -

    Q: What exactly is a MeshMate?

    -

    A:Layer5 MeshMates are individuals committed to helping community members be successful contributors. Meshmates are there to guide and support the community members, helping them identify projects they can contribute to depending on their areas of interest, directing them on groups to join and helping them grow in their open-source and cloud native knowledge.

    - -

    Q: How do I join the mailing list?

    -

    A: You can subscribe to the Layer5 mailing here.

    - -

    Q: How do I get an internship in Layer5?

    -

    A: To best position your candidacy for an internship with Layer5, engage in the community and its projects. Start contributing and keep contributing. Community members who consistently contribute are the first individuals to be awarded internships when new internship opportunities open up - particularly members who are making significantly impactful contributions.

    - -

    Q: How do I follow up on the meetings?

    -

    A: To follow up on the community meetings, you can view and add the community calendar to your calendar list.

    - -

    Q: I see works of other contributors being highlighted, will my contributions be highlighted too?

    -

    A: We might not get to everyone, but we try to elevate the works of all of our contributors. All of our community members are proud of their work and so are we! We want their work and names to be recognized across our collective technology industry. Be sure to follow and engage with the Twitter, Youtube, and Linkedin accounts.

    - -

    Q: I am not a coder, can I contribute too?

    -

    A: Some community members join to contribute to open source projects, others jump in to put those projects to use, some are here to help cultivate and steward our community, while others are here just to hangout and absorb. All members are most welcome. Be sure to introduce yourself in the Layer5 slack and let other community members get acquainted with you and vice-versa.

    - -

    Q: How should I approach assigning and working on issues within the community?

    -

    A: To ensure efficiency and positive collaboration, please follow these guidelines:

    -
      -
    • Assignment Confirmation: Verify issue validity to avoid wasted effort and address only relevant problems.
    • -
    • Avoiding Conflict: Treat fellow contributors kindly, respecting their contributions to foster a harmonious environment and maintain project momentum.
    • -
    • Minimize Maintainer Burden: Adhere to guidelines to reduce maintainers' time spent on clarifications and resolving conflicts, enabling them to focus on essential tasks.
    • -
    -

    Q: What should I consider when assigning issues to contributors?

    -

    A: When assigning issues, follow these principles:

    -
      -
    • Valid Issue: Assign issues that require attention.
    • -
    • Fix the Issue: Prioritize resolving them promptly.
    • -
    • Assignment Order: Generally chronological, with exceptions:
    • -
        -
      • Unqualified to perform this task currently.
      • -
      • Unavailable and/or incapable of performing the task promptly.
      • -
      • Lack of context when another contributor has it.
      • -
      • Requesting contributor has existing open assignments.
      • -
      -
    -

    These guidelines aim to create a supportive and efficient community where everyone can contribute effectively.

    - - -

    Q: What if I can’t find an open issue to work on?

    -

    A: Check if any assigned issues are stale. ( Assigned some time back, but no discussions have happened or is not updated for a long time ). If you find such issues, comment to ask if you can help. Alternatively, Look to find the help-wanted issues.

    - -

    Q: In addition to the routinely scheduled project meetings, do project contributors ever meet separately to deep-dive on special topics?

    -

    A: Yes, outside of the regularly scheduled meetings on the community calendar, there are any number of other meetings that occur to facilitate deeper levels or more concentrated attention to particular bodies of work (e.g. a design spec review). On occasion, these one-off meetings are scheduled in advance and put onto the community calendar, while other times they are simply self-organized by interested contributors. Often contributors will use Slack huddles or Zoom meetings to facilitate the discussion. If you need a new meeting placed onto the community calendar, please reach out to a Community Manager.

    - -

    Q: How do I access the community docs?

    -

    A: To access the community documentation, follow these steps:

    -
      -
    1. - Ensure you have filled out the - community member form. If - you haven't, please do. -
    2. -
    3. - Go to the "Shared Drives" section of your Google Drive using the - same email address you used to fill out the form. -
    4. -
    5. - Look for "Layer5 Community" within the Shared Drives section. -
    6. -
    -

    - Once you've completed these steps, you should have access to the - community docs, otherwise please reach out to any of the Community Managers or MeshMates. -

    - - - {/*

    Q: Why does the community use slack?

    -

    A:

    - -

    Q: When should I use Slack vs Discuss?

    -

    A:

    - -

    Q: Why can’t I find an open issue to work on?

    -

    A:

    - -

    Q: How do I know if an issue is available to work on?

    -

    A:

    - -

    Q: Can I create new issues or suggest changes?

    -

    A:

    */} -
    -
    -
    - -
    - ); -}; - -export default Faq; \ No newline at end of file diff --git a/src/sections/Community/Handbook/github-process.js b/src/sections/Community/Handbook/github-process.js deleted file mode 100644 index 5a78e301dad1a..0000000000000 --- a/src/sections/Community/Handbook/github-process.js +++ /dev/null @@ -1,414 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; - -const SecurityVulnerabilitiesPage = () => { - return ( - -
    -

    GitHub Process

    -
    - -
    - -
    -

    Issue and PR Labels and Templates, Bots


    -

    Overview


    -

    The Layer5 GitHub Process emphasizes consistent pull requests and issue labels to streamline continuous integration and reduce overhead across the growing repository collection.

    -

    The number of repositories under the "Layer5io" organization is growing. In order to ensure consistency across the repositories and to decrease the time it takes for a continuous integration (GitHub Actions) to execute, consistent use of pull request and issue labels will aid in the reduction of overhead.

    - -

    Issue and Pull Request Templates

    -

    Layer5 uses issue and pull request templates. See the `.github` folder in any repo for examples.

    - -

    Template Repositories

    -

    Layer5 uses the following repository templates:

    -
      -
    • layer5-repo-template
    • -
    • meshery-adapter-template
    • -
    - -

    Branch Protection

    -

    Layer5 protects the master branch by requiring reviews from at least one approver.

    - -

    Organization Secrets

    -

    Layer5 has the following org-wide secrets available:

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Secret NameDescription
    CYPRESS_RECORD_KEYNeeded for recording the Cypress run in the Cypress Dashboard
    DOCKER_PASSWORDBelongs to user "mesheryci"
    DOCKER_USERNAME"mesheryci"
    NETLIFY_AUTH_TOKENNetlify authentication token used for deployment.
    NETLIFY_SITE_IDUnique ID of the Netlify site to deploy to.
    RELEASEDRAFTER_PATBelongs to user "l5io"
    RELEASE_NOTES_PATBelongs to user "l5io"
    SLACK_BOT_TOKENAuthentication token for the Slack bot integration.
    GITHUB_TOKENFor the community scope repo that can be use commit and release
    NODE_VERSION"v18" as of Nov 15, 2022.
    GO_VERSION1.19
    PROVIDER_TOKENInfinite Meshery Cloud token
    NPM_TOKENl5io user's token for publishing packages
    INTEGRATION_SPREADSHEET_CREDBase64 encoded cred for accessing integration spreadsheet on behalf of user no-reply@layer5.io
    PLAYGROUND_CONFIGBase64 encoded kubeconfig of Playground
    METAL_SSH_KEYSMP Project-wide SSH private key
    METAL_AUTH_TOKENMetal cli auth token
    METAL_SERVER1ID of 1st metal server running playground
    METAL_SERVER2ID of 2nd metal server running playground
    -
    - -

    Layer5 Issue Labels Guide

    -

    - Well-chosen issue labels keep our repositories organized, make contributing easier, and help everyone—from maintainers to first-time contributors—find relevant tasks quickly. Below, we explain each major label category and when to use them. -

    - -

    Area Labels

    -

    - Area labels specify which part of the project an issue or PR relates to—such as documentation, user interface, or continuous integration. Using area labels helps contributors with specific interests or expertise find and filter issues that are relevant to them, and helps project maintainers prioritize or assign tasks more efficiently. Assign an area label any time you create or triage an issue/PR that falls within a specific domain (docs, UI, CI, performance, etc.). -

    -
    - - - - - - - - - - - - - - - - - - -
    LabelDescriptionColor
    area/ciContinuous integration, build & release#5319e1
    area/docsImprovements/additions to documentation#5319e2
    area/lifecycleLifecycle management (install, uninstall, configure)#5319e3
    area/performancePerformance management#5319e4
    area/testsTesting / quality assurance#5319e5
    area/uiUser interface#5319e6
    area/workloadsApplications / services#5319e7
    area/helmHelm charts issues#5319e8
    -
    - -

    Component Labels

    -

    - Component labels indicate which software module or subsystem is affected by an issue. This ensures issues are routed to the right maintainers and allows more detailed filtering beyond the broader area labels. Attach a component label when your issue/PR impacts a specific module (e.g., a CLI tool, API, or pattern engine). -

    -
    - - - - - - - - - - - - - - - - - -
    LabelDescriptionColor
    component/apiAPI related#3a0485
    component/mesheryctlMeshery CLI related#3a0486
    component/uiUI component related#3a0486
    component/filtersFilters related#3a0486
    component/patternsPatterns related#3a0486
    component/meshsyncMeshSync component related#3a0487
    component/meshery-perfMeshery-perf related#3a0488
    -
    - -

    Programming Language Labels

    -

    - Programming language labels highlight the primary language used in the issue or PR. This helps contributors looking for language-specific work, and aids in code review or help requests. Use a programming language label if the change, bug, or feature is specific to a particular language (e.g., a Go backend bug, a JavaScript UI enhancement). -

    -
    - - - - - - - - - - - - - -
    LabelDescriptionColor
    language/goGolang related#16e2e2
    language/javascriptJavascript#16e2e3
    language/rubyRuby#16e2e4
    -
    - -

    PR (Pull Request) Labels

    -

    - PR labels manage the state or special requirements of a pull request, like indicating it's a draft, dependent on others, or not yet ready for merging. Apply a PR label if your pull request isn't ready, should not be merged, updates dependencies, or is on hold. -

    -
    - - - - - - - - - - - - - - -
    LabelDescriptionColor
    pr/dependenciesUpdates addressed dependencies#0366d5
    pr/do-not-mergeNot ready for merging#0366d6
    pr/draftWork in progress/draft PR#0366d7
    pr/on holdPR/Issue on hold#0366d8
    -
    - -

    Issue Process & Status Labels

    -

    - These labels show the current status of an issue—such as blocked, duplicate, in need of a design, or if an action (like an invitation) should be triggered. Some are used by bots to automate reminders or mark stale issues. Apply these when the situation applies (e.g. "blocked" if work can't proceed, "design required" if more planning is needed). -

    -
    - - - - - - - - - - - - - - - - - - - -
    LabelDescriptionColor
    issue/inviteInvitation for author to join GH org#eeeeee
    issue/blockedIssue is blocked#eeeeee
    issue/design requiredRequires a design prior to proceeding#eeeeee
    issue/duplicateIssue or PR already exists#eeeeee
    issue/invalidThis doesn't seem right#eeeeee
    issue/staleNo activity for an extended period (often applied automatically)#eeeeee
    issue/tweetPosts (for social or outreach)#eeeeee
    issue/remindReminder comment to assignee#eeeeee
    issue/willfixIssue will be worked on ("stale" bot skips)#eeeeee
    -
    - -

    Kind Labels

    -

    - Kind labels classify the general type of change or discussion: bug, feature, chore, enhancement, epic, question, or proposal. This improves searchability and helps teams organize their workflows. Use the kind label that best describes your issue or PR. -

    -
    - - - - - - - - - - - - - - - - - - -
    LabelDescriptionColor
    kind/bugSomething isn't working#088073
    kind/childChild of a larger Epic#088074
    kind/choreMaintenance or other necessary task#088075
    kind/enhancementImprovement to an existing feature#088076
    kind/epicAn umbrella issue, covers many issues#088077
    kind/featureNew major feature or request#088078
    kind/proposalSuggestion or proposal for change#088079
    kind/questionExplanation or further info requested#088080
    -
    - -

    Priority Labels

    -

    - Priority labels help teams triage and allocate attention, making it clear which issues are urgent and which can wait. Always apply a priority label, adjusting as priorities shift or as issues are escalated or downgraded. -

    -
    - - - - - - - - - - - - - -
    LabelDescriptionColor
    priority/urgentNeeds immediate attention#f60205
    priority/highHigh priority issue#d60205
    priority/lowLower priority, can wait#a60205
    -
    - -

    Service Mesh Labels

    -

    - Service mesh labels point out which mesh technology or ecosystem the issue pertains to. This is vital for projects supporting multiple meshes, enabling modular attention and expertise. Use these when your change or report is specific to one mesh (like Istio or Linkerd). -

    -
    - - - - - - - - - - - - - - - - - - - - -
    LabelDescriptionColor
    service-mesh/app-meshApp Mesh#57b6cc
    service-mesh/consulConsul#57b6cc
    service-mesh/cpxCPX#57b6cc
    service-mesh/istioIstio#57b6cc
    service-mesh/kumaKuma#57b6cc
    service-mesh/linkerdLinkerd#57b6cc
    service-mesh/maeshMaesh#57b6cc
    service-mesh/nginxNGINX SM#57b6cc
    service-mesh/nsmNSM#57b6cc
    service-mesh/tanzuTanzu#57b6cc
    -
    - -

    Help & Onboarding Labels

    -

    - Help labels signal issues where some support is needed, or which are especially suitable for newcomers. These labels foster open source engagement and make onboarding easier for new contributors. Apply these to issues where you'd appreciate community help (help wanted) or for issues that are clearly documented, small in scope, and ideal for first-timers (good first issue). -

    -
    - - - - - - - - - - - - -
    LabelDescriptionColor
    help wantedMaintainers need help here#35f48e
    good first issueGood for new contributors#7057ff
    -
    - -

    Best Practices & Example

    -
      -
    • Apply all relevant labels: an issue may belong to an area, a component, a kind, have a priority, AND be language-specific.
    • -
    • Update labels as issues evolve: don't hesitate to add or remove as information changes.
    • -
    • When in doubt, ask!: The Layer5 community Slack is a welcoming place.
    • -
    - - Example:
    -

    - If you find a documentation error regarding Meshery's CLI, that's an easy fix, you might use these labels:
    - area/docs, component/mesheryctl, kind/bug, priority/low, good first issue -

    - -

    Questions or Suggestions?

    -

    - Labels missing? Unclear usage? Open a discussion or tag a maintainer in your issue, or bring it up in community Slack. -

    - -

    List for Pull Requests

    -

    The following list of pull request labels will be used to both indicate purpose or status of the PR to maintainers, and significantly, they will be used in conditional logic during workflow execution to determine the PR's appropriate path through the CI flow.

    -
      -
    • Refactor - Chore related pull request
    • -
    • Fix - Bug fixes PRs
    • -
    • On-hold - PR needs review before merging or it needs to behold until a specific issue is fixed.
    • -
    • Dependabot - All dependabot related automated PRs
    • -
    • release - identifies that a release is / will be made
    • -
    • Draft - PR is in draft state, GitHub provides a way for the draft state but having a label will help us in triage purposes.
    • -
    • Approved - Indicates a PR has been approved by approver form all required OWNERS files. #51ed31
    • -
    • help wanted - Extra attention is needed #008672
    • -
    • needs-ok-to-test - #d60c6a
    • -
    • awaiting review - The PR is ready for the reviewer to review. #fbca04
    • -
    - -

    Improving the build times through conditional logic that will skip sections of the ci.yml, unless these labels are present:

    -
      -
    • docs - build the Jekyll site for Meshery documentation
    • -
    • component/mesheryctl - build the Meshery CLI
    • -
    • area/ui - build the Meshery UI
    • -
    • component/meshery-server - Assumed that Meshery Server should always be build, but this is not the case.
    • -
    - -

    Bots

    -

    Layer5 uses the following bots:

    -
      -
    • Triage bot
    • -
    • Stale bot
    • -
    • Welcome bot
    • -
    • DCO bot
    • -
    - -

    Actions

    -
      -
    • Labeler.yml
    • -
    • label-commenter.yml
    • -
    - -

    Good resource - https://github.com/sdras/awesome-actions#pull-requests

    - -
    -
    -
    - -
    - ); -}; - -export default SecurityVulnerabilitiesPage; diff --git a/src/sections/Community/Handbook/instructions.js b/src/sections/Community/Handbook/instructions.js deleted file mode 100644 index eeb6375ad7a00..0000000000000 --- a/src/sections/Community/Handbook/instructions.js +++ /dev/null @@ -1,126 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; - -const contents = [ - { id: 0, link: "#top", text: "GitHub Organization Membership", }, - { id: 1, link: "#Requirements", text: "Membership Requirements" }, - { id: 2, link: "#InvitationProcess", text: "Invitation Process" }, - { id: 3, link: "#TemplateMessage", text: "Template Message for Invitations", }, - { id: 4, link: "#SendingInvitation", text: "Sending the GitHub Invitation", }, -]; - -const GitHubOrgMembership = () => { - return ( - -
    -

    GitHub Organization Membership

    -
    - -
    - -
    - - {" "} -

    GitHub Organization Membership

    {" "} -
    - -

    - Membership to the GitHub organizations is a significant milestone for contributors who have shown - persistent commitment and dedication to Layer5 projects. It is not solely about writing code - but rather the consistency of engagement and alignment of mentality. -

    - - - {" "} -

    - Membership Requirements -

    {" "} -
    - -

    - Contributors who may be invited typically: -

      -
    • Have been actively involved in the community for several weeks
    • -
    • Make regular updates to projects
    • -
    • Help other community members
    • -
    • Attend development meetings
    • -
    • Demonstrate a willingness to learn and share knowledge
    • -
    • Show a genuine desire to improve themselves, others, and the projects
    • -
    -

    - - - {" "} -

    - Invitation Process -

    {" "} -
    - -

    - Depending on the number and quality of contributions made across the five GitHub organizations - of Layer5, contributors can receive an invitation to any or all of these orgs. The process involves: -

      -
    1. Sending a group DM
    2. -
    3. Executing Slack slash command in #community-management
    4. -
    -

    - - - {" "} -

    - Group Message for Invitations -

    {" "} -
    - -

    - When you identify a worthy contributor, send a message in a group DM that includes - the individual and other maintainers/appropriate members: look in Community Managers' - docs to see some examples. -

    - - - {" "} -

    - Sending the GitHub Invitation -

    {" "} -
    - -

    - To send the invitation to join the GitHub organization, use the following slash command in - #community-management channel: -

    -
    - /invite-github [email address] [organization name] -
    -

    - Where [organization name] should be either: -

      -
    • - layer5io - to send the invite to the email address to join Layer5 GitHub org under the "layer5-contributors" team -
    • -
    • - meshery - to send the invite to the email address to join Meshery GitHub organization under the "contributors" team -
    • -
    -

    -

    - For example: -

    -
    - /invite-github contributor@example.com layer5io -
    -
    - -
    - - -
    -
    - ); -}; - -export default GitHubOrgMembership; diff --git a/src/sections/Community/Handbook/learn5.js b/src/sections/Community/Handbook/learn5.js deleted file mode 100644 index c4f66d6ec3589..0000000000000 --- a/src/sections/Community/Handbook/learn5.js +++ /dev/null @@ -1,89 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import { Link } from "gatsby"; -import TOC from "../../../components/handbook-navigation/index"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; - -const contents = [ - { - id: 0, link: "#Learning", text: "Learning", - }, - { - id: 1, link: "#Academy", text: "Academy", - }, - { id: 2, link: "#Eventing", text: "Eventing" }, - { id: 3, link: "#Blogging", text: "Blogging" }, -]; - -const LearnLayer = () => { - return ( - -
    -

    Learning with Layer5

    -
    - - -
    - -
    - - -

    Learning together

    -
    -

    As a community, we have put together an excellent set of learning materials and training resources to guide you through learning about cloud native infrastucture.

    -

    You can review the complete list of learning resources or jump straight to the type of training you prefer:

    -
      -
    • Interactive cloud native labs
    • -
    • Free cloud native books
    • -
    • Self-paced cloud native workshops
    • -
    • Recorded training and talks on the Layer5 YouTube Channel
    • -
    • Multi-course, multi-mesh cloud native learning paths
    • -
    -

    - These materials were created to be interactive, easy to use, and - free for all. -

    - - -

    Layer5 Academy

    -
    -

    - - Layer5 Academy - {" "} - is a learning platform built into Layer5 Cloud. Get structured learning paths, - interactive challenges, and professional certifications. Content spans beginner - to advanced levels for both developers and organizations. -

    -

    - For more details, check out the Academy documentation and explore our GitHub collections. -

    - - -

    Sharing what you've learned at a technical event

    -
    -

    At Layer5, we participate in many different technical conferences, in international events, in online workshops, at meetups, and so on. Our engagement in these events ranges across various cloud native and open source topics and varies between speaking, hosting workshops, managing project booths, and so on. Our engagement in these events, increases awareness about our projects and the individual community members that contribute to the projects. -

    -

    A member of the Layer5 community has presented at every KubeCon since its inception. Join us at the many events we host or participate in. Check out Layer5 events to for a current list of events.

    - - - - {" "} -

    Sharing what you've learned on our blog

    {" "} -
    -

    - Write down what you've learned, what you've built, and what experiences that you have had in the community. All community members are welcome to contribute to the Layer5 blog. -

    -
    - -
    - - -
    -
    - ); -}; - -export default LearnLayer; diff --git a/src/sections/Community/Handbook/mentorships.js b/src/sections/Community/Handbook/mentorships.js deleted file mode 100644 index 766f16be6efc6..0000000000000 --- a/src/sections/Community/Handbook/mentorships.js +++ /dev/null @@ -1,175 +0,0 @@ -import React, { isValidElement } from "react"; -import { Container, Row, Col } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import styled from "styled-components"; -import Button from "../../../reusecore/Button"; -import TOC from "../../../components/handbook-navigation/index"; -import { programs_data } from "./programs-data"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; - -const ConductWrapper = styled.div` - - padding: 0 5rem 3rem 20rem; - margin-top: -52rem; - - @media screen and (min-width: 768px) and (max-height: 1145px) { - margin-top : -55rem; - - } - - - .explain-2{ - padding: 25px 0px; - .text{ - padding: 1.25rem 1.25rem 0px 1.25rem; - h2{ - font-weight: 700; - font-size: 40px; - padding: 1.25rem 0px; - } - p{ - color: ${props => props.theme.tertiaryColor}; - transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - } - img, svg { - height: auto; - width: 23rem; - display: block; - margin-left: auto; - margin-right: auto; - } - - path { - stroke: none; - } - - .communitybridge_logo_svg__cls-1{ - fill: ${props => props.theme.whiteToBlue003764}; - transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - - .hacktoberfest_svg__cls-1 { - transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - fill: ${props => props.theme.whiteToRed662839}; - } - - .lfx-white_svg__b{ - fill: ${props => props.theme.whiteToBlue003764}; - transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - - .lfx-white_svg__c{ - fill: ${props => props.theme.whiteToBlue0096d6}; - transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - - .layer5-colorMode_svg__colorMode1 { - fill: ${props => props.theme.whiteToGreen3C494F}; - transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - - .mlh_svg__cls-1 { - fill: ${props => props.theme.whiteToBlack}; - transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - - .sca_svg__fil0, .sca_svg__fil6 { - fill: ${props => props.theme.whiteToBlack}; - transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); - } - - Button{ - margin: 1.25rem 0px; - color: white; - } - - #col2 { - align-self: center - } - } - @media only screen and (max-width: 750px){ - margin-top: -2rem; - margin-left: 0; - padding: 1rem 1.5rem; - - .explain-2 div { - flex-direction: column-reverse; - } - - } - - @media only screen and (max-width: 475px){ - margin-top: -2rem; - margin-left: 0rem; - - .explain-2 img, .explain-2 svg{ - width: 15rem; - } - .explain-2 .text h2{ - font-size: 30px; - } - } - - @media only screen and (min-width: 765px){ - .first { - .list{ - display:flex; - flex-wrap:wrap - } - #col1 { - order: 2; - } - #col2 { - order: 1; - } - } - } - -`; - - -const MentorshipPrograms = () => { - const data = React.useMemo(() => programs_data); - return ( - -
    -

    Mentorship Programs

    -
    - - - - - {data.map((data) => { - const { id, name, description, buttonLink, imageLink, imagePosition } = data; - return ( -
    -
    - - -
    -

    {name}

    -

    {description}

    -
    - - - { isValidElement(imageLink) - ? imageLink - : {name} - } - -
    -
    -
    - ); - })} - -
    - -
    -
    - ); -}; - -export default MentorshipPrograms; diff --git a/src/sections/Community/Handbook/programs-data.js b/src/sections/Community/Handbook/programs-data.js deleted file mode 100644 index c2195570487b3..0000000000000 --- a/src/sections/Community/Handbook/programs-data.js +++ /dev/null @@ -1,84 +0,0 @@ -import React from "react"; -import { ReactComponent as SCA } from "../../../collections/programs/sca-contributhon/sca.svg"; -import { ReactComponent as MLH } from "../../../collections/programs/mlh-2020/mlh.svg"; -import { ReactComponent as LFX } from "../../../collections/programs/lfx-2022/lfx-white.svg"; -import { ReactComponent as Hacktoberfest } from "../../../assets/images/programs/hacktoberfest.svg"; -import { ReactComponent as Layer } from "../../../assets/images/app/layer5-colorMode.svg"; -import { ReactComponent as Bridge } from "../../../collections/programs/communitybridge/communitybridge_logo.svg"; -import GSOC from "../../../collections/programs/gsoc-2020/gsoc.svg"; -import GSOD from "../../../collections/programs/gsod/gsod.webp"; - -export const programs_data = [ - { - id: 1, - name: "Google Season of Docs", - description: - "Google Season of Docs provides support for open source projects to improve their documentation and allows professional technical writers to gain experience in open source. This is to raise awareness of open source, docs, and technical writing. Google season of docs started in 2019. Each year, layer5 submits a new project idea for technical writers to contribute to for a particular period. Also, stipends are awarded to the contributors.", - buttonLink: "/programs/gsod", - imageLink: GSOD, - imagePosition: "second", - }, - { - id: 2, - name: "Google Summer of Code", - description: - "Google Summer of Code is a global program focused on bringing more student developers into open source software development. Students work with an open-source organization on a 10-week programming project during their break from school.Every Summer, Layer5 submits a new project idea for student developers to contribute to for a particular period. Also, stipends are awarded at the end of the program to the --contributors.The critical component of these projects is our Community. This community, which you will join as a participant in Google Summer of Code, improves the world of diverse cloud-native systems. Your contributions will affect people you've never met. The Layer5 community includes software engineers, researchers, students, artists, system administrators, operators, and web designers, all of whom will be happy to help you get started.We believe that all contributors should expect and be part of a safe and friendly environment for constructive contribution. We can more effectively and successfully compare and challenge different ideas to find the best solutions for advancement while building our community’s size, diversity, and strength.", - buttonLink: "/programs/gsoc", - imageLink: GSOC, - imagePosition: "first", - }, - { - id: 3, - name: "Hacktoberfest", - description: - "Hacktoberfest is open to everyone in the global community. Whether you’re a developer, student learning to code, event host, or a company of any size, you can help drive the growth of open source and make positive contributions to an ever-growing community. All backgrounds and skill levels are encouraged to complete the challenge. Every year in October, Hacktoberfest is held. So far, Layer5 has been a participant organization with different projects and issues such as first-timers-only, help-wanted, and good-first-issues for open-source contributors. This is to help towards completing the Hacktoberfest challenge.", - buttonLink: "/programs/hacktoberfest", - imageLink: , - imagePosition: "second", - }, - { - id: 4, - name: "Linux Foundation", - description: - "The Linux Foundation (Mentorship Programs) are designed to help developers with the necessary skills–many of whom are first-time open source contributors–experiment, learn, and contribute effectively to open source communities. Layer5, as an organization, has been participating in the Linux Foundation mentorship program since 2019. ", - buttonLink: "/programs/lfx", - imageLink: , - imagePosition: "first", - }, - { - id: 5, - name: "MLH Fellowship Program", - description: - "The MLH Fellowship is a 12-week internship alternative for students interested in becoming software engineers. Instead of an internship at a single company, you'll contribute to the type of Open Source projects that every company depends on. The programs pair fun, educational curriculum with practical experience that you can put on your resume right away. It's collaborative, remote, and happens under the guidance of expert mentors.Layer5, as an organization, participates in the program by submitting a project idea for contributors to work on and also provides mentorship during the time phase given.", - buttonLink: "/programs/mlh", - imageLink: , - imagePosition: "second", - }, - { - id: 6, - name: "CommunityBridge", - description: - "The Linux Foundation's CommunityBridge is building a healthy ecosystem around the open source software by funding projects, securing code, and connecting with talented developers. Layer5 has been participating in the CommunityBridge's mentorship program since 2019.", - buttonLink: "/programs/communitybridge", - imageLink: , - imagePosition: "first", - }, - { - id: 7, - name: "Layer5", - description: - "At Layer5, we take our internships seriously. Interns are expected to work hard, learn much, and be recognized for doing so. Past interns have presented their projects at KubeCon, DockerCon, and similar technical conferences. Our community of contributors is the key ingredient to the success of every one of our projects. Interns engage as part of the community. Whether interning directly with Layer5 or through one of Layer5's partner programs, your contributions will affect people you've never met as the Layer5 projects are being broadly referenced and used in organizations large and small.", - buttonLink: "/careers/internships/", - imageLink: , - imagePosition: "second", - }, - { - id: 8, - name: "She Code Africa Contributhon", - description: - "She Code Africa is a non-profit organization focused on celebrating and empowering young girls and women in tech across Africa.The She Code Africa Contributhon Program is a virtual open-source boot camp for 4 weeks where ladies get the opportunity to work with open source organizations on selected projects with dedicated mentorship and on completion of the program, a stipend of $500 is awarded. This program aims to create a more diverse, inclusive, and innovative culture within the African open source ecosystem by matching African women in technology with sponsors and mentor open source organizations to work on projects used by millions of people all over the world.Layer5 is participating in Contributhon as a Mentoring Organization. This program engages more with the open-source ecosystem in Africa and diversifies contributions. Most especially, we love making an impact. Various project ideas are submitted for the selected ladies to contribute during the one-month time phase.", - buttonLink: "/programs/sca-contributhon", - imageLink: , - imagePosition: "first", - }, -]; diff --git a/src/sections/Community/Handbook/projects.js b/src/sections/Community/Handbook/projects.js deleted file mode 100644 index 4510e2a89a93d..0000000000000 --- a/src/sections/Community/Handbook/projects.js +++ /dev/null @@ -1,251 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import layer5icon from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; -import hawkIcon from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; -import meshmateicon from "../../../assets/images/meshmate/meshmate-icon.svg"; -import PatternsLogo from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import servicemeshperformance from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; -import mesheryoperatoricon from "../../../assets/images/meshery-operator/meshery-operator.svg"; -import mesherysyncicon from "../../../assets/images/meshsync/meshsync.svg"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import { Link } from "gatsby"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; - -const contents = [ - { - id: 0, - link: "#Layer5", - text: "Layer5", - }, - { id: 1, link: "#Meshery", text: "Meshery" }, - { - id: 2, - link: "#Cloud Native Performance", - text: "Cloud Native Performance", - }, - { - id: 3, - link: "#Cloud Native Patterns", - text: " Cloud Native Patterns", - }, -]; - -const Maintainer = () => { - return ( - -
    -

    Projects

    -
    - -
    - -
    -

    - - - {" "} -

    - - Layer5 -   Layer5{" "} - -

    {" "} - - -

    -

    - - Its cloud native community represents the largest collection of - cloud native projects. Emerging projects like Nighthawk{" "} - Nighthawk Icon , community with{" "} - MeshMate icon MeshMates , catch-all org, “home base”. -
    -

      -
    • -

      - Layer5 : -

      {" "} -
    • -

      - Layer5 is the official website of the Layer5 community showing - an overview of the Layer5 projects. The different cloud native - landscapes, resources to learn about cloud native, and - communities.
      -

      -
    • -

      - - Image-Hub : - -

      {" "} -
    • -

      - Image Hub is a sample application written to run on Consul for - exploring WebAssembly modules used as Envoy filters are - written in Rust. These modules can be used to implement - multi-tenancy or to implement per-user rate-limiting in your - application's endpoints. This application was first - demonstrated at DockerCon 2020.
      -

      -
    • -

      - - Nighthawk : - -

      {" "} -
    • -

      - This Is a Layer 7 (HTTP/HTTPS/HTTP2) performance - characterization tool. Nighthawk is Envoy’s load generator and - is written in C++. Meshery integrates Nighthawk as one of - (currently) three choices of load generators for - characterizing and managing the performance of cloud native infrastructure (e.g. Kubernetes and Docker) and their services.
      -

      -
    • -

      - - Layer5 Academy : - -

      {" "} -
    • -

      - Layer5 Academy is a learning platform built into Layer5 Cloud. It offers - structured learning paths, interactive challenges, and professional - certifications. Content spans beginner to advanced levels, helping both - developers and organizations skill up in cloud native technologies.
      -

      -
    -

    -

    - - - {" "} -

    - - Meshery -   Meshery - -

    {" "} - - -

    -

    - Meshery and its components Meshery Operator{" "} - Meshery Operator Icon and MeshSync{" "} - MeshSync icon -

      -
    • -

      - - Meshery - -

      {" "} -
    • -

      - It is a cloud native management plane offering lifecycle - management of more types of cloud native infrastructure than any other tool - available today. Meshery facilitates adopting, configuring, - operating, and managing the performance of Kuberenetes workloads and incorporates the collection and display of metrics. -
      {" "} -

      -
    • -

      - Meshery.io -

      {" "} -
    • -

      - Website for Meshery, the cloud native manager.
      -

      -
    • -

      - - Meshery-operator : - -

      {" "} -
    • -

      - Meshery Operator is the multi-cloud native operator and - implementation of MeshSync.
      -

      -
    • -

      - - Meshery-docker-extension : - -

      {" "} -
    • -

      - The Docker Extension for Meshery extends Docker Desktop’s position as the cloud native developer’s go-to Kubernetes environment with easy access to the next layer of cloud native infrastructure: cloud native infra.
      -

      -
    • -

      - - Meshery Catalog : - -

      {" "} -
    • -

      - As a central hub for sharing cloud native infrastructure designs, Meshery Catalog enables the exchange of the best practices, reusable templates, and Kubernetes-based operational patterns for multi-cluster Kubernetes clusters and distributed applications.
      -

      -
    -

    - - -

    -

    - - cloud native performance -   Cloud Native Performance{" "} - -

    -

    - - -

    - - The Cloud Native Performance (SMP) - {" "} - is a vendor-neutral specification for capturing details of - environment and infrastructure details, cloud native infrastrcture and it’s - configuration, service/application details, and bundling of - statistical analysis of the result.
    -

    - -

    - - - {" "} -

    - - cloud native patterns{" "} -   Cloud Native Patterns{" "} - -

    {" "} - -

    -

    - A collection of curated patterns of cloud native use cases - compatible with Meshery.
    -

    -
    - -
    - - -
    -
    - ); -}; - -export default Maintainer; diff --git a/src/sections/Community/Handbook/recognition.js b/src/sections/Community/Handbook/recognition.js deleted file mode 100644 index 960a16b0bafc6..0000000000000 --- a/src/sections/Community/Handbook/recognition.js +++ /dev/null @@ -1,202 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import { Link } from "gatsby"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; - -import BadgeRow from "./BadgeRow"; -import { activityBadges, projectBadges, specialBadges as specialFromData } from "./badges-data"; - -const contents = [ - { id: 0, link: "#Profile Bages", text: "Profile Bages" }, - { id: 1, link: "#Membership", text: "Membership to GitHub" }, - { id: 2, link: "#Community_member_profile", text: "Community Member Profile" }, - { id: 3, link: "#Badges", text: "Community Member Profile Badges" }, - { id: 4, link: "#SocialMedia", text: "Recognition on Social Media Platforms" }, -]; - -const tableWrap = { overflowX: "auto" }; -const table = { width: "100%", borderCollapse: "collapse", marginBottom: "2rem" }; -const theadRow = { borderBottom: "2px solid var(--text-color, #ddd)", backgroundColor: "rgba(0, 0, 0, 0.05)" }; -const th = { textAlign: "left", padding: "12px", fontWeight: 600 }; -const recognitionsstyle = { marginBottom: "0.5rem" }; - -const normalizeBadge = (b) => { - const name = b?.name || b?.title || ""; - const rawKey = b?.key || b?.badgeKey || b?.keycode || b?.keyProp; - const key = rawKey || (name ? name.toLowerCase().replace(/\s+/g, "-") : ""); - return { - image: b?.image, - name, - key, - description: b?.description, - }; -}; - -const RecognitionPage = () => { - const activity = (activityBadges || []).map(normalizeBadge); - const projects = (projectBadges || []).map(normalizeBadge); - const specials = (specialFromData || []).map(normalizeBadge); - - return ( - -
    -

    Recognizing and Appreciating Community Members

    -
    - - - -
    - -
    - -

    Your Efforts Do Not Go Unnoticed or Unappreciated

    -
    -

    - As an open source-first community, we very much appreciate the engagement of individuals within the Layer5 community. - We wouldn't be here without you. Our success is a collective one. Consequently, we are quite intentional about defining - and encouraging the journey for each individual community member. No small part of their journey is that of recognizing - their accomplishments and publicly celebrating their accolades. We do so in a number of ways. -

    - -

    Membership to the Github organizations

    -

    - Membership to the Github organizations is a significant milestone for contributors who have shown persistent commitment and dedication to Layer5 projects. It is not solely about writing code but rather the consistency of engagement and alignment of mentality. Those who have been actively involved in the community for several months, making updates, helping others, attending meetings, and demonstrating a willingness to learn and share their knowledge, are the ones who are likely to receive an invite. Such individuals demonstrate a genuine desire to improve themselves, others, and the projects they are working on. Depending on the number of contributions made across the five GitHub organizations of Layer5, contributors can expect to receive an invitation to any or all of these organizations. We value and appreciate the hard work and dedication of our contributors, and we are delighted to reward their efforts with access to our Github organizations. Our Community Managers and MeshMates recognize potential contributors on a weekly basis and typically invite individuals after 6 to 8 weeks of continuous, active participation. -

    - - -

    Community Member Profiles

    -
    -

    - Once a contributor joins the Layer5 community by filling in the community member form, they are automatically classified as - members of Layer5. Although, you earn a member profile after consistent contributions to the community for and projects. You - can find out more about the Members profile on the Layer5 website. -

    -

    Member profiles carry a number of specific designations, depending upon how a community member is participating. One of those designations is that of whether the member is actively particpating or has gone dormant. We define "active" and "inactive" members in the following way:

    -
      -
    • Active - Members who are engaged and participating in any aspect of the community and/or its projects. Activities vary broadly from meeting attendance to helping other contributors to using and providing feedback on projects, to code contribution, and so on.
    • -
    • Inactive - Members who have previously engaged but have not participated in the community or projects within ~two months.
    • -
    - -

    Community Member Profile Badges

    -

    - Badges are awarded to community members who have been consistently engaged and impactful within a given area of the community or on a specific project. Every community member, whether contributing with code or not, has the opportunity to obtain any number of badges of recognition of their efforts. Community members are encouraged to collect the whole set! -

    - -
    -

    Activity Badges

    - - - - - - - - - - - {activity.map((b, i) => ( - - ))} - -
    BadgeNameBadge KeyDescription
    - -

    Project Badges

    - - - - - - - - - - - {projects.map((b, i) => ( - - ))} - -
    BadgeNameBadge KeyDescription
    - -

    Special Recognition Badges

    - - - - - - - - - - - {specials.map((b, i) => ( - - ))} - -
    BadgeNameBadge KeyDescription
    -
    - -

    How can I Earn Badges?

    -

    - Earning Layer5 badges is both rewarding and straightforward. As you continue to contribute to our projects, your accomplishments will be recognized with badges that reflect your dedication and expertise. - Each badge is tied to specific activities. Here are some ways you can earn Layer5 Badges: -

    -

    - For users, badges for activities such as using our projects, talking about the projects, sharing your successes and what you like about them. For contributors, badges include activities such as submitting code, reviewing Pull Requests, assisting with documentation, participating in community events, and more. As you accumulate contributions in various areas, you'll begin to unlock badges that showcase your multifaceted involvement. These badges will be prominently displayed on your Layer5 Cloud profile, visually representing your journey. Not only does this serve as a source of personal pride, but it also helps others in the community recognize your expertise and dedication. -

      -
    • Activity Badges are the badges that are assigned when a user completes a task like sharing a design, creating a design for the first time, etc.
    • -
    -
      -
    • Project Badges are assigned to the user when a user contributes to a particular project.
    • -
    -

    The description and criteria for all the badges are listed above.

    -

    - -

    How can I Share My Badge On My Profile?

    -

    - To share your badges on other social profiles, utilize the provided embedded code and direct share functionality. Access your badges from the Layer5 Cloud profile badges section, and then use it to post your achievements on social media platforms seamlessly. This enables you to showcase your Layer5 contributions and milestones to a wider audience: -

    -

    To display badge on your GitHub profile, follow below steps:

    -
      -
    • Visit your Layer5 Cloud Profile to see the badges
    • -
    • Click on the badge, which you wanted to display
    • -
    • Copy the markdown code by clicking the Embed Code icon
    • -
    • Paste the code in your GitHub profile README.
    • -
    - -

    Recognition on Social Media Platforms

    -

    - We highly encourage you to share your engagement and contributions to the Layer5 community on social media like LinkedIn and Twitter. We support every contribution by liking your posts and retweeting them. Your contributions and engagement in different ways are what make us a successful and collaborative open-source community. We love celebrating your every accomplishment with Layer5 publicly and encourage you in every way we can. -

    -
    - - -
    - - -
    -
    - ); -}; - -export default RecognitionPage; diff --git a/src/sections/Community/Handbook/repo-data.js b/src/sections/Community/Handbook/repo-data.js deleted file mode 100644 index 5bebb98174915..0000000000000 --- a/src/sections/Community/Handbook/repo-data.js +++ /dev/null @@ -1,675 +0,0 @@ -import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import five from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; -import gnh from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; -import smp from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; -import imagehub from "../../../assets/images/image-hub/layer5-image-hub.svg"; -import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator.svg"; -import MeshSync from "../../../assets/images/meshsync/meshsync.svg"; -import patterns from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import github from "../../../assets/images/socialIcons/github.svg"; -import istioLogo from "../../../assets/images/service-mesh-icons/istio.svg"; -import linkerdLogo from "../../../assets/images/service-mesh-icons/linkerd.svg"; -import consulLogo from "../../../assets/images/service-mesh-icons/consul.svg"; -import kumaLogo from "../../../assets/images/service-mesh-icons/kuma.svg"; -import nsmLogo from "../../../assets/images/service-mesh-icons/nsm.svg"; -import nginxLogo from "../../../assets/images/service-mesh-icons/nginx-service-mesh.svg"; -import traefikLogo from "../../../assets/images/service-mesh-icons/traefik.svg"; -import smiLogo from "../../../assets/images/service-mesh-icons/service-mesh-interface/icon/color/servicemeshinterface-icon-color.svg"; -import appmeshLogo from "../../../assets/images/service-mesh-icons/aws-app-mesh.svg"; -import ciliumLogo from "../../../assets/images/service-mesh-icons/cilium.svg"; -import wasm from "../../../assets/images/webassembly/webssembly_icon.svg"; -import recognitionLogo from "../../../assets/images/recognition-program/recognition-program.webp"; -import kanvasLogo from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; -import sistent from "../../../assets/images/sistent/icon-only/sistent-icon-color.svg"; - -export const repo_data = [ - { - category: "Frontend", - subdata: [ - { - project: "Layer5.io", - image: five, - site: "https://layer5.io/", - language: "Gatsby", - maintainers_name: ["Rajesh Nagarajan"], - link: ["https://layer5.io/community/members/rajesh-nagarajan"], - repository: "https://github.com/layer5io/layer5", - }, - { - project: "Meshery.io", - image: meshery, - site: "https://meshery.io", - language: "Jekyll", - maintainers_name: ["Vacant"], - link: [""], - repository: "https://github.com/meshery/meshery.io", - }, - { - project: "Meshery Documentation", - image: meshery, - site: "http://docs.meshery.io", - language: "Jekyll", - maintainers_name: ["Vacant"], - link: [""], - repository: "https://github.com/meshery/meshery/tree/master/docs", - }, - { - project: "Meshery UI", - image: meshery, - site: "https://github.com/meshery/meshery/tree/master/ui", - language: "NextJS, React.js, MaterialUI and Billboard.js", - maintainers_name: ["Antonette Caldwell", "Aabid Sofi", "Ian Whitney"], - link: [ - "https://layer5.io/community/members/antonette-caldwell", - "https://layer5.io/community/members/aabid-sofi", - "https://layer5.io/community/members/ian-whitney" - ], - repository: "https://github.com/meshery/meshery/tree/master/ui", - }, - { - project: "Service Mesh Performance", - image: smp, - site: "https://smp-spec.io", - language: "Jekyll", - maintainers_name: ["Aaditya Subedy"], - link: ["https://layer5.io/community/members/aaditya-narayan-subedy"], - repository: - "https://github.com/service-mesh-performance/service-mesh-performance", - }, - { - project: "Nighthawk", - image: gnh, - site: "https://getnighthawk.dev", - language: "Jekyll", - maintainers_name: ["Vacant"], - link: [""], - repository: "https://github.com/layer5io/getnighthawk", - }, - { - project: "Kanvas", - image: kanvasLogo, - site: "/cloud-native-management/kanvas", - language: "React.js, Cytoscape.js", - maintainers_name: ["Aabid Sofi"], - link: ["https://layer5.io/community/members/aabid-sofi"], - description: - "A collaborative, visual topology to design and operate cloud native infrastructure.", - repository: "https://github.com/layer5labs/meshery-extensions", - accessRequired: "*program participation required", - }, - { - project: "Discussion Forum", - image: five, - site: "https://discuss.layer5.io", - language: "Discourse", - maintainers_name: ["Vacant"], - link: [""], - repository: " https://discuss.layer5.io", - }, - { - project: "Cloud Native Patterns", - image: patterns, - site: "https://service-mesh-patterns.github.io/service-mesh-patterns/", - language: "Gatsby", - maintainers_name: ["Nic Jackson"], - link: ["https://layer5.io/community/members/nic-jackson"], - repository: - "https://github.com/service-mesh-patterns/service-mesh-patterns", - }, - { - project: "Cloud Native Playground", - image: meshery, - site: "https://play.meshery.io", - language: "React.js", - maintainers_name: ["Sangram Rath"], - link: ["#"], - repository: "https://github.com/meshery/play", - }, - { - project: "Layer5 Cloud", - image: meshery, - site: "https://cloud.layer5.io/", - language: "React.js", - maintainers_name: ["Vacant"], - link: ["#"], - repository: "https://github.com/layer5io/meshery-cloud", - accessRequired: "*program participation required", - }, - { - project: "Recognition Program", - image: recognitionLogo, - site: "https://badges.layer5.io/", - language: "Gatsby", - maintainers_name: ["Vacant"], - link: [""], - repository: - "https://github.com/layer5labs/meshery-extensions-packages/", - }, - { - project: "Sistent Design System", - image: sistent, - site: "https://github.com/layer5io/sistent", - language: "React.js, Typescript", - maintainers_name: [ - "Antonette Caldwell", - "Aabid Sofi", - ], - link: [ - "https://layer5.io/community/members/antonette-caldwell", - "https://layer5.io/community/members/aabid-sofi", - ], - repository: "https://github.com/layer5io/sistent", - }, - { - project: "Layer5 Documentation", - image: five, - site: "https://docs.layer5.io/", - language: "Hugo", - maintainers_name: ["Vacant"], - link: ["#"], - repository: "https://github.com/layer5io/docs", - }, - { - project: "Academy Theme", - image: five, - site: "https://github.com/layer5io/academy-theme", - language: "Hugo", - maintainers_name: ["Aabid Sofi"], - link: [ - "#", - "https://layer5.io/community/members/aabid-sofi" - ], - repository: "https://github.com/layer5io/academy-theme", - }, - { - project: "Academy Build", - image: five, - site: "https://github.com/layer5io/academy-build", - language: "Hugo build / GitHub Action", - maintainers_name: ["Aabid Sofi"], - link: ["https://layer5.io/community/members/aabid-sofi"], - repository: "https://github.com/layer5io/academy-build", - }, - { - project: "Academy Example", - image: five, - site: "https://github.com/layer5io/academy-example", - language: "Hugo", - maintainers_name: ["Vacant"], - link: ["#"], - repository: "https://github.com/layer5io/academy-example", - }, - { - project: "Exoscale Academy", - image: five, - site: "https://github.com/layer5io/exoscale-academy", - language: "Hugo", - maintainers_name: ["Vacant"], - link: ["#"], - repository: "https://github.com/layer5io/exoscale-academy", - }, - { - project: "Layer5 Academy", - image: five, - site: "https://github.com/layer5io/layer5-academy", - language: "Hugo", - maintainers_name: ["Vacant"], - link: ["#"], - repository: "https://github.com/layer5io/layer5-academy", - }, - ], - }, - - { - category: "Cloud Native Learning Paths", - subdata: [ - { - project: "Cloud Native Labs", - image: five, - language: "yaml", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A variety of interactive labs spanning different cloud native infrastructure. See https://layer5.io/learn/kanvas-labs.", - repository: "https://github.com/layer5io/service-mesh-labs", - }, - { - project: "Istio Service Mesh Workshop", - image: istioLogo, - language: "Meshery", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A workshop that teaches about modern infrastructure through the lens of Istio.", - repository: "https://github.com/layer5io/istio-service-mesh-workshop", - }, - { - project: "Advanced Istio Service Mesh Workshop", - image: istioLogo, - language: "Meshery", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "An advanced workshop that teaches about modern infrastructure through the lens of Istio.", - repository: - "https://github.com/layer5io/advanced-istio-service-mesh-workshop", - }, - { - project: "Linkerd Service Mesh Workshop", - image: linkerdLogo, - language: "Meshery", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A workshop that teaches about modern infrastructure through the lens of Linkerd.", - repository: "https://github.com/layer5io/linkerd-service-mesh-workshop", - }, - { - project: "Containers 101 Workshop", - image: five, - language: "Docker", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A workshop that introduces Linux containers through concepts in slides and hands-on labs.", - repository: "https://github.com/layer5io/containers-101-workshop", - }, - { - project: "Cloud Native Playground", - image: meshery, - language: "Meshery", - maintainers_name: ["Vacant"], - link: ["#"], - description: "Cloud Native Playground for Kubernetes and CNCF projects", - repository: "https://github.com/meshery/play", - }, - ], - }, - - { - category: "Cloud Native Management Repos", - subdata: [ - { - project: "Meshery", - image: meshery, - language: "Golang, gRPC", - maintainers_name: ["Antonette Caldwell"], - link: [ - "https://layer5.io/community/members/antonette-caldwell", - ], - description: - "the cloud native management plane to provide governance and backend system integration. Golang, gRPC, NATS, CloudEvents", - repository: "https://github.com/meshery/meshery", - }, - { - project: "SMI Conformance", - image: smiLogo, - language: "GitHub Action", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A utility for validating the conformance of service mesh implementations and their adherence to the Service Mesh Interface specifications.", - repository: - "https://github.com/layer5io/meshery-smi-conformance-action", - accessRequired: "*archived", - }, - { - project: "Meshery Operator", - image: MesheryOperator, - language: "Golang, Kubernetes Operator", - maintainers_name: ["Aisuko Li"], - link: ["https://layer5.io/community/members/aisuko-li"], - description: - "Meshery Operator is the multi-cloud native operator and implementation of MeshSync.", - repository: "https://github.com/meshery/meshery-operator", - }, - { - project: "MeshSync", - image: MeshSync, - language: "Golang and NATS", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "MeshSync is a multi-cluster resource discovery application which is also a custom Kubernetes controller.", - repository: "https://github.com/meshery/meshsync", - }, - { - project: "Learn-Layer5", - image: five, - language: "Golang, Kuttl", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A utility for validating the conformance of cloud native implementations and their adherence to the Cloud Native Interface specifications.", - repository: - "https://github.com/layer5io/meshery-smi-conformance-action", - }, - { - project: "Layer5 Cloud", - image: meshery, - language: "Golang", - maintainers_name: ["Vacant"], - link: ["#"], - description: "A Meshery Remote Provider.", - repository: "https://github.com/layer5io/meshery-cloud", - accessRequired: "*program participation required", - }, - // { - // project: "MeshMonkey", - // language: "Golang", - // repository: "https://github.com/layer5io/meshmonkey", - // }, - { - project: "Kanvas Snapshot", - image: kanvasLogo, - site: "https://layer5.io/solutions/gitops/snapshot", - language: "GitHub Actions", - maintainers_name: ["Vacant"], - link: [""], - description: - "Generates visual snapshots of infrastructure as code (e.g., Kubernetes manifests, Helm charts) and delivers them to pull requests for automated review.", - repository: "https://github.com/layer5labs/kanvas-snapshot", - }, - { - project: "Helm Kanvas Snapshot", - image: kanvasLogo, - language: "Golang", - maintainers_name: ["Vacant"], - link: [""], - description: - "The Kanvas Snapshot Helm Plugin allows users to generate a visual snapshot of their Helm charts directly from the command line.", - repository: "https://github.com/meshery/helm-kanvas-snapshot", - }, - { - project: "Kubectl Kanvas Snapshot", - image: kanvasLogo, - language: "Golang", - maintainers_name: ["Vacant"], - link: [""], - description: "A Kubectl Kanvas Snapshot is a native kubectl plugin designed to conveniently create a visual snapshot of the combination of multiple Kubernetes manifest files.", - repository: "https://github.com/meshery/kubectl-kanvas-snapshot", - }, - ], - }, - - { - category: "WebAssembly Repos", - subdata: [ - { - project: "Image Hub", - image: imagehub, - language: "Vuejs", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A sample application written to run on Istio or Consul for exploring WebAssembly modules used as Envoy filters.", - repository: "https://github.com/layer5io/image-hub", - }, - { - project: "WASM Filters", - image: wasm, - language: "C, C++, Rust", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A collection of WebAssemby filters for Envoy proxy written in C, C++, and Rust for exercising different features provided by envoy-wasm.", - repository: "https://github.com/layer5io/wasm-filters", - }, - ], - }, - - { - category: "Cloud Native Performance Repos ", - subdata: [ - { - project: "Cloud Native Performance", - image: smp, - language: "Protobuf", - maintainers_name: [ - "Lee Calcote", - "Nic Jackson", - "Otto Van Der Schaaf", - "Xin Huang", - "Aaditya Narayan Subedy", - ], - link: [ - "https://layer5.io/community/members/lee-calcote", - "https://layer5.io/community/members/nic-jackson", - "https://layer5.io/community/members/otto-van-der-schaaf", - "https://layer5.io/community/members/xin-huang", - "https://layer5.io/community/members/aaditya-narayan-subedy", - ], - description: - "a common format for capturing and describing cloud native infrastucture performance and services.", - repository: - "https://github.com/layer5io/service-mesh-performance-specification", - }, - { - project: "Wrk2", - image: meshery, - language: "C", - maintainers_name: ["Otto Van Der Schaaf"], - link: ["https://layer5.io/community/members/otto-van-der-schaaf"], - description: - "a C-based load generator. A fork of wrk2, which includes the concept of coordinated omission.", - repository: "https://github.com/giltene/wrk2", - }, - { - project: "Gowrk2", - image: meshery, - language: "Golang", - maintainers_name: ["Vacant"], - link: [""], - description: - "Augmentation of wrk2 to produce output compatible with Meshery’s visualization of performance test results.", - repository: "https://github.com/layer5io/gowrk2", - }, - { - project: "Nighthawk", - image: gnh, - language: "Golang, gRPC", - maintainers_name: ["Vacant"], - link: [""], - description: - "Augmentation of Envoy Nighthawk to produce output compatible with Meshery’s visualization of performance test results", - repository: "https://github.com/layer5io/nighthawk-go", - }, - { - project: "SMP Action", - image: github, - language: "shell", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "GitHub Action to run SMP Performance Benchmarks on CI/CD pipelines.", - repository: "https://github.com/layer5io/meshery-smp-action", - }, - { - project: "Meshery Nighthawk", - image: meshery, - language: "Golang", - maintainers_name: ["Xin Huang"], - link: ["https://layer5.io/community/members/xin-huang"], - description: - "meshery-perf is a Meshery component used to run performance tests", - repository: "https://github.com/meshery/meshery-perf", - }, - ], - }, - - { - category: "Cloud Native Pattern Repos", - subdata: [ - { - project: "Cloud Native Patterns", - image: patterns, - language: "Yaml", - maintainers_name: ["Lee Calcote", "Nic Jackson"], - link: [ - "https://layer5.io/community/members/lee-calcote", - "https://layer5.io/community/members/nic-jackson", - ], - description: - "A collection of functional examples to be used as patterns for operationalizing cloud native infrastruture and application deployments and applying best practices.", - repository: - "https://github.com/service-mesh-patterns/service-mesh-patterns", - }, - { - project: "Cloud Native Patterns Action", - image: patterns, - language: "shell", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "GitHub Action to deploy Cloud Native Patterns on CI/CD pipelines.", - repository: - "https://github.com/layer5io/meshery-cloud-native-patterns-action", - }, - ], - }, - { - category: "Meshery Adapter Repos", - subdata: [ - { - project: "Meshery Adapter for Istio", - image: istioLogo, - language: "Golang, gRPC", - maintainers_name: ["Aisuko Li"], - link: ["https://layer5.io/community/members/aisuko-li"], - description: "Meshery adapter for management of Istio.", - repository: "https://github.com/layer5io/meshery-istio", - }, - { - project: "Meshery Adapter for Linkerd", - image: linkerdLogo, - language: "Golang, gRPC", - maintainers_name: ["Hussaina Begum"], - link: ["https://layer5.io/community/members/hussaina-begum"], - description: "Meshery adapter for management of Linkerd.", - repository: "https://github.com/layer5io/meshery-linkerd", - }, - { - project: "Meshery Adapter for NSM", - image: nsmLogo, - language: "Golang, gRPC", - maintainers_name: ["Michael Gfeller"], - link: ["https://layer5.io/community/members/michael-gfeller"], - description: "Meshery adapter for management of Network Service Mesh.", - repository: "https://github.com/layer5io/meshery-nsm", - }, - // { - // project: "Meshery Adapter for Octarine", - // image: meshery, - // language: "Golang, gRPC", - // maintainers_name: ["Lee Calcote"], - // link: ["https://layer5.io/community/members/lee-calcote"], - // description: "Meshery adapter for management of Octarine.", - // repository: "https://github.com/layer5io/meshery-octarine", - // }, - { - project: "Meshery Adapter for Traefik Mesh", - image: traefikLogo, - language: "Golang, gRPC", - maintainers_name: ["Antonette Caldwell"], - link: ["https://layer5.io/community/members/antonette-caldwell"], - description: "Meshery adapter for management of Traefik Mesh.", - repository: "https://github.com/layer5io/meshery-traefik-mesh", - }, - { - project: "Meshery Adapter for Kuma", - image: kumaLogo, - language: "Golang, gRPC", - maintainers_name: ["Michael Gfeller"], - link: ["https://layer5.io/community/members/michael-gfeller"], - description: "Meshery adapter for management of Kuma.", - repository: "https://github.com/layer5io/meshery-kuma", - }, - { - project: "Meshery Adapter for Consul", - image: consulLogo, - language: "Golang, gRPC", - maintainers_name: ["Hussaina Begum"], - link: ["https://layer5.io/community/members/hussaina-begum"], - description: "Meshery adapter for management of Consul", - repository: "https://github.com/layer5io/meshery-consul", - }, - { - project: "Meshery Adapter for CPX", - image: meshery, - language: "Golang, gRPC", - maintainers_name: ["Vacant"], - link: ["#"], - description: "Meshery adapter for management of Citrix CPX", - repository: "https://github.com/layer5io/meshery-cpx", - }, - { - project: "Meshery Adapter for App Mesh", - image: appmeshLogo, - language: "Golang, gRPC", - maintainers_name: ["Antonette Caldwell"], - link: ["https://layer5.io/community/members/antonette-caldwell"], - description: "Meshery adapter for management of AWS App Mesh", - repository: "https://github.com/layer5io/meshery-app-mesh", - }, - { - project: "Meshery Adapter for Tanzu Service Mesh", - image: meshery, - language: "Golang, gRPC", - maintainers_name: ["Hussaina Begum"], - link: ["https://layer5.io/community/members/hussaina-begum"], - description: - "Meshery adapter for management of VMware Tanzu Service Mesh", - repository: "https://github.com/layer5io/meshery-tanzu-sm", - }, - { - project: "Meshery Adapter for NGINX Service Mesh", - image: nginxLogo, - language: "Golang, gRPC", - maintainers_name: ["Hussaina Begum"], - link: ["https://layer5.io/community/members/hussaina-begum"], - description: "Meshery adapter for management of NGINX Service Mesh", - repository: "https://github.com/layer5io/meshery-nginx-sm", - }, - { - project: "Meshery Adapter for Cilium Service Mesh", - image: ciliumLogo, - language: "Golang, gRPC", - maintainers_name: ["Vacant"], - link: [""], - description: "Meshery adapter for management of Cilium Service Mesh.", - repository: "https://github.com/meshery/meshery-cilium", - }, - { - project: "MeshKit", - image: meshery, - language: "Golang,Cuelang", - maintainers_name: ["Aisuko Li"], - link: ["https://layer5.io/community/members/aisuko-li"], - description: "Toolkit for Layer5's microservices.", - repository: "https://github.com/layer5io/meshkit", - }, - { - project: "Meshery Adapter Library", - image: meshery, - language: "Golang, gRPC", - maintainers_name: ["Michael Gfeller"], - link: ["https://layer5.io/community/members/michael-gfeller"], - description: - "A common and consistent set of functionality for Meshery Adapters.", - repository: "https://github.com/layer5io/meshery-adapter-library", - }, - { - project: "Meshery Adapter Template", - image: meshery, - language: "Golang, gRPC", - maintainers_name: ["Vacant"], - link: ["#"], - description: - "A GitHub repo used as a template for new Meshery Adapters.", - repository: "https://github.com/layer5io/meshery-adapter-template", - }, - ], - }, -]; - - diff --git a/src/sections/Community/Handbook/repository.js b/src/sections/Community/Handbook/repository.js deleted file mode 100644 index c783eb6ca62df..0000000000000 --- a/src/sections/Community/Handbook/repository.js +++ /dev/null @@ -1,291 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import { repo_data } from "./repo-data"; -import github from "../../../assets/images/socialIcons/github.svg"; -import layer5icon from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; -import mesheryExtensionsIcon from "../../../assets/images/meshery-extensions/icon-only/meshery-extensions-color.svg"; -import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; -import MeshSync from "../../../assets/images/meshsync/meshsync.svg"; -import servicemeshperformance from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; -import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import servicemeshpattern from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -import Kanvas from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; -import layer5AcademyIcon from "../../../assets/images/academy/academy.svg"; - -import { Link } from "gatsby"; - -const contents = [ - { - id: 0, - link: "#top", - text: "GitHub Organizations and Repositories", - }, - { id: 1, link: "#Frontend Projects", text: "Frontend Projects" }, - { id: 2, link: "#Backend Projects", text: "Backend Projects" }, -]; - -const Repository = () => { - const data = React.useMemo(() => repo_data); - let frontendProjects = data.filter((data) => data.category === "Frontend"); - let backendProjects = data.filter((data) => data.category !== "Frontend"); - - - return ( - -
    -

    Repository Overview

    -
    - -
    - -
    - -

    GitHub Organizations and Repositories

    -
    -

    - A brief introduction to all of the Github repositories of Layer5 organization is offered below. This overview serves as a resource to newcomers seeking a perspective of the collective community efforts (from a code-centric perspective). See Layer5 GitHub Process for more related information. -

    - -

    - Note that the Layer5 community spans six GitHub - organizations and one multi-repository collection: -

    - - - -
    - A note on *program participation / *invite-only projects -

    Some of our projects, particularly those dealing with sensitive user data or playing a key role in our managed services, require a slightly more structured approach to development. This means that we invite trusted contributors, core team members and maintainers to participate directly in these projects. This ensures the highest standards of security and reliability. We're always on the lookout for talented individuals who can contribute to these efforts, so if you're interested in getting involved, keep an eye out for announcements and opportunities to showcase your skills!

    -

    Contributors are frequently invited to participation in the development of these projects extensions that contain either sensitive information (e.g. Meshery Remote Provider user accounts), contain privileged access to community environments (e.g. the hosted Meshery Playground) or grant administrative rights and control (e.g. assignment of recognition badges). Participation in these projects is by invitation only and requires a high level of trust and commitment to the Layer5 community.

    -

    Hundreds of contributors have participated in these projects, and many have gone on to become maintainers and core team members. We want you to be one of them! If you are interested in participating in these projects, please reach out to the project maintainers or the Layer5 community team.

    -
      Projects listed with *program participation required: -
    • Kanvas
    • -
    • Layer5 Cloud
    • -
    -
    - -

    Frontend Projects

    -
    - - {frontendProjects.map((frontendProject, index) => { - const { category } = frontendProject; - return ( -
    - - - - - - - - - - - {frontendProject.subdata.map((subdata) => { - const { - project, - language, - repository, - maintainers_name, - site, - image, - link, - accessRequired, - } = subdata; - return ( - - - - - - - - - - ); - })} -
    SiteProjectFrameworkMaintainersRepo
    - - site-icon - - {project}{language} - {maintainers_name.map((mname, index) => { - return ( - - {index > 0 ? ", " : ""}{mname} - - ); - })} - - - github-icon - -
    { accessRequired != "" ? accessRequired : ""}
    -
    -
    - ); - })} - -

    Backend Projects

    -
    - - {backendProjects.map((backendProject, index) => { - const { category } = backendProject; - return ( -
    - - - - - - - - - - - {backendProject.subdata.map((subdata) => { - const { project,image,language,description,repository,link,maintainers_name,accessRequired } = subdata; - const smpClass = project === "SMP Action"; - const siteIconClasses = smpClass ? "site-icon inline smp-action" : "site-icon inline"; - return ( - - - - - - - - - - ); - })} -
    {category}LanguageDescriptionMaintainersRepo
    - project {project} - {language}{description} - {maintainers_name?.map((mname, index) => { - return ( - - {index > 0 ? ", " : ""} - {mname} - - ); - })} - - - github-icon - -
    { accessRequired != "" ? accessRequired : ""}
    -
    -
    - ); - })} - -
    -
    - -
    -
    - ); -}; - -export default Repository; diff --git a/src/sections/Community/Handbook/security-vulnerabilities.js b/src/sections/Community/Handbook/security-vulnerabilities.js deleted file mode 100644 index 4908eae7fa7f1..0000000000000 --- a/src/sections/Community/Handbook/security-vulnerabilities.js +++ /dev/null @@ -1,194 +0,0 @@ -import React from "react"; -import { Container } from "../../../reusecore/Layout"; -import { HandbookWrapper } from "./Handbook.style"; -import TOC from "../../../components/handbook-navigation/index"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; - -import layer5icon from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; -import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; -import MeshSync from "../../../assets/images/meshsync/meshsync.svg"; -import servicemeshperformance from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; -import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import mesheryextension from "../../../assets/images/meshery-extensions/icon-only/meshery-extensions-color.svg"; -import servicemeshpattern from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import Kanvas from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; - -const SecurityVulnerabilitiesPage = () => { - return ( - -
    -

    Security Vulnerabilities

    -
    - -
    - -
    -

    Reporting a vulnerability


    -

    We are very grateful to the security researchers and users that report security vulnerabilities. We investigate each report thoroughly.

    -

    To make a report, send an email to the private security-vulns-reports@layer5.io mailing list with the vulnerability details. For normal product bugs unrelated to latent security vulnerabilities, please head to the appropriate repository and submit a new issue .

    -

    Note that the Layer5 community spans six GitHub organizations:

    - -

    You can find the list of all the Layer5 project repositories here

    -

    When to report a security vulnerability?

    -

    Send us a report whenever you:

    -
      -
    • Think Layer5 projects have a potential security vulnerability.
    • -
    • Are unsure whether or how a vulnerability affects the project.
    • -
    • Think a vulnerability is present in another project that Layer5 projects depends on (Docker for example).
    • -
    - -

    When not to report a security vulnerability?

    -

    Don’t send a vulnerability report if:

    -
      -
    • You need help tuning Layer5 project components for security.
    • -
    • You need help applying security related updates.
    • -
    • Your issue is not security related.
    • -
    -

    Instead, join the community Slack and ask questions.

    - -

    Evaluation

    -

    The Layer5 team acknowledges and analyzes each vulnerability report within 10 working days.

    - -

    Any vulnerability information you share with the Layer5 team stays within the respective Layer5 project. We don’t disseminate the information to other projects. We only share the information as needed to fix the issue.

    - -

    We keep the reporter updated as the status of the security issue is addressed.

    - -

    Fixing the issue

    -

    Once a security vulnerability has been fully characterized, a fix is developed by the Layer5 team. The development and testing for the fix happens in a private GitHub repository in order to prevent premature disclosure of the vulnerability.

    - -

    Early disclosures

    -

    The Layer5 project maintains a mailing list for private early disclosure of security vulnerabilities. The list is used to provide actionable information to close Layer5 partners. The list is not intended for individuals to find out about security issues.

    - -

    Public disclosures

    -

    On the day chosen for public disclosure, a sequence of activities takes place as quickly as possible:

    -
      -
    • Changes are merged from the private GitHub repository holding the fix into the appropriate set of public branches.
    • -
    • Layer5 team ensures all necessary binaries are promptly built and published.
    • -
    • Once the binaries are available, an announcement is sent out on the following channels: - -
    • -
    -

    As much as possible this announcement will be actionable, and include any mitigating steps customers can take prior to upgrading to a fixed version.

    - -

    List of Announced Vulnerabilities:

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    DATE ANNOUNCEDCVE IDDESCRIPTIONAFFECTED COMPONENTVULNERABLE VERSIONPATCHED VERSIONFIX DETAILSLINKS
    2021-04-28CVE-2021-31856A SQL Injection vulnerability in the REST API in Layer5 Meshery 0.5.2 allows an attacker to execute arbitrary SQL commands via the /experimental/patternfiles endpoint (order parameter in GetMesheryPatterns in models/meshery_pattern_persister.go).REST APIv0.5.2v0.5.3fix pullmitre, details
    -
    - -
    -
    -
    - -
    - ); -}; - -export default SecurityVulnerabilitiesPage; diff --git a/src/sections/Community/Handbook/writing-program.js b/src/sections/Community/Handbook/writing-program.js deleted file mode 100644 index cf343f1b2b071..0000000000000 --- a/src/sections/Community/Handbook/writing-program.js +++ /dev/null @@ -1,521 +0,0 @@ -import React, { useState } from "react"; -import { Container, Row, Col } from "../../../reusecore/Layout"; -import { Link } from "gatsby"; -import { HandbookWrapper } from "./Handbook.style"; -import Button from "../../../reusecore/Button"; -import Modal from "react-modal"; -import TOC from "../../../components/handbook-navigation/index"; -import TocPagination from "../../../components/handbook-navigation/TocPagination"; -import { GrFormClose } from "@react-icons/all-files/gr/GrFormClose"; -import ContentForm from "./writing-program/content-form"; - -import blog from "./images/blogs.svg"; -import event from "./images/event.svg"; -import talks from "./images/talks.svg"; -import videos from "./images/videos.svg"; -import workshop from "./images/workshop.svg"; -import resources from "./images/resources.svg"; - -const Writers = () => { - const [modalIsOpen, setIsOpen] = useState(false); - - const openModal = () => setIsOpen(true); - - const closeModal = () => setIsOpen(false); - - return ( - -
    -

    Write with Layer5!

    -
    - -
    - -
    -

    What is Layer5 Writing Program?

    -

    - The Layer5 Writing Program is a way to demonstrate your expertise, - give back to the community, and help us produce great content. We - collaborate with authors and technologists from around the world - to produce high quality articles, blog posts, tutorials and other - cloud native resources on Meshery, Kubernetes, CNCF, Docker and - related technologies. -

    -

    Why should you participate?

    -
    - - -
    - - - - - - - - - -
    - - - - - -

    - Improve your writing and
    - communication skills -

    - Publishing is a feedback-driven process that can help - you understand your audience better, explain complex - topics clearly, and iterate to improve results. Become - a better technical writer by collaborating with an - accomplished team of technical writers and editors. -
    - - - - - -

    Build your technical profile

    - Share your knowledge with a worldwide developer - community. Build your GitHub profile with assigned - issues and merged pull requests. Articles, posts, - project documentation written by you will be drafted, - put into a pull request, reviewed and merged like any - other code-centric contribution. Documenting the - problems you solved or a new feature you implemented - will serve as a perpetual guide to others in the - community. -
    -
    - - -
    - - - - - - - - - -
    - - - - - -

    Establish your voice and personal brand

    - Sharing your knowledge not only demonstrates your - technical expertise, it highlights your ability to - teach others, and establishes you as an authority on - the topic. Your technical write-ups are empirical - evidence of your ability to learn and teach. -
    - - - - - -

    Educate

    - Whether you're writing about a complex system or a a - set of actions you took to address an error, the odds - are high that someone else will someday struggle with - the same things as you. By writing about the things - that you learn or find interesting, you aren't just - teaching yourself, you're also helping share your - knowledge with every person who reads your post. -
    -
    - -
    -
    - -

    Where can you contribute?

    - -

    - We welcome the contribution of any type that shares knowledge - about our projects or related technologies. -
    - Do you want to document your recent effort in implementing a new - feature? Do you want to share a solution for a problem you were - struggling with? Do you want to share information about a recent - technology you find intriguing? Want to host an event with Layer5? - Want to deliver a talk, a workshop, or a tutorial? Just let us - know. -

    - - -
    - - -
    - Blog -
    Blog
    -

    Share Your Experience

    -
    - - - - -
    - Resource -
    Resource
    -

    Articles, Tutorials, Podcasts and More

    -
    - - - - -
    - Workshop -
    Workshop
    -

    Deliver a Hands-on Learning Experience

    -
    - - -
    -
    - -
    - - -
    - Event -
    Event
    -

    Organize an Event

    -
    - - - - -
    - Talks -
    Talks
    -

    Talk About Anything Cloud Native

    -
    - - - - -
    - Videos -
    Recorded Videos
    -

    Product Videos, Reviews or Demo

    -
    - - -
    -
    - -

    What is the process?

    - -
    -
    -

    - If you’re interested in the Layer5 Writing Program, please - submit your information (and proposed topic, if you have one) - to get started.{" "} - - Don't have a topic? Don't worry, we have plenty of - suggestions for you. - -

    - - -

    - Layer5 Content Registration Form -

    -
    - -
    - -
    -
    -

    - Upon being accepted, you'll work with a coordinator on the - content team to decide on a topic, develop a project plan, and - discuss submission details. -

    -
    -
    - -

    -

    What are some suggested topics?

    -

    - Here are some suggested topics to get you started. If you have an - idea that isn't listed here or if you have any question, please - let us know on our{" "} - Discuss Forum /{" "} - Slack Channel. -

    -
      -
    • -

      - DevOps/Observability/Kubernetes: -

      -
        -
      • -

        - Distributed Tracing in Context of Meshery's Architecture. -

        -
      • -
      • -

        One-stop Cloud Native Market Place - Meshery Catalog.

        -
      • -
      • -

        Interpreting your Cloud Native Performance - SMP.

        -
      • -
      • -

        - Creating and Deploying your first application with - Kanvas. -

        -
      • -
      • -

        Load generation and Load balancing.

        -
      • -
      • -

        DevOps and Platform Engineering.

        -
      • -
      • -

        Beginners guide to Meshmodel.

        -
      • -
      • -

        - Enhancing Microservices Observability with Meshery and - Prometheus. -

        -
      • -
      -
    • -
    • -

      - Community: -

      -
        -
      • -

        - Building Bridges, Not Walls: The Power of Open Source - Collaboration. -

        -
      • -
      • -

        - A Deep Dive into Meshery's Contribution to Cloud Native - Ecosystem. -

        -
      • -
      • -

        - Open Source Sustainability: Funding Models for Long-Term - GitHub Projects. -

        -
      • -
      • -

        Importance to an open source community.

        -
      • -
      • -

        - Beyond Code: The Unsung Heroes of Open Source - - Documenters, Testers, and Designers. -

        -
      • -
      • -

        - Open Source Alchemy: Transforming Community Contributions - into Gold. -

        -
      • -
      • -

        - Collaborative Open Source Development: Inside the - Community of Layer5. -

        -
      • -
      -
    • -
    - -

    -

    How to Submit and Review Your Writing?

    -

    - The Writing Program offers writers two convenient ways to get - their writings reviewed by Community. Whether you prefer working - with Google Docs or contributing directly to the website, we've - got you covered. This structured guide will walk you through both - options, ensuring that your valuable content is reviewed - effectively.{" "} -

    -
      -
    1. -

      - Google Docs Review: -

      -

      - If you prefer a straightforward approach, start by crafting - your blog article within{" "} - Google Docs, ensuring - it's well-structured and error-free. Share the document with - us by adding it to the{" "} - - Community Drive - - , we will provide feedback directly within the Google Doc. - Engage in discussions to refine your content collaboratively. - Once thoroughly reviewed, prepare your submission according to - community guidelines. -

      -
    2. -
    3. -

      - Website Contribution Review: -

      -

      - For those comfortable with local website development, - contribute directly to the community website. Set up your - local environment - , create a blog post adhering to specified - guidelines, and submit it via a Pull Request on GitHub. - Reviewers will provide feedback, and you'll refine your post - collaboratively. Upon completion, maintainers will - merge your blog post into the website repository, celebrating - your contribution. -

      -
    4. -
    - -

    Additional Resources

    - - - -
    -
    -
    -
    - ); -}; - -export default Writers; diff --git a/src/sections/Community/Handbook/writing-program/content-form.js b/src/sections/Community/Handbook/writing-program/content-form.js deleted file mode 100644 index 3bbe5a82b9518..0000000000000 --- a/src/sections/Community/Handbook/writing-program/content-form.js +++ /dev/null @@ -1,167 +0,0 @@ -import React, { useState, useEffect } from "react"; -import Button from "../../../../reusecore/Button"; -import axios from "axios"; -import { Field, Form, Formik } from "formik"; -import ContentFormWrapper from "./content-form.style"; -import layer5_img from "../../../../assets/images/layer5/layer5-only/svg/layer5-white-no-trim.svg"; - -const ContentForm = () => { - const [memberFormOne, setMemberFormOne] = useState({}); - const [stepNumber, setStepNumber] = useState(0); - const [submit, setSubmit] = useState(false); - // Form values - const [validateContent, setValidateContent] = useState(false); - const [validateSlack, setValidateSlack] = useState(false); - const [email, setEmail] = useState(""); - const [name, setName] = useState(""); - const [content, setContent] = useState(""); - const [slack, setSlack] = useState(""); - const [title, setTitle] = useState(""); - const [details, setDetails] = useState(""); - const [comment, setComment] = useState(""); - const [slackName, setSlackName] = useState(""); - - - useEffect(() => { - if (submit) { - axios.post("https://hook.us1.make.com/7c1op88rysnmeitovt35fxzcv2spspp0", { - memberFormOne, - }); - } - }, [submit]); - - return ( - - { - stepNumber === 0 && -
    - { - setEmail(values.email); - setName(values.name); - setSlackName(values.slackName); - setTitle(values.title); - setDetails(values.details); - setComment(values.details); - setSlack(values.slack); - setContent(values.content); - - if (values.slack && values.content) { - setMemberFormOne(values); - setStepNumber(1); - setSubmit(true); - } else { - if (!values.slack) { - setValidateSlack(true); - } else { - setValidateSlack(false); - } - if (!(values.content)) { - setValidateContent(true); - } else { - setValidateContent(false); - } - } - }} - > -
    - - - - - - - - - {validateSlack &&

    Please fill in this field

    } -
    - - -
    - - - - - - {validateContent &&

    Please provide your choice of content.

    } -
    - - - - - - -
    - - - - - - - - - - -
    -
    - -
    -
    - } - { - stepNumber === 1 && - - } -
    - ); -}; - -const ThankYou = () => { - return ( -
    -

    Thank you for your interest in the Layer5 Writing Program!

    -

    You will soon receive detailed guidance from our content team. We'll get back to you as soon as we can.

    -

    In the meantime, please visit our community forum or join us in our community Slack.

    -

    - Team Layer5

    -
    - ); -}; - -export default ContentForm; diff --git a/src/sections/Community/Handbook/writing-program/content-form.style.js b/src/sections/Community/Handbook/writing-program/content-form.style.js deleted file mode 100644 index 691f5968faf9a..0000000000000 --- a/src/sections/Community/Handbook/writing-program/content-form.style.js +++ /dev/null @@ -1,74 +0,0 @@ -import styled from "styled-components"; - -const ContentFormWrapper = styled.section` - .validation{ - margin: 0; - font-size: 0.7rem; - color: red; - } - .thank-you-box { - padding: 2rem; - margin: 1rem; - background-color: ${props => props.theme.darkJungleGreenColor}; - border-radius: 0.1rem; - min-height: 20rem; - - h2, h3 { - color: white; - } - h2{ - margin-top: 1rem; - margin-bottom: 2rem; - } - p { - margin-top: .85rem; - color: white; - } - } - .form{ - font-size: .9rem; - margin: 0 1rem 1rem; - padding: 1rem; - overflow: auto; - height: 600px; - &::-webkit-scrollbar { - display: none; - } - - label { - display: block; - font-size: 1rem; - } - - .required-sign { - color: #8b0000; - } - - .form-name { - font-weight: 600; - margin: 20px 0px 5px 3px; - display: block; - } - - .text-field { - width: 100%; - border: 1px solid black; - border-radius: 10px; - padding: .5rem .5rem; - font-size: .85rem; - } - - .text-field:focus { - border: 2px solid #00B39F; - } - - .btn { - margin: 1.9rem auto; - display: block; - width: auto; - } - - } -`; - -export default ContentFormWrapper; From f25f9b7190a6957cc01b95f0c141e20d99d173a3 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 09:43:21 +0530 Subject: [PATCH 05/43] fix import paths Signed-off-by: Rajesh-Nagarajan-11 --- src/collections/handbook/about/index.mdx | 10 ++-- .../handbook/code-of-conduct/index.mdx | 4 +- .../handbook/community-roles/index.mdx | 4 +- src/collections/handbook/community/index.mdx | 6 +-- .../handbook/connect-with-us/index.mdx | 18 ++++---- .../handbook/contribution/index.mdx | 6 +-- src/collections/handbook/designer/index.mdx | 4 +- src/collections/handbook/faq/index.mdx | 2 +- .../handbook/github-process/index.mdx | 2 +- .../handbook/instructions/index.mdx | 4 +- src/collections/handbook/learning/index.mdx | 4 +- .../handbook/mentorship-programs/index.mdx | 4 +- src/collections/handbook/projects/index.mdx | 20 ++++---- .../handbook/recognition/index.mdx | 4 +- .../handbook/repository-overview/index.mdx | 24 +++++----- .../security-vulnerabilities/index.mdx | 18 ++++---- .../handbook/writing-program/images/blogs.svg | 46 +++++++++++++++++++ .../handbook/writing-program/images/event.svg | 44 ++++++++++++++++++ .../writing-program/images/resources.svg | 40 ++++++++++++++++ .../handbook/writing-program/images/talks.svg | 27 +++++++++++ .../writing-program/images/videos.svg | 24 ++++++++++ .../handbook/writing-program/index.mdx | 4 +- 22 files changed, 250 insertions(+), 69 deletions(-) create mode 100644 src/collections/handbook/writing-program/images/blogs.svg create mode 100644 src/collections/handbook/writing-program/images/event.svg create mode 100644 src/collections/handbook/writing-program/images/resources.svg create mode 100644 src/collections/handbook/writing-program/images/talks.svg create mode 100644 src/collections/handbook/writing-program/images/videos.svg diff --git a/src/collections/handbook/about/index.mdx b/src/collections/handbook/about/index.mdx index 0f1e395fa2d1c..a9a68a2deec3e 100644 --- a/src/collections/handbook/about/index.mdx +++ b/src/collections/handbook/about/index.mdx @@ -4,11 +4,11 @@ description: "Learn about Layer5's mission, goals, and how to get started contri type: Handbook --- -import { HandbookWrapper } from "../../sections/Community/Handbook/Handbook.style.js"; -import { Container, Row, Col } from "../../reusecore/Layout"; -import NewcomersMap from "../../sections/Community/Newcomers-guide/newcomers-map"; -import IntraPage from "../../components/handbook-navigation/intra-page"; -import longArrow from "../../sections/Community/Newcomers-guide/long-arrow.svg"; +import { HandbookWrapper } from "../../../sections/Community/Handbook/Handbook.style.js"; +import { Container, Row, Col } from "../../../reusecore/Layout"; +import NewcomersMap from "../../../sections/Community/Newcomers-guide/newcomers-map"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; +import longArrow from "../../../sections/Community/Newcomers-guide/long-arrow.svg"; import { useState } from "react"; export const contents = [ diff --git a/src/collections/handbook/code-of-conduct/index.mdx b/src/collections/handbook/code-of-conduct/index.mdx index 28efadd441f21..607ba49eebecc 100644 --- a/src/collections/handbook/code-of-conduct/index.mdx +++ b/src/collections/handbook/code-of-conduct/index.mdx @@ -4,8 +4,8 @@ description: "Layer5 follows the CNCF Code of Conduct to ensure a welcoming and type: Handbook --- -import { HandbookWrapper } from "../../sections/Community/Handbook/Handbook.style.js"; -import { Container } from "../../reusecore/Layout"; +import { HandbookWrapper } from "../../../sections/Community/Handbook/Handbook.style.js"; +import { Container } from "../../../reusecore/Layout"; import Point from "../community/bullet.svg";

    Community Code of Conduct

    diff --git a/src/collections/handbook/community-roles/index.mdx b/src/collections/handbook/community-roles/index.mdx index 59058bcd754be..208a3e1ad2cd1 100644 --- a/src/collections/handbook/community-roles/index.mdx +++ b/src/collections/handbook/community-roles/index.mdx @@ -4,9 +4,9 @@ description: "Learn about the different roles and leadership positions within th type: Handbook --- -import { Container } from "../../reusecore/Layout"; +import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby"; -import IntraPage from "../../components/handbook-navigation/intra-page"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; export const contents = [ { id: 0, link: "#top", text: "What are the different roles in the Layer5 community?" }, diff --git a/src/collections/handbook/community/index.mdx b/src/collections/handbook/community/index.mdx index c027591447860..ff8397c83568e 100644 --- a/src/collections/handbook/community/index.mdx +++ b/src/collections/handbook/community/index.mdx @@ -4,11 +4,11 @@ description: "Community guidelines and resources for the Layer5 open source comm type: Handbook --- -import { HandbookWrapper } from "../../sections/Community/Handbook/Handbook.style.js"; -import { Container } from "../../reusecore/Layout"; +import { HandbookWrapper } from "../../../sections/Community/Handbook/Handbook.style.js"; +import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby"; import Point from "./bullet.svg"; -import IntraPage from "../../components/handbook-navigation/intra-page"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; export const contents = [ { id: 0, link: "#Community Guidelines", text: "Guidelines" }, diff --git a/src/collections/handbook/connect-with-us/index.mdx b/src/collections/handbook/connect-with-us/index.mdx index 01b84e8b46d15..48cb8feb90c69 100644 --- a/src/collections/handbook/connect-with-us/index.mdx +++ b/src/collections/handbook/connect-with-us/index.mdx @@ -4,15 +4,15 @@ description: "Find all the ways to connect with the Layer5 community - Slack, Ne type: Handbook --- -import { Container } from "../../reusecore/Layout"; -import { ReactComponent as TwitterIcon } from "../../assets/images/socialIcons/twitter.svg"; -import mail_icon from "./socialIcons/mail_keppel.svg"; -import youtube_icon from "./socialIcons/youtube-light.svg"; -import github_icon from "./socialIcons/github-light.svg"; -import linkedin_icon from "./socialIcons/linkedin-light.svg"; -import docker_icon from "./socialIcons/docker-light.svg"; -import slack_icon from "./socialIcons/slack-light.svg"; -import IntraPage from "../../components/handbook-navigation/intra-page"; +import { Container } from "../../../reusecore/Layout"; +import { ReactComponent as TwitterIcon } from "../../../assets/images/socialIcons/twitter.svg"; +import mail_icon from "../../../assets/images/socialIcons/mail_keppel.svg"; +import youtube_icon from "../../../assets/images/socialIcons/youtube-light.svg"; +import github_icon from "../../../assets/images/socialIcons/github-light.svg"; +import linkedin_icon from "../../../assets/images/socialIcons/linkedin-light.svg"; +import docker_icon from "../../../assets/images/socialIcons/docker-light.svg"; +import slack_icon from "../../../assets/images/socialIcons/slack-light.svg"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; export const contents = [ { id: 0, link: "#Newsletter", text: "Newsletter" }, diff --git a/src/collections/handbook/contribution/index.mdx b/src/collections/handbook/contribution/index.mdx index 8b617148f4bd7..985dfe2a857cd 100644 --- a/src/collections/handbook/contribution/index.mdx +++ b/src/collections/handbook/contribution/index.mdx @@ -4,9 +4,9 @@ description: "Learn how to contribute to Layer5 projects using GitHub flow" type: Handbook --- -import { Container } from "../../reusecore/Layout"; -import Code from "../../components/CodeBlock"; -import IntraPage from "../../components/handbook-navigation/intra-page"; +import { Container } from "../../../reusecore/Layout"; +import Code from "../../../components/CodeBlock"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; import { StaticImage } from "gatsby-plugin-image"; export const contents = [ diff --git a/src/collections/handbook/designer/index.mdx b/src/collections/handbook/designer/index.mdx index 04603153c9796..34cfec65c38e9 100644 --- a/src/collections/handbook/designer/index.mdx +++ b/src/collections/handbook/designer/index.mdx @@ -4,9 +4,9 @@ description: "Design with Layer5 - Contribute to UI/UX across our projects" type: Handbook --- -import { Container } from "../../reusecore/Layout"; +import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby"; -import Button from "../../reusecore/Button"; +import Button from "../../../reusecore/Button";

    UI/UX

    diff --git a/src/collections/handbook/faq/index.mdx b/src/collections/handbook/faq/index.mdx index b61edb1e0f29e..d945eee7f2e04 100644 --- a/src/collections/handbook/faq/index.mdx +++ b/src/collections/handbook/faq/index.mdx @@ -4,7 +4,7 @@ description: "Frequently asked questions about Layer5 and contributing to the co type: Handbook --- -import { Container } from "../../reusecore/Layout"; +import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby";

    General FAQs:

    diff --git a/src/collections/handbook/github-process/index.mdx b/src/collections/handbook/github-process/index.mdx index 5d77c936a79af..752567382c5b2 100644 --- a/src/collections/handbook/github-process/index.mdx +++ b/src/collections/handbook/github-process/index.mdx @@ -4,7 +4,7 @@ description: "Layer5's GitHub process for issue and PR labels, templates, bots, type: Handbook --- -import { Container } from "../../reusecore/Layout"; +import { Container } from "../../../reusecore/Layout";

    Issue and PR Labels and Templates, Bots


    Overview


    diff --git a/src/collections/handbook/instructions/index.mdx b/src/collections/handbook/instructions/index.mdx index c61241eb46739..4aacd4d0a81fd 100644 --- a/src/collections/handbook/instructions/index.mdx +++ b/src/collections/handbook/instructions/index.mdx @@ -4,8 +4,8 @@ description: "GitHub Organization Membership guidelines for Layer5 contributors" type: Handbook --- -import { Container } from "../../reusecore/Layout"; -import IntraPage from "../../components/handbook-navigation/intra-page"; +import { Container } from "../../../reusecore/Layout"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; export const contents = [ { id: 0, link: "#top", text: "GitHub Organization Membership" }, diff --git a/src/collections/handbook/learning/index.mdx b/src/collections/handbook/learning/index.mdx index 99d68e2724309..8686ab42be290 100644 --- a/src/collections/handbook/learning/index.mdx +++ b/src/collections/handbook/learning/index.mdx @@ -4,9 +4,9 @@ description: "Learn cloud native with Layer5 Academy, labs, books, workshops, an type: Handbook --- -import { Container } from "../../reusecore/Layout"; +import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby"; -import IntraPage from "../../components/handbook-navigation/intra-page"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; export const contents = [ { id: 0, link: "#Learning", text: "Learning" }, diff --git a/src/collections/handbook/mentorship-programs/index.mdx b/src/collections/handbook/mentorship-programs/index.mdx index 6f641269c52b6..4e7c6dd6f1e0f 100644 --- a/src/collections/handbook/mentorship-programs/index.mdx +++ b/src/collections/handbook/mentorship-programs/index.mdx @@ -4,8 +4,8 @@ description: "Learn about mentorship programs available through the Layer5 commu type: Handbook --- -import { Container, Row, Col } from "../../reusecore/Layout"; -import Button from "../../reusecore/Button"; +import { Container, Row, Col } from "../../../reusecore/Layout"; +import Button from "../../../reusecore/Button"; import { programs_data } from "./programs-data"; import { isValidElement } from "react"; diff --git a/src/collections/handbook/projects/index.mdx b/src/collections/handbook/projects/index.mdx index 76b6431aeb582..727d20d74bc69 100644 --- a/src/collections/handbook/projects/index.mdx +++ b/src/collections/handbook/projects/index.mdx @@ -4,17 +4,17 @@ description: "Overview of Layer5 projects: Layer5, Meshery, Cloud Native Perform type: Handbook --- -import { Container } from "../../reusecore/Layout"; +import { Container } from "../../../reusecore/Layout"; import {Link} from "gatsby"; -import IntraPage from "../../components/handbook-navigation/intra-page"; -import meshery from "../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import layer5icon from "../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; -import hawkIcon from "../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; -import meshmateicon from "../../assets/images/meshmate/meshmate-icon.svg"; -import PatternsLogo from "../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import servicemeshperformance from "../../assets/images/service-mesh-performance/icon/smp-dark.svg"; -import mesheryoperatoricon from "../../assets/images/meshery-operator/meshery-operator.svg"; -import mesherysyncicon from "../../assets/images/meshsync/meshsync.svg"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; +import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +import layer5icon from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; +import hawkIcon from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; +import meshmateicon from "../../../assets/images/meshmate/meshmate-icon.svg"; +import PatternsLogo from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +import servicemeshperformance from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; +import mesheryoperatoricon from "../../../assets/images/meshery-operator/meshery-operator.svg"; +import mesherysyncicon from "../../../assets/images/meshsync/meshsync.svg"; export const contents = [ { id: 0, link: "#Layer5", text: "Layer5" }, diff --git a/src/collections/handbook/recognition/index.mdx b/src/collections/handbook/recognition/index.mdx index 215307d8d9c13..517b92b999baa 100644 --- a/src/collections/handbook/recognition/index.mdx +++ b/src/collections/handbook/recognition/index.mdx @@ -4,9 +4,9 @@ description: "How Layer5 recognizes and appreciates community members through ba type: Handbook --- -import { Container } from "../../reusecore/Layout"; +import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby"; -import IntraPage from "../../components/handbook-navigation/intra-page"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; import BadgeRow from "./BadgeRow"; import { activityBadges, projectBadges, specialBadges } from "./badges-data"; diff --git a/src/collections/handbook/repository-overview/index.mdx b/src/collections/handbook/repository-overview/index.mdx index de69d7c1f8301..443918ff770d6 100644 --- a/src/collections/handbook/repository-overview/index.mdx +++ b/src/collections/handbook/repository-overview/index.mdx @@ -4,19 +4,19 @@ description: "Overview of GitHub organizations and repositories in the Layer5 co type: Handbook --- -import { Container } from "../../reusecore/Layout"; +import { Container } from "../../../reusecore/Layout"; import { repo_data } from "./repo-data"; -import github from "../../assets/images/socialIcons/github.svg"; -import layer5icon from "../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; -import mesheryExtensionsIcon from "../../assets/images/meshery-extensions/icon-only/meshery-extensions-color.svg"; -import MesheryOperator from "../../assets/images/meshery-operator/meshery-operator-dark.svg"; -import MeshSync from "../../assets/images/meshsync/meshsync.svg"; -import servicemeshperformance from "../../assets/images/service-mesh-performance/icon/smp-dark.svg"; -import meshery from "../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import servicemeshpattern from "../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import IntraPage from "../../components/handbook-navigation/intra-page"; -import Kanvas from "../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; -import layer5AcademyIcon from "../../assets/images/academy/academy.svg"; +import github from "../../../assets/images/socialIcons/github.svg"; +import layer5icon from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; +import mesheryExtensionsIcon from "../../../assets/images/meshery-extensions/icon-only/meshery-extensions-color.svg"; +import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; +import MeshSync from "../../../assets/images/meshsync/meshsync.svg"; +import servicemeshperformance from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; +import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +import servicemeshpattern from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; +import Kanvas from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; +import layer5AcademyIcon from "../../../assets/images/academy/academy.svg"; import { Link } from "gatsby"; export const contents = [ diff --git a/src/collections/handbook/security-vulnerabilities/index.mdx b/src/collections/handbook/security-vulnerabilities/index.mdx index 3638072b65aae..2356fbcd0ba06 100644 --- a/src/collections/handbook/security-vulnerabilities/index.mdx +++ b/src/collections/handbook/security-vulnerabilities/index.mdx @@ -4,15 +4,15 @@ description: "How to report security vulnerabilities in Layer5 projects" type: Handbook --- -import { Container } from "../../reusecore/Layout"; -import layer5icon from "../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; -import MesheryOperator from "../../assets/images/meshery-operator/meshery-operator-dark.svg"; -import MeshSync from "../../assets/images/meshsync/meshsync.svg"; -import servicemeshperformance from "../../assets/images/service-mesh-performance/icon/smp-dark.svg"; -import meshery from "../../assets/images/meshery/icon-only/meshery-logo-light.svg"; -import mesheryextension from "../../assets/images/meshery-extensions/icon-only/meshery-extensions-color.svg"; -import servicemeshpattern from "../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import Kanvas from "../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; +import { Container } from "../../../reusecore/Layout"; +import layer5icon from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; +import MesheryOperator from "../../../assets/images/meshery-operator/meshery-operator-dark.svg"; +import MeshSync from "../../../assets/images/meshsync/meshsync.svg"; +import servicemeshperformance from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; +import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; +import mesheryextension from "../../../assets/images/meshery-extensions/icon-only/meshery-extensions-color.svg"; +import servicemeshpattern from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; +import Kanvas from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg";

    Reporting a vulnerability


    diff --git a/src/collections/handbook/writing-program/images/blogs.svg b/src/collections/handbook/writing-program/images/blogs.svg new file mode 100644 index 0000000000000..830299a6df284 --- /dev/null +++ b/src/collections/handbook/writing-program/images/blogs.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + diff --git a/src/collections/handbook/writing-program/images/event.svg b/src/collections/handbook/writing-program/images/event.svg new file mode 100644 index 0000000000000..c956d1e04a6cf --- /dev/null +++ b/src/collections/handbook/writing-program/images/event.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/collections/handbook/writing-program/images/resources.svg b/src/collections/handbook/writing-program/images/resources.svg new file mode 100644 index 0000000000000..b2b01bc55e2f0 --- /dev/null +++ b/src/collections/handbook/writing-program/images/resources.svg @@ -0,0 +1,40 @@ + + + + + + + + + diff --git a/src/collections/handbook/writing-program/images/talks.svg b/src/collections/handbook/writing-program/images/talks.svg new file mode 100644 index 0000000000000..9c213eddb42ff --- /dev/null +++ b/src/collections/handbook/writing-program/images/talks.svg @@ -0,0 +1,27 @@ + + + + + + + + + diff --git a/src/collections/handbook/writing-program/images/videos.svg b/src/collections/handbook/writing-program/images/videos.svg new file mode 100644 index 0000000000000..67b4558b29f0b --- /dev/null +++ b/src/collections/handbook/writing-program/images/videos.svg @@ -0,0 +1,24 @@ + + + + + + diff --git a/src/collections/handbook/writing-program/index.mdx b/src/collections/handbook/writing-program/index.mdx index 6bb5daf2d216d..17e58898f8e3a 100644 --- a/src/collections/handbook/writing-program/index.mdx +++ b/src/collections/handbook/writing-program/index.mdx @@ -4,9 +4,9 @@ description: "Join the Layer5 Writing Program to share your expertise and contri type: Handbook --- -import { Container, Row, Col } from "../../reusecore/Layout"; +import { Container, Row, Col } from "../../../reusecore/Layout"; import { Link } from "gatsby"; -import Button from "../../reusecore/Button"; +import Button from "../../../reusecore/Button"; import ContentForm from "./content-form"; import blog from "./images/blogs.svg"; From 17b7d6b6cbf27c82cf43893b0bd04e5af47b454a Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 09:59:53 +0530 Subject: [PATCH 06/43] fix path 2 Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook/writing-program/content-form.js | 4 +- .../writing-program/images/workshop.svg | 44 +++++++++++++++++++ .../handbook-single/HandbookPagination.js | 4 +- .../Handbook/handbook-single/HandbookTOC.js | 2 +- src/sections/Community/Meshmates/index.js | 10 ++++- 5 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 src/collections/handbook/writing-program/images/workshop.svg diff --git a/src/collections/handbook/writing-program/content-form.js b/src/collections/handbook/writing-program/content-form.js index 3bbe5a82b9518..c3905fb2ebd13 100644 --- a/src/collections/handbook/writing-program/content-form.js +++ b/src/collections/handbook/writing-program/content-form.js @@ -1,9 +1,9 @@ import React, { useState, useEffect } from "react"; -import Button from "../../../../reusecore/Button"; +import Button from "../../../reusecore/Button"; import axios from "axios"; import { Field, Form, Formik } from "formik"; import ContentFormWrapper from "./content-form.style"; -import layer5_img from "../../../../assets/images/layer5/layer5-only/svg/layer5-white-no-trim.svg"; +import layer5_img from "../../../assets/images/layer5/layer5-only/svg/layer5-white-no-trim.svg"; const ContentForm = () => { const [memberFormOne, setMemberFormOne] = useState({}); diff --git a/src/collections/handbook/writing-program/images/workshop.svg b/src/collections/handbook/writing-program/images/workshop.svg new file mode 100644 index 0000000000000..2db3467d098a4 --- /dev/null +++ b/src/collections/handbook/writing-program/images/workshop.svg @@ -0,0 +1,44 @@ + + + + + + + diff --git a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js index f8e7a7144b455..52d5eadf02edf 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js @@ -1,6 +1,6 @@ import React from "react"; import { Link } from "gatsby"; -import { PaginationWrapper } from "../../handbook-navigation/TocPagination.style"; +import { PaginationWrapper } from "../../../../components/handbook-navigation/TocPagination.style"; const HandbookPagination = ({ pages, currentSlug }) => { const currentIndex = pages.findIndex(page => page.fields.slug === currentSlug); @@ -11,7 +11,7 @@ const HandbookPagination = ({ pages, currentSlug }) => { {prevPage && ( - ← {prevPage.frontmatter.title} + ← {prevPage.frontmatter.title} )} {nextPage && ( diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index d6609dcda8bd4..220bd1f6cc450 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -1,6 +1,6 @@ import React from "react"; import { Link } from "gatsby"; -import { TocWrapper } from "../../handbook-navigation/toc.style"; +import { TocWrapper } from "../../../../components/handbook-navigation/toc.style"; const HandbookTOC = ({ pages, currentSlug }) => { return ( diff --git a/src/sections/Community/Meshmates/index.js b/src/sections/Community/Meshmates/index.js index 7f4e13689fd02..36d71a2802f17 100644 --- a/src/sections/Community/Meshmates/index.js +++ b/src/sections/Community/Meshmates/index.js @@ -10,7 +10,7 @@ import { ReactComponent as MeshmateStackImage } from "../../../assets/images/mes import { Link } from "gatsby"; import { FiArrowRight } from "@react-icons/all-files/fi/FiArrowRight"; -import BookComponent from "../Handbook/BookComponent/BookComponent"; +import HandbookCard from "../../../components/HandbookCard"; const Meshmates = () => { const data = useStaticQuery( @@ -131,7 +131,13 @@ const Meshmates = () => {
    What to Expect

    Engaging with a MeshMate

    -
    +
    + +

    The program pairs experienced Layer5 community members with community newcomers to ensure a smooth onboarding experience. There is a lot going in the Layer5 community. Projects and working groups move fast. MeshMates are committed to helping their mentees in identifying an area of the projects to engage within, working groups to join, growing their Cloud Native knowledge, and network of relationships. By connecting one-on-one, MeshMates will share tips on how to have the best community experience possible.

    Meshtees are encouraged to reach out to any MeshMate directly in order to pair up. Introduce yourself either on in the Layer5 discussion forum. Help your MeshMate understand your current skills, ideal topics of learning, and areas of passion. Doing so will help them to point out various aspects of projects that you might find your first foothold.

    From 1212043e528be2e6f471c2c6ea45949603ef293f Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 10:00:42 +0530 Subject: [PATCH 07/43] eslint fix of index.js Signed-off-by: Rajesh-Nagarajan-11 --- src/sections/Community/Meshmates/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sections/Community/Meshmates/index.js b/src/sections/Community/Meshmates/index.js index 36d71a2802f17..d36ca64271aa3 100644 --- a/src/sections/Community/Meshmates/index.js +++ b/src/sections/Community/Meshmates/index.js @@ -132,7 +132,7 @@ const Meshmates = () => {
    What to Expect

    Engaging with a MeshMate

    - Date: Thu, 4 Dec 2025 10:28:40 +0530 Subject: [PATCH 08/43] fix build errors 1 Signed-off-by: Rajesh-Nagarajan-11 --- src/collections/handbook/about/index.mdx | 1 - src/collections/handbook/code-of-conduct/index.mdx | 2 -- src/collections/handbook/community/index.mdx | 2 -- src/collections/handbook/connect-with-us/index.mdx | 4 ++-- .../Handbook/handbook-single/HandbookPagination.js | 6 +++--- .../Community/Handbook/handbook-single/HandbookTOC.js | 6 +++--- 6 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/collections/handbook/about/index.mdx b/src/collections/handbook/about/index.mdx index a9a68a2deec3e..b113c798695d8 100644 --- a/src/collections/handbook/about/index.mdx +++ b/src/collections/handbook/about/index.mdx @@ -4,7 +4,6 @@ description: "Learn about Layer5's mission, goals, and how to get started contri type: Handbook --- -import { HandbookWrapper } from "../../../sections/Community/Handbook/Handbook.style.js"; import { Container, Row, Col } from "../../../reusecore/Layout"; import NewcomersMap from "../../../sections/Community/Newcomers-guide/newcomers-map"; import IntraPage from "../../../components/handbook-navigation/intra-page"; diff --git a/src/collections/handbook/code-of-conduct/index.mdx b/src/collections/handbook/code-of-conduct/index.mdx index 607ba49eebecc..c23c142eadddb 100644 --- a/src/collections/handbook/code-of-conduct/index.mdx +++ b/src/collections/handbook/code-of-conduct/index.mdx @@ -4,8 +4,6 @@ description: "Layer5 follows the CNCF Code of Conduct to ensure a welcoming and type: Handbook --- -import { HandbookWrapper } from "../../../sections/Community/Handbook/Handbook.style.js"; -import { Container } from "../../../reusecore/Layout"; import Point from "../community/bullet.svg";

    Community Code of Conduct

    diff --git a/src/collections/handbook/community/index.mdx b/src/collections/handbook/community/index.mdx index ff8397c83568e..a154f739839bb 100644 --- a/src/collections/handbook/community/index.mdx +++ b/src/collections/handbook/community/index.mdx @@ -4,8 +4,6 @@ description: "Community guidelines and resources for the Layer5 open source comm type: Handbook --- -import { HandbookWrapper } from "../../../sections/Community/Handbook/Handbook.style.js"; -import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby"; import Point from "./bullet.svg"; import IntraPage from "../../../components/handbook-navigation/intra-page"; diff --git a/src/collections/handbook/connect-with-us/index.mdx b/src/collections/handbook/connect-with-us/index.mdx index 48cb8feb90c69..c79f6909eca68 100644 --- a/src/collections/handbook/connect-with-us/index.mdx +++ b/src/collections/handbook/connect-with-us/index.mdx @@ -5,7 +5,7 @@ type: Handbook --- import { Container } from "../../../reusecore/Layout"; -import { ReactComponent as TwitterIcon } from "../../../assets/images/socialIcons/twitter.svg"; +import twitter_icon from "../../../assets/images/socialIcons/twitter.svg"; import mail_icon from "../../../assets/images/socialIcons/mail_keppel.svg"; import youtube_icon from "../../../assets/images/socialIcons/youtube-light.svg"; import github_icon from "../../../assets/images/socialIcons/github-light.svg"; @@ -88,7 +88,7 @@ Layer5 is dedicated to empowering engineers and supporting the open source commu

    - + twitter    @layer5@mesheryio diff --git a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js index 52d5eadf02edf..373477a236839 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js @@ -1,6 +1,6 @@ import React from "react"; import { Link } from "gatsby"; -import { PaginationWrapper } from "../../../../components/handbook-navigation/TocPagination.style"; +import TocPaginationWrapper from "../../../../components/handbook-navigation/TocPagination.style"; const HandbookPagination = ({ pages, currentSlug }) => { const currentIndex = pages.findIndex(page => page.fields.slug === currentSlug); @@ -8,7 +8,7 @@ const HandbookPagination = ({ pages, currentSlug }) => { const nextPage = currentIndex < pages.length - 1 ? pages[currentIndex + 1] : null; return ( - + {prevPage && ( ← {prevPage.frontmatter.title} @@ -19,7 +19,7 @@ const HandbookPagination = ({ pages, currentSlug }) => { {nextPage.frontmatter.title} → )} - + ); }; diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index 220bd1f6cc450..310709c246082 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -1,10 +1,10 @@ import React from "react"; import { Link } from "gatsby"; -import { TocWrapper } from "../../../../components/handbook-navigation/toc.style"; +import TOCWrapper from "../../../../components/handbook-navigation/toc.style"; const HandbookTOC = ({ pages, currentSlug }) => { return ( - +

    Community Handbook

      @@ -17,7 +17,7 @@ const HandbookTOC = ({ pages, currentSlug }) => { ))}
    - + ); }; From 6ddf4c21db546658555c15fdfbcb6a1c9b9815ed Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 10:55:16 +0530 Subject: [PATCH 09/43] table of content fix and next-prev button fix Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook-single/HandbookPagination.js | 31 +++++++++++-------- .../Handbook/handbook-single/HandbookTOC.js | 12 ++++--- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js index 373477a236839..43db62ab801da 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js @@ -1,6 +1,7 @@ import React from "react"; import { Link } from "gatsby"; -import TocPaginationWrapper from "../../../../components/handbook-navigation/TocPagination.style"; +import { PaginationWrapper } from "../../../components/handbook-navigation/TocPagination.style"; +import Button from "../../../reusecore/Button"; const HandbookPagination = ({ pages, currentSlug }) => { const currentIndex = pages.findIndex(page => page.fields.slug === currentSlug); @@ -8,18 +9,22 @@ const HandbookPagination = ({ pages, currentSlug }) => { const nextPage = currentIndex < pages.length - 1 ? pages[currentIndex + 1] : null; return ( - - {prevPage && ( - - ← {prevPage.frontmatter.title} - - )} - {nextPage && ( - - {nextPage.frontmatter.title} → - - )} - + +
    + {prevPage && ( + +
    +
    + {nextPage && ( + +
    +
    ); }; diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index 310709c246082..aa03864c8aea8 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -1,12 +1,16 @@ import React from "react"; import { Link } from "gatsby"; -import TOCWrapper from "../../../../components/handbook-navigation/toc.style"; +import { TocWrapper } from "../../../components/handbook-navigation/toc.style"; +import { HiOutlineChevronLeft } from "@react-icons/all-files/hi/HiOutlineChevronLeft"; const HandbookTOC = ({ pages, currentSlug }) => { return ( - +
    -

    Community Handbook

    +

    + + Table Of Contents +

      {pages.map((page, index) => (
    • @@ -17,7 +21,7 @@ const HandbookTOC = ({ pages, currentSlug }) => { ))}
    -
    +
    ); }; From fe9234951930fb20fc40ee818472b6baaafeff76 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 11:00:35 +0530 Subject: [PATCH 10/43] table of content fix and next-prev button fix 2 Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook-single/HandbookPagination.js | 30 ++++++++----------- .../Handbook/handbook-single/HandbookTOC.js | 26 +++++++++------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js index 43db62ab801da..1ab85a6ed7bb1 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js @@ -1,6 +1,6 @@ import React from "react"; import { Link } from "gatsby"; -import { PaginationWrapper } from "../../../components/handbook-navigation/TocPagination.style"; +import TocPaginationWrapper from "../../../components/handbook-navigation/TocPagination.style"; import Button from "../../../reusecore/Button"; const HandbookPagination = ({ pages, currentSlug }) => { @@ -9,22 +9,18 @@ const HandbookPagination = ({ pages, currentSlug }) => { const nextPage = currentIndex < pages.length - 1 ? pages[currentIndex + 1] : null; return ( - -
    - {prevPage && ( - -
    -
    - {nextPage && ( - -
    -
    + + {prevPage && ( + + )} + {nextPage && ( + + )} + ); }; diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index aa03864c8aea8..5cd76ef1807a5 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -1,27 +1,33 @@ import React from "react"; import { Link } from "gatsby"; -import { TocWrapper } from "../../../components/handbook-navigation/toc.style"; +import TOCWrapper from "../../../components/handbook-navigation/toc.style"; import { HiOutlineChevronLeft } from "@react-icons/all-files/hi/HiOutlineChevronLeft"; const HandbookTOC = ({ pages, currentSlug }) => { return ( - -
    -

    + +
    + - Table Of Contents -

    -
      +

      Table of Contents

      + +
    +
    +
      {pages.map((page, index) => ( -
    • - +
    • + {page.frontmatter.title}
    • ))}
    -
    + ); }; From 956f9d5d544eb80f9e35b3d55fae72a40f2b66d5 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 11:10:33 +0530 Subject: [PATCH 11/43] fix path 3 Signed-off-by: Rajesh-Nagarajan-11 --- .../Community/Handbook/handbook-single/HandbookPagination.js | 4 ++-- .../Community/Handbook/handbook-single/HandbookTOC.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js index 1ab85a6ed7bb1..163d8a4b1d4e4 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookPagination.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js @@ -1,7 +1,7 @@ import React from "react"; import { Link } from "gatsby"; -import TocPaginationWrapper from "../../../components/handbook-navigation/TocPagination.style"; -import Button from "../../../reusecore/Button"; +import TocPaginationWrapper from "../../../../components/handbook-navigation/TocPagination.style"; +import Button from "../../../../reusecore/Button"; const HandbookPagination = ({ pages, currentSlug }) => { const currentIndex = pages.findIndex(page => page.fields.slug === currentSlug); diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index 5cd76ef1807a5..a53730c6b51a7 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -1,6 +1,6 @@ import React from "react"; import { Link } from "gatsby"; -import TOCWrapper from "../../../components/handbook-navigation/toc.style"; +import TOCWrapper from "../../../../components/handbook-navigation/toc.style"; import { HiOutlineChevronLeft } from "@react-icons/all-files/hi/HiOutlineChevronLeft"; const HandbookTOC = ({ pages, currentSlug }) => { From 35bb350d2ee3a3cc5b4876131c0ae897be84458a Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 13:57:36 +0530 Subject: [PATCH 12/43] rename to github org Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook/github -organization/index.mdx | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/collections/handbook/github -organization/index.mdx diff --git a/src/collections/handbook/github -organization/index.mdx b/src/collections/handbook/github -organization/index.mdx new file mode 100644 index 0000000000000..ecec423126ca4 --- /dev/null +++ b/src/collections/handbook/github -organization/index.mdx @@ -0,0 +1,59 @@ +--- +title: "GitHub Organization" +description: "GitHub Organization Membership guidelines for Layer5 contributors" +type: Handbook +--- + +import { Container } from "../../../reusecore/Layout"; +import IntraPage from "../../../components/handbook-navigation/intra-page"; + +export const contents = [ + { id: 0, link: "#top", text: "GitHub Organization Membership" }, + { id: 1, link: "#Requirements", text: "Membership Requirements" }, + { id: 2, link: "#InvitationProcess", text: "Invitation Process" }, + { id: 3, link: "#TemplateMessage", text: "Template Message for Invitations" }, + { id: 4, link: "#SendingInvitation", text: "Sending the GitHub Invitation" }, +]; + +

    GitHub Organization Membership

    + +Membership to the GitHub organizations is a significant milestone for contributors who have shown persistent commitment and dedication to Layer5 projects. It is not solely about writing code but rather the consistency of engagement and alignment of mentality. + +

    Membership Requirements

    + +Contributors who may be invited typically: +- Have been actively involved in the community for several weeks +- Make regular updates to projects +- Help other community members +- Attend development meetings +- Demonstrate a willingness to learn and share knowledge +- Show a genuine desire to improve themselves, others, and the projects + +

    Invitation Process

    + +Depending on the number and quality of contributions made across the five GitHub organizations of Layer5, contributors can receive an invitation to any or all of these orgs. The process involves: +1. Sending a group DM +2. Executing Slack slash command in #community-management + +

    Group Message for Invitations

    + +When you identify a worthy contributor, send a message in a group DM that includes the individual and other maintainers/appropriate members: look in Community Managers' docs to see some examples. + +

    Sending the GitHub Invitation

    + +To send the invitation to join the GitHub organization, use the following slash command in #community-management channel: + +
    + /invite-github [email address] [organization name] +
    + +Where **[organization name]** should be either: +- **layer5io** - to send the invite to the email address to join Layer5 GitHub org under the "layer5-contributors" team +- **meshery** - to send the invite to the email address to join Meshery GitHub organization under the "contributors" team + +For example: +
    + /invite-github contributor@example.com layer5io +
    + + From 51d96c673a867bec497a66d0646bbede49064892 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 13:59:08 +0530 Subject: [PATCH 13/43] fix intra page Signed-off-by: Rajesh-Nagarajan-11 --- .../Handbook/handbook-single/index.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/sections/Community/Handbook/handbook-single/index.js b/src/sections/Community/Handbook/handbook-single/index.js index 9ce510c13b971..e362ba4eb95d9 100644 --- a/src/sections/Community/Handbook/handbook-single/index.js +++ b/src/sections/Community/Handbook/handbook-single/index.js @@ -8,6 +8,22 @@ const HandbookSingle = ({ data, children }) => { const { mdx, allHandbookPages } = data; const currentSlug = mdx.fields.slug; + // Extract IntraPage component from children if present + let contentChildren = children; + let intraPageComponent = null; + + if (React.Children.count(children) > 0) { + const childArray = React.Children.toArray(children); + const intraPageIndex = childArray.findIndex( + (child) => child?.type?.name === "IntraPage" + ); + + if (intraPageIndex !== -1) { + intraPageComponent = childArray[intraPageIndex]; + contentChildren = childArray.filter((_, index) => index !== intraPageIndex); + } + } + return (
    @@ -17,13 +33,14 @@ const HandbookSingle = ({ data, children }) => {
    - {children} + {contentChildren}
    + {intraPageComponent}
    ); From 5ddc31e5b4010e58d3931c8172b9bc3c64ca6e63 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 14:21:01 +0530 Subject: [PATCH 14/43] fix intra page 2 Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook-navigation/intra-page.js | 21 ++++++++++++------- .../Handbook/handbook-single/index.js | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/components/handbook-navigation/intra-page.js b/src/components/handbook-navigation/intra-page.js index 81298378c8611..8235f582e9bff 100644 --- a/src/components/handbook-navigation/intra-page.js +++ b/src/components/handbook-navigation/intra-page.js @@ -3,16 +3,20 @@ import { Link } from "gatsby"; import styled from "styled-components"; const JoinCommunityWrapper = styled.div` - @media screen and (min-width: 300px) and (max-width: 1279px) { + position: fixed; + right: 2rem; + top: 15rem; + width: 15rem; + z-index: 10; + + @media screen and (max-width: 1279px) { display: none; } + .intra-page { position: sticky; top: 10rem; - right: 0rem; - margin-right: 1rem; padding-bottom: 5rem; - padding-right: 2rem; align-items: left; justify-content: space-around; display: flex; @@ -20,11 +24,12 @@ const JoinCommunityWrapper = styled.div` overflow: hidden; .list { - color: #000000; + color: ${(props) => props.theme.text || "#000000"}; + transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); } .active { - font-weight: 5000; - color: #000000; + font-weight: 500; + color: ${(props) => props.theme.secondaryColor || "#00b39f"}; } ul { @@ -39,7 +44,7 @@ const JoinCommunityWrapper = styled.div` padding-right: 0rem; margin-right: 0rem; } - @media only screen and (max-width: 950px) { + @media only screen and (max-width: 1279px) { width: 0; opacity: 0; height: 0; diff --git a/src/sections/Community/Handbook/handbook-single/index.js b/src/sections/Community/Handbook/handbook-single/index.js index e362ba4eb95d9..9cda3a5466b9b 100644 --- a/src/sections/Community/Handbook/handbook-single/index.js +++ b/src/sections/Community/Handbook/handbook-single/index.js @@ -30,6 +30,7 @@ const HandbookSingle = ({ data, children }) => {

    {mdx.frontmatter.title}

    + {intraPageComponent}
    @@ -40,7 +41,6 @@ const HandbookSingle = ({ data, children }) => { currentSlug={currentSlug} /> - {intraPageComponent}
    ); From 2ca77437cbe69a7654703e4a60421ed73505dd6d Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 18:30:28 +0530 Subject: [PATCH 15/43] revert last 2 commits Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook-navigation/intra-page.js | 21 +++++++------------ .../Handbook/handbook-single/index.js | 19 +---------------- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/components/handbook-navigation/intra-page.js b/src/components/handbook-navigation/intra-page.js index 8235f582e9bff..81298378c8611 100644 --- a/src/components/handbook-navigation/intra-page.js +++ b/src/components/handbook-navigation/intra-page.js @@ -3,20 +3,16 @@ import { Link } from "gatsby"; import styled from "styled-components"; const JoinCommunityWrapper = styled.div` - position: fixed; - right: 2rem; - top: 15rem; - width: 15rem; - z-index: 10; - - @media screen and (max-width: 1279px) { + @media screen and (min-width: 300px) and (max-width: 1279px) { display: none; } - .intra-page { position: sticky; top: 10rem; + right: 0rem; + margin-right: 1rem; padding-bottom: 5rem; + padding-right: 2rem; align-items: left; justify-content: space-around; display: flex; @@ -24,12 +20,11 @@ const JoinCommunityWrapper = styled.div` overflow: hidden; .list { - color: ${(props) => props.theme.text || "#000000"}; - transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + color: #000000; } .active { - font-weight: 500; - color: ${(props) => props.theme.secondaryColor || "#00b39f"}; + font-weight: 5000; + color: #000000; } ul { @@ -44,7 +39,7 @@ const JoinCommunityWrapper = styled.div` padding-right: 0rem; margin-right: 0rem; } - @media only screen and (max-width: 1279px) { + @media only screen and (max-width: 950px) { width: 0; opacity: 0; height: 0; diff --git a/src/sections/Community/Handbook/handbook-single/index.js b/src/sections/Community/Handbook/handbook-single/index.js index 9cda3a5466b9b..9ce510c13b971 100644 --- a/src/sections/Community/Handbook/handbook-single/index.js +++ b/src/sections/Community/Handbook/handbook-single/index.js @@ -8,33 +8,16 @@ const HandbookSingle = ({ data, children }) => { const { mdx, allHandbookPages } = data; const currentSlug = mdx.fields.slug; - // Extract IntraPage component from children if present - let contentChildren = children; - let intraPageComponent = null; - - if (React.Children.count(children) > 0) { - const childArray = React.Children.toArray(children); - const intraPageIndex = childArray.findIndex( - (child) => child?.type?.name === "IntraPage" - ); - - if (intraPageIndex !== -1) { - intraPageComponent = childArray[intraPageIndex]; - contentChildren = childArray.filter((_, index) => index !== intraPageIndex); - } - } - return (

    {mdx.frontmatter.title}

    - {intraPageComponent}
    - {contentChildren} + {children}
    Date: Thu, 4 Dec 2025 21:46:29 +0530 Subject: [PATCH 16/43] removed unused images Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook/contribution/slack.webp | Bin 10590 -> 0 bytes .../handbook/contribution/twitter.webp | Bin 230 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/collections/handbook/contribution/slack.webp delete mode 100644 src/collections/handbook/contribution/twitter.webp diff --git a/src/collections/handbook/contribution/slack.webp b/src/collections/handbook/contribution/slack.webp deleted file mode 100644 index 6478dcb882e91068eb1a5e5a6d8403dd40895cb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10590 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 diff --git a/src/collections/handbook/contribution/twitter.webp b/src/collections/handbook/contribution/twitter.webp deleted file mode 100644 index b51f7b89a50571ed92e8b3ecded3868aadb4214e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmWIYbaT7Mz`zjh>J$(bU=hIuWD5YXFc>-d1b8$7d5i@~x36v5v(=;ikZ`BupQ%}s z3$&)X6ltB*GA>yCE@ZpQCdMD%PglqPViyn;W{Ao;?(_7y;j4~>sWz8Vdp3q&Ybm)I z!?MB1gdwBB(5&M5m63ZvAS%c*LzRvjd zg3&KKt0HxGm;=LEHlW)S%z!R2U}l)hs3pQ6!eAGx((Af-k)re$1`F0BTN)U`%q`P9 b>=+pS{j84pA6EY>eer*WrRD#vIT#oKWT92? From 3f2b62eccc116c114f78b2524c582bcb042624ab Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 21:47:46 +0530 Subject: [PATCH 17/43] handbook margin fix Signed-off-by: Rajesh-Nagarajan-11 --- src/sections/Community/Handbook/Handbook.style.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sections/Community/Handbook/Handbook.style.js b/src/sections/Community/Handbook/Handbook.style.js index 5e37978e2dd82..a595fdd2a11bb 100644 --- a/src/sections/Community/Handbook/Handbook.style.js +++ b/src/sections/Community/Handbook/Handbook.style.js @@ -41,13 +41,13 @@ export const HandbookWrapper = styled.div` flex-direction: row; align-items: flex-start; @media (min-width: 751px){ - margin-top: -54rem; + margin-top: -58rem; position: relative; margin-left: 20rem; padding: 2rem 3rem; } @media (max-width: 750px) { - margin-top: -4rem; + margin-top: -5rem; margin-left: 2rem; } } From 68b410b7fff6476b13adeab291987802612995a8 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 21:49:13 +0530 Subject: [PATCH 18/43] handbook home page dynamic imports Signed-off-by: Rajesh-Nagarajan-11 --- src/sections/Community/Handbook/index.js | 125 ++++++----------------- 1 file changed, 30 insertions(+), 95 deletions(-) diff --git a/src/sections/Community/Handbook/index.js b/src/sections/Community/Handbook/index.js index 258de4c7484f8..20ebaf8f5ccac 100644 --- a/src/sections/Community/Handbook/index.js +++ b/src/sections/Community/Handbook/index.js @@ -1,10 +1,32 @@ import React from "react"; +import { graphql, useStaticQuery } from "gatsby"; import { HandbookWrapper } from "./Handbook.style"; import HandbookCard from "../../../components/HandbookCard/index"; import AdventuresVol from "../../../components/AdventuresVol/index"; import vol1Img from "../Adventures-of-Five/vol1/meet-five.webp"; const handbookHome = () => { + const data = useStaticQuery(graphql` + query AllHandbookPages { + allMdx( + filter: { fields: { collection: { eq: "handbook" } } } + sort: { frontmatter: { title: ASC } } + ) { + nodes { + frontmatter { + title + description + } + fields { + slug + } + } + } + } + `); + + const handbookPages = data.allMdx.nodes; + return (
    @@ -24,101 +46,14 @@ const handbookHome = () => { image={vol1Img} /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + {handbookPages.map((page, index) => ( + + ))}
    ); From bbb0d66803594ed52d0454e77200b6d9cd6563ce Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 21:52:15 +0530 Subject: [PATCH 19/43] update desc of all pages Signed-off-by: Rajesh-Nagarajan-11 --- src/collections/handbook/about/index.mdx | 2 +- .../handbook/code-of-conduct/index.mdx | 2 +- .../handbook/community-roles/index.mdx | 2 +- src/collections/handbook/community/index.mdx | 2 +- .../handbook/connect-with-us/index.mdx | 2 +- .../handbook/contribution/index.mdx | 18 +++++++++--------- src/collections/handbook/faq/index.mdx | 2 +- .../handbook/github -organization/index.mdx | 2 +- .../handbook/github-process/index.mdx | 2 +- src/collections/handbook/learning/index.mdx | 2 +- .../handbook/mentorship-programs/index.mdx | 2 +- src/collections/handbook/projects/index.mdx | 2 +- src/collections/handbook/recognition/index.mdx | 2 +- .../handbook/repository-overview/index.mdx | 2 +- .../security-vulnerabilities/index.mdx | 2 +- .../handbook/writing-program/index.mdx | 2 +- 16 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/collections/handbook/about/index.mdx b/src/collections/handbook/about/index.mdx index b113c798695d8..8e6284bd94051 100644 --- a/src/collections/handbook/about/index.mdx +++ b/src/collections/handbook/about/index.mdx @@ -1,6 +1,6 @@ --- title: "About" -description: "Learn about Layer5's mission, goals, and how to get started contributing to our open-source community" +description: "Layer5 offers cloud native application management by harnessing the power of a developer-friendly applications management system that supports visualization of the modern infrastructure leading to effective operation with best practices." type: Handbook --- diff --git a/src/collections/handbook/code-of-conduct/index.mdx b/src/collections/handbook/code-of-conduct/index.mdx index c23c142eadddb..356b443acfd2b 100644 --- a/src/collections/handbook/code-of-conduct/index.mdx +++ b/src/collections/handbook/code-of-conduct/index.mdx @@ -1,6 +1,6 @@ --- title: "Code of Conduct" -description: "Layer5 follows the CNCF Code of Conduct to ensure a welcoming and inclusive community" +description: "At Layer5 We follow the CNCF Code of Conduct. We pledge to respect all people who contribute through reporting issues, to submit pull requests or patches, and other activities." type: Handbook --- diff --git a/src/collections/handbook/community-roles/index.mdx b/src/collections/handbook/community-roles/index.mdx index 208a3e1ad2cd1..b29c57b4e63e7 100644 --- a/src/collections/handbook/community-roles/index.mdx +++ b/src/collections/handbook/community-roles/index.mdx @@ -1,6 +1,6 @@ --- title: "Community Roles" -description: "Learn about the different roles and leadership positions within the Layer5 community" +description: "Many roles exist in the community. Individuals who perform a role, bolster community and project growth by participating in decision-making and being accountable for those decisions." type: Handbook --- diff --git a/src/collections/handbook/community/index.mdx b/src/collections/handbook/community/index.mdx index a154f739839bb..d1393cdaff4fe 100644 --- a/src/collections/handbook/community/index.mdx +++ b/src/collections/handbook/community/index.mdx @@ -1,6 +1,6 @@ --- title: "Community" -description: "Community guidelines and resources for the Layer5 open source community" +description: "A MeshMate is an experienced Layer5 community member, who will be available to guide you as you explore the various projects and find your areas of interest." type: Handbook --- diff --git a/src/collections/handbook/connect-with-us/index.mdx b/src/collections/handbook/connect-with-us/index.mdx index c79f6909eca68..53ac32ca892b2 100644 --- a/src/collections/handbook/connect-with-us/index.mdx +++ b/src/collections/handbook/connect-with-us/index.mdx @@ -1,6 +1,6 @@ --- title: "Connect with Us" -description: "Find all the ways to connect with the Layer5 community - Slack, Newsletter, Social Media, and more" +description: "We are a community of like-minded people with over a thousand members. Join our Slack Workspace and interact with people." type: Handbook --- diff --git a/src/collections/handbook/contribution/index.mdx b/src/collections/handbook/contribution/index.mdx index 985dfe2a857cd..0747e53e36a06 100644 --- a/src/collections/handbook/contribution/index.mdx +++ b/src/collections/handbook/contribution/index.mdx @@ -1,13 +1,15 @@ --- title: "Contribution" -description: "Learn how to contribute to Layer5 projects using GitHub flow" +description: "Pull requests (PRs) are the best ways to propose changes to a project repository. At Layer5 org, we use the Github Flow." type: Handbook --- import { Container } from "../../../reusecore/Layout"; import Code from "../../../components/CodeBlock"; import IntraPage from "../../../components/handbook-navigation/intra-page"; -import { StaticImage } from "gatsby-plugin-image"; +import signoffImg from "./git-signoff-vscode.webp"; +import compareImg from "./compare-and-pr.webp"; +import createPrImg from "./create-pr.webp"; export const contents = [ { id: 0, link: "#Clone your fork", text: "Clone your fork" }, @@ -17,10 +19,7 @@ export const contents = [ { id: 4, link: "#Push changes to Github", text: "Push changes to Github" }, { id: 5, link: "#Create a pull request", text: "Create a pull request" }, ]; - -export const Signoff = "./git-signoff-vscode.webp"; -export const compareAndPR = "./compare-and-pr.webp"; -export const createPR = "./create-pr.webp"; +

    General contribution flow

    @@ -105,7 +104,8 @@ To ensure all your commits are signed, you may choose to add this alias to your Or you may configure your IDE, for example, Visual Studio Code to automatically sign-off commits for you: - +Git signoff configuration in VS Code +

    Push changes to Github

    @@ -121,13 +121,13 @@ Or you may configure your IDE, for example, Visual Studio Code to automatically Note: Please ensure that the right branch is selected for the PR.

    - + Compare and pull request button on GitHub
    - Once you click on the button, you'll be taken to the Pull Request page. Here, you can add a title and description to your pull request that explains your contribution. Once you're done, click on the Create pull request button.

    - + Create pull request page on GitHub
    diff --git a/src/collections/handbook/faq/index.mdx b/src/collections/handbook/faq/index.mdx index d945eee7f2e04..a659e8705d554 100644 --- a/src/collections/handbook/faq/index.mdx +++ b/src/collections/handbook/faq/index.mdx @@ -1,6 +1,6 @@ --- title: "FAQs" -description: "Frequently asked questions about Layer5 and contributing to the community" +description: "General frequently asked questions (FAQ) about Layer5 and people who contribute through reporting issues, to submit pull requests or patches, and other activities." type: Handbook --- diff --git a/src/collections/handbook/github -organization/index.mdx b/src/collections/handbook/github -organization/index.mdx index ecec423126ca4..68a0d3632db7a 100644 --- a/src/collections/handbook/github -organization/index.mdx +++ b/src/collections/handbook/github -organization/index.mdx @@ -1,6 +1,6 @@ --- title: "GitHub Organization" -description: "GitHub Organization Membership guidelines for Layer5 contributors" +description: "Recognition of consistent contributors through GitHub organization invitations, outlining membership requirements, invitation process, and responsibilities." type: Handbook --- diff --git a/src/collections/handbook/github-process/index.mdx b/src/collections/handbook/github-process/index.mdx index 752567382c5b2..b49755812e282 100644 --- a/src/collections/handbook/github-process/index.mdx +++ b/src/collections/handbook/github-process/index.mdx @@ -1,6 +1,6 @@ --- title: "GitHub Process" -description: "Layer5's GitHub process for issue and PR labels, templates, bots, and workflows" +description: "The Layer5 GitHub Process emphasizes consistent pull requests and issue labels to streamline continuous integration and reduce overhead across their growing repository collection." type: Handbook --- diff --git a/src/collections/handbook/learning/index.mdx b/src/collections/handbook/learning/index.mdx index 8686ab42be290..d3dd160154472 100644 --- a/src/collections/handbook/learning/index.mdx +++ b/src/collections/handbook/learning/index.mdx @@ -1,6 +1,6 @@ --- title: "Learning" -description: "Learn cloud native with Layer5 Academy, labs, books, workshops, and more" +description: "As a community, we have put together good learning materials and resources to guide you through learning about cloud native infrastucture." type: Handbook --- diff --git a/src/collections/handbook/mentorship-programs/index.mdx b/src/collections/handbook/mentorship-programs/index.mdx index 4e7c6dd6f1e0f..b2b0160f4033e 100644 --- a/src/collections/handbook/mentorship-programs/index.mdx +++ b/src/collections/handbook/mentorship-programs/index.mdx @@ -1,6 +1,6 @@ --- title: "Mentorship Programs" -description: "Learn about mentorship programs available through the Layer5 community" +description: "As an open-source organization and a community, we participate in different mentorships programs where project ideas are submitted for people to contribute to during the program." type: Handbook --- diff --git a/src/collections/handbook/projects/index.mdx b/src/collections/handbook/projects/index.mdx index 727d20d74bc69..07938fb35e4f4 100644 --- a/src/collections/handbook/projects/index.mdx +++ b/src/collections/handbook/projects/index.mdx @@ -1,6 +1,6 @@ --- title: "Projects" -description: "Overview of Layer5 projects: Layer5, Meshery, Cloud Native Performance, and Cloud Native Patterns" +description: "Layer5 Projects: Layer5, Meshery, Kanvas, NightHawk" type: Handbook --- diff --git a/src/collections/handbook/recognition/index.mdx b/src/collections/handbook/recognition/index.mdx index 517b92b999baa..2fbe7f6761d44 100644 --- a/src/collections/handbook/recognition/index.mdx +++ b/src/collections/handbook/recognition/index.mdx @@ -1,6 +1,6 @@ --- title: "Recognition" -description: "How Layer5 recognizes and appreciates community members through badges, profiles, and social media" +description: "Layer5 readily recognizes and publicly appreciates its community members." type: Handbook --- diff --git a/src/collections/handbook/repository-overview/index.mdx b/src/collections/handbook/repository-overview/index.mdx index 443918ff770d6..f36472732866d 100644 --- a/src/collections/handbook/repository-overview/index.mdx +++ b/src/collections/handbook/repository-overview/index.mdx @@ -1,6 +1,6 @@ --- title: "Repository Overview" -description: "Overview of GitHub organizations and repositories in the Layer5 community" +description: "This overview serves as resources to newcomers seeking a perspective of the collective community efforts (from the limited vantage point of a code-centric perspective)." type: Handbook --- diff --git a/src/collections/handbook/security-vulnerabilities/index.mdx b/src/collections/handbook/security-vulnerabilities/index.mdx index 2356fbcd0ba06..c323e5cba7d6b 100644 --- a/src/collections/handbook/security-vulnerabilities/index.mdx +++ b/src/collections/handbook/security-vulnerabilities/index.mdx @@ -1,6 +1,6 @@ --- title: "Security Vulnerabilities" -description: "How to report security vulnerabilities in Layer5 projects" +description: "We are very grateful to the security researchers and users that report back Meshery security vulnerabilities. We investigate every report thoroughly." type: Handbook --- diff --git a/src/collections/handbook/writing-program/index.mdx b/src/collections/handbook/writing-program/index.mdx index 17e58898f8e3a..b5f3e5dce337a 100644 --- a/src/collections/handbook/writing-program/index.mdx +++ b/src/collections/handbook/writing-program/index.mdx @@ -1,6 +1,6 @@ --- title: "Writing Program" -description: "Join the Layer5 Writing Program to share your expertise and contribute to cloud native content" +description: "The Layer5 Writing Program is a way to demonstrate your expertise, give back to the community, and help us produce great content." type: Handbook --- From 54fe1845f516efd7f194c69a24e1bb2a1607a4b7 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 21:53:07 +0530 Subject: [PATCH 20/43] removed duplicate mdx Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook/instructions/index.mdx | 59 ------------------- 1 file changed, 59 deletions(-) delete mode 100644 src/collections/handbook/instructions/index.mdx diff --git a/src/collections/handbook/instructions/index.mdx b/src/collections/handbook/instructions/index.mdx deleted file mode 100644 index 4aacd4d0a81fd..0000000000000 --- a/src/collections/handbook/instructions/index.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Instructions" -description: "GitHub Organization Membership guidelines for Layer5 contributors" -type: Handbook ---- - -import { Container } from "../../../reusecore/Layout"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; - -export const contents = [ - { id: 0, link: "#top", text: "GitHub Organization Membership" }, - { id: 1, link: "#Requirements", text: "Membership Requirements" }, - { id: 2, link: "#InvitationProcess", text: "Invitation Process" }, - { id: 3, link: "#TemplateMessage", text: "Template Message for Invitations" }, - { id: 4, link: "#SendingInvitation", text: "Sending the GitHub Invitation" }, -]; - -

    GitHub Organization Membership

    - -Membership to the GitHub organizations is a significant milestone for contributors who have shown persistent commitment and dedication to Layer5 projects. It is not solely about writing code but rather the consistency of engagement and alignment of mentality. - -

    Membership Requirements

    - -Contributors who may be invited typically: -- Have been actively involved in the community for several weeks -- Make regular updates to projects -- Help other community members -- Attend development meetings -- Demonstrate a willingness to learn and share knowledge -- Show a genuine desire to improve themselves, others, and the projects - -

    Invitation Process

    - -Depending on the number and quality of contributions made across the five GitHub organizations of Layer5, contributors can receive an invitation to any or all of these orgs. The process involves: -1. Sending a group DM -2. Executing Slack slash command in #community-management - -

    Group Message for Invitations

    - -When you identify a worthy contributor, send a message in a group DM that includes the individual and other maintainers/appropriate members: look in Community Managers' docs to see some examples. - -

    Sending the GitHub Invitation

    - -To send the invitation to join the GitHub organization, use the following slash command in #community-management channel: - -
    - /invite-github [email address] [organization name] -
    - -Where **[organization name]** should be either: -- **layer5io** - to send the invite to the email address to join Layer5 GitHub org under the "layer5-contributors" team -- **meshery** - to send the invite to the email address to join Meshery GitHub organization under the "contributors" team - -For example: -
    - /invite-github contributor@example.com layer5io -
    - - From 1d675169356345712637d7a955480629354505aa Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 22:28:00 +0530 Subject: [PATCH 21/43] revert the deleted bookcomponent Signed-off-by: Rajesh-Nagarajan-11 --- .../Community/BookComponent/BookComponent.js | 30 ++++++ .../BookComponent/BookComponent.style.js | 97 +++++++++++++++++++ src/sections/Community/Meshmates/index.js | 12 +-- 3 files changed, 130 insertions(+), 9 deletions(-) create mode 100644 src/sections/Community/BookComponent/BookComponent.js create mode 100644 src/sections/Community/BookComponent/BookComponent.style.js diff --git a/src/sections/Community/BookComponent/BookComponent.js b/src/sections/Community/BookComponent/BookComponent.js new file mode 100644 index 0000000000000..39827d91a063c --- /dev/null +++ b/src/sections/Community/BookComponent/BookComponent.js @@ -0,0 +1,30 @@ +import React, { useEffect } from "react"; +import BookComponentWrapper from "./BookComponent.style"; +import handbookdark from "../images/handbook-dark.webp"; +import { Link } from "gatsby"; + +const BookComponent = () => { + useEffect(() => { + const bookElement = document.querySelector(".book"); + bookElement.classList.add("rot-on-rel"); + }, []); + return ( + + +
    + Community HandBook +
    + +
    + ); +}; + +export default BookComponent; \ No newline at end of file diff --git a/src/sections/Community/BookComponent/BookComponent.style.js b/src/sections/Community/BookComponent/BookComponent.style.js new file mode 100644 index 0000000000000..08ee2d04984c7 --- /dev/null +++ b/src/sections/Community/BookComponent/BookComponent.style.js @@ -0,0 +1,97 @@ +import styled from "styled-components"; + +const BookComponentWrapper = styled.div` +.book-container { + display: flex; + align-items: center; + justify-content: center; + perspective: 600px; +} + +@keyframes initAnimation { + 0% { + transform: rotateY(0deg); + } + 100% { + transform: rotateY(-30deg); + } +} + +.rot-on-rel { + transform: rotateY(0deg); +} + +.book { + min-width: 200px; + min-height: 300px; + position: relative; + transform-style: preserve-3d; + transform: rotateY(-30deg); + transition: 1s ease; + animation: 1s ease 0s 1 initAnimation; +} + +.book:hover { + transform: rotateY(0deg); +} + +.book > :first-child { + position: absolute; + top: 0; + left: 0; + background-color: red; + width: 200px; + height: 300px; + transform: translateZ(25px); + background-color: #171a12; + border-radius: 0 2px 2px 0; +} + +.book::before { + position: absolute; + content: ' '; + left: 0; + top: 3px; + width: 48px; + height: 294px; + transform: translateX(172px) rotateY(90deg); + background: linear-gradient(90deg, + #fff 0%, + #f9f9f9 5%, + #fff 10%, + #f9f9f9 15%, + #fff 20%, + #f9f9f9 25%, + #fff 30%, + #f9f9f9 35%, + #fff 40%, + #f9f9f9 45%, + #fff 50%, + #f9f9f9 55%, + #fff 60%, + #f9f9f9 65%, + #fff 70%, + #f9f9f9 75%, + #fff 80%, + #f9f9f9 85%, + #fff 90%, + #f9f9f9 95%, + #fff 100% + ); +} + +.book::after { + position: absolute; + top: 0; + left: 0; + content: ' '; + width: 200px; + height: 300px; + transform: translateZ(-25px); + background-color: #292929; + border-radius: 0 2px 2px 0; + box-shadow: -2px 1px 30px 2px #666; +} +`; + +export default BookComponentWrapper; \ No newline at end of file diff --git a/src/sections/Community/Meshmates/index.js b/src/sections/Community/Meshmates/index.js index d36ca64271aa3..308cc321269ad 100644 --- a/src/sections/Community/Meshmates/index.js +++ b/src/sections/Community/Meshmates/index.js @@ -10,7 +10,7 @@ import { ReactComponent as MeshmateStackImage } from "../../../assets/images/mes import { Link } from "gatsby"; import { FiArrowRight } from "@react-icons/all-files/fi/FiArrowRight"; -import HandbookCard from "../../../components/HandbookCard"; +import BookComponent from "../Handbook/BookComponent/BookComponent"; const Meshmates = () => { const data = useStaticQuery( @@ -131,13 +131,7 @@ const Meshmates = () => {
    What to Expect

    Engaging with a MeshMate

    -
    - -
    +

    The program pairs experienced Layer5 community members with community newcomers to ensure a smooth onboarding experience. There is a lot going in the Layer5 community. Projects and working groups move fast. MeshMates are committed to helping their mentees in identifying an area of the projects to engage within, working groups to join, growing their Cloud Native knowledge, and network of relationships. By connecting one-on-one, MeshMates will share tips on how to have the best community experience possible.

    Meshtees are encouraged to reach out to any MeshMate directly in order to pair up. Introduce yourself either on in the Layer5 discussion forum. Help your MeshMate understand your current skills, ideal topics of learning, and areas of passion. Doing so will help them to point out various aspects of projects that you might find your first foothold.

    @@ -204,4 +198,4 @@ const Meshmates = () => { ); }; -export default Meshmates; +export default Meshmates; \ No newline at end of file From 371b97b20fb0699d8257675bef484bb5cb134d9f Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Thu, 4 Dec 2025 22:40:21 +0530 Subject: [PATCH 22/43] moved bookcomponent to crt folder Signed-off-by: Rajesh-Nagarajan-11 --- .../Community/{ => Handbook}/BookComponent/BookComponent.js | 0 .../Community/{ => Handbook}/BookComponent/BookComponent.style.js | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/sections/Community/{ => Handbook}/BookComponent/BookComponent.js (100%) rename src/sections/Community/{ => Handbook}/BookComponent/BookComponent.style.js (100%) diff --git a/src/sections/Community/BookComponent/BookComponent.js b/src/sections/Community/Handbook/BookComponent/BookComponent.js similarity index 100% rename from src/sections/Community/BookComponent/BookComponent.js rename to src/sections/Community/Handbook/BookComponent/BookComponent.js diff --git a/src/sections/Community/BookComponent/BookComponent.style.js b/src/sections/Community/Handbook/BookComponent/BookComponent.style.js similarity index 100% rename from src/sections/Community/BookComponent/BookComponent.style.js rename to src/sections/Community/Handbook/BookComponent/BookComponent.style.js From 18f3c1486a9d559d957a9ba9de51009d2f7fe5ff Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Fri, 5 Dec 2025 11:28:03 +0530 Subject: [PATCH 23/43] intra-page link fix Signed-off-by: Rajesh-Nagarajan-11 --- src/collections/handbook/about/index.mdx | 25 ++++++++++------ .../handbook/community-roles/index.mdx | 29 ++++++++++++------- src/collections/handbook/community/index.mdx | 13 +++++---- .../handbook/connect-with-us/index.mdx | 29 ++++++++++++------- .../handbook/contribution/index.mdx | 29 ++++++++++++------- .../handbook/github -organization/index.mdx | 25 ++++++++++------ src/collections/handbook/learning/index.mdx | 21 +++++++++----- src/collections/handbook/projects/index.mdx | 21 +++++++++----- .../handbook/recognition/index.mdx | 25 ++++++++++------ .../handbook/repository-overview/index.mdx | 17 ++++++----- .../Handbook/handbook-single/index.js | 3 ++ src/templates/handbook-template.js | 5 ++++ 12 files changed, 156 insertions(+), 86 deletions(-) diff --git a/src/collections/handbook/about/index.mdx b/src/collections/handbook/about/index.mdx index 8e6284bd94051..cff11d34aab39 100644 --- a/src/collections/handbook/about/index.mdx +++ b/src/collections/handbook/about/index.mdx @@ -2,21 +2,29 @@ title: "About" description: "Layer5 offers cloud native application management by harnessing the power of a developer-friendly applications management system that supports visualization of the modern infrastructure leading to effective operation with best practices." type: Handbook +contents: + - id: 0 + link: "#About Layer5" + text: "About Layer5" + - id: 1 + link: "#Goals" + text: "Goals" + - id: 2 + link: "#Newcomer's Path" + text: "Newcomer's Path" + - id: 3 + link: "#Working on your issue" + text: "Working on your issue" + - id: 4 + link: "#While your issue is under review" + text: "While your issue is under review" --- import { Container, Row, Col } from "../../../reusecore/Layout"; import NewcomersMap from "../../../sections/Community/Newcomers-guide/newcomers-map"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; import longArrow from "../../../sections/Community/Newcomers-guide/long-arrow.svg"; import { useState } from "react"; -export const contents = [ - { id: 0, link: "#About Layer5", text: "About Layer5" }, - { id: 1, link: "#Goals", text: "Goals" }, - { id: 2, link: "#Newcomer's Path", text: "Newcomer's Path" }, - { id: 3, link: "#Working on your issue", text: "Working on your issue" }, - { id: 4, link: "#While your issue is under review", text: "While your issue is under review" }, -]; export const JourneySection = () => { const [hover, setHover] = useState(false); @@ -108,4 +116,3 @@ Once an issue has been assigned to you, it's time to get started! 2. Be patient. There are a large number of contributors and only a small number of maintainers/reviewers. All contributors are equally important to us, and we'll be sure to get to you as soon as possible. In the meanwhile, you are welcome to join our Slack workspace and take a look at all our projects. - diff --git a/src/collections/handbook/community-roles/index.mdx b/src/collections/handbook/community-roles/index.mdx index b29c57b4e63e7..37305e290e16f 100644 --- a/src/collections/handbook/community-roles/index.mdx +++ b/src/collections/handbook/community-roles/index.mdx @@ -2,20 +2,30 @@ title: "Community Roles" description: "Many roles exist in the community. Individuals who perform a role, bolster community and project growth by participating in decision-making and being accountable for those decisions." type: Handbook +contents: + - id: 0 + link: "#top" + text: "What are the different roles in the Layer5 community?" + - id: 1 + link: "#Community Manager" + text: "Community Manager" + - id: 2 + link: "#MeshMate" + text: "MeshMate" + - id: 3 + link: "#Maintainer" + text: "Maintainer" + - id: 4 + link: "#ReleaseManager" + text: "Release Manager" + - id: 5 + link: "#GitHubCzar" + text: "GitHub Czar" --- import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -export const contents = [ - { id: 0, link: "#top", text: "What are the different roles in the Layer5 community?" }, - { id: 1, link: "#Community Manager", text: "Community Manager" }, - { id: 2, link: "#MeshMate", text: "MeshMate" }, - { id: 3, link: "#Maintainer", text: "Maintainer" }, - { id: 4, link: "#ReleaseManager", text: "Release Manager" }, - { id: 5, link: "#GitHubCzar", text: "GitHub Czar" }, -];

    Layer5 community leaders undertake different roles

    @@ -213,4 +223,3 @@ Weekly: - diff --git a/src/collections/handbook/community/index.mdx b/src/collections/handbook/community/index.mdx index d1393cdaff4fe..0b24f6561e466 100644 --- a/src/collections/handbook/community/index.mdx +++ b/src/collections/handbook/community/index.mdx @@ -2,16 +2,18 @@ title: "Community" description: "A MeshMate is an experienced Layer5 community member, who will be available to guide you as you explore the various projects and find your areas of interest." type: Handbook +contents: + - id: 0 + link: "#Community Guidelines" + text: "Guidelines" + - id: 1 + link: "#Resources" + text: "Resources" --- import { Link } from "gatsby"; import Point from "./bullet.svg"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -export const contents = [ - { id: 0, link: "#Community Guidelines", text: "Guidelines" }, - { id: 1, link: "#Resources", text: "Resources" }, -];

    Community Guidelines

    @@ -72,4 +74,3 @@ Welcome to the Layer5 community! We're happy to have you here and handhold you f Please refer to the Code of Conduct for more details. - diff --git a/src/collections/handbook/connect-with-us/index.mdx b/src/collections/handbook/connect-with-us/index.mdx index 53ac32ca892b2..c81f09867b45b 100644 --- a/src/collections/handbook/connect-with-us/index.mdx +++ b/src/collections/handbook/connect-with-us/index.mdx @@ -2,6 +2,25 @@ title: "Connect with Us" description: "We are a community of like-minded people with over a thousand members. Join our Slack Workspace and interact with people." type: Handbook +contents: + - id: 0 + link: "#Newsletter" + text: "Newsletter" + - id: 1 + link: "#Mailing Lists" + text: "Mailing Lists" + - id: 2 + link: "#Calendar" + text: "Calendar" + - id: 3 + link: "#Slack Community" + text: "Slack Community" + - id: 4 + link: "#Discussion Forum" + text: "Discussion Forum" + - id: 5 + link: "#Social Media" + text: "Social Media" --- import { Container } from "../../../reusecore/Layout"; @@ -12,16 +31,7 @@ import github_icon from "../../../assets/images/socialIcons/github-light.svg"; import linkedin_icon from "../../../assets/images/socialIcons/linkedin-light.svg"; import docker_icon from "../../../assets/images/socialIcons/docker-light.svg"; import slack_icon from "../../../assets/images/socialIcons/slack-light.svg"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -export const contents = [ - { id: 0, link: "#Newsletter", text: "Newsletter" }, - { id: 1, link: "#Mailing Lists", text: "Mailing Lists" }, - { id: 2, link: "#Calendar", text: "Calendar" }, - { id: 3, link: "#Slack Community", text: "Slack Community" }, - { id: 4, link: "#Discussion Forum", text: "Discussion Forum" }, - { id: 5, link: "#Social Media", text: "Social Media" }, -];

    Subscribe to Newsletter

    @@ -131,4 +141,3 @@ Layer5 is dedicated to empowering engineers and supporting the open source commu

    - diff --git a/src/collections/handbook/contribution/index.mdx b/src/collections/handbook/contribution/index.mdx index 0747e53e36a06..9022aa0dc4f4c 100644 --- a/src/collections/handbook/contribution/index.mdx +++ b/src/collections/handbook/contribution/index.mdx @@ -2,23 +2,33 @@ title: "Contribution" description: "Pull requests (PRs) are the best ways to propose changes to a project repository. At Layer5 org, we use the Github Flow." type: Handbook +contents: + - id: 0 + link: "#Clone your fork" + text: "Clone your fork" + - id: 1 + link: "#Checkout a new branch" + text: "Checkout a new branch" + - id: 2 + link: "#Commit your changes" + text: "Commit your changes" + - id: 3 + link: "#Sign-off commits" + text: "Sign-off commits" + - id: 4 + link: "#Push changes to Github" + text: "Push changes to Github" + - id: 5 + link: "#Create a pull request" + text: "Create a pull request" --- import { Container } from "../../../reusecore/Layout"; import Code from "../../../components/CodeBlock"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; import signoffImg from "./git-signoff-vscode.webp"; import compareImg from "./compare-and-pr.webp"; import createPrImg from "./create-pr.webp"; -export const contents = [ - { id: 0, link: "#Clone your fork", text: "Clone your fork" }, - { id: 1, link: "#Checkout a new branch", text: "Checkout a new branch" }, - { id: 2, link: "#Commit your changes", text: "Commit your changes" }, - { id: 3, link: "#Sign-off commits", text: "Sign-off commits" }, - { id: 4, link: "#Push changes to Github", text: "Push changes to Github" }, - { id: 5, link: "#Create a pull request", text: "Create a pull request" }, -];

    General contribution flow

    @@ -157,4 +167,3 @@ At [Layer5](https://layer5.io/), we usually suggest to contributors that they as - **Requesting Reassignment:** If you are interested in working on an issue that is already assigned to someone else, it's important to respect their efforts and contributions. First, politely reach out to the assignee and express your interest in collaborating on the issue. Discuss the possibility of working together or sharing the workload. If the assignee agrees or is open to collaboration, you can proceed. If the assignee is not responsive or there has been no progress on the issue for a long time and the issue aligns with your skills and interests, kindly request reassignment from the maintainers, providing a clear and courteous explanation for the request.
    **Example:** [[chore] update Go to 1.21, and update relevant pkgs #169](https://github.com/meshery/meshery-nsm/issues/169) - diff --git a/src/collections/handbook/github -organization/index.mdx b/src/collections/handbook/github -organization/index.mdx index 68a0d3632db7a..544527180e54e 100644 --- a/src/collections/handbook/github -organization/index.mdx +++ b/src/collections/handbook/github -organization/index.mdx @@ -2,18 +2,26 @@ title: "GitHub Organization" description: "Recognition of consistent contributors through GitHub organization invitations, outlining membership requirements, invitation process, and responsibilities." type: Handbook +contents: + - id: 0 + link: "#top" + text: "GitHub Organization Membership" + - id: 1 + link: "#Requirements" + text: "Membership Requirements" + - id: 2 + link: "#InvitationProcess" + text: "Invitation Process" + - id: 3 + link: "#TemplateMessage" + text: "Template Message for Invitations" + - id: 4 + link: "#SendingInvitation" + text: "Sending the GitHub Invitation" --- import { Container } from "../../../reusecore/Layout"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -export const contents = [ - { id: 0, link: "#top", text: "GitHub Organization Membership" }, - { id: 1, link: "#Requirements", text: "Membership Requirements" }, - { id: 2, link: "#InvitationProcess", text: "Invitation Process" }, - { id: 3, link: "#TemplateMessage", text: "Template Message for Invitations" }, - { id: 4, link: "#SendingInvitation", text: "Sending the GitHub Invitation" }, -];

    GitHub Organization Membership

    @@ -56,4 +64,3 @@ For example: /invite-github contributor@example.com layer5io
    - diff --git a/src/collections/handbook/learning/index.mdx b/src/collections/handbook/learning/index.mdx index d3dd160154472..7e84b587b1556 100644 --- a/src/collections/handbook/learning/index.mdx +++ b/src/collections/handbook/learning/index.mdx @@ -2,18 +2,24 @@ title: "Learning" description: "As a community, we have put together good learning materials and resources to guide you through learning about cloud native infrastucture." type: Handbook +contents: + - id: 0 + link: "#Learning" + text: "Learning" + - id: 1 + link: "#Academy" + text: "Academy" + - id: 2 + link: "#Eventing" + text: "Eventing" + - id: 3 + link: "#Blogging" + text: "Blogging" --- import { Container } from "../../../reusecore/Layout"; import { Link } from "gatsby"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; -export const contents = [ - { id: 0, link: "#Learning", text: "Learning" }, - { id: 1, link: "#Academy", text: "Academy" }, - { id: 2, link: "#Eventing", text: "Eventing" }, - { id: 3, link: "#Blogging", text: "Blogging" }, -];

    Learning together

    @@ -45,4 +51,3 @@ A member of the Layer5 community has presented at every KubeCon since its incept Write down what you've learned, what you've built, and what experiences that you have had in the community. All community members are welcome to contribute to the Layer5 blog. - diff --git a/src/collections/handbook/projects/index.mdx b/src/collections/handbook/projects/index.mdx index 07938fb35e4f4..526e829ca207a 100644 --- a/src/collections/handbook/projects/index.mdx +++ b/src/collections/handbook/projects/index.mdx @@ -2,11 +2,23 @@ title: "Projects" description: "Layer5 Projects: Layer5, Meshery, Kanvas, NightHawk" type: Handbook +contents: + - id: 0 + link: "#Layer5" + text: "Layer5" + - id: 1 + link: "#Meshery" + text: "Meshery" + - id: 2 + link: "#Cloud Native Performance" + text: "Cloud Native Performance" + - id: 3 + link: "#Cloud Native Patterns" + text: " Cloud Native Patterns" --- import { Container } from "../../../reusecore/Layout"; import {Link} from "gatsby"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; import layer5icon from "../../../assets/images/layer5/5 icon/svg/light/5-light-bg.svg"; import hawkIcon from "../../../assets/images/nighthawk/icon-only/SVG/nighthawk-logo.svg"; @@ -16,12 +28,6 @@ import servicemeshperformance from "../../../assets/images/service-mesh-performa import mesheryoperatoricon from "../../../assets/images/meshery-operator/meshery-operator.svg"; import mesherysyncicon from "../../../assets/images/meshsync/meshsync.svg"; -export const contents = [ - { id: 0, link: "#Layer5", text: "Layer5" }, - { id: 1, link: "#Meshery", text: "Meshery" }, - { id: 2, link: "#Cloud Native Performance", text: "Cloud Native Performance" }, - { id: 3, link: "#Cloud Native Patterns", text: " Cloud Native Patterns" }, -];

    @@ -94,4 +100,3 @@ Meshery and its components Meshery Operator diff --git a/src/collections/handbook/repository-overview/index.mdx b/src/collections/handbook/repository-overview/index.mdx index f36472732866d..b9aa0122f59c2 100644 --- a/src/collections/handbook/repository-overview/index.mdx +++ b/src/collections/handbook/repository-overview/index.mdx @@ -2,6 +2,16 @@ title: "Repository Overview" description: "This overview serves as resources to newcomers seeking a perspective of the collective community efforts (from the limited vantage point of a code-centric perspective)." type: Handbook +contents: + - id: 0 + link: "#top" + text: "GitHub Organizations and Repositories" + - id: 1 + link: "#Frontend Projects" + text: "Frontend Projects" + - id: 2 + link: "#Backend Projects" + text: "Backend Projects" --- import { Container } from "../../../reusecore/Layout"; @@ -14,16 +24,10 @@ import MeshSync from "../../../assets/images/meshsync/meshsync.svg"; import servicemeshperformance from "../../../assets/images/service-mesh-performance/icon/smp-dark.svg"; import meshery from "../../../assets/images/meshery/icon-only/meshery-logo-light.svg"; import servicemeshpattern from "../../../assets/images/service-mesh-patterns/service-mesh-pattern.svg"; -import IntraPage from "../../../components/handbook-navigation/intra-page"; import Kanvas from "../../../assets/images/kanvas/icon-only/kanvas-icon-color.svg"; import layer5AcademyIcon from "../../../assets/images/academy/academy.svg"; import { Link } from "gatsby"; -export const contents = [ - { id: 0, link: "#top", text: "GitHub Organizations and Repositories" }, - { id: 1, link: "#Frontend Projects", text: "Frontend Projects" }, - { id: 2, link: "#Backend Projects", text: "Backend Projects" }, -]; export const data = repo_data; export const frontendProjects = data.filter((d) => d.category === "Frontend"); @@ -215,4 +219,3 @@ Note that the Layer5 community spans **six** GitHub organizations and **one** mu ); })} - diff --git a/src/sections/Community/Handbook/handbook-single/index.js b/src/sections/Community/Handbook/handbook-single/index.js index 9ce510c13b971..ee60e2484722e 100644 --- a/src/sections/Community/Handbook/handbook-single/index.js +++ b/src/sections/Community/Handbook/handbook-single/index.js @@ -3,10 +3,12 @@ import { HandbookWrapper } from "../Handbook.style"; import { Container } from "../../../../reusecore/Layout"; import HandbookTOC from "./HandbookTOC"; import HandbookPagination from "./HandbookPagination"; +import IntraPage from "../../../../components/handbook-navigation/intra-page"; const HandbookSingle = ({ data, children }) => { const { mdx, allHandbookPages } = data; const currentSlug = mdx.fields.slug; + const contents = mdx.frontmatter.contents || []; return ( @@ -24,6 +26,7 @@ const HandbookSingle = ({ data, children }) => { currentSlug={currentSlug} /> + {contents.length > 0 && }

    ); diff --git a/src/templates/handbook-template.js b/src/templates/handbook-template.js index da2ab49dee446..adb25ef366476 100644 --- a/src/templates/handbook-template.js +++ b/src/templates/handbook-template.js @@ -10,6 +10,11 @@ export const query = graphql` frontmatter { title description + contents { + id + link + text + } } fields { slug From 44b9439d5c4788b91bc94f8656ede38379ac005f Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Fri, 5 Dec 2025 11:31:11 +0530 Subject: [PATCH 24/43] adjust top spacing Signed-off-by: Rajesh-Nagarajan-11 --- src/sections/Community/Handbook/Handbook.style.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sections/Community/Handbook/Handbook.style.js b/src/sections/Community/Handbook/Handbook.style.js index a595fdd2a11bb..d57f966e0d97c 100644 --- a/src/sections/Community/Handbook/Handbook.style.js +++ b/src/sections/Community/Handbook/Handbook.style.js @@ -41,13 +41,13 @@ export const HandbookWrapper = styled.div` flex-direction: row; align-items: flex-start; @media (min-width: 751px){ - margin-top: -58rem; + margin-top: -57rem; position: relative; margin-left: 20rem; padding: 2rem 3rem; } @media (max-width: 750px) { - margin-top: -5rem; + margin-top: -4rem; margin-left: 2rem; } } From a01c8ad5e07d05b7dc554ee77391eded4101f733 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Fri, 5 Dec 2025 19:34:51 +0530 Subject: [PATCH 25/43] fix styling issues in pages Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook/code-of-conduct/index.mdx | 2 +- .../handbook/community-roles/index.mdx | 2 +- src/collections/handbook/community/index.mdx | 62 ++-------- .../handbook/connect-with-us/index.mdx | 49 ++------ src/collections/handbook/designer/index.mdx | 2 +- .../handbook/github -organization/index.mdx | 20 +-- src/collections/handbook/projects/index.mdx | 36 +----- .../handbook/repository-overview/index.mdx | 61 ++-------- .../security-vulnerabilities/index.mdx | 53 +------- .../handbook/writing-program/index.mdx | 114 +++++++++++------- 10 files changed, 120 insertions(+), 281 deletions(-) diff --git a/src/collections/handbook/code-of-conduct/index.mdx b/src/collections/handbook/code-of-conduct/index.mdx index 356b443acfd2b..ca181e4aa11a4 100644 --- a/src/collections/handbook/code-of-conduct/index.mdx +++ b/src/collections/handbook/code-of-conduct/index.mdx @@ -4,7 +4,7 @@ description: "At Layer5 We follow the CNCF Code of Conduct. We pledge to respect type: Handbook --- -import Point from "../community/bullet.svg"; +import Point from "./bullet.svg";

    Community Code of Conduct

    diff --git a/src/collections/handbook/community-roles/index.mdx b/src/collections/handbook/community-roles/index.mdx index 37305e290e16f..2e6fcc31cb70c 100644 --- a/src/collections/handbook/community-roles/index.mdx +++ b/src/collections/handbook/community-roles/index.mdx @@ -99,7 +99,7 @@ Layer5 MeshMates are committed to helping community members be successful contri
    Roles/Responsibilities: -
    + Maintainers are those who are responsible for managing the growth and performance of the project. They are incharge of the project's wellbeing, reviewing and merging the PR, updating the libraries and dependencies in that project, monitoring the codebase and so much more. - Send a reminder about meetings diff --git a/src/collections/handbook/community/index.mdx b/src/collections/handbook/community/index.mdx index 0b24f6561e466..043f47097b074 100644 --- a/src/collections/handbook/community/index.mdx +++ b/src/collections/handbook/community/index.mdx @@ -12,7 +12,7 @@ contents: --- import { Link } from "gatsby"; -import Point from "./bullet.svg"; +import Point from "../code-of-conduct/bullet.svg"; @@ -21,56 +21,20 @@ import Point from "./bullet.svg"; Welcome to the Layer5 community! We're happy to have you here and handhold you for your first contribution. Here are some tips to help you get started: -

    - Point - For Easy Identification - When setting up your slack workspace, your display name should be the same as your GitHub username for easy identification, engage freely, and in whatever form you will: as a listener, user, contributor, maintainer, ambassador, or bystander. Involvement in any way is warmly received. -

    +

    PointFor Easy Identification - When setting up your slack workspace, your display name should be the same as your GitHub username for easy identification, engage freely, and in whatever form you will: as a listener, user, contributor, maintainer, ambassador, or bystander. Involvement in any way is warmly received.

    +

    PointFamiliarize with the community - As you get to familiarize yourself with the community, know that there are multiple initiatives for you to explore. Some initiatives have working groups that meet at different times each week, while others use the weekly community meeting as their place of discussion. Details of each can be found on the community calendar. Everyone is welcome to join the calls and engage with other community members over Slack, the mailing list, and so on.

    +

    PointFamiliarize with the projects - The following is a sample of the many active, ongoing community projects. One way of doing so is to review the Layer5 Repository Overview section of this handbook to get a better understanding of each project. This document will help you to understand the projects based on their technology domain(s). Be sure to star the community's repositories on GitHub!

    +

    PointBe friendly and open-minded - We encourage you to be welcoming to new collaborators and those just getting started. Other contributors might not have the same degree of experience or background as you, but that doesn't mean they can't provide useful ideas.

    +

    PointBe honest - "A half-truth is a whole lie." Being truthful allows you to reach a better agreement. As a result, be open and honest about who you are, what you do, and how you want to accomplish it.

    +

    PointBe respectful and inclusive - We are a diverse group of people with diverse backgrounds and opinions. We expect everyone to be civil and professional in their activities. Disrespectful behavior is not tolerated. Do not publish anything that would be considered insulting, abusive, or hate speech by a reasonable person.

    +

    PointCollaborate and Contribute - Members are expected to attend community and workgroup meetings, find ways to help, check up on our Github page regularly etc. Within the community and outside, we encourage teamwork.

    -

    - Point - Familiarize with the community - As you get to familiarize yourself with the community, know that there are multiple initiatives for you to explore. Some initiatives have working groups that meet at different times each week, while others use the weekly community meeting as their place of discussion. Details of each can be found on the community calendar. Everyone is welcome to join the calls and engage with other community members over Slack, the mailing list, and so on. -

    - -

    - Point - Familiarize with the projects - The following is a sample of the many active, ongoing community projects. One way of doing so is to review the Layer5 Repository Overview section of this handbook to get a better understanding of each project. This document will help you to understand the projects based on their technology domain(s). Be sure to star the community's repositories on GitHub! -

    - -

    - Point - Be friendly and open-minded - We encourage you to be welcoming to new collaborators and those just getting started. Other contributors might not have the same degree of experience or background as you, but that doesn't mean they can't provide useful ideas. -

    - -

    - Point - Be honest - "A half-truth is a whole lie." Being truthful allows you to reach a better agreement. As a result, be open and honest about who you are, what you do, and how you want to accomplish it. -

    - -

    - Point - Be respectful and inclusive - We are a diverse group of people with diverse backgrounds and opinions. We expect everyone to be civil and professional in their activities. Disrespectful behavior is not tolerated. Do not publish anything that would be considered insulting, abusive, or hate speech by a reasonable person. -

    - -

    - Point - Collaborate and Contribute - Members are expected to attend community and workgroup meetings, find ways to help, check up on our Github page regularly etc. Within the community and outside, we encourage teamwork. -

    - -

    +

    Resources

    -

    - Point - Be sure to access the resources community drive. -

    -

    - Point - Sign-up on the community mailer. -

    -

    - Point - Ask for a copy of The Enterprise Path to Service Mesh Architectures. -

    -

    +

    PointBe sure to access the resources community drive.

    +

    PointSign-up on the community mailer.

    +

    PointAsk for a copy of The Enterprise Path to Service Mesh Architectures.

    +
    Please refer to the Code of Conduct for more details. diff --git a/src/collections/handbook/connect-with-us/index.mdx b/src/collections/handbook/connect-with-us/index.mdx index c81f09867b45b..746ab1b3375cf 100644 --- a/src/collections/handbook/connect-with-us/index.mdx +++ b/src/collections/handbook/connect-with-us/index.mdx @@ -97,47 +97,12 @@ Join us on our cloud native community's Disc Layer5 is dedicated to empowering engineers and supporting the open source community that create them. Learn more about Layer5 and connect with the community by following and engaging with us on our social media accounts.
    -

    - twitter -    - @layer5,  - @mesheryio -  and  - @kanvas-new -

    -

    - mail -    - - Connect with our community managers for any inquiries or support! - -

    -

    - youtube -    - Subscribe to Layer5 Youtube, -   - Subscribe to Meshery Youtube -

    -

    - github -    - Discover our projects on GitHub -

    -

    - linkedin -    - Join our professional network on LinkedIn -

    -

    - docker -    - Take control with Docker deployment -

    -

    - slack -    - Communicate and collaborate with us on Slack -

    +

    twitter  @layer5@mesheryio and @kanvas-new

    +

    mail  Connect with our community managers for any inquiries or support!

    +

    youtube  Subscribe to Layer5 YoutubeSubscribe to Meshery Youtube

    +

    github  Discover our projects on GitHub

    +

    linkedin  Join our professional network on LinkedIn

    +

    docker  Take control with Docker deployment

    +

    slack  Communicate and collaborate with us on Slack

    diff --git a/src/collections/handbook/designer/index.mdx b/src/collections/handbook/designer/index.mdx index 34cfec65c38e9..4fe35afb5110f 100644 --- a/src/collections/handbook/designer/index.mdx +++ b/src/collections/handbook/designer/index.mdx @@ -1,5 +1,5 @@ --- -title: "Designer" +title: "Design with Layer5" description: "Design with Layer5 - Contribute to UI/UX across our projects" type: Handbook --- diff --git a/src/collections/handbook/github -organization/index.mdx b/src/collections/handbook/github -organization/index.mdx index 544527180e54e..6d30b59f96679 100644 --- a/src/collections/handbook/github -organization/index.mdx +++ b/src/collections/handbook/github -organization/index.mdx @@ -29,19 +29,23 @@ Membership to the GitHub organizations is a significant milestone for contributo

    Membership Requirements

    +

    Contributors who may be invited typically: -- Have been actively involved in the community for several weeks -- Make regular updates to projects -- Help other community members -- Attend development meetings -- Demonstrate a willingness to learn and share knowledge -- Show a genuine desire to improve themselves, others, and the projects +

      +
    • Have been actively involved in the community for several weeks
    • +
    • Make regular updates to projects
    • +
    • Help other community members
    • +
    • Attend development meetings
    • +
    • Demonstrate a willingness to learn and share knowledge
    • +
    • Show a genuine desire to improve themselves, others, and the projects
    • +

    +

    Invitation Process

    Depending on the number and quality of contributions made across the five GitHub organizations of Layer5, contributors can receive an invitation to any or all of these orgs. The process involves: -1. Sending a group DM -2. Executing Slack slash command in #community-management + 1. Sending a group DM +2. Executing Slack slash command in #community-management

    Group Message for Invitations

    diff --git a/src/collections/handbook/projects/index.mdx b/src/collections/handbook/projects/index.mdx index 526e829ca207a..35a1105fa0535 100644 --- a/src/collections/handbook/projects/index.mdx +++ b/src/collections/handbook/projects/index.mdx @@ -29,14 +29,7 @@ import mesheryoperatoricon from "../../../assets/images/meshery-operator/meshery import mesherysyncicon from "../../../assets/images/meshsync/meshsync.svg"; - -

    - - Layer5 -   Layer5 - -

    - +

    Layer5  Layer5

    Its cloud native community represents the largest collection of cloud native projects. Emerging projects like Nighthawk Nighthawk Icon , community with MeshMate icon MeshMates , catch-all org, "home base". @@ -52,14 +45,7 @@ Its cloud native community represents the largest collection of cloud native pro - #### Layer5 Academy : Layer5 Academy is a learning platform built into Layer5 Cloud. It offers structured learning paths, interactive challenges, and professional certifications. Content spans beginner to advanced levels, helping both developers and organizations skill up in cloud native technologies. - -

    - - Meshery -   Meshery - -

    - +

    Meshery  Meshery

    Meshery and its components Meshery Operator Meshery Operator Icon and MeshSync MeshSync icon @@ -78,25 +64,11 @@ Meshery and its components Meshery Operator Meshery Catalog : As a central hub for sharing cloud native infrastructure designs, Meshery Catalog enables the exchange of the best practices, reusable templates, and Kubernetes-based operational patterns for multi-cluster Kubernetes clusters and distributed applications. - -

    - - cloud native performance -   Cloud Native Performance - -

    - +

    cloud native performance  Cloud Native Performance

    The Cloud Native Performance (SMP) is a vendor-neutral specification for capturing details of environment and infrastructure details, cloud native infrastrcture and it's configuration, service/application details, and bundling of statistical analysis of the result. - -

    - - cloud native patterns -   Cloud Native Patterns - -

    - +

    cloud native patterns  Cloud Native Patterns

    A collection of curated patterns of cloud native use cases compatible with Meshery. diff --git a/src/collections/handbook/repository-overview/index.mdx b/src/collections/handbook/repository-overview/index.mdx index b9aa0122f59c2..ba531e8d4f03a 100644 --- a/src/collections/handbook/repository-overview/index.mdx +++ b/src/collections/handbook/repository-overview/index.mdx @@ -42,60 +42,13 @@ A brief introduction to all of the Github repositories of Layer5 organization is Note that the Layer5 community spans **six** GitHub organizations and **one** multi-repository collection:
      -
    • - - layer5 icon -   Layer5 - - - established projects like GetNighthawk, community with MeshMates, a catch-all org. -
    • - -
    • - - meshery icon -   Meshery - - - Meshery and its components - Meshery Operator logo Meshery Operator - mesh sync icon and MeshSync. -
    • - -
    • - - cloud native performance logo -   Cloud Native Performance - - - Cloud Native Performance specification and site. -
    • -
    • - - cloud native patterns logo -   Cloud Native Patterns - - - a collection of curated patterns of cloud native use cases compatible with Meshery. -
    • -
    • - - Layer5 logo -   Layer5 Labs - - - emerging projects and Meshery extensions, like - Kanvas logo Kanvas. -
    • -
    • - - meshery extension icon -   Meshery Extensions - - - a collection of extensions and plugins that enhance Meshery's functionality. -
    • -
    • - - Layer5 Academy logo -   Layer5 Academy - - - a multi-repository learning platform with structured learning paths, practical challenges, badges and optional certificates, built with modular theme, content, and build repositories. -
    • +
    • layer5 icon  Layer5 - established projects like GetNighthawk, community with MeshMates, a catch-all org.
    • +
    • meshery icon  Meshery - Meshery and its components Meshery Operator logo Meshery Operator mesh sync icon and MeshSync.
    • +
    • cloud native performance logo  Cloud Native Performance - Cloud Native Performance specification and site.
    • +
    • cloud native patterns logo  Cloud Native Patterns - a collection of curated patterns of cloud native use cases compatible with Meshery.
    • +
    • Layer5 logo  Layer5 Labs - emerging projects and Meshery extensions, like Kanvas logo Kanvas.
    • +
    • meshery extension icon  Meshery Extensions - a collection of extensions and plugins that enhance Meshery's functionality.
    • +
    • Layer5 Academy logo  Layer5 Academy - a multi-repository learning platform with structured learning paths, practical challenges, badges and optional certificates, built with modular theme, content, and build repositories.
    diff --git a/src/collections/handbook/security-vulnerabilities/index.mdx b/src/collections/handbook/security-vulnerabilities/index.mdx index c323e5cba7d6b..1d2187ff7a162 100644 --- a/src/collections/handbook/security-vulnerabilities/index.mdx +++ b/src/collections/handbook/security-vulnerabilities/index.mdx @@ -23,53 +23,12 @@ To make a report, send an email to the private -
  • - - layer5 icon -   Layer5 - - - established projects like GetNighthawk, community with MeshMates, a catch-all org. -
  • - -
  • - - meshery icon -   Meshery - - - Meshery and its components Meshery Operator - Meshery Operator logo and MeshSync - mesh sync icon. -
  • - -
  • - - cloud native performance logo -   Cloud Native Performance - - - Cloud Native Performance specification and site. -
  • -
  • - - cloud native patterns logo -   Cloud Native Patterns - - - a collection of curated patterns of cloud native use cases compatible with Meshery. -
  • -
  • - - Layer5 logo -   Layer5 Labs - - - emerging projects and Meshery extensions, like - Kanvas logoKanvas. -
  • -
  • - - meshery extension icon -   Meshery Extensions - - - plugins or add-ons providing extra functionalities that can be used to customize, extend and integrate with other tools and services. -
  • +
  • layer5 icon  Layer5 - established projects like GetNighthawk, community with MeshMates, a catch-all org.
  • +
  • meshery icon  Meshery - Meshery and its components Meshery Operator Meshery Operator logo and MeshSync mesh sync icon.
  • +
  • cloud native performance logo  Cloud Native Performance - Cloud Native Performance specification and site.
  • +
  • cloud native patterns logo  Cloud Native Patterns - a collection of curated patterns of cloud native use cases compatible with Meshery.
  • +
  • Layer5 logo  Layer5 Labs - emerging projects and Meshery extensions, like Kanvas logoKanvas.
  • +
  • meshery extension icon  Meshery Extensions - plugins or add-ons providing extra functionalities that can be used to customize, extend and integrate with other tools and services.
  • You can find the list of all the Layer5 project repositories here diff --git a/src/collections/handbook/writing-program/index.mdx b/src/collections/handbook/writing-program/index.mdx index b5f3e5dce337a..3e1c229ab5e40 100644 --- a/src/collections/handbook/writing-program/index.mdx +++ b/src/collections/handbook/writing-program/index.mdx @@ -111,54 +111,76 @@ The Layer5 Writing Program is a way to demonstrate your expertise, give back to
    -## What types of content can you contribute? - - - -
    - blogs -

    Blog posts

    -

    Technical deep-dives, tutorials, how-tos, and thought leadership pieces

    -
    - - -
    - talks -

    Conference talks

    -

    Submit proposals and present at conferences and meetups

    -
    - - -
    - videos -

    Video content

    -

    Tutorials, demos, interviews, and educational videos

    -
    - - -
    - workshop -

    Workshops

    -

    Hands-on training sessions and interactive learning experiences

    -
    - - -
    - event -

    Events

    -

    Host or speak at community events, webinars, and meetups

    -
    - - -
    - resources -

    Resources

    -

    Guides, documentation, cheat sheets, and reference materials

    -
    - +## Where can you contribute? + +We welcome the contribution of any type that shares knowledge about our projects or related technologies. + +Do you want to document your recent effort in implementing a new feature? Do you want to share a solution for a problem you were struggling with? Do you want to share information about a recent technology you find intriguing? Want to host an event with Layer5? Want to deliver a talk, a workshop, or a tutorial? Just let us know. + + +
    + + +
    + Blog +
    Blog
    +

    Share Your Experience

    +
    + + + + +
    + Resource +
    Resource
    +

    Articles, Tutorials, Podcasts and More

    +
    + + + + +
    + Workshop +
    Workshop
    +

    Deliver a Hands-on Learning Experience

    +
    + + +
    +
    + +
    + + +
    + Event +
    Event
    +

    Organize an Event

    +
    + + + + +
    + Talks +
    Talks
    +

    Talk About Anything Cloud Native

    +
    + + + + +
    + Videos +
    Recorded Videos
    +

    Product Videos, Reviews or Demo

    +
    + + +
    -## How to get started? +## What is the process?
    From 34cc2eac3635cafd0e128d389c74ab649460f247 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Fri, 5 Dec 2025 19:35:57 +0530 Subject: [PATCH 26/43] copy paste the mentorship page styles and writing program page card size fix Signed-off-by: Rajesh-Nagarajan-11 --- .../Community/Handbook/Handbook.style.js | 104 +++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/src/sections/Community/Handbook/Handbook.style.js b/src/sections/Community/Handbook/Handbook.style.js index d57f966e0d97c..2477b7364124a 100644 --- a/src/sections/Community/Handbook/Handbook.style.js +++ b/src/sections/Community/Handbook/Handbook.style.js @@ -415,7 +415,7 @@ export const HandbookWrapper = styled.div` &:hover{ box-shadow: 0px 0px 5px ${props => props.theme.primaryColor}; } - padding: 12% 6% 12% 6%; + padding: 8% 6% 8% 6%; height: 220px; border-radius: 4%; margin-bottom: 30px; @@ -477,4 +477,106 @@ export const HandbookWrapper = styled.div` display: inline; } } + + /* mentorship programs styling */ + .explain-2{ + padding: 25px 0px; + .text{ + padding: 1.25rem 1.25rem 0px 1.25rem; + h2{ + font-weight: 700; + font-size: 40px; + padding: 1.25rem 0px; + } + p{ + color: ${props => props.theme.tertiaryColor}; + transition: 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + } + } + img, svg { + height: auto; + width: 23rem; + display: block; + margin-left: auto; + margin-right: auto; + } + + path { + stroke: none; + } + + .communitybridge_logo_svg__cls-1{ + fill: ${props => props.theme.whiteToBlue003764}; + transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + } + + .hacktoberfest_svg__cls-1 { + transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + fill: ${props => props.theme.whiteToRed662839}; + } + + .lfx-white_svg__b{ + fill: ${props => props.theme.whiteToBlue003764}; + transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + } + + .lfx-white_svg__c{ + fill: ${props => props.theme.whiteToBlue0096d6}; + transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + } + + .layer5-colorMode_svg__colorMode1 { + fill: ${props => props.theme.whiteToGreen3C494F}; + transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + } + + .mlh_svg__cls-1 { + fill: ${props => props.theme.whiteToBlack}; + transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + } + + .sca_svg__fil0, .sca_svg__fil6 { + fill: ${props => props.theme.whiteToBlack}; + transition: fill 0.8s cubic-bezier(0.2, 0.8, 0.2, 1); + } + + Button{ + margin: 1.25rem 0px; + color: white; + } + + #col2 { + align-self: center + } + } + + @media only screen and (max-width: 750px){ + .explain-2 div { + flex-direction: column-reverse; + } + } + + @media only screen and (max-width: 475px){ + .explain-2 img, .explain-2 svg{ + width: 15rem; + } + .explain-2 .text h2{ + font-size: 30px; + } + } + + @media only screen and (min-width: 765px){ + .first { + .list{ + display:flex; + flex-wrap:wrap + } + #col1 { + order: 2; + } + #col2 { + order: 1; + } + } + } `; \ No newline at end of file From 0d7f1de6675261bf7c9e3e75cd1b62f8ae86838c Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Fri, 5 Dec 2025 19:36:44 +0530 Subject: [PATCH 27/43] removed unused images and js file of handbook Signed-off-by: Rajesh-Nagarajan-11 --- src/collections/handbook/community/bullet.svg | 1 - .../handbook-navigation/TocPagination.js | 33 ----------- src/components/handbook-navigation/index.js | 57 ------------------- .../Community/Handbook/images/blogs.svg | 46 --------------- .../Community/Handbook/images/bullet.svg | 1 - .../Community/Handbook/images/event.svg | 44 -------------- .../Community/Handbook/images/resources.svg | 40 ------------- .../Community/Handbook/images/talks.svg | 27 --------- .../Community/Handbook/images/videos.svg | 24 -------- .../Community/Handbook/images/workshop.svg | 44 -------------- 10 files changed, 317 deletions(-) delete mode 100644 src/collections/handbook/community/bullet.svg delete mode 100644 src/components/handbook-navigation/TocPagination.js delete mode 100644 src/components/handbook-navigation/index.js delete mode 100644 src/sections/Community/Handbook/images/blogs.svg delete mode 100644 src/sections/Community/Handbook/images/bullet.svg delete mode 100644 src/sections/Community/Handbook/images/event.svg delete mode 100644 src/sections/Community/Handbook/images/resources.svg delete mode 100644 src/sections/Community/Handbook/images/talks.svg delete mode 100644 src/sections/Community/Handbook/images/videos.svg delete mode 100644 src/sections/Community/Handbook/images/workshop.svg diff --git a/src/collections/handbook/community/bullet.svg b/src/collections/handbook/community/bullet.svg deleted file mode 100644 index d0b98be5d8be6..0000000000000 --- a/src/collections/handbook/community/bullet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/components/handbook-navigation/TocPagination.js b/src/components/handbook-navigation/TocPagination.js deleted file mode 100644 index f70d04bf7477a..0000000000000 --- a/src/components/handbook-navigation/TocPagination.js +++ /dev/null @@ -1,33 +0,0 @@ -import React, { useEffect, useState } from "react"; - -import { content } from "./content"; -import Button from "../../reusecore/Button"; -import TocPaginationWrapper from "./TocPagination.style"; - -const TocPagination = () => { - const [currentPage, setCurrentPage] = useState(0); - - useEffect(() => { - const path = window.location.pathname; - const index = content.findIndex((x) => x.link === path); - setCurrentPage(index); - }, []); - - return ( - - {currentPage > 0 ? ( - - ) : null} - - {currentPage < content.length - 1 ? ( - - ) : null} - - ); -}; - -export default TocPagination; diff --git a/src/components/handbook-navigation/index.js b/src/components/handbook-navigation/index.js deleted file mode 100644 index 82c1563d3c843..0000000000000 --- a/src/components/handbook-navigation/index.js +++ /dev/null @@ -1,57 +0,0 @@ -import React, { useState } from "react"; -import { HiOutlineChevronLeft } from "@react-icons/all-files/hi/HiOutlineChevronLeft"; -import { Link } from "gatsby"; -import { IoMdClose } from "@react-icons/all-files/io/IoMdClose"; -import { IoIosArrowDropdownCircle } from "@react-icons/all-files/io/IoIosArrowDropdownCircle"; - -import TOCWrapper from "./toc.style"; -import { content } from "./content"; - -const TOC = () => { - const [expand, setExpand] = useState(false); - return ( - -
    - - -

    Table of Contents

    - -
    - {expand ? ( - - ) : ( - - )} -
    -
    -
    -
      - {content.map((x) => ( -
    • - - {x.text} - -
    • - ))} -
    -
    -
    - ); -}; - -export default TOC; diff --git a/src/sections/Community/Handbook/images/blogs.svg b/src/sections/Community/Handbook/images/blogs.svg deleted file mode 100644 index 830299a6df284..0000000000000 --- a/src/sections/Community/Handbook/images/blogs.svg +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/src/sections/Community/Handbook/images/bullet.svg b/src/sections/Community/Handbook/images/bullet.svg deleted file mode 100644 index d0b98be5d8be6..0000000000000 --- a/src/sections/Community/Handbook/images/bullet.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/sections/Community/Handbook/images/event.svg b/src/sections/Community/Handbook/images/event.svg deleted file mode 100644 index c956d1e04a6cf..0000000000000 --- a/src/sections/Community/Handbook/images/event.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/src/sections/Community/Handbook/images/resources.svg b/src/sections/Community/Handbook/images/resources.svg deleted file mode 100644 index b2b01bc55e2f0..0000000000000 --- a/src/sections/Community/Handbook/images/resources.svg +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - diff --git a/src/sections/Community/Handbook/images/talks.svg b/src/sections/Community/Handbook/images/talks.svg deleted file mode 100644 index 9c213eddb42ff..0000000000000 --- a/src/sections/Community/Handbook/images/talks.svg +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - diff --git a/src/sections/Community/Handbook/images/videos.svg b/src/sections/Community/Handbook/images/videos.svg deleted file mode 100644 index 67b4558b29f0b..0000000000000 --- a/src/sections/Community/Handbook/images/videos.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - diff --git a/src/sections/Community/Handbook/images/workshop.svg b/src/sections/Community/Handbook/images/workshop.svg deleted file mode 100644 index 2db3467d098a4..0000000000000 --- a/src/sections/Community/Handbook/images/workshop.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - From 0c7ad82121f00a54696707c9a5114a72d21ddd2b Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 6 Dec 2025 18:49:58 +0530 Subject: [PATCH 28/43] added missing content and fix toc active Signed-off-by: Rajesh-Nagarajan-11 --- src/collections/handbook/community/index.mdx | 2 +- .../handbook/github-process/index.mdx | 159 +++++++++++++++++- .../handbook/writing-program/index.mdx | 53 ++++-- .../Handbook/handbook-single/HandbookTOC.js | 3 +- 4 files changed, 193 insertions(+), 24 deletions(-) diff --git a/src/collections/handbook/community/index.mdx b/src/collections/handbook/community/index.mdx index 043f47097b074..23071f6b66c7f 100644 --- a/src/collections/handbook/community/index.mdx +++ b/src/collections/handbook/community/index.mdx @@ -1,5 +1,5 @@ --- -title: "Community" +title: "Community Guidelines" description: "A MeshMate is an experienced Layer5 community member, who will be available to guide you as you explore the various projects and find your areas of interest." type: Handbook contents: diff --git a/src/collections/handbook/github-process/index.mdx b/src/collections/handbook/github-process/index.mdx index b49755812e282..4edc571d444e6 100644 --- a/src/collections/handbook/github-process/index.mdx +++ b/src/collections/handbook/github-process/index.mdx @@ -87,38 +87,187 @@ Area labels specify which part of the project an issue or PR relates to—such a ### Component Labels Component labels indicate which software module or subsystem is affected by an issue. This ensures issues are routed to the right maintainers and allows more detailed filtering beyond the broader area labels. Attach a component label when your issue/PR impacts a specific module (e.g., a CLI tool, API, or pattern engine). +
    + + + + + + + + + + + + + +
    LabelDescriptionColor
    component/apiAPI related#3a0485
    component/mesheryctlMeshery CLI related#3a0486
    component/uiUI component related#3a0486
    component/filtersFilters related#3a0486
    component/patternsPatterns related#3a0486
    component/meshsyncMeshSync component related#3a0487
    component/meshery-perfMeshery-perf related#3a0488
    +
    + ### Programming Language Labels Programming language labels highlight the primary language used in the issue or PR. This helps contributors looking for language-specific work, and aids in code review or help requests. Use a programming language label if the change, bug, or feature is specific to a particular language (e.g., a Go backend bug, a JavaScript UI enhancement). +
    + + + + + + + + + +
    LabelDescriptionColor
    language/goGolang related#16e2e2
    language/javascriptJavascript#16e2e3
    language/rubyRuby#16e2e4
    +
    + ### PR (Pull Request) Labels PR labels manage the state or special requirements of a pull request, like indicating it's a draft, dependent on others, or not yet ready for merging. Apply a PR label if your pull request isn't ready, should not be merged, updates dependencies, or is on hold. +
    + + + + + + + + + + +
    LabelDescriptionColor
    pr/dependenciesUpdates addressed dependencies#0366d5
    pr/do-not-mergeNot ready for merging#0366d6
    pr/draftWork in progress/draft PR#0366d7
    pr/on holdPR/Issue on hold#0366d8
    +
    + ### Issue Process & Status Labels These labels show the current status of an issue—such as blocked, duplicate, in need of a design, or if an action (like an invitation) should be triggered. Some are used by bots to automate reminders or mark stale issues. Apply these when the situation applies (e.g. "blocked" if work can't proceed, "design required" if more planning is needed). +
    + + + + + + + + + + + + + + + +
    LabelDescriptionColor
    issue/inviteInvitation for author to join GH org#eeeeee
    issue/blockedIssue is blocked#eeeeee
    issue/design requiredRequires a design prior to proceeding#eeeeee
    issue/duplicateIssue or PR already exists#eeeeee
    issue/invalidThis doesn't seem right#eeeeee
    issue/staleNo activity for an extended period (often applied automatically)#eeeeee
    issue/tweetPosts (for social or outreach)#eeeeee
    issue/remindReminder comment to assignee#eeeeee
    issue/willfixIssue will be worked on ("stale" bot skips)#eeeeee
    +
    + ### Kind Labels Kind labels classify the general type of change or discussion: bug, feature, chore, enhancement, epic, question, or proposal. This improves searchability and helps teams organize their workflows. Use the kind label that best describes your issue or PR. +
    + + + + + + + + + + + + + + +
    LabelDescriptionColor
    kind/bugSomething isn't working#088073
    kind/childChild of a larger Epic#088074
    kind/choreMaintenance or other necessary task#088075
    kind/enhancementImprovement to an existing feature#088076
    kind/epicAn umbrella issue, covers many issues#088077
    kind/featureNew major feature or request#088078
    kind/proposalSuggestion or proposal for change#088079
    kind/questionExplanation or further info requested#088080
    +
    + ### Priority Labels Priority labels help teams triage and allocate attention, making it clear which issues are urgent and which can wait. Always apply a priority label, adjusting as priorities shift or as issues are escalated or downgraded. +
    + + + + + + + + + +
    LabelDescriptionColor
    priority/urgentNeeds immediate attention#f60205
    priority/highHigh priority issue#d60205
    priority/lowLower priority, can wait#a60205
    +
    + ### Service Mesh Labels Service mesh labels point out which mesh technology or ecosystem the issue pertains to. This is vital for projects supporting multiple meshes, enabling modular attention and expertise. Use these when your change or report is specific to one mesh (like Istio or Linkerd). +
    + + + + + + + + + + + + + + + + +
    LabelDescriptionColor
    service-mesh/app-meshApp Mesh#57b6cc
    service-mesh/consulConsul#57b6cc
    service-mesh/cpxCPX#57b6cc
    service-mesh/istioIstio#57b6cc
    service-mesh/kumaKuma#57b6cc
    service-mesh/linkerdLinkerd#57b6cc
    service-mesh/maeshMaesh#57b6cc
    service-mesh/nginxNGINX SM#57b6cc
    service-mesh/nsmNSM#57b6cc
    service-mesh/tanzuTanzu#57b6cc
    +
    + ### Help & Onboarding Labels Help labels signal issues where some support is needed, or which are especially suitable for newcomers. These labels foster open source engagement and make onboarding easier for new contributors. Apply these to issues where you'd appreciate community help (`help wanted`) or for issues that are clearly documented, small in scope, and ideal for first-timers (`good first issue`). +
    + + + + + + + + +
    LabelDescriptionColor
    help wantedMaintainers need help here#35f48e
    good first issueGood for new contributors#7057ff
    +
    + ### Best Practices & Example - **Apply all relevant labels**: an issue may belong to an area, a component, a kind, have a priority, AND be language-specific. - **Update labels as issues evolve**: don't hesitate to add or remove as information changes. -- **When in doubt, ask!**: The Layer5 community Slack is a welcoming place. +- **When in doubt, ask!**: The [Layer5 community Slack](https://layer5.io/community) is a welcoming place. + +**Example:** + +If you find a documentation error regarding Meshery's CLI, that's an easy fix, you might use these labels: -**Example:**
    -If you find a documentation error regarding Meshery's CLI, that's an easy fix, you might use these labels:
    `area/docs, component/mesheryctl, kind/bug, priority/low, good first issue` ### Questions or Suggestions? -Labels missing? Unclear usage? Open a discussion or tag a maintainer in your issue, or bring it up in community Slack. +Labels missing? Unclear usage? Open a discussion or tag a maintainer in your issue, or bring it up in [community Slack](https://layer5.io/community). + +### List for Pull Requests +The following list of pull request labels will be used to both indicate purpose or status of the PR to maintainers, and significantly, they will be used in conditional logic during workflow execution to determine the PR's appropriate path through the CI flow. + +- **Refactor** - Chore related pull request +- **Fix** - Bug fixes PRs +- **On-hold** - PR needs review before merging or it needs to behold until a specific issue is fixed. +- **Dependabot** - All dependabot related automated PRs +- **release** - identifies that a release is / will be made +- **Draft** - PR is in draft state, GitHub provides a way for the draft state but having a label will help us in triage purposes. +- **Approved** - Indicates a PR has been approved by approver form all required OWNERS files. #51ed31 +- **help wanted** - Extra attention is needed #008672 +- **needs-ok-to-test** - #d60c6a +- **awaiting review** - The PR is ready for the reviewer to review. #fbca04 + +Improving the build times through conditional logic that will skip sections of the ci.yml, unless these labels are present: + +- **docs** - build the Jekyll site for Meshery documentation +- **component/mesheryctl** - build the Meshery CLI +- **area/ui** - build the Meshery UI +- **component/meshery-server** - Assumed that Meshery Server should always be build, but this is not the case. ### Bots Layer5 uses the following bots: @@ -131,4 +280,4 @@ Layer5 uses the following bots: - Labeler.yml - label-commenter.yml -Good resource - https://github.com/sdras/awesome-actions#pull-requests +Good resource - [https://github.com/sdras/awesome-actions#pull-requests](https://github.com/sdras/awesome-actions#pull-requests) diff --git a/src/collections/handbook/writing-program/index.mdx b/src/collections/handbook/writing-program/index.mdx index 3e1c229ab5e40..f1979c1e41d10 100644 --- a/src/collections/handbook/writing-program/index.mdx +++ b/src/collections/handbook/writing-program/index.mdx @@ -195,27 +195,48 @@ Do you want to document your recent effort in implementing a new feature? Do you
    -## Content Guidelines -- **Original**: All content must be original and not published elsewhere -- **Technical**: Focus on technical topics related to cloud native, Kubernetes, service mesh, and related technologies -- **Helpful**: Provide practical value to readers through tutorials, guides, or insights -- **Well-written**: Follow good writing practices with clear structure and proper grammar -- **Accurate**: Ensure all technical information is correct and up-to-date -## Recognition +## What are some suggested topics? -Published authors receive: -- **Byline**: Credit on published content -- **Profile**: Featured on the community members page -- **Badge**: Writer badge on your community profile -- **Promotion**: Social media promotion of your content -- **Swag**: Layer5 swag for significant contributions +Here are some suggested topics to get you started. If you have an idea that isn't listed here or if you have any question, please let us know on our [Discuss Forum](https://discuss.layer5.io/) / [Slack Channel](https://layer5io.slack.com/). + +- **DevOps/Observability/Kubernetes:** + - Distributed Tracing in Context of Meshery's Architecture. + - One-stop Cloud Native Market Place - Meshery Catalog. + - Interpreting your Cloud Native Performance - SMP. + - Creating and Deploying your first application with Kanvas. + - Load generation and Load balancing. + - DevOps and Platform Engineering. + - Beginners guide to Meshmodel. + - Enhancing Microservices Observability with Meshery and Prometheus. + +- **Community:** + - Building Bridges, Not Walls: The Power of Open Source Collaboration. + - A Deep Dive into Meshery's Contribution to Cloud Native Ecosystem. + - Open Source Sustainability: Funding Models for Long-Term GitHub Projects. + - Importance to an open source community. + - Beyond Code: The Unsung Heroes of Open Source - Documenters, Testers, and Designers. + - Open Source Alchemy: Transforming Community Contributions into Gold. + - Collaborative Open Source Development: Inside the Community of Layer5. + +## How to Submit and Review Your Writing? + +The Writing Program offers writers two convenient ways to get their writings reviewed by Community. Whether you prefer working with Google Docs or contributing directly to the website, we've got you covered. This structured guide will walk you through both options, ensuring that your valuable content is reviewed effectively. + +1. **Google Docs Review:** + + If you prefer a straightforward approach, start by crafting your blog article within [Google Docs](https://docs.google.com/), ensuring it's well-structured and error-free. Share the document with us by adding it to the [Community Drive](https://drive.google.com/drive/folders/1o6ZSqCq1QUJmLIjl_Y0VgT_azNbgg1W2), we will provide feedback directly within the Google Doc. Engage in discussions to refine your content collaboratively. Once thoroughly reviewed, prepare your submission according to community guidelines. + +2. **Website Contribution Review:** + + For those comfortable with local website development, contribute directly to the community website. [Set up your local environment](https://github.com/layer5io/layer5/blob/master/CONTRIBUTING.md), create a blog post adhering to specified guidelines, and submit it via a Pull Request on [GitHub](https://github.com/layer5io/layer5/). Reviewers will provide feedback, and you'll refine your post collaboratively. Upon completion, maintainers will merge your blog post into the website repository, celebrating your contribution. ## Additional Resources -- Contributing to Layer5 Resources -- Join the Layer5 Discussion Forum +- [Contributing to Layer5 Blogs](https://github.com/layer5io/layer5/blob/master/CONTRIBUTING.md#adding-a-blog-post) +- [Contributing to Layer5 Resources](https://github.com/layer5io/layer5/blob/master/CONTRIBUTING.md#adding-a-resource) +- [View open Writing Program issues](https://github.com/layer5io/layer5/labels/area%2Fblog) +- Join the [Layer5 Discussion Forum](https://discuss.layer5.io/) - Explore our Resource Library - Learn Cloud Native -- Connect with us on Slack diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index a53730c6b51a7..237f0f24de37e 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -18,8 +18,7 @@ const HandbookTOC = ({ pages, currentSlug }) => {
  • {page.frontmatter.title} From f31a84fa3e53cc80e010bad23633268143445740 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 6 Dec 2025 19:15:21 +0530 Subject: [PATCH 29/43] fix grammers Signed-off-by: Rajesh-Nagarajan-11 --- src/collections/handbook/community-roles/index.mdx | 2 +- src/collections/handbook/community/index.mdx | 2 +- src/collections/handbook/faq/index.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/collections/handbook/community-roles/index.mdx b/src/collections/handbook/community-roles/index.mdx index 2e6fcc31cb70c..41526df368cdf 100644 --- a/src/collections/handbook/community-roles/index.mdx +++ b/src/collections/handbook/community-roles/index.mdx @@ -100,7 +100,7 @@ Layer5 MeshMates are committed to helping community members be successful contri Roles/Responsibilities: -Maintainers are those who are responsible for managing the growth and performance of the project. They are incharge of the project's wellbeing, reviewing and merging the PR, updating the libraries and dependencies in that project, monitoring the codebase and so much more. +Maintainers are those who are responsible for managing the growth and performance of the project. They are in charge of the project's wellbeing, reviewing and merging the PR, updating the libraries and dependencies in that project, monitoring the codebase and so much more. - Send a reminder about meetings - Prepare meetings diff --git a/src/collections/handbook/community/index.mdx b/src/collections/handbook/community/index.mdx index 23071f6b66c7f..554d6fa774a24 100644 --- a/src/collections/handbook/community/index.mdx +++ b/src/collections/handbook/community/index.mdx @@ -21,7 +21,7 @@ import Point from "../code-of-conduct/bullet.svg"; Welcome to the Layer5 community! We're happy to have you here and handhold you for your first contribution. Here are some tips to help you get started: -

    PointFor Easy Identification - When setting up your slack workspace, your display name should be the same as your GitHub username for easy identification, engage freely, and in whatever form you will: as a listener, user, contributor, maintainer, ambassador, or bystander. Involvement in any way is warmly received.

    +

    PointFor Easy Identification - When setting up your Slack workspace, your display name should be the same as your GitHub username for easy identification, engage freely, and in whatever form you will: as a listener, user, contributor, maintainer, ambassador, or bystander. Involvement in any way is warmly received.

    PointFamiliarize with the community - As you get to familiarize yourself with the community, know that there are multiple initiatives for you to explore. Some initiatives have working groups that meet at different times each week, while others use the weekly community meeting as their place of discussion. Details of each can be found on the community calendar. Everyone is welcome to join the calls and engage with other community members over Slack, the mailing list, and so on.

    PointFamiliarize with the projects - The following is a sample of the many active, ongoing community projects. One way of doing so is to review the Layer5 Repository Overview section of this handbook to get a better understanding of each project. This document will help you to understand the projects based on their technology domain(s). Be sure to star the community's repositories on GitHub!

    PointBe friendly and open-minded - We encourage you to be welcoming to new collaborators and those just getting started. Other contributors might not have the same degree of experience or background as you, but that doesn't mean they can't provide useful ideas.

    diff --git a/src/collections/handbook/faq/index.mdx b/src/collections/handbook/faq/index.mdx index a659e8705d554..9ec00e7a6f7df 100644 --- a/src/collections/handbook/faq/index.mdx +++ b/src/collections/handbook/faq/index.mdx @@ -32,7 +32,7 @@ A: To follow up on the community meetings, you can view and add the Twitter, Youtube, and Linkedin accounts. #### Q: I am not a coder, can I contribute too? -A: Some community members join to contribute to open source projects, others jump in to put those projects to use, some are here to help cultivate and steward our community, while others are here just to hangout and absorb. All members are most welcome. Be sure to introduce yourself in the Layer5 slack and let other community members get acquainted with you and vice-versa. +A: Some community members join to contribute to open source projects, others jump in to put those projects to use, some are here to help cultivate and steward our community, while others are here just to hangout and absorb. All members are most welcome. Be sure to introduce yourself in the Layer5 Slack and let other community members get acquainted with you and vice-versa. #### Q: How should I approach assigning and working on issues within the community? A: To ensure efficiency and positive collaboration, please follow these guidelines: From ab653914d1a75d7c8c6cdecfff9ed94caa59c9da Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 6 Dec 2025 19:51:59 +0530 Subject: [PATCH 30/43] gsod archived Signed-off-by: Rajesh-Nagarajan-11 --- .../mentorship-programs/programs-data.js | 42 +++++++++---------- .../Community/Handbook/Handbook.style.js | 6 +++ 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/collections/handbook/mentorship-programs/programs-data.js b/src/collections/handbook/mentorship-programs/programs-data.js index c2195570487b3..3b813e4c184d6 100644 --- a/src/collections/handbook/mentorship-programs/programs-data.js +++ b/src/collections/handbook/mentorship-programs/programs-data.js @@ -11,74 +11,74 @@ import GSOD from "../../../collections/programs/gsod/gsod.webp"; export const programs_data = [ { id: 1, - name: "Google Season of Docs", - description: - "Google Season of Docs provides support for open source projects to improve their documentation and allows professional technical writers to gain experience in open source. This is to raise awareness of open source, docs, and technical writing. Google season of docs started in 2019. Each year, layer5 submits a new project idea for technical writers to contribute to for a particular period. Also, stipends are awarded to the contributors.", - buttonLink: "/programs/gsod", - imageLink: GSOD, - imagePosition: "second", - }, - { - id: 2, name: "Google Summer of Code", description: "Google Summer of Code is a global program focused on bringing more student developers into open source software development. Students work with an open-source organization on a 10-week programming project during their break from school.Every Summer, Layer5 submits a new project idea for student developers to contribute to for a particular period. Also, stipends are awarded at the end of the program to the --contributors.The critical component of these projects is our Community. This community, which you will join as a participant in Google Summer of Code, improves the world of diverse cloud-native systems. Your contributions will affect people you've never met. The Layer5 community includes software engineers, researchers, students, artists, system administrators, operators, and web designers, all of whom will be happy to help you get started.We believe that all contributors should expect and be part of a safe and friendly environment for constructive contribution. We can more effectively and successfully compare and challenge different ideas to find the best solutions for advancement while building our community’s size, diversity, and strength.", buttonLink: "/programs/gsoc", imageLink: GSOC, - imagePosition: "first", + imagePosition: "second", }, { - id: 3, + id: 2, name: "Hacktoberfest", description: "Hacktoberfest is open to everyone in the global community. Whether you’re a developer, student learning to code, event host, or a company of any size, you can help drive the growth of open source and make positive contributions to an ever-growing community. All backgrounds and skill levels are encouraged to complete the challenge. Every year in October, Hacktoberfest is held. So far, Layer5 has been a participant organization with different projects and issues such as first-timers-only, help-wanted, and good-first-issues for open-source contributors. This is to help towards completing the Hacktoberfest challenge.", buttonLink: "/programs/hacktoberfest", imageLink: , - imagePosition: "second", + imagePosition: "first", }, { - id: 4, + id: 3, name: "Linux Foundation", description: "The Linux Foundation (Mentorship Programs) are designed to help developers with the necessary skills–many of whom are first-time open source contributors–experiment, learn, and contribute effectively to open source communities. Layer5, as an organization, has been participating in the Linux Foundation mentorship program since 2019. ", buttonLink: "/programs/lfx", imageLink: , - imagePosition: "first", + imagePosition: "second", }, { - id: 5, + id: 4, name: "MLH Fellowship Program", description: "The MLH Fellowship is a 12-week internship alternative for students interested in becoming software engineers. Instead of an internship at a single company, you'll contribute to the type of Open Source projects that every company depends on. The programs pair fun, educational curriculum with practical experience that you can put on your resume right away. It's collaborative, remote, and happens under the guidance of expert mentors.Layer5, as an organization, participates in the program by submitting a project idea for contributors to work on and also provides mentorship during the time phase given.", buttonLink: "/programs/mlh", imageLink: , - imagePosition: "second", + imagePosition: "first", }, { - id: 6, + id: 5, name: "CommunityBridge", description: "The Linux Foundation's CommunityBridge is building a healthy ecosystem around the open source software by funding projects, securing code, and connecting with talented developers. Layer5 has been participating in the CommunityBridge's mentorship program since 2019.", buttonLink: "/programs/communitybridge", imageLink: , - imagePosition: "first", + imagePosition: "second", }, { - id: 7, + id: 6, name: "Layer5", description: "At Layer5, we take our internships seriously. Interns are expected to work hard, learn much, and be recognized for doing so. Past interns have presented their projects at KubeCon, DockerCon, and similar technical conferences. Our community of contributors is the key ingredient to the success of every one of our projects. Interns engage as part of the community. Whether interning directly with Layer5 or through one of Layer5's partner programs, your contributions will affect people you've never met as the Layer5 projects are being broadly referenced and used in organizations large and small.", buttonLink: "/careers/internships/", imageLink: , - imagePosition: "second", + imagePosition: "first", }, { - id: 8, + id: 7, name: "She Code Africa Contributhon", description: "She Code Africa is a non-profit organization focused on celebrating and empowering young girls and women in tech across Africa.The She Code Africa Contributhon Program is a virtual open-source boot camp for 4 weeks where ladies get the opportunity to work with open source organizations on selected projects with dedicated mentorship and on completion of the program, a stipend of $500 is awarded. This program aims to create a more diverse, inclusive, and innovative culture within the African open source ecosystem by matching African women in technology with sponsors and mentor open source organizations to work on projects used by millions of people all over the world.Layer5 is participating in Contributhon as a Mentoring Organization. This program engages more with the open-source ecosystem in Africa and diversifies contributions. Most especially, we love making an impact. Various project ideas are submitted for the selected ladies to contribute during the one-month time phase.", buttonLink: "/programs/sca-contributhon", imageLink: , + imagePosition: "second", + }, + { + id: 8, + name: "Google Season of Docs (Archived)", + description: + "Google Season of Docs provides support for open source projects to improve their documentation and allows professional technical writers to gain experience in open source. This is to raise awareness of open source, docs, and technical writing. Google season of docs started in 2019. Each year, layer5 submits a new project idea for technical writers to contribute to for a particular period. Also, stipends are awarded to the contributors.", + buttonLink: "/programs/gsod", + imageLink: GSOD, imagePosition: "first", }, ]; diff --git a/src/sections/Community/Handbook/Handbook.style.js b/src/sections/Community/Handbook/Handbook.style.js index 2477b7364124a..b0d1e130b96b2 100644 --- a/src/sections/Community/Handbook/Handbook.style.js +++ b/src/sections/Community/Handbook/Handbook.style.js @@ -501,6 +501,12 @@ export const HandbookWrapper = styled.div` margin-right: auto; } + /* Make GSOD image grayscale for archived program */ + img[src*="gsod"] { + filter: grayscale(100%); + opacity: 0.7; + } + path { stroke: none; } From b820cf0a8e35099c7c3d89c83716c7c1a4ca2ff2 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sat, 6 Dec 2025 20:58:09 +0530 Subject: [PATCH 31/43] Updated Handbook TOC for improved mobile compatibility Signed-off-by: Rajesh-Nagarajan-11 --- .../Handbook/handbook-single/HandbookTOC.js | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index 237f0f24de37e..578978e7254a5 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -1,9 +1,13 @@ -import React from "react"; +import React, { useState } from "react"; import { Link } from "gatsby"; import TOCWrapper from "../../../../components/handbook-navigation/toc.style"; import { HiOutlineChevronLeft } from "@react-icons/all-files/hi/HiOutlineChevronLeft"; +import { IoMdClose } from "@react-icons/all-files/io/IoMdClose"; +import { IoIosArrowDropdownCircle } from "@react-icons/all-files/io/IoIosArrowDropdownCircle"; const HandbookTOC = ({ pages, currentSlug }) => { + const [expand, setExpand] = useState(false); + return (
    @@ -11,9 +15,26 @@ const HandbookTOC = ({ pages, currentSlug }) => {

    Table of Contents

    +
    + {expand ? ( + + ) : ( + + )} +
    -
      +
        {pages.map((page, index) => (
      • Date: Sun, 7 Dec 2025 11:05:04 +0530 Subject: [PATCH 32/43] fix reloading issue and kanvas twitter link and heading missing and format issues Signed-off-by: Rajesh-Nagarajan-11 --- .../handbook/connect-with-us/index.mdx | 2 +- src/collections/handbook/designer/index.mdx | 4 +--- .../index.mdx | 2 +- .../handbook-navigation/intra-page.js | 24 ++++++++++--------- 4 files changed, 16 insertions(+), 16 deletions(-) rename src/collections/handbook/{github -organization => github-organization}/index.mdx (98%) diff --git a/src/collections/handbook/connect-with-us/index.mdx b/src/collections/handbook/connect-with-us/index.mdx index 746ab1b3375cf..ceb61097cd8b1 100644 --- a/src/collections/handbook/connect-with-us/index.mdx +++ b/src/collections/handbook/connect-with-us/index.mdx @@ -97,7 +97,7 @@ Join us on our cloud native community's Disc Layer5 is dedicated to empowering engineers and supporting the open source community that create them. Learn more about Layer5 and connect with the community by following and engaging with us on our social media accounts.
        -

        twitter  @layer5@mesheryio and @kanvas-new

        +

        twitter  @layer5@mesheryio and @kanvas_new

        mail  Connect with our community managers for any inquiries or support!

        youtube  Subscribe to Layer5 YoutubeSubscribe to Meshery Youtube

        github  Discover our projects on GitHub

        diff --git a/src/collections/handbook/designer/index.mdx b/src/collections/handbook/designer/index.mdx index 4fe35afb5110f..f7e209339584f 100644 --- a/src/collections/handbook/designer/index.mdx +++ b/src/collections/handbook/designer/index.mdx @@ -11,9 +11,7 @@ import Button from "../../../reusecore/Button";

        UI/UX

        The UI/UX badge is given to community members who contribute towards creating or improving the visual design or user flow of various aspects such as websites, flyers, promotions, Meshery UI, and more. This recognition is awarded as an appreciation of their efforts in enhancing the user experience. The badge serves as a symbol of their expertise in UI/UX design and acknowledges their valuable contribution to the community. -We are always looking for ways to improve the user experience of our projects. If you have ideas for how to improve - - the user experience of any of our projects, please share them with us. +We are always looking for ways to improve the user experience of our projects. If you have ideas for how to improve the user experience of any of our projects, please share them with us. ## Where can you contribute? diff --git a/src/collections/handbook/github -organization/index.mdx b/src/collections/handbook/github-organization/index.mdx similarity index 98% rename from src/collections/handbook/github -organization/index.mdx rename to src/collections/handbook/github-organization/index.mdx index 6d30b59f96679..e50e252f7ca1a 100644 --- a/src/collections/handbook/github -organization/index.mdx +++ b/src/collections/handbook/github-organization/index.mdx @@ -1,5 +1,5 @@ --- -title: "GitHub Organization" +title: "GitHub Organization Membership" description: "Recognition of consistent contributors through GitHub organization invitations, outlining membership requirements, invitation process, and responsibilities." type: Handbook contents: diff --git a/src/components/handbook-navigation/intra-page.js b/src/components/handbook-navigation/intra-page.js index 81298378c8611..6a6135af8ee0c 100644 --- a/src/components/handbook-navigation/intra-page.js +++ b/src/components/handbook-navigation/intra-page.js @@ -1,5 +1,4 @@ import React, { useEffect, useState } from "react"; -import { Link } from "gatsby"; import styled from "styled-components"; const JoinCommunityWrapper = styled.div` @@ -54,11 +53,15 @@ const JoinCommunityWrapper = styled.div` `; function IntraPage({ contents }) { - const [intapath, setIntapath] = useState(null); - useEffect(() => { - const path = window.location.pathname; - setIntapath(path); - }, []); + const handleClick = (e, link) => { + e.preventDefault(); + const id = link.startsWith('#') ? link.substring(1) : link; + const element = document.getElementById(id); + + if (element) { + element.scrollIntoView({ behavior: "smooth" }); + } + }; return ( @@ -66,13 +69,12 @@ function IntraPage({ contents }) {
          {contents.map((x) => (
        • - handleClick(e, x.link)} > {x.text} - +
        • ))}
        From 3a4546f1b5be697850c3a1a3132ec29efe426670 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 11:06:27 +0530 Subject: [PATCH 33/43] eslint fix Signed-off-by: Rajesh-Nagarajan-11 --- src/components/handbook-navigation/intra-page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/handbook-navigation/intra-page.js b/src/components/handbook-navigation/intra-page.js index 6a6135af8ee0c..d4fde401a885c 100644 --- a/src/components/handbook-navigation/intra-page.js +++ b/src/components/handbook-navigation/intra-page.js @@ -55,7 +55,7 @@ const JoinCommunityWrapper = styled.div` function IntraPage({ contents }) { const handleClick = (e, link) => { e.preventDefault(); - const id = link.startsWith('#') ? link.substring(1) : link; + const id = link.startsWith("#") ? link.substring(1) : link; const element = document.getElementById(id); if (element) { From 37e3432b1318cfddbce98d3bddb8eb51e676850b Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 11:10:44 +0530 Subject: [PATCH 34/43] removed unused css Signed-off-by: Rajesh-Nagarajan-11 --- src/components/handbook-navigation/intra-page.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/components/handbook-navigation/intra-page.js b/src/components/handbook-navigation/intra-page.js index d4fde401a885c..5f4434238a56f 100644 --- a/src/components/handbook-navigation/intra-page.js +++ b/src/components/handbook-navigation/intra-page.js @@ -17,15 +17,6 @@ const JoinCommunityWrapper = styled.div` display: flex; flex-direction: column; overflow: hidden; - - .list { - color: #000000; - } - .active { - font-weight: 5000; - color: #000000; - } - ul { list-style: none; top: 3rem; @@ -46,10 +37,6 @@ const JoinCommunityWrapper = styled.div` visibility: hidden; } } - - .learn { - width: 10rem; - } `; function IntraPage({ contents }) { From 24e28786e24d0380eacd8a27c5eb086571c718ed Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 11:54:40 +0530 Subject: [PATCH 35/43] fix refresh by remove .html in url Signed-off-by: Rajesh-Nagarajan-11 --- .../Community/Handbook/handbook-single/HandbookTOC.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index 578978e7254a5..347aa3b0dc4f5 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -8,6 +8,11 @@ import { IoIosArrowDropdownCircle } from "@react-icons/all-files/io/IoIosArrowDr const HandbookTOC = ({ pages, currentSlug }) => { const [expand, setExpand] = useState(false); + // Helper function to ensure clean URLs without .html extension + const getCleanSlug = (slug) => { + return slug?.replace(/\.html$/, "") || slug; + }; + return (
        @@ -38,7 +43,7 @@ const HandbookTOC = ({ pages, currentSlug }) => { {pages.map((page, index) => (
      • {page.frontmatter.title} From 93d5f5a67e83647b31f28b8326e29e84832d7386 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 12:13:24 +0530 Subject: [PATCH 36/43] Revert "fix refresh by remove .html in url" This reverts commit 24e28786e24d0380eacd8a27c5eb086571c718ed. Signed-off-by: Rajesh-Nagarajan-11 --- .../Community/Handbook/handbook-single/HandbookTOC.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index 347aa3b0dc4f5..578978e7254a5 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -8,11 +8,6 @@ import { IoIosArrowDropdownCircle } from "@react-icons/all-files/io/IoIosArrowDr const HandbookTOC = ({ pages, currentSlug }) => { const [expand, setExpand] = useState(false); - // Helper function to ensure clean URLs without .html extension - const getCleanSlug = (slug) => { - return slug?.replace(/\.html$/, "") || slug; - }; - return (
        @@ -43,7 +38,7 @@ const HandbookTOC = ({ pages, currentSlug }) => { {pages.map((page, index) => (
      • {page.frontmatter.title} From d415a347ff129c158b6b385ff1759cdd3088c0ae Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 12:41:13 +0530 Subject: [PATCH 37/43] remove .html slug from gatbsy.node Signed-off-by: Rajesh-Nagarajan-11 --- gatsby-node.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gatsby-node.js b/gatsby-node.js index 2ad2b6cb018d4..f7f407da4ddd1 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -469,11 +469,16 @@ exports.createPages = async ({ actions, graphql, reporter }) => { } handbook.forEach((page) => { + let finalSlug = page.fields.slug; + if (process.env.NODE_ENV === "production") { + finalSlug = finalSlug.replace(/\.html$/, ""); + } + envCreatePage({ - path: page.fields.slug, + path: finalSlug, component: `${HandbookTemplate}?__contentFilePath=${page.internal.contentFilePath}`, context: { - slug: page.fields.slug, + slug: finalSlug, }, }); }); From ab1736a8e448846f85ade6904f3dbbce96296bc8 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 13:03:18 +0530 Subject: [PATCH 38/43] added redirect logic Signed-off-by: Rajesh-Nagarajan-11 --- gatsby-node.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gatsby-node.js b/gatsby-node.js index f7f407da4ddd1..db4a9f218ca4c 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -470,6 +470,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { handbook.forEach((page) => { let finalSlug = page.fields.slug; + // Strip `.html` for production builds so client-side router matches clean paths if (process.env.NODE_ENV === "production") { finalSlug = finalSlug.replace(/\.html$/, ""); } @@ -481,6 +482,17 @@ exports.createPages = async ({ actions, graphql, reporter }) => { slug: finalSlug, }, }); + + // If the source slug contained .html, create a redirect so .html URLs still resolve + if (finalSlug !== page.fields.slug) { + createRedirect({ + fromPath: page.fields.slug, + toPath: finalSlug, + isPermanent: true, + redirectInBrowser: true, + force: true, + }); + } }); From 4487b86217aed7a71f3ab620f49112d41c58cbcb Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 13:47:28 +0530 Subject: [PATCH 39/43] revert gatby node changes and fix Signed-off-by: Rajesh-Nagarajan-11 --- gatsby-node.js | 21 ++--------------- .../Handbook/handbook-single/HandbookTOC.js | 23 +++++++++++-------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/gatsby-node.js b/gatsby-node.js index db4a9f218ca4c..2ad2b6cb018d4 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -469,30 +469,13 @@ exports.createPages = async ({ actions, graphql, reporter }) => { } handbook.forEach((page) => { - let finalSlug = page.fields.slug; - // Strip `.html` for production builds so client-side router matches clean paths - if (process.env.NODE_ENV === "production") { - finalSlug = finalSlug.replace(/\.html$/, ""); - } - envCreatePage({ - path: finalSlug, + path: page.fields.slug, component: `${HandbookTemplate}?__contentFilePath=${page.internal.contentFilePath}`, context: { - slug: finalSlug, + slug: page.fields.slug, }, }); - - // If the source slug contained .html, create a redirect so .html URLs still resolve - if (finalSlug !== page.fields.slug) { - createRedirect({ - fromPath: page.fields.slug, - toPath: finalSlug, - isPermanent: true, - redirectInBrowser: true, - force: true, - }); - } }); diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index 578978e7254a5..d76623b552ea3 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -35,16 +35,19 @@ const HandbookTOC = ({ pages, currentSlug }) => {
      - {pages.map((page, index) => ( -
    • - - {page.frontmatter.title} - -
    • - ))} + {pages.map((page, index) => { + const slug = `${page.fields.slug}.html`; + return ( +
    • + + {page.frontmatter.title} + +
    • + ); + })}
    From fe18817dbacd445371956b8fe3f5fa703e759dce Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 13:56:42 +0530 Subject: [PATCH 40/43] Revert "revert gatby node changes and fix" This reverts commit 4487b86217aed7a71f3ab620f49112d41c58cbcb. Signed-off-by: Rajesh-Nagarajan-11 --- gatsby-node.js | 21 +++++++++++++++-- .../Handbook/handbook-single/HandbookTOC.js | 23 ++++++++----------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/gatsby-node.js b/gatsby-node.js index 2ad2b6cb018d4..db4a9f218ca4c 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -469,13 +469,30 @@ exports.createPages = async ({ actions, graphql, reporter }) => { } handbook.forEach((page) => { + let finalSlug = page.fields.slug; + // Strip `.html` for production builds so client-side router matches clean paths + if (process.env.NODE_ENV === "production") { + finalSlug = finalSlug.replace(/\.html$/, ""); + } + envCreatePage({ - path: page.fields.slug, + path: finalSlug, component: `${HandbookTemplate}?__contentFilePath=${page.internal.contentFilePath}`, context: { - slug: page.fields.slug, + slug: finalSlug, }, }); + + // If the source slug contained .html, create a redirect so .html URLs still resolve + if (finalSlug !== page.fields.slug) { + createRedirect({ + fromPath: page.fields.slug, + toPath: finalSlug, + isPermanent: true, + redirectInBrowser: true, + force: true, + }); + } }); diff --git a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js index d76623b552ea3..578978e7254a5 100644 --- a/src/sections/Community/Handbook/handbook-single/HandbookTOC.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -35,19 +35,16 @@ const HandbookTOC = ({ pages, currentSlug }) => {
      - {pages.map((page, index) => { - const slug = `${page.fields.slug}.html`; - return ( -
    • - - {page.frontmatter.title} - -
    • - ); - })} + {pages.map((page, index) => ( +
    • + + {page.frontmatter.title} + +
    • + ))}
    From 4d29806b4865cdb697ea700bc2825c001ba45d71 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 14:05:59 +0530 Subject: [PATCH 41/43] skip .html for handbook pages Signed-off-by: Rajesh-Nagarajan-11 --- gatsby-node.js | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/gatsby-node.js b/gatsby-node.js index db4a9f218ca4c..ff561b7897cec 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -93,10 +93,10 @@ exports.createPages = async ({ actions, graphql, reporter }) => { const envCreatePage = (props) => { const pageConfig = { ...props }; pageConfig.slices = { ...DEFAULT_SLICES, ...(pageConfig.slices || {}) }; - + if (process.env.CI === "true") { const { path, matchPath, ...rest } = pageConfig; - + const isHandbookPage = path.startsWith("/community/handbook/"); createRedirect({ fromPath: `/${path}/`, toPath: `/${path}`, @@ -105,7 +105,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { }); return createPage({ - path: `${path}.html`, + path: isHandbookPage ? path : `${path}.html`, matchPath: matchPath || path, ...rest, }); @@ -469,30 +469,13 @@ exports.createPages = async ({ actions, graphql, reporter }) => { } handbook.forEach((page) => { - let finalSlug = page.fields.slug; - // Strip `.html` for production builds so client-side router matches clean paths - if (process.env.NODE_ENV === "production") { - finalSlug = finalSlug.replace(/\.html$/, ""); - } - envCreatePage({ - path: finalSlug, + path: page.fields.slug, component: `${HandbookTemplate}?__contentFilePath=${page.internal.contentFilePath}`, context: { - slug: finalSlug, + slug: page.fields.slug, }, }); - - // If the source slug contained .html, create a redirect so .html URLs still resolve - if (finalSlug !== page.fields.slug) { - createRedirect({ - fromPath: page.fields.slug, - toPath: finalSlug, - isPermanent: true, - redirectInBrowser: true, - force: true, - }); - } }); From fc93e7767a64036bda158483478633cd4e0e036c Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Sun, 7 Dec 2025 14:07:24 +0530 Subject: [PATCH 42/43] eslint fix Signed-off-by: Rajesh-Nagarajan-11 --- gatsby-node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gatsby-node.js b/gatsby-node.js index ff561b7897cec..193617f768cd0 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -93,7 +93,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { const envCreatePage = (props) => { const pageConfig = { ...props }; pageConfig.slices = { ...DEFAULT_SLICES, ...(pageConfig.slices || {}) }; - + if (process.env.CI === "true") { const { path, matchPath, ...rest } = pageConfig; const isHandbookPage = path.startsWith("/community/handbook/"); From bba33a83b8f04c91220ed744c8cc618626fd4b75 Mon Sep 17 00:00:00 2001 From: Rajesh-Nagarajan-11 Date: Mon, 8 Dec 2025 21:20:39 +0530 Subject: [PATCH 43/43] fix Signed-off-by: Rajesh-Nagarajan-11 --- gatsby-node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gatsby-node.js b/gatsby-node.js index 3597ca1d4580b..5907338bfab55 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -60,7 +60,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { const envCreatePage = (props) => { if (process.env.CI === "true") { - const { path, matchPath, ...rest } = pageConfig; + const { path, matchPath, ...rest } = props; const isHandbookPage = path.startsWith("/community/handbook/"); createRedirect({ fromPath: `/${path}/`,