blob: dc7fe5d3ccf2a64316768cf71d34cd389617bc8b [file] [log] [blame]
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Docusaurus v2.0.0-alpha.70">
<link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Submarine Blog RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Submarine Blog Atom Feed"><title data-react-helmet="true">How To Contribute to Submarine | Apache Submarine</title><meta data-react-helmet="true" name="twitter:card" content="summary_large_image"><meta data-react-helmet="true" name="docusaurus_locale" content="en"><meta data-react-helmet="true" name="docusaurus_version" content="0.6.0"><meta data-react-helmet="true" name="docusaurus_tag" content="docs-default-0.6.0"><meta data-react-helmet="true" property="og:title" content="How To Contribute to Submarine | Apache Submarine"><meta data-react-helmet="true" name="description" content="&lt;!--"><meta data-react-helmet="true" property="og:description" content="&lt;!--"><meta data-react-helmet="true" property="og:url" content="https://submarine.apache.org//docs/community/contributing"><link data-react-helmet="true" rel="shortcut icon" href="/img/submarine.ico"><link data-react-helmet="true" rel="canonical" href="https://submarine.apache.org//docs/community/contributing"><link rel="stylesheet" href="/styles.39775f96.css">
<link rel="preload" href="/styles.f6b0c2f2.js" as="script">
<link rel="preload" href="/runtime~main.13a9404d.js" as="script">
<link rel="preload" href="/main.1c145c17.js" as="script">
<link rel="preload" href="/1.d23d1451.js" as="script">
<link rel="preload" href="/2.45bcb8a0.js" as="script">
<link rel="preload" href="/1f391b9e.785b37ba.js" as="script">
<link rel="preload" href="/127.875bba76.js" as="script">
<link rel="preload" href="/58f10d9f.e974ccf6.js" as="script">
<link rel="preload" href="/17896441.faf04472.js" as="script">
<link rel="preload" href="/a658e4e7.55013e73.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<nav aria-label="Skip navigation links"><button type="button" tabindex="0" class="skipToContent_11B0">Skip to main content</button></nav><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><div aria-label="Navigation bar toggle" class="navbar__toggle" role="button" tabindex="0"><svg aria-label="Menu" width="30" height="30" viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></div><a class="navbar__brand" href="/"><img src="/img/icons/128.png" alt="Apache Submarine Site Logo" class="themedImage_YANc themedImage--light_3CMI navbar__logo"><img src="/img/icons/128.png" alt="Apache Submarine Site Logo" class="themedImage_YANc themedImage--dark_3ARp navbar__logo"><strong class="navbar__title">Apache Submarine</strong></a><a class="navbar__item navbar__link navbar__link--active" href="/docs/gettingStarted/quickstart">Docs</a><a class="navbar__item navbar__link" href="/docs/api/environment">API</a><a class="navbar__item navbar__link" href="/docs/download">Download</a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__item navbar__link" href="/docs/gettingStarted/quickstart">0.6.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/community/contributing">master ๐Ÿƒ</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/community/contributing">0.6.0</a></li><li><a class="dropdown__link" href="/versions">All versions</a></li></ul></div><a href="https://github.com/apache/submarine" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__item navbar__link">Apache</a><ul class="dropdown__menu"><li><a href="https://www.apache.org/foundation/how-it-works.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Apache Software Foundation</a></li><li><a href="https://www.apache.org/events/current-event" target="_blank" rel="noopener noreferrer" class="dropdown__link">Events</a></li><li><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Apache License</a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks</a></li><li><a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Security</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship</a></li></ul></div><div class="react-toggle react-toggle--disabled displayOnlyInLargeViewport_2N3Q"><div class="react-toggle-track"><div class="react-toggle-track-check"><span class="toggle_3NWk">๐ŸŒœ</span></div><div class="react-toggle-track-x"><span class="toggle_3NWk">๐ŸŒž</span></div></div><div class="react-toggle-thumb"></div><input type="checkbox" disabled="" aria-label="Dark mode toggle" class="react-toggle-screenreader-only"></div><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input type="search" id="search_input_react" placeholder="Search" aria-label="Search" class="navbar__search-input search-bar"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a class="navbar__brand" href="/"><img src="/img/icons/128.png" alt="Apache Submarine Site Logo" class="themedImage_YANc themedImage--light_3CMI navbar__logo"><img src="/img/icons/128.png" alt="Apache Submarine Site Logo" class="themedImage_YANc themedImage--dark_3ARp navbar__logo"><strong class="navbar__title">Apache Submarine</strong></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"><li class="menu__list-item"><a class="menu__link navbar__link--active" href="/docs/gettingStarted/quickstart">Docs</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/api/environment">API</a></li><li class="menu__list-item"><a class="menu__link" href="/docs/download">Download</a></li><li class="menu__list-item"><a role="button" class="menu__link menu__link--sublist">Versions</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/docs/next/community/contributing">master ๐Ÿƒ</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link menu__link--active" href="/docs/community/contributing">0.6.0</a></li><li class="menu__list-item"><a class="menu__link" href="/versions">All versions</a></li></ul></li><li class="menu__list-item"><a href="https://github.com/apache/submarine" target="_blank" rel="noopener noreferrer" class="menu__link">GitHub</a></li><li class="menu__list-item menu__list-item--collapsed"><a role="button" class="menu__link menu__link--sublist">Apache</a><ul class="menu__list"><li class="menu__list-item"><a href="https://www.apache.org/foundation/how-it-works.html" target="_blank" rel="noopener noreferrer" class="menu__link">Apache Software Foundation</a></li><li class="menu__list-item"><a href="https://www.apache.org/events/current-event" target="_blank" rel="noopener noreferrer" class="menu__link">Events</a></li><li class="menu__list-item"><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener noreferrer" class="menu__link">Apache License</a></li><li class="menu__list-item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="menu__link">Thanks</a></li><li class="menu__list-item"><a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer" class="menu__link">Security</a></li><li class="menu__list-item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="menu__link">Sponsorship</a></li></ul></li></ul></div></div></div></nav><div class="main-wrapper"><div class="docPage_vMrn"><div class="docSidebarContainer_3Ak5" role="complementary"><div class="sidebar_3gvy"><div class="menu menu--responsive thin-scrollbar menu_1yIk"><button aria-label="Open Menu" aria-haspopup="true" class="button button--secondary button--sm menu__button" type="button"><svg aria-label="Menu" class="sidebarMenuIcon_1CUI" width="24" height="24" viewBox="0 0 30 30" role="img" focusable="false"><title>Menu</title><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><ul class="menu__list"><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Getting Started</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/gettingStarted/quickstart">Quickstart</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/gettingStarted/notebook">Jupyter Notebook</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">User Docs</a><ul class="menu__list"><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!" tabindex="-1">API documentation</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/api/experiment">Experiment REST API</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/api/environment">Environment REST API</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/api/experiment-template">Experiment Template REST API</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/api/notebook">Notebook REST API</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!" tabindex="-1">Submarine SDK</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/submarine-sdk/experiment-client">Experiment Client</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/submarine-sdk/model-client">Model Client</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/submarine-sdk/tracking">Tracking</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!" tabindex="-1">Submarine Security</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/submarine-security/spark-security/README">Submarine Spark Security Plugin</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/submarine-security/spark-security/build-submarine-spark-security-plugin">Building Submarine Spark Security Plugin</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!" tabindex="-1">Others</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/others/mlflow">MLflow UI</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/userDocs/others/tensorboard">Tensorboard</a></li></ul></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Administrator Docs</a><ul class="menu__list"><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!" tabindex="-1">Submarine on Yarn</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/adminDocs/yarn/README">Running Submarine on YARN</a></li></ul></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Developer Docs</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/devDocs/README">Project Architecture</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/devDocs/Dependencies">Dependencies for Submarine</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/devDocs/BuildFromCode">How to Build Submarine</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/devDocs/Development">Development Guide</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/devDocs/IntegrationTestK8s">How to Run Integration K8s Test</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/devDocs/IntegrationTestE2E">How to Run Frontend Integration Test</a></li></ul></li><li class="menu__list-item"><a class="menu__link menu__link--sublist menu__link--active" href="#!">Community</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/community/README">Apache Submarine Community</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/community/HowToCommit">Guide for Apache Submarine Committers</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link menu__link--active active" tabindex="0" href="/docs/community/contributing">How To Contribute to Submarine</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!">Design Docs</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/architecture-and-requirements">Architecture and Requirment</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/implementation-notes">Implementation Notes</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/environments-implementation">Environments Implementation</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/experiment-implementation">Experiment Implementation</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/notebook-implementation">Notebook Implementation</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/storage-implementation">Storage Implementation</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!" tabindex="-1">Submarine Server</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/submarine-server/architecture">Submarine Server Implementation</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/submarine-server/experimentSpec">Generic Expeiment Spec</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#!" tabindex="-1">WIP Design Docs</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/wip-designs/submarine-launcher">Submarine Launcher</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/wip-designs/submarine-clusterServer">Cluster Server Design - High-Availability</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/designDocs/wip-designs/security-implementation">Security Implementation</a></li></ul></li></ul></li></ul></div></div></div><main class="docMainContainer_2iGs"><div class="container padding-vert--lg docItemWrapper_1bxp"><div class="row"><div class="col docItemCol_U38p"><div class="docItemContainer_a7m4"><article><div><span class="badge badge--secondary">Version: 0.6.0</span></div><header><h1 class="docTitle_Oumm">How To Contribute to Submarine</h1></header><div class="markdown"><p>There are several ways to contribute to Submarine:</p><ol><li>Develop and Commit source code (This document will primarily focus on this.)</li><li>Report issues (You can report issues with both Github or Jira.)</li><li>Discuss/Answer questions on the mailing list</li><li>Share use cases</li></ol><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="preface"></a>Preface<a class="hash-link" href="#preface" title="Direct link to heading">#</a></h2><ul><li><strong>Apache Submarine</strong> is an <a href="https://github.com/apache/submarine/blob/master/LICENSE" target="_blank" rel="noopener noreferrer">Apache 2.0 License</a> Software. Contributing to Submarine means you agree to the Apache 2.0 License. </li><li>Please read <a href="http://www.apache.org/foundation/policies/conduct.html" target="_blank" rel="noopener noreferrer">Code of Conduct</a> carefully.</li><li>The document <a href="http://www.apache.org/foundation/how-it-works.html" target="_blank" rel="noopener noreferrer">How It Works</a> can help you understand Apache Software Foundation further.</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="build-submarine"></a>Build Submarine<a class="hash-link" href="#build-submarine" title="Direct link to heading">#</a></h2><ul><li><a href="/docs/devDocs/BuildFromCode">Build From Code</a></li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="creating-patches"></a>Creating patches<a class="hash-link" href="#creating-patches" title="Direct link to heading">#</a></h2><p>Submarine follows <a href="https://github.com/sevntu-checkstyle/sevntu.checkstyle/wiki/Development-workflow-with-Git:-Fork,-Branching,-Commits,-and-Pull-Request" target="_blank" rel="noopener noreferrer">Fork &amp; Pull</a> model.</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step1-fork-apachesubmarine-github-repository-first-time"></a>Step1: Fork apache/submarine github repository (first time)<a class="hash-link" href="#step1-fork-apachesubmarine-github-repository-first-time" title="Direct link to heading">#</a></h3><ul><li>Visit <a href="https://github.com/apache/submarine" target="_blank" rel="noopener noreferrer">https://github.com/apache/submarine</a></li><li>Click the <code>Fork</code> button to create a fork of the repository</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step2-clone-the-submarine-to-your-local-machine"></a>Step2: Clone the Submarine to your local machine<a class="hash-link" href="#step2-clone-the-submarine-to-your-local-machine" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1zKU"><div class="codeBlockContent_actS"><div tabindex="0" class="prism-code language-sh codeBlock_tuNs thin-scrollbar"><div class="codeBlockLines_3uvA" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain"># USERNAME โ€“ your Github user account name.</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git clone git@github.com:${USERNAME}/submarine.git</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># or: git clone https://github.com/${USERNAME}/submarine.git </span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"> </span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cd submarine</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># set upstream </span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git remote add upstream git@github.com:apache/submarine.git</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># or: git remote add upstream https://github.com/apache/submarine.git</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># Don&#x27;t push to the upstream master.</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git remote set-url --push upstream no_push</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># Check upstream/origin:</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># origin git@github.com:${USERNAME}/submarine.git (fetch)</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># origin git@github.com:${USERNAME}/submarine.git (push)</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># upstream git@github.com:apache/submarine.git (fetch)</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># upstream no_push (push)</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git remote -v</span></div></div></div><button type="button" aria-label="Copy code to clipboard" class="copyButton_2GIj">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step3-create-a-new-jira-in-submarine-project"></a>Step3: Create a new Jira in Submarine project<a class="hash-link" href="#step3-create-a-new-jira-in-submarine-project" title="Direct link to heading">#</a></h3><ul><li>New contributors need privilege to create JIRA issues. Please email <a href="mailto:kaihsun@apache.org" target="_blank" rel="noopener noreferrer">kaihsun@apache.org</a> with your Jira username. In addition, the email title should be &quot;[New Submarine Contributor]&quot;.</li><li>Check <a href="https://issues.apache.org/jira/projects/SUBMARINE/issues/SUBMARINE-748?filter=allopenissues" target="_blank" rel="noopener noreferrer">Jira issue tracker</a> for existing issues.</li><li>Create a new Jira issue in Submarine project. When the issue is created, a Jira number (eg. SUBMARINE-748) will be assigned to the issue automatically.
<img alt="jira_number_example" src="/assets/images/jira_number_example-9d86e8dd3b72d9d9c2adddfbffc00a54.png"></li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step4-create-a-local-branch-for-your-contribution"></a>Step4: Create a local branch for your contribution<a class="hash-link" href="#step4-create-a-local-branch-for-your-contribution" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1zKU"><div class="codeBlockContent_actS"><div tabindex="0" class="prism-code language-sh codeBlock_tuNs thin-scrollbar"><div class="codeBlockLines_3uvA" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">cd submarine</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># Make your local master up-to-date</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git checkout master</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git fetch upstream </span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git rebase upstream/master</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># Create a new branch fro issue SUBMARINE-${jira_number}</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git checkout -b SUBMARINE-${jira_number}</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block">
</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># Example: git checkout -b SUBMARINE-748 </span></div></div></div><button type="button" aria-label="Copy code to clipboard" class="copyButton_2GIj">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step5-develop--create-commits"></a>Step5: Develop &amp; Create commits<a class="hash-link" href="#step5-develop--create-commits" title="Direct link to heading">#</a></h3><ul><li>You can edit the code on the <code>SUBMARINE-${jira_number}</code> branch. (Coding Style: <a href="#code-convention">Code Convention</a>)</li><li>Create commits</li></ul><div class="mdxCodeBlock_1zKU"><div class="codeBlockContent_actS"><div tabindex="0" class="prism-code language-sh codeBlock_tuNs thin-scrollbar"><div class="codeBlockLines_3uvA" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">git add ${edited files}</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git commit -m &quot;SUBMARINE-${jira_number}. ${Commit Message}&quot;</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"># Example: git commit -m &quot;SUBMARINE-748. Update Contributing guide&quot; </span></div></div></div><button type="button" aria-label="Copy code to clipboard" class="copyButton_2GIj">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step6-syncing-your-local-branch-with-upstreammaster"></a>Step6: Syncing your local branch with upstream/master<a class="hash-link" href="#step6-syncing-your-local-branch-with-upstreammaster" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1zKU"><div class="codeBlockContent_actS"><div tabindex="0" class="prism-code language-sh codeBlock_tuNs thin-scrollbar"><div class="codeBlockLines_3uvA" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain"># On SUBMARINE-${jira_number} branch</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git fetch upstream</span></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">git rebase upstream/master</span></div></div></div><button type="button" aria-label="Copy code to clipboard" class="copyButton_2GIj">Copy</button></div></div><ul><li>Please do not use <code>git pull</code> to synchronize your local branch. Because <code>git pull</code> does a merge to create merged commits, these will make commit history messy.</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step7-push-your-local-branch-to-your-personal-fork"></a>Step7: Push your local branch to your personal fork<a class="hash-link" href="#step7-push-your-local-branch-to-your-personal-fork" title="Direct link to heading">#</a></h3><div class="mdxCodeBlock_1zKU"><div class="codeBlockContent_actS"><div tabindex="0" class="prism-code language-sh codeBlock_tuNs thin-scrollbar"><div class="codeBlockLines_3uvA" style="color:#bfc7d5;background-color:#292d3e"><div class="token-line" style="color:#bfc7d5"><span class="token plain">git push origin SUBMARINE-${jira_number} </span></div></div></div><button type="button" aria-label="Copy code to clipboard" class="copyButton_2GIj">Copy</button></div></div><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step8-check-github-actions-status-of-your-personal-commit"></a>Step8: Check GitHub Actions status of your personal commit<a class="hash-link" href="#step8-check-github-actions-status-of-your-personal-commit" title="Direct link to heading">#</a></h3><ul><li>Visit <code>https://github.com/${USERNAME}/submarine/actions</code></li><li>Please make sure your new commits can pass all workflows before creating a pull request.</li></ul><p><img alt="check_ci_pass" src="/assets/images/check_ci_pass-9c6656dec7130470506c7420e55c7dd0.png"></p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step9-create-a-pull-request-on-github-ui"></a>Step9: Create a pull request on github UI<a class="hash-link" href="#step9-create-a-pull-request-on-github-ui" title="Direct link to heading">#</a></h3><ul><li>Visit your fork at <code>https://github.com/${USERNAME}/submarine.git</code></li><li>Click <code>Compare &amp; Pull Request</code> button to create pull request.
<img alt="compare_pull_request_button" src="/assets/images/compare_pull_request_button-a5c8f7a7ebda5fad45d1d9e6ca8ed58a.png"></li></ul><h4><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="pull-request-template"></a>Pull Request template<a class="hash-link" href="#pull-request-template" title="Direct link to heading">#</a></h4><ul><li><a href="https://github.com/apache/submarine/blob/bd7578cc28f8280f9170938d4469fcc965e24a89/.github/PULL_REQUEST_TEMPLATE" target="_blank" rel="noopener noreferrer">Pull request template</a></li><li>Filling the template thoroughly can improve the speed of the review process. Example: </li></ul><p><img alt="pull_request_template_example" src="/assets/images/pull_request_template_example-5db7207e23fa54cca6de32325e8d7c67.png"></p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step10-check-github-actions-status-of-your-pull-request-in-apachesubmarine"></a>Step10: Check GitHub Actions status of your pull request in apache/submarine<a class="hash-link" href="#step10-check-github-actions-status-of-your-pull-request-in-apachesubmarine" title="Direct link to heading">#</a></h3><ul><li>Visit <a href="https://github.com/apache/submarine/actions" target="_blank" rel="noopener noreferrer">https://github.com/apache/submarine/actions</a></li><li>Please make sure your pull request can pass all workflows. </li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step11-the-review-process"></a>Step11: The Review Process<a class="hash-link" href="#step11-the-review-process" title="Direct link to heading">#</a></h3><ul><li>Anyone can be a reviewer and comment on the pull requests.</li><li>Reviewer can indicate that a patch looks suitable for merging with a comment such as: &quot;Looks good&quot;, &quot;LGTM&quot;, &quot;+1&quot;. (PS: LGTM = Looks Good To Me)</li><li>At least one indication of suitability (e.g. &quot;LGTM&quot;) from a committer is required to be merged. </li><li>A committer can then initiate lazy consensus (&quot;Merge if there is no more discussion&quot;) after which the code can be merged after a particular time (usually 24 hours) if there are no more reviews.</li><li>Contributors can ping reviewers (including committers) by commenting &#x27;Ready to review&#x27;.</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="step12-address-review-comments"></a>Step12: Address review comments<a class="hash-link" href="#step12-address-review-comments" title="Direct link to heading">#</a></h3><ul><li>Push new commits to SUBMARINE-${jira_number} branch. The pull request will update automatically.</li><li>After you address all review comments, committers will merge the pull request.</li></ul><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_prK2" id="code-convention"></a>Code convention<a class="hash-link" href="#code-convention" title="Direct link to heading">#</a></h3><p>We are following Google Code style:</p><ul><li><a href="https://google.github.io/styleguide/javaguide.html" target="_blank" rel="noopener noreferrer">Java style</a></li><li><a href="https://google.github.io/styleguide/shell.xml" target="_blank" rel="noopener noreferrer">Shell style</a></li></ul><p>There are some plugins to format, lint your code in IDE (use <a href="hhttps://github.com/apache/submarine/blob/master/dev-support/maven-config/checkstyle.xml" target="_blank" rel="noopener noreferrer">dev-support/maven-config/checkstyle.xml</a> as rules)</p><ul><li><a href="https://plugins.jetbrains.com/plugin/1065" target="_blank" rel="noopener noreferrer">Checkstyle plugin for Intellij</a> (<a href="http://stackoverflow.com/questions/26955766/intellij-idea-checkstyle" target="_blank" rel="noopener noreferrer">Setting Guide</a>)</li><li><a href="http://eclipse-cs.sourceforge.net/#!/" target="_blank" rel="noopener noreferrer">Checkstyle plugin for Eclipse</a> (<a href="http://eclipse-cs.sourceforge.net/#!/project-setup" target="_blank" rel="noopener noreferrer">Setting Guide</a>)</li></ul></div></article><div class="margin-vert--xl"><div class="row"><div class="col"><a href="https://github.com/apache/submarine/edit/master/website/versioned_docs/version-0.6.0/community/contributing.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="1.2em" width="1.2em" preserveAspectRatio="xMidYMid meet" role="img" viewBox="0 0 40 40" class="iconEdit_2LL7"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div></div></div><div class="margin-vert--lg"><nav class="pagination-nav" aria-label="Blog list page navigation"><div class="pagination-nav__item"><a class="pagination-nav__link" href="/docs/community/HowToCommit"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ยซ Guide for Apache Submarine Committers</div></a></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/docs/designDocs/architecture-and-requirements"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Architecture and Requirment ยป</div></a></div></nav></div></div></div><div class="col col--3"><div class="tableOfContents_2xL- thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#preface" class="table-of-contents__link">Preface</a></li><li><a href="#build-submarine" class="table-of-contents__link">Build Submarine</a></li><li><a href="#creating-patches" class="table-of-contents__link">Creating patches</a><ul><li><a href="#step1-fork-apachesubmarine-github-repository-first-time" class="table-of-contents__link">Step1: Fork apache/submarine github repository (first time)</a></li><li><a href="#step2-clone-the-submarine-to-your-local-machine" class="table-of-contents__link">Step2: Clone the Submarine to your local machine</a></li><li><a href="#step3-create-a-new-jira-in-submarine-project" class="table-of-contents__link">Step3: Create a new Jira in Submarine project</a></li><li><a href="#step4-create-a-local-branch-for-your-contribution" class="table-of-contents__link">Step4: Create a local branch for your contribution</a></li><li><a href="#step5-develop--create-commits" class="table-of-contents__link">Step5: Develop &amp; Create commits</a></li><li><a href="#step6-syncing-your-local-branch-with-upstreammaster" class="table-of-contents__link">Step6: Syncing your local branch with upstream/master</a></li><li><a href="#step7-push-your-local-branch-to-your-personal-fork" class="table-of-contents__link">Step7: Push your local branch to your personal fork</a></li><li><a href="#step8-check-github-actions-status-of-your-personal-commit" class="table-of-contents__link">Step8: Check GitHub Actions status of your personal commit</a></li><li><a href="#step9-create-a-pull-request-on-github-ui" class="table-of-contents__link">Step9: Create a pull request on github UI</a></li><li><a href="#step10-check-github-actions-status-of-your-pull-request-in-apachesubmarine" class="table-of-contents__link">Step10: Check GitHub Actions status of your pull request in apache/submarine</a></li><li><a href="#step11-the-review-process" class="table-of-contents__link">Step11: The Review Process</a></li><li><a href="#step12-address-review-comments" class="table-of-contents__link">Step12: Address review comments</a></li><li><a href="#code-convention" class="table-of-contents__link">Code convention</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container"><div class="row footer__links"><div class="col footer__col"><h4 class="footer__title">Docs</h4><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/gettingStarted/quickstart">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/environment">API docs</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">Community</h4><ul class="footer__items"><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/apache-submarine" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow</a></li><li class="footer__item"><a href="https://s.apache.org/slack-invite" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack</a></li></ul></div><div class="col footer__col"><h4 class="footer__title">More</h4><ul class="footer__items"><li class="footer__item"><a href="https://medium.com/@apache.submarine" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog</a></li><li class="footer__item"><a href="https://github.com/apache/submarine" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub</a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="footerLogoLink_31Aa"><img class="footer__logo" alt="Apache Open Source Logo" src="https://hadoop.apache.org/asf_logo_wide.png"></a></div><div class="footer__copyright">Apache Submarine, Submarine, Apache, the Apache feather logo, and the Apache Submarine project logo are
either registered trademarks or trademarks of the Apache Software Foundation in the United States and other
countries.<br> Copyright ยฉ 2022 Apache Submarine is Apache2 Licensed software.</div></div></div></footer></div>
<script src="/styles.f6b0c2f2.js"></script>
<script src="/runtime~main.13a9404d.js"></script>
<script src="/main.1c145c17.js"></script>
<script src="/1.d23d1451.js"></script>
<script src="/2.45bcb8a0.js"></script>
<script src="/1f391b9e.785b37ba.js"></script>
<script src="/127.875bba76.js"></script>
<script src="/58f10d9f.e974ccf6.js"></script>
<script src="/17896441.faf04472.js"></script>
<script src="/a658e4e7.55013e73.js"></script>
</body>
</html>