blob: d1e60c7717aa96909a18a7b09551bdf812215def [file] [log] [blame]
<!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">
<title>Create a Repo out of a Project &mdash; Apache Mynewt latest documentation</title>
<link rel="shortcut icon" href="../../_static/mynewt-logo-only-newt32x32.png"/>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/sphinx_theme.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/bootstrap-3.0.3.min.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/v2.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/custom.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/restructuredtext.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../../genindex.html"/>
<link rel="search" title="Search" href="../../search.html"/>
<link rel="top" title="Apache Mynewt latest documentation" href="../../index.html"/>
<link rel="up" title="Adding Repositories to your Project" href="add_repos.html"/>
<link rel="next" title="Accessing a private repository" href="private_repo.html"/>
<link rel="prev" title="Adding Repositories to your Project" href="add_repos.html"/>
<script src="../../_static/js/modernizr.min.js"></script>
<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="not-front page-documentation" role="document" >
<div id="wrapper">
<div class="container">
<div id="banner" class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="../../_static/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.11.0, Apache NimBLE 1.6.0 </a> released September 7, 2023)
</div>
</div>
</div>
</div>
<header>
<nav id="navbar" class="navbar navbar-inverse" 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>
<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>
<a href="/about/">About</a>
</li>
<li>
<a href="/talks/">Talks</a>
</li>
<li class="active">
<a href="/documentation/">Documentation</a>
</li>
<li>
<a href="/download/">Download</a>
</li>
<li>
<a href="/community/">Community</a>
</li>
<li>
<a href="/events/">Events</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
</ul>
</div>
</div>
</nav>
</header>
<!-- STARTS MAIN CONTENT -->
<div id="main-content">
<div id="breadcrumb">
<div class="container">
<a href="/documentation/">Docs</a> /
<a href="../tutorials.html">Tutorials</a> /
<a href="add_repos.html">Adding Repositories to your Project</a> /
Create a Repo out of a Project
<div class="sourcelink">
<a href="https://github.com/apache/mynewt-documentation/edit/master/docs/tutorials/repo/create_repo.rst" class="icon icon-github"
rel="nofollow"> Edit on GitHub</a>
</div>
</div>
</div>
<!-- STARTS CONTAINER -->
<div class="container">
<!-- STARTS .content -->
<div id="content" class="row">
<!-- STARTS .container-sidebar -->
<div class="container-sidebar col-xs-12 col-sm-3">
<div id="docSidebar" class="sticky-container">
<div role="search" class="sphinx-search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search documentation" class="search-documentation" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<!-- Note: only works when deployed -->
<select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest" selected>
Version: latest
</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" selected="selected" >
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" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select>
<div class="region region-sidebar">
<div class="docs-menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../get_started/index.html">Setup &amp; Get Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../concepts.html">Concepts</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../tutorials.html">Tutorials</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../blinky/blinky.html">Project Blinky</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="add_repos.html">Working with repositories</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">Create a Repo out of a Project</a></li>
<li class="toctree-l3"><a class="reference internal" href="private_repo.html">Accessing a private repository</a></li>
<li class="toctree-l3"><a class="reference internal" href="upgrade_repo.html">Upgrade a repo</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../slinky/project-slinky.html">Project Slinky for Remote Comms</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ble/ble.html">Bluetooth Low Energy</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lora/lorawanapp.html">LoRa</a></li>
<li class="toctree-l2"><a class="reference internal" href="../os_fundamentals/os_fundamentals.html">OS Fundamentals</a></li>
<li class="toctree-l2"><a class="reference internal" href="../devmgmt/devmgmt.html">Remote Device Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../sensors/sensors.html">Sensors</a></li>
<li class="toctree-l2"><a class="reference internal" href="../tooling/tooling.html">Tooling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../other/other.html">Other</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../external_links.html">Third-party Resources</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../os/os_user_guide.html">OS User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../network/index.html">BLE User Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../newt/index.html">Newt Tool Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../newtmgr/index.html">Newt Manager Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../mynewt_faq/index.html">Mynewt FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../misc/index.html">Appendix</a></li>
</ul>
</div>
</div>
</div>
<!-- ENDS STICKY CONTAINER -->
</div>
<!-- ENDS .container-sidebar -->
<div class="col-xs-12 col-sm-9">
<div class="alert alert-warning">
<p>
Version 1.9.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>
<div class="">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="create-a-repo-out-of-a-project">
<h1>Create a Repo out of a Project<a class="headerlink" href="#create-a-repo-out-of-a-project" title="Permalink to this headline"></a></h1>
<p>In order to create a repository out of a project, all you need to do is
create a <code class="docutils literal notranslate"><span class="pre">repository.yml</span></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 will be added
soon.</p>
<p>The repository.yml defines all versions of the repository and the
corresponding source control tags that these versions correspond to. As
an example, if the repository.yml file has the following content, it
means there is one version of the apache-mynewt-core operating system
available, which is <code class="docutils literal notranslate"><span class="pre">0.0.0</span></code> (implying we haven’t released yet!). Such
a version number corresponds to the “develop” branch in this repository.
<code class="docutils literal notranslate"><span class="pre">0-latest</span></code> would also resolved to this same <code class="docutils literal notranslate"><span class="pre">0.0.0</span></code> version. The
next section explains the versioning system a bit more.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ 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;
</pre></div>
</div>
<div class="section" id="where-should-the-repository-yml-file-be">
<h2>Where should the repository.yml file be?<a class="headerlink" href="#where-should-the-repository-yml-file-be" title="Permalink to this headline"></a></h2>
<p>The <code class="docutils literal notranslate"><span class="pre">repository.yml</span></code> file lives only in the master branch of the git
repository. <code class="docutils literal notranslate"><span class="pre">Newt</span></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 class="docutils literal notranslate"><span class="pre">repository.yml</span></code> file from a certain snapshot of
apache-Mynewt-core:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>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;
</pre></div>
</div>
<p>It contains the following:</p>
<ul class="simple">
<li><p><strong>repo.name</strong> The external name that is used to include the library
in your <code class="docutils literal notranslate"><span class="pre">project.yml</span></code> file. This is the name you include in the
<code class="docutils literal notranslate"><span class="pre">project.repositories</span></code> variable when adding this repository to your
project.</p></li>
<li><p><strong>repo.versions</strong> A description of what versions to give the user
depending on the settings in their <code class="docutils literal notranslate"><span class="pre">project.yml</span></code> file. See below
for a thorough description on versioning. Its a flexible mapping
between version numbers and git branches.</p></li>
</ul>
</div>
<div class="section" id="repo-version-specification">
<h2>Repo Version Specification<a class="headerlink" href="#repo-version-specification" title="Permalink to this headline"></a></h2>
<p>The version field argument for a repo has the following format:</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">&lt;major_num&gt;.&lt;minor_num&gt;.&lt;revision_num&gt;</span>
</pre></div>
</div>
<p>or</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">&lt;major_num&gt;.&lt;minor_num&gt;-&lt;stability string&gt;</span>
</pre></div>
</div>
<p>or</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">&lt;major_num&gt;-&lt;stability string&gt;</span>
</pre></div>
</div>
<p>The stability string can be one of 3 pre-defined stability values.</p>
<ol class="arabic simple">
<li><p>stable – A stable release version of the repository</p></li>
<li><p>dev – A development version from the repository</p></li>
<li><p>latest – The latest from the repository</p></li>
</ol>
<p>In your <code class="docutils literal notranslate"><span class="pre">project.yml</span></code> file you can specify different combinations of
the version number and stability value. For example:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">1-latest</span></code> – The latest version with major number 1</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">1.2-stable</span></code> – The latest stable version with major and minor
number 1.2</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">1.2-dev</span></code> – The development version from 1.2</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">1.1.1</span></code> – a specific version 1.1.1</p></li>
</ul>
<p>You <strong>cannot</strong> specify a stability string with a fully numbered version,
e.g.</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">1.2.8-stable</span>
</pre></div>
</div>
</div>
<div class="section" id="repo-version-resolution">
<h2>Repo Version Resolution<a class="headerlink" href="#repo-version-resolution" title="Permalink to this headline"></a></h2>
<p>A <code class="docutils literal notranslate"><span class="pre">repository.yml</span></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="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">repo.versions:</span>
<span class="go"> &quot;0.8.0&quot;: &quot;xxx_branch_0_8_0&quot;</span>
<span class="go"> &quot;1.0.0&quot;: &quot;xxx_branch_1_0_0&quot;</span>
<span class="go"> &quot;1.0.2&quot;: &quot;xxx_branch_1_0_2&quot;</span>
<span class="go"> &quot;1.1.1&quot;: &quot;xxx_branch_1_1_0&quot;</span>
<span class="go"> &quot;1.1.2&quot;: &quot;xxx_branch_1_1_2&quot;</span>
<span class="go"> &quot;1.2.0&quot;: &quot;xxx_branch_1_2_0&quot;</span>
<span class="go"> &quot;1.2.1&quot;: &quot;xxx_branch_1_2_1&quot;</span>
<span class="go"> &quot;1.2-dev&quot;: &quot;1.2.1&quot;</span>
<span class="go"> &quot;1-dev&quot;: &quot;1.2-dev&quot;</span>
<span class="go"> &quot;1.2-stable&quot;: &quot;1.2.0&quot;</span>
<span class="go"> &quot;0-latest&quot;: &quot;0.8.0&quot;</span>
<span class="go"> &quot;1-latest&quot;: &quot;1-dev&quot;</span>
<span class="go"> ....</span>
</pre></div>
</div>
<p>When the <code class="docutils literal notranslate"><span class="pre">project.yml</span></code> file asks for <code class="docutils literal notranslate"><span class="pre">1.2-stable</span></code> it will be
resolved to version <code class="docutils literal notranslate"><span class="pre">1.2.0</span></code> which in turn will resolve to a specific
branch <code class="docutils literal notranslate"><span class="pre">xxx_branch_1_2_0</span></code>. This is the branch that <code class="docutils literal notranslate"><span class="pre">newt</span></code> will fetch
into the project with that <code class="docutils literal notranslate"><span class="pre">project.yml</span></code> file.</p>
</div>
<div class="section" id="dependencies-on-other-repos">
<h2>Dependencies on other repos<a class="headerlink" href="#dependencies-on-other-repos" title="Permalink to this headline"></a></h2>
<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="highlight-none notranslate"><div class="highlight"><pre><span></span>develop.repositories:
sterlys-little-repo:
type: github
vers: 0.8-latest
user: sterlinghughes
repo: sterlys-little-repo
</pre></div>
</div>
<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 “project.state” 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 project.state file reliably, whereas the project.yml file can
have higher level directives (i.e. include 0.8-stable.)</p>
</div>
<div class="section" id="resolving-dependencies">
<h2>Resolving dependencies<a class="headerlink" href="#resolving-dependencies" title="Permalink to this headline"></a></h2>
<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="highlight-none notranslate"><div class="highlight"><pre><span></span>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
</pre></div>
</div>
<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>
</div>
</div>
</div>
<div class="rst-footer-buttons row" role="navigation" aria-label="footer navigation">
<a href="private_repo.html" class="btn btn-neutral float-right" title="Accessing a private repository" accesskey="n">Next: Accessing a private repository <span class="fa fa-arrow-circle-right"></span></a>
<a href="add_repos.html" class="btn btn-neutral" title="Adding Repositories to your Project" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous: Adding Repositories to your Project</a>
</div>
</div>
</div>
</div>
<!-- ENDS CONTENT SECTION -->
</div>
<!-- ENDS .content -->
</div>
</div>
<footer>
<div class="container">
<div class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<img src="../../_static/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
<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>
<a href="">
<img src="../../_static/img/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
</div>
</div>
</footer>
</div>
<!-- ENDS #wrapper -->
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../../',
VERSION:'latest',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
LINK_SUFFIX: '.html'
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/js/bootstrap-3.0.3.min.js"></script>
<script type="text/javascript" src="../../_static/js/affix.js"></script>
<script type="text/javascript" src="../../_static/js/main.js"></script>
</body>
</html>