This document describes policies for importing external dependencies.
All external dependencies must be pinned to a specific git hash or CIPD package version using a JIRI manifest. This policy prevents changes in other repositories from breaking the Fuchsia build.
Repositories hosted on external servers, such has
chromium.googlesource.com
, must use a<project>
element in a JIRI manifest with aname
attribute of the following form:external/<hostname>/path/to/repo
. This naming scheme ensures that multiple references to the same external repository have consistent manifest values.Dependencies that contain non-standard license or rights holder must use a
<project>
element in a JIRI manifest with apath
attribute that begins withthird_party/
.Fuchsia has a one version policy for source code dependencies. Specifically, a given piece of source code can be imported at most once and everything that depends on that code must use the same version of the code. Prebuilt dependencies are not subject to the one version policy.
Modes of operation
Source code dependencies operates in one of two modes:
Tracking upstream. When a repository is tracking upstream, the Fuchsia project is not the source of truth for the code in that repository. Instead, we incorporate updated versions of the code periodically from an upstream repository, typically controlled by another group of people (e.g., another open source project).
When tracking upstream, we typically create a mirror of the repository in the
third_party
directory with the same name as the upstream project in order to ensure the availability of the code for the Fuchsia build. Themain
branch should point at the ref used by Fuchsia -- typically a version tag. Branches that exist in the upstream repo are present in our mirror, prefixed withupstream/
(e.g.,foo
becomesupstream/foo
).Any local modifications to the code (e.g., to integrate with the build or the platform) should be landed in the
main
branch. When we fetch upstream changes, we merge ourmain
branch with upstream so that themain
branch contains both the updated upstream code and our local modifications.In the Fuchsia parlance, third party repos that are tracking upstream are NOT considered "forks".
Source of truth. When a repository is the source of truth, the Fuchsia project controls the code in the repository. Projects that originate with the Fuchsia project operate in this mode (i.e., because there is no upstream that could be tracked), but sometimes we will use another project as the starting point for a repository and create a fork of the original project. When we create a fork of an existing project, we pick a new name for our project to avoid confusion.
A repository that is the source of truth might be in the
third_party
directory or it might not be in thethird_party
directory, depending on its license (e.g., because we used a project with a non-standard license as a starting point).