(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{124:function(e,t,r){"use strict";r.r(t),r.d(t,"frontMatter",(function(){return i})),r.d(t,"metadata",(function(){return c})),r.d(t,"toc",(function(){return s})),r.d(t,"default",(function(){return u}));var a=r(3),n=r(7),o=(r(0),r(144)),i={title:"Apache Submarine Community"},c={unversionedId:"community/README",id:"community/README",isDocsHomePage:!1,title:"Apache Submarine Community",description:"\x3c!--",source:"@site/docs/community/README.md",slug:"/community/README",permalink:"/docs/community/README",editUrl:"https://github.com/apache/submarine/edit/master/website/docs/community/README.md",version:"current",sidebar:"docs",previous:{title:"How to Run Frontend Integration Test",permalink:"/docs/devDocs/IntegrationTestE2E"},next:{title:"Guide for Apache Submarine Committers",permalink:"/docs/community/HowToCommit"}},s=[{value:"Communicating",id:"communicating",children:[]},{value:"Your First Contribution",id:"your-first-contribution",children:[]},{value:"How Do I Become a Committer?",id:"how-do-i-become-a-committer",children:[]},{value:"How to commit",id:"how-to-commit",children:[]},{value:"Communication",id:"communication",children:[]},{value:"Mailing lists",id:"mailing-lists",children:[]},{value:"License",id:"license",children:[]}],m={toc:s};function u(e){var t=e.components,r=Object(n.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},m,r,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"Welcome to the Apache Submarine Community! The main objective is to help members of the Submarine community who share similar interests to learn from and collaborate with each other."),Object(o.b)("p",null,"Your journey of becoming a contributor and committer starts from here: improving docs, improving code, giving talks, organizing meetups, etc."),Object(o.b)("h2",{id:"communicating"},"Communicating"),Object(o.b)("p",null,"You can reach out to the community members via any one of the following ways:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("p",{parentName:"li"},"Slack Developer: ",Object(o.b)("a",{parentName:"p",href:"https://the-asf.slack.com/submarine-dev/"},"https://the-asf.slack.com/submarine-dev/"))),Object(o.b)("li",{parentName:"ul"},Object(o.b)("p",{parentName:"li"},"Slack User: ",Object(o.b)("a",{parentName:"p",href:"https://the-asf.slack.com/submarine-user/"},"https://the-asf.slack.com/submarine-user/"))),Object(o.b)("li",{parentName:"ul"},Object(o.b)("p",{parentName:"li"},"Zoom: ",Object(o.b)("a",{parentName:"p",href:"https://cloudera.zoom.us/j/880548968"},"https://cloudera.zoom.us/j/880548968"))),Object(o.b)("li",{parentName:"ul"},Object(o.b)("p",{parentName:"li"},"Sync Up: ",Object(o.b)("a",{parentName:"p",href:"https://docs.google.com/document/d/16pUO3TP4SxSeLduG817GhVAjtiph9HYpRHo_JgduDvw/edit"},"https://docs.google.com/document/d/16pUO3TP4SxSeLduG817GhVAjtiph9HYpRHo_JgduDvw/edit")))),Object(o.b)("h2",{id:"your-first-contribution"},"Your First Contribution"),Object(o.b)("p",null,"You can start by finding an existing issue with the ",Object(o.b)("a",{parentName:"p",href:"https://issues.apache.org/jira/projects/SUBMARINE/issues/SUBMARINE?filter=allopenissues"},"https://issues.apache.org/jira/projects/SUBMARINE/issues/SUBMARINE?filter=allopenissues")," label. These issues are well suited for new contributors."),Object(o.b)("p",null,"If a PR (Pull Request) submitted to the ",Object(o.b)("a",{parentName:"p",href:"https://github.com/apache/submarine"},"Submarine Github")," projects by you is approved and merged, then you become a Submarine Contributor."),Object(o.b)("p",null,"If you want to work on a new idea of relatively small scope:"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},Object(o.b)("p",{parentName:"li"},"Submit an issue describing your proposed change to the repo in question.")),Object(o.b)("li",{parentName:"ol"},Object(o.b)("p",{parentName:"li"},"The repo owners will respond to your issue promptly.")),Object(o.b)("li",{parentName:"ol"},Object(o.b)("p",{parentName:"li"},"Submit a ",Object(o.b)("a",{parentName:"p",href:"https://github.com/apache/submarine"},"pull request of Submarine")," containing a tested change."))),Object(o.b)("p",null,"Contributions are welcomed and greatly appreciated. See ",Object(o.b)("a",{parentName:"p",href:"contributing"},"CONTRIBUTING")," for details on submitting patches and the contribution workflow."),Object(o.b)("h2",{id:"how-do-i-become-a-committer"},"How Do I Become a Committer?"),Object(o.b)("p",null,"First of all, you need to get involved and be a Contributor."),Object(o.b)("p",null,"Based on your track-record as a contributor, Per Apache code, PMCs vote on committership, may invite you to be a committer (after we've called a vote). When that happens, if you accept, the following process kicks into place..."),Object(o.b)("p",null,"Note that becoming a committer is not just about submitting some patches; it\u2018s also about helping out on the development and user ",Object(o.b)("a",{parentName:"p",href:"https://the-asf.slack.com/submarine-user/"},"Slack User"),", helping with documentation and the issues."),Object(o.b)("h2",{id:"how-to-commit"},"How to commit"),Object(o.b)("p",null,"See ",Object(o.b)("a",{parentName:"p",href:"/docs/community/HowToCommit"},"How to commit")," for helper doc for Submarine committers."),Object(o.b)("h2",{id:"communication"},"Communication"),Object(o.b)("p",null,"Communication within the Submarine community abides by ",Object(o.b)("a",{parentName:"p",href:"https://www.apache.org/foundation/policies/conduct.html"},"Apache\u2019s Code of Conduct"),"."),Object(o.b)("h2",{id:"mailing-lists"},"Mailing lists"),Object(o.b)("p",null,"Get help using Apache Submarine or contribute to the project on our mailing lists:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://lists.apache.org/list.html?users@submarine.apache.org"},"Users")," : ",Object(o.b)("a",{parentName:"li",href:"mailto:users-subscribe@submarine.apache.org"},"subscribe"),", ",Object(o.b)("a",{parentName:"li",href:"mailto:users-unsubscribe@submarine.apache.org"},"unsubscribe"),", ",Object(o.b)("a",{parentName:"li",href:"https://lists.apache.org/list.html?users@submarine.apache.org"},"archives"),"\nfor usage questions, help, and announcements."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://lists.apache.org/list.html?dev@submarine.apache.org"},"Dev")," : ",Object(o.b)("a",{parentName:"li",href:"mailto:dev-subscribe@submarine.apache.org"},"subscribe"),", ",Object(o.b)("a",{parentName:"li",href:"mailto:dev-unsubscribe@submarine.apache.org"},"unsubscribe"),", ",Object(o.b)("a",{parentName:"li",href:"https://lists.apache.org/list.html?dev@submarine.apache.org"},"archives"),"\nfor people wanting to contribute to the project."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://lists.apache.org/list.html?commits@submarine.apache.org"},"Commits")," : ",Object(o.b)("a",{parentName:"li",href:"mailto:commits-subscribe@submarine.apache.org"},"subscribe"),", ",Object(o.b)("a",{parentName:"li",href:"mailto:commits-unsubscribe@submarine.apache.org"},"unsubscribe"),", ",Object(o.b)("a",{parentName:"li",href:"https://lists.apache.org/list.html?commits@submarine.apache.org"},"archives"),"\nfor commit messages and patches.")),Object(o.b)("h2",{id:"license"},"License"),Object(o.b)("p",null,"Submarine source code is under the Apache 2.0 license. See the ",Object(o.b)("a",{parentName:"p",href:"https://github.com/apache/submarine/blob/master/LICENSE"},"LICENSE")," file for details."))}u.isMDXComponent=!0},144:function(e,t,r){"use strict";r.d(t,"a",(function(){return b})),r.d(t,"b",(function(){return h}));var a=r(0),n=r.n(a);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},o=Object.keys(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var m=n.a.createContext({}),u=function(e){var t=n.a.useContext(m),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},b=function(e){var t=u(e.components);return n.a.createElement(m.Provider,{value:t},e.children)},l={inlineCode:"code",wrapper:function(e){var t=e.children;return n.a.createElement(n.a.Fragment,{},t)}},p=n.a.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),b=u(r),p=a,h=b["".concat(i,".").concat(p)]||b[p]||l[p]||o;return r?n.a.createElement(h,c(c({ref:t},m),{},{components:r})):n.a.createElement(h,c({ref:t},m))}));function h(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=p;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var m=2;m<o;m++)i[m]=r[m];return n.a.createElement.apply(null,i)}return n.a.createElement.apply(null,r)}p.displayName="MDXCreateElement"}}]);