Build libgit2 as part of Jiri
This is needed since Jiri now depends on git2go.
Change-Id: Ifd881ba5512d58007e61047054d0ef1d405340c9
diff --git a/recipes/jiri.expected/ci.json b/recipes/jiri.expected/ci.json
index 77f11b7..97c5d1f 100644
--- a/recipes/jiri.expected/ci.json
+++ b/recipes/jiri.expected/ci.json
@@ -41,6 +41,7 @@
"cmd": [
"[START_DIR]/cipd/jiri/jiri",
"import",
+ "-overwrite=true",
"jiri",
"https://fuchsia.googlesource.com/manifest"
],
@@ -50,7 +51,8 @@
"cmd": [
"[START_DIR]/cipd/jiri/jiri",
"project",
- "clean"
+ "clean",
+ "-branches=true"
],
"name": "jiri project clean"
},
@@ -113,33 +115,108 @@
"stdout": "/path/to/tmp/"
},
{
+ "cmd": [],
+ "name": "ensure_packages"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "--root",
+ "[START_DIR]/cipd",
+ "--list",
+ "fuchsia/tools/cmake/${platform} latest\nfuchsia/tools/ninja/${platform} latest",
+ "--json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "ensure_packages.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/cmake/${platform}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/ninja/${platform}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n",
+ "[START_DIR]/go/src/fuchsia.googlesource.com/jiri/vendor/github.com/libgit2/git2go/vendor/libgit2/build",
+ "511"
+ ],
+ "name": "makedirs build",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
+ "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
+ "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/bin/cmake",
+ "-GNinja",
+ "-DCMAKE_BUILD_PROGRAM=[START_DIR]/cipd/ninja",
+ "-DCMAKE_BUILD_TYPE=RelWithDebInfo",
+ "-DCMAKE_C_FLAGS=-fPIC",
+ "-DTHREADSAFE=ON",
+ "-DBUILD_CLAR=OFF",
+ "-DBUILD_SHARED_LIBS=OFF",
+ "[START_DIR]/go/src/fuchsia.googlesource.com/jiri/vendor/github.com/libgit2/git2go/vendor/libgit2"
+ ],
+ "cwd": "[START_DIR]/go/src/fuchsia.googlesource.com/jiri/vendor/github.com/libgit2/git2go/vendor/libgit2/build",
+ "name": "configure libgit2"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/ninja"
+ ],
+ "cwd": "[START_DIR]/go/src/fuchsia.googlesource.com/jiri/vendor/github.com/libgit2/git2go/vendor/libgit2/build",
+ "name": "build libgit2"
+ },
+ {
"cmd": [
"[START_DIR]/cipd/go/bin/go",
- "build",
+ "build jiri",
"-ldflags",
"-X \"fuchsia.googlesource.com/jiri/version.GitCommit=deadbeef\" -X \"fuchsia.googlesource.com/jiri/version.BuildTime=2016-10-11 14:40:25-07:00\"",
"-a",
"fuchsia.googlesource.com/jiri/cmd/jiri"
],
"env": {
- "GOARCH": "amd64",
- "GOOS": "linux",
"GOPATH": "[START_DIR]/go",
"GOROOT": "[START_DIR]/cipd/go"
},
- "name": "go build"
+ "name": "go build jiri"
},
{
"cmd": [
"[START_DIR]/cipd/go/bin/go",
- "test",
+ "test jiri",
"fuchsia.googlesource.com/jiri/cmd/jiri"
],
"env": {
"GOPATH": "[START_DIR]/go",
"GOROOT": "[START_DIR]/cipd/go"
},
- "name": "go test"
+ "name": "go test jiri"
},
{
"name": "$result",
diff --git a/recipes/jiri.expected/cq_try.json b/recipes/jiri.expected/cq_try.json
index ef1a07f..c0777c8 100644
--- a/recipes/jiri.expected/cq_try.json
+++ b/recipes/jiri.expected/cq_try.json
@@ -41,6 +41,7 @@
"cmd": [
"[START_DIR]/cipd/jiri/jiri",
"import",
+ "-overwrite=true",
"jiri",
"https://fuchsia.googlesource.com/manifest"
],
@@ -50,7 +51,8 @@
"cmd": [
"[START_DIR]/cipd/jiri/jiri",
"project",
- "clean"
+ "clean",
+ "-branches=true"
],
"name": "jiri project clean"
},
@@ -123,33 +125,108 @@
"stdout": "/path/to/tmp/"
},
{
+ "cmd": [],
+ "name": "ensure_packages"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "--root",
+ "[START_DIR]/cipd",
+ "--list",
+ "fuchsia/tools/cmake/${platform} latest\nfuchsia/tools/ninja/${platform} latest",
+ "--json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "ensure_packages.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/cmake/${platform}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/ninja/${platform}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n",
+ "[START_DIR]/go/src/fuchsia.googlesource.com/jiri/vendor/github.com/libgit2/git2go/vendor/libgit2/build",
+ "511"
+ ],
+ "name": "makedirs build",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
+ "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
+ "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
+ "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@",
+ "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@",
+ "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/bin/cmake",
+ "-GNinja",
+ "-DCMAKE_BUILD_PROGRAM=[START_DIR]/cipd/ninja",
+ "-DCMAKE_BUILD_TYPE=RelWithDebInfo",
+ "-DCMAKE_C_FLAGS=-fPIC",
+ "-DTHREADSAFE=ON",
+ "-DBUILD_CLAR=OFF",
+ "-DBUILD_SHARED_LIBS=OFF",
+ "[START_DIR]/go/src/fuchsia.googlesource.com/jiri/vendor/github.com/libgit2/git2go/vendor/libgit2"
+ ],
+ "cwd": "[START_DIR]/go/src/fuchsia.googlesource.com/jiri/vendor/github.com/libgit2/git2go/vendor/libgit2/build",
+ "name": "configure libgit2"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/ninja"
+ ],
+ "cwd": "[START_DIR]/go/src/fuchsia.googlesource.com/jiri/vendor/github.com/libgit2/git2go/vendor/libgit2/build",
+ "name": "build libgit2"
+ },
+ {
"cmd": [
"[START_DIR]/cipd/go/bin/go",
- "build",
+ "build jiri",
"-ldflags",
"-X \"fuchsia.googlesource.com/jiri/version.GitCommit=deadbeef\" -X \"fuchsia.googlesource.com/jiri/version.BuildTime=2016-10-11 14:40:25-07:00\"",
"-a",
"fuchsia.googlesource.com/jiri/cmd/jiri"
],
"env": {
- "GOARCH": "amd64",
- "GOOS": "linux",
"GOPATH": "[START_DIR]/go",
"GOROOT": "[START_DIR]/cipd/go"
},
- "name": "go build"
+ "name": "go build jiri"
},
{
"cmd": [
"[START_DIR]/cipd/go/bin/go",
- "test",
+ "test jiri",
"fuchsia.googlesource.com/jiri/cmd/jiri"
],
"env": {
"GOPATH": "[START_DIR]/go",
"GOROOT": "[START_DIR]/cipd/go"
},
- "name": "go test"
+ "name": "go test jiri"
},
{
"name": "$result",
diff --git a/recipes/jiri.py b/recipes/jiri.py
index c840de9..851f88a 100644
--- a/recipes/jiri.py
+++ b/recipes/jiri.py
@@ -9,12 +9,14 @@
DEPS = [
+ 'infra/cipd',
'infra/jiri',
'infra/git',
'infra/go',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/raw_io',
+ 'recipe_engine/shutil',
'recipe_engine/step',
]
@@ -37,8 +39,8 @@
api.jiri.ensure_jiri()
api.jiri.init()
- api.jiri.import_manifest(manifest, remote)
- api.jiri.clean_project()
+ api.jiri.import_manifest(manifest, remote, overwrite=True)
+ api.jiri.clean_project(branches=True)
api.jiri.update(gc=True)
if patch_ref is not None:
@@ -46,9 +48,12 @@
api.go.ensure_go()
- gitdir = api.path['start_dir'].join(
+ jiri_dir = api.path['start_dir'].join(
'go', 'src', 'fuchsia.googlesource.com', 'jiri')
- with api.step.context({'cwd': gitdir}):
+ git2go_dir = jiri_dir.join('vendor', 'github.com', 'libgit2', 'git2go')
+ libgit2_dir = git2go_dir.join('vendor', 'libgit2')
+
+ with api.step.context({'cwd': jiri_dir}):
git_commit = api.git.get_hash()
result = api.step('date', ['date', '--rfc-3339=seconds'],
stdout=api.raw_io.output(),
@@ -58,14 +63,37 @@
ldflags = "-X \"fuchsia.googlesource.com/jiri/version.GitCommit=%s\" -X \"fuchsia.googlesource.com/jiri/version.BuildTime=%s\"" % (git_commit, build_time)
gopath = api.path['start_dir'].join('go')
- goos, goarch = target.split("-", 2)
- with api.step.context({'env': {'GOPATH': gopath, 'GOOS': goos, 'GOARCH': goarch}}):
- api.go('build', '-ldflags', ldflags, '-a',
+ with api.step.nest('ensure_packages'):
+ with api.step.context({'infra_step': True}):
+ cipd_dir = api.path['start_dir'].join('cipd')
+ api.cipd.ensure(cipd_dir, {
+ 'fuchsia/tools/cmake/${platform}': 'latest',
+ 'fuchsia/tools/ninja/${platform}': 'latest',
+ })
+
+ build_dir = libgit2_dir.join('build')
+ api.shutil.makedirs('build', build_dir)
+ with api.step.context({'cwd': build_dir}):
+ api.step('configure libgit2', [
+ cipd_dir.join('bin', 'cmake'),
+ '-GNinja',
+ '-DCMAKE_BUILD_PROGRAM=%s' % cipd_dir.join('ninja'),
+ '-DCMAKE_BUILD_TYPE=RelWithDebInfo',
+ '-DCMAKE_C_FLAGS=-fPIC',
+ '-DTHREADSAFE=ON',
+ '-DBUILD_CLAR=OFF',
+ '-DBUILD_SHARED_LIBS=OFF',
+ libgit2_dir,
+ ])
+ api.step('build libgit2', [cipd_dir.join('ninja')])
+
+ with api.step.context({'env': {'GOPATH': gopath}}):
+ api.go('build jiri', '-ldflags', ldflags, '-a',
'fuchsia.googlesource.com/jiri/cmd/jiri')
with api.step.context({'env': {'GOPATH': gopath}}):
- api.go('test', 'fuchsia.googlesource.com/jiri/cmd/jiri')
+ api.go('test jiri', 'fuchsia.googlesource.com/jiri/cmd/jiri')
def GenTests(api):