Setup recipe for building tools project
This supports both CI and CQ including upload to CIPD.
TC-62
Change-Id: Iceed47a9318a71b89826006e42482877b0342862
diff --git a/README.recipes.md b/README.recipes.md
index 9c5710b..749ffef 100644
--- a/README.recipes.md
+++ b/README.recipes.md
@@ -62,6 +62,7 @@
* [swift_toolchain](#recipes-swift_toolchain) — Recipe for building Swift toolchain.
* [tar:examples/full](#recipes-tar_examples_full)
* [third_party_rust_crates](#recipes-third_party_rust_crates) — Recipe for checking licenses in the repo hosting third-party Rust crates.
+ * [tools](#recipes-tools) — Recipe for building and publishing tools.
* [web_view](#recipes-web_view) — Recipe for building libwebkit.
* [zircon](#recipes-zircon) — Recipe for building Zircon.
## Recipe Modules
@@ -1170,6 +1171,15 @@
Recipe for checking licenses in the repo hosting third-party Rust crates.
— **def [RunSteps](/recipes/third_party_rust_crates.py#31)(api, category, patch_gerrit_url, patch_project, patch_ref, patch_storage, patch_repository_url):**
+### *recipes* / [tools](/recipes/tools.py)
+
+[DEPS](/recipes/tools.py#12): [cipd](#recipe_modules-cipd), [git](#recipe_modules-git), [go](#recipe_modules-go), [jiri](#recipe_modules-jiri), [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/url][recipe_engine/recipe_modules/url]
+
+Recipe for building and publishing tools.
+
+— **def [RunSteps](/recipes/tools.py#76)(api, category, patch_gerrit_url, patch_project, patch_ref, patch_storage, patch_repository_url, project, manifest, remote, revision, target, packages):**
+
+— **def [UploadPackage](/recipes/tools.py#55)(api, name, target, staging_dir, revision, remote):**
### *recipes* / [web\_view](/recipes/web_view.py)
[DEPS](/recipes/web_view.py#11): [fuchsia](#recipe_modules-fuchsia), [gsutil](#recipe_modules-gsutil), [jiri](#recipe_modules-jiri), [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step]
diff --git a/recipes/tools.expected/ci.json b/recipes/tools.expected/ci.json
new file mode 100644
index 0000000..bc0aca9
--- /dev/null
+++ b/recipes/tools.expected/ci.json
@@ -0,0 +1,306 @@
+[
+ {
+ "cmd": [],
+ "name": "ensure_jiri"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/jiri",
+ "-ensure-file",
+ "fuchsia/tools/jiri/linux-amd64 stable",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_jiri.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-stable----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/jiri/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure_go"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/go",
+ "-ensure-file",
+ "infra/go/linux-amd64 version:1.9.4",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_go.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-version:1.9.4---\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/go/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "init",
+ "-v",
+ "-time",
+ "-analytics-opt=false",
+ "-rewrite-sso-to-https=true",
+ "-cache",
+ "[CACHE]/git",
+ "-shared"
+ ],
+ "infra_step": true,
+ "name": "jiri init"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "import",
+ "-v",
+ "-time",
+ "-name",
+ "tools",
+ "tools",
+ "https://fuchsia.googlesource.com/tools"
+ ],
+ "infra_step": true,
+ "name": "jiri import"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "update",
+ "-v",
+ "-time",
+ "-autoupdate=false",
+ "-attempts=3",
+ "-run-hooks=false"
+ ],
+ "infra_step": true,
+ "name": "jiri update"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "run-hooks",
+ "-v",
+ "-time",
+ "-attempts=3"
+ ],
+ "infra_step": true,
+ "name": "jiri run-hooks"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "source-manifest",
+ "-v",
+ "-time",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "jiri source-manifest",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output[source manifest]@{@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"repo_url\": \"https://fuchsia.googlesource.com/manifest\", @@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"revision\": \"4c2b0da3c06341db5cebe4d02c78c93c3b2bd78b\"@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@}@@@",
+ "@@@STEP_LOG_END@json.output[source manifest]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-v",
+ "-time",
+ "-json-output",
+ "/path/to/tmp/json",
+ "tools"
+ ],
+ "infra_step": true,
+ "name": "jiri project",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@[@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"branches\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"(HEAD detached at c22471f)\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ ], @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_branch\": \"\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"name\": \"tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"path\": \"[START_DIR]/path/to/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"remote\": \"https://fuchsia.googlesource.com/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@]@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd",
+ "-ensure-file",
+ "go/cmd/github.com/golang/dep/${platform} version:0.3.2",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_installed",
+ "~followup_annotations": [
+ "@@@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-version:0.3.2---\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"go/cmd/github.com/golang/dep/${platform}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-v",
+ "-time",
+ "-json-output",
+ "/path/to/tmp/json",
+ "tools"
+ ],
+ "name": "jiri project (2)",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@[@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"branches\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"(HEAD detached at c22471f)\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ ], @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_branch\": \"\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"name\": \"tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"path\": \"[START_DIR]/path/to/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"remote\": \"https://fuchsia.googlesource.com/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@]@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/dep",
+ "ensure",
+ "-v",
+ "-vendor-only"
+ ],
+ "cwd": "[START_DIR]/path/to/tools",
+ "env": {
+ "GOPATH": "[START_DIR]/go"
+ },
+ "name": "dep ensure"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/go/bin/go",
+ "test",
+ "-v",
+ "./..."
+ ],
+ "cwd": "[START_DIR]/path/to/tools",
+ "env": {
+ "GOPATH": "[START_DIR]/go",
+ "GOROOT": "[START_DIR]/cipd/go"
+ },
+ "name": "go test"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/go/bin/go",
+ "build",
+ "-v",
+ "fuchsia.googlesource.com/tools/cmd/symbolizer"
+ ],
+ "cwd": "[TMP_BASE]/tools_tmp_1",
+ "env": {
+ "GOARCH": "amd64",
+ "GOOS": "linux",
+ "GOPATH": "[START_DIR]/go",
+ "GOROOT": "[START_DIR]/cipd/go"
+ },
+ "name": "go build"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "search",
+ "fuchsia/tools/symbolizer/linux-amd64",
+ "-tag",
+ "git_revision:c22471f4e3f842ae18dd9adec82ed9eb78ed1127",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[TMP_BASE]/tools_tmp_1",
+ "env": {
+ "GOARCH": "amd64",
+ "GOOS": "linux",
+ "GOPATH": "[START_DIR]/go"
+ },
+ "name": "cipd search fuchsia/tools/symbolizer/linux-amd64 git_revision:c22471f4e3f842ae18dd9adec82ed9eb78ed1127",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"40-chars-fake-of-the-package-instance_id\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/symbolizer/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "cwd": "[TMP_BASE]/tools_tmp_1",
+ "env": {
+ "GOARCH": "amd64",
+ "GOOS": "linux",
+ "GOPATH": "[START_DIR]/go"
+ },
+ "name": "Package is up-to-date"
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+]
\ No newline at end of file
diff --git a/recipes/tools.expected/ci_new.json b/recipes/tools.expected/ci_new.json
new file mode 100644
index 0000000..d69e1b9
--- /dev/null
+++ b/recipes/tools.expected/ci_new.json
@@ -0,0 +1,324 @@
+[
+ {
+ "cmd": [],
+ "name": "ensure_jiri"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/jiri",
+ "-ensure-file",
+ "fuchsia/tools/jiri/linux-amd64 stable",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_jiri.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-stable----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/jiri/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure_go"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/go",
+ "-ensure-file",
+ "infra/go/linux-amd64 version:1.9.4",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_go.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-version:1.9.4---\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/go/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "init",
+ "-v",
+ "-time",
+ "-analytics-opt=false",
+ "-rewrite-sso-to-https=true",
+ "-cache",
+ "[CACHE]/git",
+ "-shared"
+ ],
+ "infra_step": true,
+ "name": "jiri init"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "import",
+ "-v",
+ "-time",
+ "-name",
+ "tools",
+ "tools",
+ "https://fuchsia.googlesource.com/tools"
+ ],
+ "infra_step": true,
+ "name": "jiri import"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "update",
+ "-v",
+ "-time",
+ "-autoupdate=false",
+ "-attempts=3",
+ "-run-hooks=false"
+ ],
+ "infra_step": true,
+ "name": "jiri update"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "run-hooks",
+ "-v",
+ "-time",
+ "-attempts=3"
+ ],
+ "infra_step": true,
+ "name": "jiri run-hooks"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "source-manifest",
+ "-v",
+ "-time",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "jiri source-manifest",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output[source manifest]@{@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"repo_url\": \"https://fuchsia.googlesource.com/manifest\", @@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"revision\": \"4c2b0da3c06341db5cebe4d02c78c93c3b2bd78b\"@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@}@@@",
+ "@@@STEP_LOG_END@json.output[source manifest]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-v",
+ "-time",
+ "-json-output",
+ "/path/to/tmp/json",
+ "tools"
+ ],
+ "infra_step": true,
+ "name": "jiri project",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@[@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"branches\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"(HEAD detached at c22471f)\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ ], @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_branch\": \"\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"name\": \"tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"path\": \"[START_DIR]/path/to/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"remote\": \"https://fuchsia.googlesource.com/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@]@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd",
+ "-ensure-file",
+ "go/cmd/github.com/golang/dep/${platform} version:0.3.2",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_installed",
+ "~followup_annotations": [
+ "@@@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-version:0.3.2---\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"go/cmd/github.com/golang/dep/${platform}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-v",
+ "-time",
+ "-json-output",
+ "/path/to/tmp/json",
+ "tools"
+ ],
+ "name": "jiri project (2)",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@[@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"branches\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"(HEAD detached at c22471f)\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ ], @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_branch\": \"\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"name\": \"tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"path\": \"[START_DIR]/path/to/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"remote\": \"https://fuchsia.googlesource.com/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@]@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/dep",
+ "ensure",
+ "-v",
+ "-vendor-only"
+ ],
+ "cwd": "[START_DIR]/path/to/tools",
+ "env": {
+ "GOPATH": "[START_DIR]/go"
+ },
+ "name": "dep ensure"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/go/bin/go",
+ "test",
+ "-v",
+ "./..."
+ ],
+ "cwd": "[START_DIR]/path/to/tools",
+ "env": {
+ "GOPATH": "[START_DIR]/go",
+ "GOROOT": "[START_DIR]/cipd/go"
+ },
+ "name": "go test"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/go/bin/go",
+ "build",
+ "-v",
+ "fuchsia.googlesource.com/tools/cmd/symbolizer"
+ ],
+ "cwd": "[TMP_BASE]/tools_tmp_1",
+ "env": {
+ "GOARCH": "amd64",
+ "GOOS": "linux",
+ "GOPATH": "[START_DIR]/go",
+ "GOROOT": "[START_DIR]/cipd/go"
+ },
+ "name": "go build"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "search",
+ "fuchsia/tools/symbolizer/linux-amd64",
+ "-tag",
+ "git_revision:c22471f4e3f842ae18dd9adec82ed9eb78ed1127",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[TMP_BASE]/tools_tmp_1",
+ "env": {
+ "GOARCH": "amd64",
+ "GOOS": "linux",
+ "GOPATH": "[START_DIR]/go"
+ },
+ "name": "cipd search fuchsia/tools/symbolizer/linux-amd64 git_revision:c22471f4e3f842ae18dd9adec82ed9eb78ed1127",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": []@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "create",
+ "-pkg-def",
+ "{\"data\": [{\"file\": \"symbolizer\"}], \"install_mode\": \"\", \"package\": \"fuchsia/tools/symbolizer/linux-amd64\", \"root\": \"[TMP_BASE]/tools_tmp_1\"}",
+ "-json-output",
+ "/path/to/tmp/json",
+ "-ref",
+ "latest",
+ "-tag",
+ "git_repository:https://fuchsia.googlesource.com/tools",
+ "-tag",
+ "git_revision:c22471f4e3f842ae18dd9adec82ed9eb78ed1127"
+ ],
+ "cwd": "[TMP_BASE]/tools_tmp_1",
+ "env": {
+ "GOARCH": "amd64",
+ "GOOS": "linux",
+ "GOPATH": "[START_DIR]/go"
+ },
+ "name": "create fuchsia/tools/symbolizer/linux-amd64",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@</br>pkg: fuchsia/tools/symbolizer/linux-amd64</br>id: 40-chars-fake-of-the-package-instance_id@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"40-chars-fake-of-the-package-instance_id\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/symbolizer/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+]
\ No newline at end of file
diff --git a/recipes/tools.expected/cq_try.json b/recipes/tools.expected/cq_try.json
new file mode 100644
index 0000000..b27bce7
--- /dev/null
+++ b/recipes/tools.expected/cq_try.json
@@ -0,0 +1,267 @@
+[
+ {
+ "cmd": [],
+ "name": "ensure_jiri"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/jiri",
+ "-ensure-file",
+ "fuchsia/tools/jiri/linux-amd64 stable",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_jiri.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-stable----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/jiri/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure_go"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/go",
+ "-ensure-file",
+ "infra/go/linux-amd64 version:1.9.4",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_go.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-version:1.9.4---\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/go/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "init",
+ "-v",
+ "-time",
+ "-analytics-opt=false",
+ "-rewrite-sso-to-https=true",
+ "-cache",
+ "[CACHE]/git",
+ "-shared"
+ ],
+ "infra_step": true,
+ "name": "jiri init"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "import",
+ "-v",
+ "-time",
+ "-name",
+ "tools",
+ "tools",
+ "https://fuchsia.googlesource.com/tools"
+ ],
+ "infra_step": true,
+ "name": "jiri import"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "update",
+ "-v",
+ "-time",
+ "-autoupdate=false",
+ "-attempts=3",
+ "-run-hooks=false"
+ ],
+ "infra_step": true,
+ "name": "jiri update"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "run-hooks",
+ "-v",
+ "-time",
+ "-attempts=3"
+ ],
+ "infra_step": true,
+ "name": "jiri run-hooks"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "source-manifest",
+ "-v",
+ "-time",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "jiri source-manifest",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output[source manifest]@{@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"repo_url\": \"https://fuchsia.googlesource.com/manifest\", @@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ \"revision\": \"4c2b0da3c06341db5cebe4d02c78c93c3b2bd78b\"@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@ }@@@",
+ "@@@STEP_LOG_LINE@json.output[source manifest]@}@@@",
+ "@@@STEP_LOG_END@json.output[source manifest]@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-v",
+ "-time",
+ "-json-output",
+ "/path/to/tmp/json",
+ "tools"
+ ],
+ "infra_step": true,
+ "name": "jiri project",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@[@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"branches\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"(HEAD detached at c22471f)\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ ], @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_branch\": \"\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"name\": \"tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"path\": \"[START_DIR]/path/to/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"remote\": \"https://fuchsia.googlesource.com/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@]@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd",
+ "-ensure-file",
+ "go/cmd/github.com/golang/dep/${platform} version:0.3.2",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_installed",
+ "~followup_annotations": [
+ "@@@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-version:0.3.2---\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"go/cmd/github.com/golang/dep/${platform}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-v",
+ "-time",
+ "-json-output",
+ "/path/to/tmp/json",
+ "tools"
+ ],
+ "name": "jiri project (2)",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@[@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"branches\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"(HEAD detached at c22471f)\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ ], @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_branch\": \"\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"name\": \"tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"path\": \"[START_DIR]/path/to/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"remote\": \"https://fuchsia.googlesource.com/tools\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@]@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/dep",
+ "ensure",
+ "-v",
+ "-vendor-only"
+ ],
+ "cwd": "[START_DIR]/path/to/tools",
+ "env": {
+ "GOPATH": "[START_DIR]/go"
+ },
+ "name": "dep ensure"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/go/bin/go",
+ "test",
+ "-v",
+ "./..."
+ ],
+ "cwd": "[START_DIR]/path/to/tools",
+ "env": {
+ "GOPATH": "[START_DIR]/go",
+ "GOROOT": "[START_DIR]/cipd/go"
+ },
+ "name": "go test"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/go/bin/go",
+ "build",
+ "-v",
+ "fuchsia.googlesource.com/tools/cmd/symbolizer"
+ ],
+ "cwd": "[TMP_BASE]/tools_tmp_1",
+ "env": {
+ "GOARCH": "amd64",
+ "GOOS": "linux",
+ "GOPATH": "[START_DIR]/go",
+ "GOROOT": "[START_DIR]/cipd/go"
+ },
+ "name": "go build"
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+]
\ No newline at end of file
diff --git a/recipes/tools.py b/recipes/tools.py
new file mode 100644
index 0000000..cf950b4
--- /dev/null
+++ b/recipes/tools.py
@@ -0,0 +1,160 @@
+# Copyright 2018 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Recipe for building and publishing tools."""
+
+from recipe_engine.recipe_api import Property
+from recipe_engine.config import List
+from recipe_engine import config
+
+import os
+
+DEPS = [
+ 'infra/cipd',
+ 'infra/jiri',
+ 'infra/git',
+ 'infra/go',
+ 'recipe_engine/context',
+ 'recipe_engine/json',
+ 'recipe_engine/path',
+ 'recipe_engine/url',
+ 'recipe_engine/platform',
+ 'recipe_engine/properties',
+ 'recipe_engine/raw_io',
+ 'recipe_engine/step',
+]
+
+PROPERTIES = {
+ 'category':
+ Property(kind=str, help='Build category', default=None),
+ 'patch_gerrit_url':
+ Property(kind=str, help='Gerrit host', default=None),
+ 'patch_project':
+ Property(kind=str, help='Gerrit project', default=None),
+ 'patch_ref':
+ Property(kind=str, help='Gerrit patch ref', default=None),
+ 'patch_storage':
+ Property(kind=str, help='Patch location', default=None),
+ 'patch_repository_url':
+ Property(kind=str, help='URL to a Git repository', default=None),
+ 'project':
+ Property(kind=str, help='Jiri remote manifest project', default=None),
+ 'manifest':
+ Property(kind=str, help='Jiri manifest to use'),
+ 'remote':
+ Property(kind=str, help='Remote manifest repository'),
+ 'revision':
+ Property(kind=str, help='Revision', default=None),
+ 'target':
+ Property(kind=str, help='CIPD target to build', default=None),
+ 'packages':
+ Property(kind=List(str), help='The list of Go packages to build'),
+}
+
+
+def UploadPackage(api, name, target, staging_dir, revision, remote):
+ cipd_pkg_name = 'fuchsia/tools/%s/%s' % (name, target)
+ step = api.cipd.search(cipd_pkg_name, 'git_revision:' + revision)
+ if step.json.output['result']:
+ api.step('Package is up-to-date', cmd=None)
+ return
+
+ pkg_def = api.cipd.PackageDefinition(
+ package_name=cipd_pkg_name,
+ package_root=staging_dir,)
+ pkg_def.add_file(staging_dir.join(name))
+
+ api.cipd.create_from_pkg(
+ pkg_def,
+ refs=['latest'],
+ tags={
+ 'git_repository': remote,
+ 'git_revision': revision,
+ },)
+
+
+def RunSteps(api, category, patch_gerrit_url, patch_project, patch_ref,
+ patch_storage, patch_repository_url, project, manifest, remote,
+ revision, target, packages):
+ api.jiri.ensure_jiri()
+ api.go.ensure_go()
+
+ if not target:
+ target = '%s-%s' % (api.platform.name.replace('win', 'windows'), {
+ 'intel': {
+ 32: '386',
+ 64: 'amd64',
+ },
+ 'arm': {
+ 32: 'armv6',
+ 64: 'arm64',
+ },
+ }[api.platform.arch][api.platform.bits])
+
+ with api.context(infra_steps=True):
+ api.jiri.checkout(manifest, remote, project, patch_ref, patch_gerrit_url,
+ patch_project)
+ if not revision:
+ revision = api.jiri.project([project]).json.output[0]['revision']
+
+ with api.context(infra_steps=True):
+ cipd_dir = api.path['start_dir'].join('cipd')
+ api.cipd.ensure(cipd_dir, {
+ 'go/cmd/github.com/golang/dep/${platform}': 'version:0.3.2',
+ })
+
+ gopath = api.path['start_dir'].join('go')
+
+ path = api.jiri.project([project]).json.output[0]['path']
+ with api.context(cwd=api.path.abs_to_path(path), env={'GOPATH': gopath}):
+ # Ensure all dependencies are present.
+ api.step('dep ensure',
+ [cipd_dir.join('dep'), 'ensure', '-v', '-vendor-only'])
+
+ # Run all the tests.
+ api.go('test', '-v', './...')
+
+ staging_dir = api.path.mkdtemp('tools')
+ goos, goarch = target.split('-')
+
+ with api.context(
+ cwd=staging_dir, env={'GOPATH': gopath,
+ 'GOOS': goos,
+ 'GOARCH': goarch}):
+ for pkg in packages:
+ # Build the package.
+ api.go('build', '-v', pkg)
+
+ if not api.properties.get('tryjob', False):
+ # Upload the package to CIPD.
+ UploadPackage(api,
+ pkg.split('/')[-1], target, staging_dir, revision, remote)
+
+
+def GenTests(api):
+ revision = 'c22471f4e3f842ae18dd9adec82ed9eb78ed1127'
+ target = 'linux-amd64'
+ yield (api.test('ci_new') + api.properties(
+ project='tools',
+ manifest='tools',
+ remote='https://fuchsia.googlesource.com/tools',
+ target=target,
+ packages=['fuchsia.googlesource.com/tools/cmd/symbolizer']) +
+ api.step_data(
+ 'cipd search fuchsia/tools/symbolizer/' + target + ' git_revision:'
+ + revision,
+ api.json.output({
+ 'result': []
+ }),))
+ yield (api.test('ci') + api.properties(
+ project='tools',
+ manifest='tools',
+ remote='https://fuchsia.googlesource.com/tools',
+ packages=['fuchsia.googlesource.com/tools/cmd/symbolizer']))
+ yield (api.test('cq_try') + api.properties(
+ project='tools',
+ manifest='tools',
+ tryjob=True,
+ remote='https://fuchsia.googlesource.com/tools',
+ target=target,
+ packages=['fuchsia.googlesource.com/tools/cmd/symbolizer']))