<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        
        
        <!-- This is broken by doc revisioning.
         -->
        <link rel="shortcut icon" href="../../../../img/favicon.ico">

        <title>Turn project into a Repo - Apache Mynewt</title>

        <link href="../../../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
        <link rel="stylesheet" href="../../../../css/highlight.css">
        <link href="../../../../css/base.css" rel="stylesheet">
        <link href="../../../../css/custom.css" rel="stylesheet">
        <link href="../../../../css/v2.css" rel="stylesheet">
        <link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">

        <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
            <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
        <![endif]-->

        
            <script>
            (function(i, s, o, g, r, a, m) {
    i["GoogleAnalyticsObject"] = r;
    (i[r] =
        i[r] ||
        function() {
            (i[r].q = i[r].q || []).push(arguments);
        }),
        (i[r].l = 1 * new Date());
    (a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");

ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
        
    </head>


    <body class="Turn project into a Repo">


        <div class="container">
    <div class="row v2-main-banner">
        <a class="logo-cell" href="/">
            <img class="logo" src="/img/logo.png">
        </a>
        <div class="tagline-cell">
            <h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
        </div>
        <div class="news-cell">
            <div class="well">
                <h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released (April 4, 2024)
            </div>
        </div>
    </div>
</div>

        






<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" role="navigation">
    <div class="container">
        <!-- Collapsed navigation -->
        <div class="navbar-header">
            <!-- Expander button -->
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>

        </div>

        <!-- Expanded navigation -->
        <div class="navbar-collapse collapse">
            <!-- Main navigation -->
            <ul class="nav navbar-nav navbar-right">
                <li 
  class=""
>
                    <a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
                </li>
                <li 
  class="important"
>
                    <a href="/quick-start/">Quick Start</a>
                </li>
                <li 
  class=""
>
                    <a href="/about/">About</a>
                </li>
                <li 
  class=""
>
                    <a href="/talks/">Talks</a>
                </li>
                <li 
  class="active"
>
                    <a href="/documentation/">Documentation</a>
                </li>
                <li 
  class=""
>
                    <a href="/download/">Download</a>
                </li>
                <li 
  class=""
>
                    <a href="/community/">Community</a>
                </li>
                <li 
  class=""
>
                    <a href="/events/">Events</a>
                </li>
            </ul>

        </div>
    </div>
</nav>

        

        <div class="container">
            
                <div class="row">
                    <div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
    <div class="top">
        <div role="search">
            <form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
                <div class="form-group">
                    <input type="text" name="q" class="form-control" placeholder="Search documentation" />
                </div>
            </form>
        </div>
    </div>
    <ul class="toc-nav">
      <li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
  <option value="/latest">
    Version: master
  </option>
  <option value="/v1_12_0/" >
    Version: 1.12.0
  </option>
  <option value="/v1_11_0/" >
    Version: 1.11.0
  </option>
  <option value="/v1_10_0/" >
    Version: 1.10.0
  </option>
  <option value="/v1_9_0/" >
    Version: 1.9.0
  </option>
    <option value="/v1_8_0/" >
    Version: 1.8.0
  </option>
  <option value="/v1_7_0/" >
    Version: 1.7.0
  </option>
  <option value="/v1_6_0/" >
    Version: 1.6.0
  </option>
  <option value="/v1_5_0/" >
    Version: 1.5.0
  </option>
  <option value="/v1_4_0/" >
    Version: 1.4.0
  </option>
  <option value="/v1_3_0/os/introduction" >
    Version: 1.3.0
  </option>
  <option value="/v1_2_0/os/introduction" >
    Version: 1.2.0
  </option>
  <option value="/v1_1_0/os/introduction" >
    Version: 1.1.0
  </option>
  <option value="/v1_0_0/os/introduction" selected="selected" >
    Version: 1.0.0
  </option>
  <option value="/v0_9_0/os/introduction" >
    Version: 0.9.0
  </option>
</select></li>
      
        
      
        
      
        
      
        
      
        
      
        
      
        
      
        
      
        
          
  
  
    <li ><a href="../../../introduction/">Mynewt Documentation</a>
  
  
    <ul>
          
              
          
              
                
  
  
    <li ><a href="../../../get_started/get_started/">Basic Setup</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../../../get_started/vocabulary/">Concepts</a>
  </li>

              
          
              
                
  
  
    <li ><a href="../../tutorials/">Tutorials</a>
  
  
    <ul>
          
              
          
              
                
  
  
    <li ><a href="../../blinky/">Project Blinky</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../add_repos/">Work with repositories</a>
  
  
    <ul>
          
              
          
              
                
  <li >
    <a href="../upgrade_repo/">Upgrade a Repo</a>
  </li>

              
          
              
                
  <li class="active">
    <a href="./">Turn project into a Repo</a>
  </li>

              
          
              
                
  <li >
    <a href="../private_repo/">Access a private Repo</a>
  </li>

              
          
    </ul>
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../project-slinky/">Project Slinky for Remote Comms</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../../ibeacon/">BLE iBeacon</a>
  </li>

              
          
              
                
  <li >
    <a href="../../eddystone/">BLE Eddystone</a>
  </li>

              
          
              
                
  <li >
    <a href="../../add_newtmgr/">Enable Newt Manager in any app</a>
  </li>

              
          
              
                
  <li >
    <a href="../../add_shell/">Enable the OS Shell and Console</a>
  </li>

              
          
              
                
  <li >
    <a href="../../tasks_lesson/">Tasks and Priority Management</a>
  </li>

              
          
              
                
  <li >
    <a href="../../wi-fi_on_arduino/">Enable Wi-Fi on Arduino MKR1000</a>
  </li>

              
          
              
                
  <li >
    <a href="../../unit_test/">Write a Test Suite for a Package</a>
  </li>

              
          
              
                
  <li >
    <a href="../../event_queue/">Events and Event Queues</a>
  </li>

              
          
              
                
  <li >
    <a href="../../bletiny_project/">BLE app to check stats via console</a>
  </li>

              
          
              
                
  
  
    <li ><a href="../../bleprph/bleprph-intro/">BLE peripheral project</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../../blehci_project/">BLE HCI interface</a>
  </li>

              
          
              
                
  
  
    <li><a href="
  ../../air_quality_sensor/
">Air-quality Sensor project</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../../nrf52_adc/">Add an Analog Sensor</a>
  </li>

              
          
    </ul>
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../../os_user_guide/">OS User Guide</a>
  
  
    </li>

              
          
              
                
  
  
    <li><a href="
  ../../../../network/ble/ble_intro/
">BLE User Guide</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../../../newt/newt_intro/">Newt Tool Guide</a>
  
  
    </li>

              
          
              
                
  
  
    <li ><a href="../../../../newtmgr/overview/">Newt Manager Guide</a>
  
  
    </li>

              
          
              
                
  <li >
    <a href="../../../../known_issues/">Known Issues</a>
  </li>

              
          
    </ul>
  
    </li>

        
      
        
          
  
  
    <li><a href="
  ../../../../faq/go_env/
">Appendix</a>
  
  
    </li>

        
      
    </ul>
</div></div>

                    <div class="col-md-9" role="main">
                        <div class="doc-header">
                            <div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li><a href="/documentation/">Docs</a></li>
    
    
        
          <li>&raquo; <a href="os/tutorials/repo/add_repos/">Work with repositories</a></li>
        
      
        
          <li>&raquo; <a href="os/tutorials/tutorials/">Tutorials</a></li>
        
      
        
          <li>&raquo; <a href="os/introduction/">Mynewt Documentation</a></li>
        
      
      
        <li>&raquo; Turn project into a Repo</li>
      
    
    
  </ul>
</div>
                        </div>
                        
                          
                        
                          
                        
                          
                            <div class="alert alert-warning">
                                <p>
                                    Version 1.0.0 is not the most recent version of the Apache Mynewt
                                    documentation. Click <a href="/latest">here</a> to read the latest
                                    version.
                                </p>
                            </div>
                          
                        
                        
                            <h2 id="create-a-repo-out-of-a-project">Create a Repo out of a Project</h2>
<p>In order to create a repository out of a project, all you need to do is create a 
<code>repository.yml</code> file, and check it into the master branch of your project.</p>
<p><strong>NOTE:</strong> Currently only github source control service is supported by our 
package management system, but support for plain git is planned for a future
version.</p>
<p>The <code>repository.yml</code> defines all versions of the repository and the corresponding 
source control tags that these versions correspond to.  As an example, if the 
<code>repository.yml</code> file has the following content, it means there is one version 
of the apache-mynewt-core operating system available, which is <code>0.0.0</code> (implying we 
haven't released yet!). Such a version number corresponds to the "develop" branch 
in this repository. <code>0-latest</code> would also resolved to this same <code>0.0.0</code> version. 
The next section explains the versioning system a bit more.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ more repository.yml
repo.name: apache-mynewt-core
repo.versions:
     &quot;0.0.0&quot;: &quot;develop&quot;
     &quot;0-latest&quot;: &quot;0.0.0&quot;
</code></pre></div>

<p><br></p>
<h3 id="where-should-the-repositoryyml-file-be">Where should the repository.yml file be?</h3>
<p>The <code>repository.yml</code> file lives only in the master branch of the git
repository.  <code>Newt</code> will always fetch this file from the master branch and then
use that to resolve the actual branch required depending on the version
specified in the project.  <strong>Special care should be taken to ensure that this
file exists only in the master branch.</strong></p>
<p>Here is the <code>repository.yml</code> file from a certain snapshot of apache-Mynewt-core:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>repo.name: apache-mynewt-core
repo.versions:
    &quot;0.7.9&quot;: &quot;Mynewt_0_8_0_b2_tag&quot;
    &quot;0-latest&quot;: &quot;0.7.9&quot;
    &quot;0.8-latest&quot;: &quot;0.7.9&quot;
</code></pre></div>

<p><br></p>
<p>It contains the following:</p>
<ul>
<li><strong>repo.name</strong> The external name that is used to include the library in 
your <code>project.yml</code> file.   This is the name you include in the <code>project.repositories</code> 
variable when adding this repository to your project.</li>
<li><strong>repo.versions</strong> A description of what versions to give the user depending 
on the settings in their <code>project.yml</code> file.  See below for a thorough description
on versioning. Its a flexible mapping between version numbers and git branches.</li>
</ul>
<p><br></p>
<h3 id="repo-version-specification">Repo Version Specification</h3>
<p>The version field argument for a repo has the following format:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>&lt;major_num&gt;.&lt;minor_num&gt;.&lt;revision_num&gt;
</code></pre></div>

<p>or</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>&lt;major_num&gt;.&lt;minor_num&gt;-&lt;stability string&gt;
</code></pre></div>

<p>or </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>&lt;major_num&gt;-&lt;stability string&gt;
</code></pre></div>

<p><br></p>
<p>The stability string can be one of 3 pre-defined stability values.</p>
<ol>
<li><code>stable</code> -- A stable release version of the repository</li>
<li><code>dev</code>    -- A development version from the repository</li>
<li><code>latest</code> -- The latest from the repository</li>
</ol>
<p>In your <code>project.yml</code> file you can specify different combinations of 
the version number and stability value.  For example:</p>
<ul>
<li><code>1-latest</code>      -- The latest version with major number 1</li>
<li><code>1.2-stable</code>    -- The latest stable version with major and minor number 1.2</li>
<li><code>1.2-dev</code>       -- The development version from 1.2</li>
<li><code>1.1.1</code>         -- a specific version 1.1.1</li>
</ul>
<p>You <strong>cannot</strong> specify a stability string with a fully numbered version, e.g.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>1.2.8-stable
</code></pre></div>

<p><br></p>
<h3 id="repo-version-resolution">Repo Version Resolution</h3>
<p>A <code>repository.yml</code> file contains information to match this version request
into a git branch to fetch for your project.</p>
<p>It's up to you as the repository maintainer to map these to actual github branches 
of the repository.  For example, let's say in a fictitious repository the 
following are defined.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>repo.versions:
    &quot;0.8.0&quot;: &quot;xxx_branch_0_8_0&quot;
    &quot;1.0.0&quot;: &quot;xxx_branch_1_0_0&quot;
    &quot;1.0.2&quot;: &quot;xxx_branch_1_0_2&quot;
    &quot;1.1.1&quot;: &quot;xxx_branch_1_1_0&quot;
    &quot;1.1.2&quot;: &quot;xxx_branch_1_1_2&quot;
    &quot;1.2.0&quot;: &quot;xxx_branch_1_2_0&quot;
    &quot;1.2.1&quot;: &quot;xxx_branch_1_2_1&quot;
    &quot;1.2-dev&quot;: &quot;1.2.1&quot;
    &quot;1-dev&quot;: &quot;1.2-dev&quot;
    &quot;1.2-stable&quot;: &quot;1.2.0&quot;
    &quot;0-latest&quot;: &quot;0.8.0&quot;
    &quot;1-latest&quot;: &quot;1-dev&quot;
    ....
</code></pre></div>

<p>When the <code>project.yml</code> file asks for <code>1.2-stable</code> it will be resolved to version
<code>1.2.0</code> which in turn will resolve to a specific branch <code>xxx_branch_1_2_0</code>.<br />
This is the branch that <code>newt</code> will then fetch into the project with that <code>project.yml</code> file.</p>
<p><br></p>
<h3 id="dependencies-on-other-repos">Dependencies on other repos</h3>
<p>Repositories can also have dependencies on other repositories.  These 
dependencies should be listed out on a per-tag basis.  So, for example, 
if apache-mynewt-core were to depend on sterlys-little-repo, you might 
have the following directives in the repository.yml:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>develop.repositories:
    sterlys-little-repo:
        type: github
        vers: 0.8-latest
        user: sterlinghughes
        repo: sterlys-little-repo
</code></pre></div>

<p><br></p>
<p>This would tell Newt that for anything that resolves to the develop 
branch, this repository requires the sterlys-little-repo repository. </p>
<p>Dependencies are resolved circularly by the newt tool, and every 
dependent repository is placed as a sibling in the repos directory. 
Currently, if two repositories have the same name, they will conflict 
and bad things will happen.</p>
<p>When a repository is installed to the repos/ directory, the current 
version of that repository is written to the <code>project.state</code> file.  The 
project state file contains the currently installed version of any given 
repository.  This way, the current set of repositories can be recreated 
from the <code>project.state</code> file reliably, whereas the <code>project.yml</code> file can 
have higher level directives (i.e. include 0.8-stable.)</p>
<h3 id="resolving-dependencies">Resolving dependencies</h3>
<p>At the moment, all dependencies must match, otherwise newt will provide 
an error.  As an example, if you have a set of dependencies such that:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>apache-mynewt-core depends on sterlys-little-repo 0.6-stable
apache-mynewt-core depends on sterlys-big-repo 0.5.1
sterlys-big-repo-0.5.1 depends on sterlys-little-repo 0.6.2
</code></pre></div>

<p><br></p>
<p>where 0.6-stable is 0.6.3, the newt tool will try and resolve the dependency to 
sterlys-little-repo.  It will notice that there are two conflicting 
versions of the same repository, and not perform installation.</p>
<p>In the future Newt will be smarter about loading in all dependencies, 
and then looking to satisfy those dependencies to the best match of all 
potential options.</p>
                        
                        <div class="row">
                            



<ul class="nav nav-pills" style="margin-bottom: 10px">
    <li>
    
    </li>
    <li class="pull-right">
    
    </li>
</ul>
                        </div>
                        <footer class="row">
    <div class="col-xs-12">
        
            <p class="copyright">Apache Mynewt (incubating) is available under Apache License, version 2.0.</p>
        
    </div>
    <div class="col-xs-12">
        <div class="logos">
            <a href="https://www.apache.org/">
                <img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
            </a>
            <p>
                Copyright © 2015-2021 The Apache Software Foundation.<br>
                <small class="footnote">
                    Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt
                    project logo are either registered trademarks or trademarks of the Apache
                    Software Foundation in the United States and other countries.
                </small>
            </p>
            <a href="">
                <img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
            </a>
        </div>
    </div>
    <a href="https://www.apache.org/licenses/">
        <button class="button-footer-asf">
            License
        </button>
    </a>
    <a href="https://www.apache.org/foundation/sponsorship.html">
        <button class="button-footer-asf">
            Sponsorship
        </button>
    </a>
    <a href="https://www.apache.org/foundation/thanks.html">
        <button class="button-footer-asf">
            Thanks
        </button>
    </a>
    <a href="https://www.apache.org/security/">
        <button class="button-footer-asf">
            Security
        </button>
    </a>
    <a href="https://apache.org/events/current-event">
        <button class="button-footer-asf">
            ASF Events
        </button>
    </a>
</footer>
                    </div>
                </div>
            
            
        </div>

        <script src="../../../../js/jquery-1.10.2.min.js"></script>
        <script src="../../../../js/bootstrap-3.0.3.min.js"></script>
        <script src="../../../../js/highlight.pack.js"></script>
        <script src="../../../../js/base.js"></script>
        <script src="../../../../js/custom.js"></script>
            <script src="search/main.js"></script>

    </body>
</html>