diff --git a/gatsby-node.js b/gatsby-node.js index 5fb7db07e8ce5..5907338bfab55 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -61,7 +61,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { const envCreatePage = (props) => { if (process.env.CI === "true") { const { path, matchPath, ...rest } = props; - + const isHandbookPage = path.startsWith("/community/handbook/"); createRedirect({ fromPath: `/${path}/`, toPath: `/${path}`, @@ -70,7 +70,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { }); return createPage({ - path: `${path}.html`, + path: isHandbookPage ? path : `${path}.html`, matchPath: matchPath || path, ...rest, }); @@ -137,6 +137,9 @@ exports.createPages = async ({ actions, graphql, reporter }) => { ` : ""; + const HandbookTemplate = path.resolve("src/templates/handbook-template.js"); + + const res = await graphql(` { allPosts: allMdx(filter: { frontmatter: { published: { eq: true } } }) { @@ -154,6 +157,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 }) => { const members = filterByCollection("members"); const integrations = filterByCollection("integrations"); + const handbook = res.data.handbookPages.nodes; + + const singleWorkshop = res.data.singleWorkshop.nodes; const labs = res.data.labs.nodes; @@ -414,6 +433,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}`, @@ -670,6 +700,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)}`; diff --git a/src/collections/handbook/about/index.mdx b/src/collections/handbook/about/index.mdx new file mode 100644 index 0000000000000..cff11d34aab39 --- /dev/null +++ b/src/collections/handbook/about/index.mdx @@ -0,0 +1,118 @@ +--- +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 longArrow from "../../../sections/Community/Newcomers-guide/long-arrow.svg"; +import { useState } from "react"; + + +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/sections/Community/Handbook/images/bullet.svg b/src/collections/handbook/code-of-conduct/bullet.svg similarity index 100% rename from src/sections/Community/Handbook/images/bullet.svg rename to src/collections/handbook/code-of-conduct/bullet.svg 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..ca181e4aa11a4 --- /dev/null +++ b/src/collections/handbook/code-of-conduct/index.mdx @@ -0,0 +1,31 @@ +--- +title: "Code of Conduct" +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 +--- + +import Point from "./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..41526df368cdf --- /dev/null +++ b/src/collections/handbook/community-roles/index.mdx @@ -0,0 +1,225 @@ +--- +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"; + + + +

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 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 +- 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/index.mdx b/src/collections/handbook/community/index.mdx new file mode 100644 index 0000000000000..554d6fa774a24 --- /dev/null +++ b/src/collections/handbook/community/index.mdx @@ -0,0 +1,40 @@ +--- +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: + - id: 0 + link: "#Community Guidelines" + text: "Guidelines" + - id: 1 + link: "#Resources" + text: "Resources" +--- + +import { Link } from "gatsby"; +import Point from "../code-of-conduct/bullet.svg"; + + + +

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: + +

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.

+ +
+

Resources

+

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 new file mode 100644 index 0000000000000..ceb61097cd8b1 --- /dev/null +++ b/src/collections/handbook/connect-with-us/index.mdx @@ -0,0 +1,108 @@ +--- +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"; +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"; +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"; + + +

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. + +
+

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/contribution/compare-and-pr.webp b/src/collections/handbook/contribution/compare-and-pr.webp new file mode 100644 index 0000000000000..71c559e12c85d Binary files /dev/null and b/src/collections/handbook/contribution/compare-and-pr.webp differ diff --git a/src/collections/handbook/contribution/create-pr.webp b/src/collections/handbook/contribution/create-pr.webp new file mode 100644 index 0000000000000..f73848dc8f05d Binary files /dev/null and b/src/collections/handbook/contribution/create-pr.webp differ 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 0000000000000..9f30e64510f86 Binary files /dev/null and b/src/collections/handbook/contribution/git-signoff-vscode.webp differ diff --git a/src/collections/handbook/contribution/index.mdx b/src/collections/handbook/contribution/index.mdx new file mode 100644 index 0000000000000..9022aa0dc4f4c --- /dev/null +++ b/src/collections/handbook/contribution/index.mdx @@ -0,0 +1,169 @@ +--- +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 signoffImg from "./git-signoff-vscode.webp"; +import compareImg from "./compare-and-pr.webp"; +import createPrImg from "./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: + +Git signoff configuration in VS Code + + +

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. +
+
+ 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 +
+
+ +## 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/designer/index.mdx b/src/collections/handbook/designer/index.mdx new file mode 100644 index 0000000000000..f7e209339584f --- /dev/null +++ b/src/collections/handbook/designer/index.mdx @@ -0,0 +1,39 @@ +--- +title: "Design with Layer5" +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..9ec00e7a6f7df --- /dev/null +++ b/src/collections/handbook/faq/index.mdx @@ -0,0 +1,72 @@ +--- +title: "FAQs" +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 +--- + +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-organization/index.mdx b/src/collections/handbook/github-organization/index.mdx new file mode 100644 index 0000000000000..e50e252f7ca1a --- /dev/null +++ b/src/collections/handbook/github-organization/index.mdx @@ -0,0 +1,70 @@ +--- +title: "GitHub Organization Membership" +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"; + + +

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/github-process/index.mdx b/src/collections/handbook/github-process/index.mdx new file mode 100644 index 0000000000000..4edc571d444e6 --- /dev/null +++ b/src/collections/handbook/github-process/index.mdx @@ -0,0 +1,283 @@ +--- +title: "GitHub Process" +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 +--- + +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). + +
+ + + + + + + + + + + + + +
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](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: + +`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](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: +- Triage bot +- Stale bot +- Welcome bot +- DCO bot + +### Actions +- Labeler.yml +- label-commenter.yml + +Good resource - [https://github.com/sdras/awesome-actions#pull-requests](https://github.com/sdras/awesome-actions#pull-requests) diff --git a/src/collections/handbook/learning/index.mdx b/src/collections/handbook/learning/index.mdx new file mode 100644 index 0000000000000..7e84b587b1556 --- /dev/null +++ b/src/collections/handbook/learning/index.mdx @@ -0,0 +1,53 @@ +--- +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"; + + +

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..b2b0160f4033e --- /dev/null +++ b/src/collections/handbook/mentorship-programs/index.mdx @@ -0,0 +1,37 @@ +--- +title: "Mentorship Programs" +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 +--- + +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/sections/Community/Handbook/programs-data.js b/src/collections/handbook/mentorship-programs/programs-data.js similarity index 99% rename from src/sections/Community/Handbook/programs-data.js rename to src/collections/handbook/mentorship-programs/programs-data.js index c2195570487b3..3b813e4c184d6 100644 --- a/src/sections/Community/Handbook/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/collections/handbook/projects/index.mdx b/src/collections/handbook/projects/index.mdx new file mode 100644 index 0000000000000..35a1105fa0535 --- /dev/null +++ b/src/collections/handbook/projects/index.mdx @@ -0,0 +1,74 @@ +--- +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 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"; + + +

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/sections/Community/Handbook/BadgeRow.js b/src/collections/handbook/recognition/BadgeRow.js similarity index 100% rename from src/sections/Community/Handbook/BadgeRow.js rename to src/collections/handbook/recognition/BadgeRow.js diff --git a/src/sections/Community/Handbook/badge-item.js b/src/collections/handbook/recognition/badge-item.js similarity index 100% rename from src/sections/Community/Handbook/badge-item.js rename to src/collections/handbook/recognition/badge-item.js diff --git a/src/sections/Community/Handbook/badges-data.js b/src/collections/handbook/recognition/badges-data.js similarity index 100% rename from src/sections/Community/Handbook/badges-data.js rename to src/collections/handbook/recognition/badges-data.js diff --git a/src/collections/handbook/recognition/index.mdx b/src/collections/handbook/recognition/index.mdx new file mode 100644 index 0000000000000..bc789ed9abc55 --- /dev/null +++ b/src/collections/handbook/recognition/index.mdx @@ -0,0 +1,171 @@ +--- +title: "Recognition" +description: "Layer5 readily recognizes and publicly appreciates its community members." +type: Handbook +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" +--- + +import { Container } from "../../../reusecore/Layout"; +import { Link } from "gatsby"; +import BadgeRow from "./BadgeRow"; +import { activityBadges, projectBadges, specialBadges } from "./badges-data"; + + +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..ba531e8d4f03a --- /dev/null +++ b/src/collections/handbook/repository-overview/index.mdx @@ -0,0 +1,174 @@ +--- +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"; +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 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 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: + +
    +
  • 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.
  • +
+ +
+ 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/sections/Community/Handbook/repo-data.js b/src/collections/handbook/repository-overview/repo-data.js similarity index 100% rename from src/sections/Community/Handbook/repo-data.js rename to src/collections/handbook/repository-overview/repo-data.js diff --git a/src/collections/handbook/security-vulnerabilities/index.mdx b/src/collections/handbook/security-vulnerabilities/index.mdx new file mode 100644 index 0000000000000..1d2187ff7a162 --- /dev/null +++ b/src/collections/handbook/security-vulnerabilities/index.mdx @@ -0,0 +1,103 @@ +--- +title: "Security Vulnerabilities" +description: "We are very grateful to the security researchers and users that report back Meshery security vulnerabilities. We investigate every report thoroughly." +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: + +
    +
  • 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 + +### 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/sections/Community/Handbook/writing-program/content-form.js b/src/collections/handbook/writing-program/content-form.js similarity index 97% rename from src/sections/Community/Handbook/writing-program/content-form.js rename to src/collections/handbook/writing-program/content-form.js index 3bbe5a82b9518..c3905fb2ebd13 100644 --- a/src/sections/Community/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/sections/Community/Handbook/writing-program/content-form.style.js b/src/collections/handbook/writing-program/content-form.style.js similarity index 100% rename from src/sections/Community/Handbook/writing-program/content-form.style.js rename to src/collections/handbook/writing-program/content-form.style.js diff --git a/src/sections/Community/Handbook/images/blogs.svg b/src/collections/handbook/writing-program/images/blogs.svg similarity index 100% rename from src/sections/Community/Handbook/images/blogs.svg rename to src/collections/handbook/writing-program/images/blogs.svg diff --git a/src/sections/Community/Handbook/images/event.svg b/src/collections/handbook/writing-program/images/event.svg similarity index 100% rename from src/sections/Community/Handbook/images/event.svg rename to src/collections/handbook/writing-program/images/event.svg diff --git a/src/sections/Community/Handbook/images/resources.svg b/src/collections/handbook/writing-program/images/resources.svg similarity index 100% rename from src/sections/Community/Handbook/images/resources.svg rename to src/collections/handbook/writing-program/images/resources.svg diff --git a/src/sections/Community/Handbook/images/talks.svg b/src/collections/handbook/writing-program/images/talks.svg similarity index 100% rename from src/sections/Community/Handbook/images/talks.svg rename to src/collections/handbook/writing-program/images/talks.svg diff --git a/src/sections/Community/Handbook/images/videos.svg b/src/collections/handbook/writing-program/images/videos.svg similarity index 100% rename from src/sections/Community/Handbook/images/videos.svg rename to src/collections/handbook/writing-program/images/videos.svg diff --git a/src/sections/Community/Handbook/images/workshop.svg b/src/collections/handbook/writing-program/images/workshop.svg similarity index 100% rename from src/sections/Community/Handbook/images/workshop.svg rename to src/collections/handbook/writing-program/images/workshop.svg diff --git a/src/collections/handbook/writing-program/index.mdx b/src/collections/handbook/writing-program/index.mdx new file mode 100644 index 0000000000000..f1979c1e41d10 --- /dev/null +++ b/src/collections/handbook/writing-program/index.mdx @@ -0,0 +1,242 @@ +--- +title: "Writing Program" +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 +--- + +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. +
+
+ +
+
+ +## 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 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.

+
+
+ + + +## 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](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 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 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/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/components/handbook-navigation/intra-page.js b/src/components/handbook-navigation/intra-page.js index 81298378c8611..5f4434238a56f 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` @@ -18,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; @@ -47,18 +37,18 @@ const JoinCommunityWrapper = styled.div` visibility: hidden; } } - - .learn { - width: 10rem; - } `; 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 +56,12 @@ function IntraPage({ contents }) {
    {contents.map((x) => (
  • - handleClick(e, x.link)} > {x.text} - +
  • ))}
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/BookComponent/BookComponent.js b/src/sections/Community/Handbook/BookComponent/BookComponent.js index 1a5aa0aeb56e7..39827d91a063c 100644 --- a/src/sections/Community/Handbook/BookComponent/BookComponent.js +++ b/src/sections/Community/Handbook/BookComponent/BookComponent.js @@ -27,4 +27,4 @@ const BookComponent = () => { ); }; -export default BookComponent; +export default BookComponent; \ No newline at end of file diff --git a/src/sections/Community/Handbook/Handbook.style.js b/src/sections/Community/Handbook/Handbook.style.js index 5e37978e2dd82..b0d1e130b96b2 100644 --- a/src/sections/Community/Handbook/Handbook.style.js +++ b/src/sections/Community/Handbook/Handbook.style.js @@ -41,7 +41,7 @@ export const HandbookWrapper = styled.div` flex-direction: row; align-items: flex-start; @media (min-width: 751px){ - margin-top: -54rem; + margin-top: -57rem; position: relative; margin-left: 20rem; padding: 2rem 3rem; @@ -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,112 @@ 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; + } + + /* Make GSOD image grayscale for archived program */ + img[src*="gsod"] { + filter: grayscale(100%); + opacity: 0.7; + } + + 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 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/handbook-single/HandbookPagination.js b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js new file mode 100644 index 0000000000000..163d8a4b1d4e4 --- /dev/null +++ b/src/sections/Community/Handbook/handbook-single/HandbookPagination.js @@ -0,0 +1,27 @@ +import React from "react"; +import { Link } from "gatsby"; +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); + const prevPage = currentIndex > 0 ? pages[currentIndex - 1] : null; + const nextPage = currentIndex < pages.length - 1 ? pages[currentIndex + 1] : null; + + return ( + + {prevPage && ( + + )} + {nextPage && ( + + )} + + ); +}; + +export default HandbookPagination; diff --git a/src/components/handbook-navigation/index.js b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js similarity index 75% rename from src/components/handbook-navigation/index.js rename to src/sections/Community/Handbook/handbook-single/HandbookTOC.js index 82c1563d3c843..578978e7254a5 100644 --- a/src/components/handbook-navigation/index.js +++ b/src/sections/Community/Handbook/handbook-single/HandbookTOC.js @@ -1,14 +1,13 @@ import React, { useState } from "react"; -import { HiOutlineChevronLeft } from "@react-icons/all-files/hi/HiOutlineChevronLeft"; 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"; -import TOCWrapper from "./toc.style"; -import { content } from "./content"; - -const TOC = () => { +const HandbookTOC = ({ pages, currentSlug }) => { const [expand, setExpand] = useState(false); + return (
@@ -36,15 +35,13 @@ const TOC = () => {
    - {content.map((x) => ( -
  • + {pages.map((page, index) => ( +
  • - {x.text} + {page.frontmatter.title}
  • ))} @@ -54,4 +51,4 @@ const TOC = () => { ); }; -export default TOC; +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..ee60e2484722e --- /dev/null +++ b/src/sections/Community/Handbook/handbook-single/index.js @@ -0,0 +1,35 @@ +import React from "react"; +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 ( + +
    +

    {mdx.frontmatter.title}

    +
    + +
    + +
    + {children} +
    + +
    + {contents.length > 0 && } +
    +
    + ); +}; + +export default HandbookSingle; 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) => ( + + ))}
    ); 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/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/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/Meshmates/index.js b/src/sections/Community/Meshmates/index.js index 7f4e13689fd02..308cc321269ad 100644 --- a/src/sections/Community/Meshmates/index.js +++ b/src/sections/Community/Meshmates/index.js @@ -198,4 +198,4 @@ const Meshmates = () => { ); }; -export default Meshmates; +export default Meshmates; \ No newline at end of file diff --git a/src/templates/handbook-template.js b/src/templates/handbook-template.js new file mode 100644 index 0000000000000..adb25ef366476 --- /dev/null +++ b/src/templates/handbook-template.js @@ -0,0 +1,59 @@ +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 + contents { + id + link + text + } + } + 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 ( + + ); +};