| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
Change-Id: I0c175649bd98067ea69d471ebe6880aac5a25598
|
|
|
|
|
|
|
|
|
|
| |
Commit bd788c7219d8b ("Implement partial builds") caused the
original_ref metadata to be lost in some cases. This meant that the
metadata for built systems would have original_ref set to a SHA1
hex string, instead of the original named ref that the system was
built from.
Change-Id: Id31654ad60b411206ccc7ee70b46f005baa209ef
|
|
|
|
| |
Change-Id: I3c4b4f687703ab665841a3527044d0f669135513
|
|
|
|
|
|
|
| |
Calculate the build graph and find the artifact which is referred to
by the ArtifactReference which was deserialised.
Change-Id: Icbef90932979fc1a18daf0dedac16f4429f56349
|
|
|
|
|
|
|
| |
This check is intended for local builds, not distbuilds. Much less disk
space is needed to distbuild.
Change-Id: Iaff77805119129cbf6584de418ef97c7f1b82ad8
|
|
|
|
|
|
|
|
|
|
|
|
| |
Remove documentation specific to certain .configure and .write
extensions, and point the user to `morph help-extensions` and `morph
help xxx.write` instead.
Don't mention the deprecated nfsboot.write extension.
Other small cleanups.
Change-Id: Ie7ed030c71ade4876aafb3d8a43e864a28ddc279
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds two fields to deployment (cluster) .morph files:
'upgrade-type' and 'upgrade-location'.
The `morph deploy` command ignores these. The `morph upgrade` command
will honour them if present, instead of the existing 'type' and
'location' fields. If they are not present, `morph upgrade` will give
a warning, and will use the 'type' and 'location' fields as before.
This avoids the need to edit the deployment .morph file after deploying
a system.
Small detail: the 'type' and 'location' variables are no longer removed
from the environment that is passed to the .configure and .write
extensions. This shouldn't affect anything.
Change-Id: Id2a4e4f229b8adebdb57eded2049ac113a82a4be
|
|
|
|
|
|
|
| |
This behaviour is complex, it shouldn't be hidden away in a larger
function.
Change-Id: I953c9477e0210d395b97f5f8219eaebe4dbcd272
|
|
|
|
|
|
|
|
|
|
| |
Add InitiatorListJobs class and list-jobs message template, add
distbuild-list-jobs to morph commandlist, send running job
information back to initiator, split out handling of build request
and list-jobs messages to separate functions and change generating
a random integer to UUID for message identification
Change-Id: Id02604f2c1201dbc10f6bbd7f501b8ce1ce0deae
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In addition to partial builds we also want to be able to do partial
distbuilds, and distbuild uses a different codepath.
This commit updates the distbuild code to know what to do if a partial
build is requested. It only builds up to the latest chunk/stratum that
was requested, and displays where to find the artifacts for each of
the chunks/strata requested upon completion of the build.
The usage is the same as for local builds.
Change-Id: I0537f74e2e65c7aefe5e71795f17999e2415fce5
|
|
|
|
|
|
|
|
|
|
|
| |
Currently does three checks:
1. Checks that all chunks in given system(s) have sha1 refs.
2. Checks that all sha1 refs are anchored.
Unanchored refs can be removed on `git gc`.
3. Checks that all chunk repos are on the trove-host.
Change-Id: Iaf105b1614a45616684e68a08f28b8529d4321fa
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit allows you to build only a single chunk or stratum and its
dependencies, instead of a whole system. This will be useful for
developers who want to quickly check the build commands of a chunk for
example. You can give more than one chunk or stratum to the command,
and the build will run up to the latest one, building the dependencies
of both.
An example of the usage:
morph build systems/devel-system-x86_64-generic.morph \
strata/build-essential.morph strata/core/curl.morph
This will only build up to curl in the core stratum.
Change-Id: Id55b8335fc61e8fdf847f5e383cfedd13d07e6d2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The temporary build branch (--local-changes=include) feature can be
convenient, but it is also slow, and causes the resulting system to be
'unreproducible' (built from temporary commits).
Before:
$ morph build systems/devel-system-x86_64-generic.morph
2015-03-31 10:47:18 Starting build 53546647f92a4283bf96e33ea93e767e
2015-03-31 10:47:18 Collecting morphologies involved in building systems/devel-system-x86_64-generic.morph from master
2015-03-31 10:47:25 Building file:///src/ws/master/baserock/baserock/definitions 7735ec20d13490058a3d7758f79471637ce1ae71 systems/devel-system-x86_64-generic.morph
2015-03-31 10:47:25 Deciding on task order
...
After:
$ morph build systems/devel-system-x86_64-generic.morph
2015-03-31 10:46:21 Looking for uncommitted changes (pass --local-changes=ignore to skip)
2015-03-31 10:46:21 Creating temporary branch in /src/ws/master/baserock/baserock/definitions named refs/heads/baserock/builds/f0b21fe240b244edb7e4142b6e201658/8df11f234ab24d22a9616ce911542332
2015-03-31 10:46:28 Building file:///src/ws/master/baserock/baserock/definitions 7735ec20d13490058a3d7758f79471637ce1ae71 systems/devel-system-x86_64-generic.morph
2015-03-31 10:46:28 Deciding on task order
...
Change-Id: I21a3e65c29adf0b07f743289c6b3f0f4dddc34be
|
|
|
|
|
|
|
| |
In the native build phase, building of cmake will fail if the order of
pathes in $PATH is twisted. So we set it to fixed to avoid problem.
Change-Id: I6b4d3ed3d5331c2db4f5f3324207fabb4310985c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Usefully, this provides the resolved repo URL, which may be
aliased in the actual defintions. This makes it easier to
use a workflow that avoids `morph edit`. Resolved repo URLs
can be git cloned.
It also provides other info about the chunk. In the case
of multiple strata containing the same chunk name, the tool
lists them all, saying which stratum they come from.
Example output:
# morph get-chunk-details libpng
In stratum graphics-common:
Chunk: libpng
Repo: git://git.baserock.org/delta/libpng
Ref: 259fb7761d747655c607efcec7a12ff1f3c24561
Change-Id: I6b540e38d9521f3f473b51c9031e508ddcb458ee
|
| |
|
|
|
|
| |
Change-Id: Ibda7a938cd16e35517a531140f39ef4664d85c72
|
|\ |
|
| |
| |
| |
| | |
Change-Id: I992dc0c1d40f563ade56a833162d409b02be90a0
|
| |
| |
| |
| | |
Change-Id: I771c3de9cecda7a503f4d36ae5d9fabc040892e4
|
|/
|
|
| |
Change-Id: I7c6f618d5d19e03d906798a6f799d74ac55b0d09
|
|\
| |
| |
| |
| | |
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk>
Reviewed-By: Richard Maw <richard.maw@codethink.co.uk>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It gets messy having hundreds of build-step-xx.log files in the current
directory, and if two builds are run in parallel from the same directory
the logs for a given chunk will be mixed together in one file.
Now, a new directory named build-0, build-1, build-2 etc is created for
each new build.
If the user passes --initiator-step-output-dir the logs will be placed
in that directory, instead. This behaviour is the same as before.
|
|/
|
|
|
|
|
|
|
|
|
|
| |
This uses the PyLRU module, from:
<https://pypi.python.org/pypi/pylru/1.0.6>.
Python 3.2 and newer provide a built-in LRU cache, but this is
specifically for in-memory use. See <http://bugs.python.org/issue17528>.
Git commits are immutable, so caching information about their contents
is fairly easy and trouble-free. There's no danger of the cache becoming
stale.
|
| |
|
|
|
|
|
|
|
|
| |
This is another situation where builds could hang forever if the server
is misconfigured.
Longer term, workers should be able to come and go dynamically without
needing to reconfigure and restart the controller process.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently the build commands treat the system argument
as a path relative to the root repo.
This means that regardless of your working directory you must run
morph build systems/foo-system.morph
This behaviour can be confusing, for example when your working
directory is $systembranch/definitions/systems you might expect
to be able to run
morph build foo-system.morph
especially since most shells would tab-complete the filename for you.
At the moment running the above command from $systembranch/definitions/systems
would result in an error, because morph would look for
$systembranch/definitions/foo-system.morph rather than
$systembranch/definitions/systems/foo-system.morph
This behaviour also means you can't give the morph build commands
an absolute path to a system morph.
This patch changes the treatment of the system arg so that it is interpreted
relative to the current working directory.
|
|\
| |
| |
| |
| | |
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk>
Reviewed-By: Richard Ipsum <richard.ipsum@codethink.co.uk>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Not everyone is a fan of the `morph build` magic that collects up your
changes and puts them in a temporary branch. Now you can disable it by
setting 'local-changes=ignore' in your morph.conf file.
This speeds up `morph build` and `morph deploy` by 5-10 seconds on my
machine.
I looked an option to make `morph build` warn if there are uncommitted
changes. I found that with a cold cache, it takes about 5 seconds on my
machine to verify that there are no uncommitted changes to a checkout of
definitions.git. That defeats the main purpose of this patch for me, so
I didn't include the option.
|
|\ \
| |/
|/|
| |
| | |
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk>
Reviewed-By: Richard Maw <richard.maw@codethink.co.uk>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This consolidates a bunch of code paths that were previously duplicated.
This also changes the API for local cached repos to match the
function names GitDirectory uses. Note that the remote repo cache still
uses the old names, and should be fixed when time permits.
Some unit tests that use the CachedRepo module required a bit of
inelegant monkey-patching in order that they continue to work. A better
way to do this would be with the 'mock' library (which would need to be
added to Baserock 'build' and 'devel' systems before we could use it).
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
The user should be aware of this because if they aren't building
baserock:baserock/definitions or a repo forked from it, those extensions
won't be available.
Also fix some long lines that I seem to have failed to commit already.
|
|/ |
|
| |
|
|
|
|
|
| |
- Document different ways of calling parameters
- Allowed values for boolean parameters
|
|
|
|
|
| |
Silly mistake caused this to be broken, and there are no tests for this
command inside the morph.git source tree.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit c63f4e61f69820c71c2d8e9b96ce9bdec0d476a1.
This change was introduced back when the Baserock system definitions
used named Git refs rather than exact SHA1s. Morph would thus need to
update each repo involved in a build and resolve each ref before it
could build. Now that the system definitions use SHA1s, the 'updating
gits' phase is much less slow.
The problem with forcing 'no-git-update' is that it makes `morph deploy`
depend on the remote repo cache. In the case that all repos involved in
the build are avaiable in the remote repo cache (Trove), there is no
need for them to have been cached locally just to construct a build
graph. But if the network connection to the Trove is unreliable Morph
will need to fall back to the local repo cache. Unless Morph has done a
full local build of the system being built, it might not have every repo
cached locally. Often, cached artifacts from the Trove or distbuild may
be used instead of locally building everything.
In this case the user sees `morph deploy` failing with errors such as:
Repository upstream:binutils-redhat is not cached yet
|
|
|
|
|
|
|
|
| |
This code is an essential part of 'morph build'. It's quite complex and
really shouldn't be mixed in with the base Application class.
Given a dedicated class we can store some state in the object and avoid
functions with seven parameters, too.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The GitDirectory() constructor, if passed a 'dirname' that doesn't
contain a '.git' subdirectory, can search upwards to find the real root
of the repository. This is used by the `add-binary`, `push`, and `pull`
commands.
This causes very confusing behaviour in the case that 'dirname' points to
a directory that should be a Git repository, but isn't, and that directory
is a path inside the working tree of another Git repository. Rather than
raising an error, in this case the GitDirectory class would perform
operations on a different repository to the one the caller expected.
This 'search_for_root' behaviour is now opt-in, to avoid confusion.
|
| |
|
|\
| |
| |
| |
| | |
Reviewed-By: Richard Ipsum <richard.ipsum@codethink.co.uk>
Reviewed-By: Richard Maw <richard.maw@codethink.co.uk>
|
|/
|
|
|
|
|
|
|
|
|
| |
The recent changes to the BuildCommand.build() function caused distbuild
to break, because I didn't make the same change to the
InitiatorBuildCommand.build() function but did change how it was called.
This commit adds the ability to have optional fields in distbuild
messages. This is used to add an optional 'original_ref' field, which
will get passed to `morph serialise-artifact` by new distbuild
controllers, and will be ignored by older ones.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Most usefully, this patch means that Morph no longer updates its cached
copy of definitions.git every time you run `morph build`.
Also, it prevents confusion in the following situation. Imagine I have
run:
morph checkout baserock:baserock/definitions master
I then wait a while, during which time someone pushes to 'master' in the
definitions.git repo that I cloned from. Now I run:
cd master
morph build systems/whatever.morph
Which commit does it build, the local head of 'master' or the remote
head of 'master'?
The answer, both before and after this patch, is that it builds the
local version of master. But previously, this only happened because of
the magic that we have to detect local changes. With this patch, the
local change detection could be disabled and `morph build` would still
build what the user had checked out as 'master' locally, not whatever
'master' pointed to in the remote repo.
|
|
|
|
|
|
|
|
|
| |
Rather than take a list of triplets to build, the BuildCommand.build()
function now takes a single repo/ref/morph triplet. Iterating through
multiple sets of triplets is now done in the build plugin.
There are a couple of cosmetic changes to the status output at the start
and end of a build as a result.
|
|
|
|
|
| |
Previously it was incorrect in the `morph help` output and in Morph's
man page.
|
|
|
|
| |
It was broken by the per-source building changes.
|
| |
|
| |
|