summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/files/layers.example.json72
-rw-r--r--meta/files/layers.schema.json91
-rw-r--r--meta/lib/oeqa/selftest/cases/bblayers.py16
3 files changed, 178 insertions, 1 deletions
diff --git a/meta/files/layers.example.json b/meta/files/layers.example.json
new file mode 100644
index 0000000000..3772404ec9
--- /dev/null
+++ b/meta/files/layers.example.json
@@ -0,0 +1,72 @@
1{
2 "sources": {
3 "meta-alex": {
4 "contains_this_file": true,
5 "git-remote": {
6 "branch": "master",
7 "describe": "",
8 "remotes": {
9 "remote-alex": {
10 "uri": "https://github.com/kanavin/meta-alex"
11 }
12 },
13 "rev": "05b25605fb8b2399e4706d7323828676bf0da0b5"
14 },
15 "layers": {
16 "meta-alex": {
17 "subpath": ""
18 }
19 },
20 "path": "meta-alex"
21 },
22 "meta-intel": {
23 "git-remote": {
24 "branch": "master",
25 "describe": "15.0-hardknott-3.3-310-g0a96edae",
26 "remotes": {
27 "origin": {
28 "uri": "git://git.yoctoproject.org/meta-intel"
29 }
30 },
31 "rev": "0a96edae609a3f48befac36af82cf1eed6786b4a"
32 },
33 "layers": {
34 "meta-intel": {
35 "subpath": ""
36 }
37 },
38 "path": "meta-intel"
39 },
40 "poky": {
41 "git-remote": {
42 "branch": "akanavin/setup-layers",
43 "describe": "4.1_M1-374-g9dda719b2a",
44 "remotes": {
45 "origin": {
46 "uri": "git://git.yoctoproject.org/poky"
47 },
48 "poky-contrib": {
49 "uri": "ssh://git@push.yoctoproject.org/poky-contrib"
50 }
51 },
52 "rev": "9dda719b2a4727a4d43a6ab8d9e23f8ca68790ec"
53 },
54 "layers": {
55 "meta": {
56 "subpath": "meta"
57 },
58 "meta-poky": {
59 "subpath": "meta-poky"
60 },
61 "meta-selftest": {
62 "subpath": "meta-selftest"
63 },
64 "meta-yocto-bsp": {
65 "subpath": "meta-yocto-bsp"
66 }
67 },
68 "path": "poky"
69 }
70 },
71 "version": "1.0"
72}
diff --git a/meta/files/layers.schema.json b/meta/files/layers.schema.json
new file mode 100644
index 0000000000..cd4ddd3dcd
--- /dev/null
+++ b/meta/files/layers.schema.json
@@ -0,0 +1,91 @@
1{
2 "description": "OpenEmbedder Layer Setup Manifest",
3 "type": "object",
4 "additionalProperties": false,
5 "required": [
6 "version"
7 ],
8 "properties": {
9 "version": {
10 "description": "The version of this document; currently '1.0'",
11 "enum": ["1.0"]
12 },
13 "sources": {
14 "description": "The dict of layer sources",
15 "type": "object",
16 "patternProperties": { ".*" : {
17 "type": "object",
18 "description": "The upstream source from which a set of layers may be fetched",
19 "additionalProperties": false,
20 "required": [
21 "path"
22 ],
23 "properties": {
24 "path": {
25 "description": "The path where this layer source will be placed when fetching",
26 "type": "string"
27 },
28 "contains_this_file": {
29 "description": "Whether the directory with the layer source also contains this json description. Tools may want to skip the checkout of the source then.",
30 "type": "boolean"
31 },
32 "layers": {
33 "description": "The dict of layers to be used from this upstream source",
34 "type": "object",
35 "patternProperties": { ".*" : {
36 "description": "A layer from the upstream source",
37 "type": "object",
38 "additionalProperties": false,
39 "properties": {
40 "subpath": {
41 "description": "The subpath (relative to the source root) for this layer. Omit if the source root is the layer path",
42 "type": "string"
43 }
44 }
45 }}
46 },
47 "git-remote": {
48 "description": "A remote git source from which to fetch",
49 "type": "object",
50 "additionalProperties": false,
51 "required": [
52 "rev"
53 ],
54 "properties": {
55 "branch": {
56 "description": "The git branch to fetch (optional)",
57 "type": "string"
58 },
59 "rev": {
60 "description": "The git revision to checkout",
61 "type": "string"
62 },
63 "describe": {
64 "description": "The output of 'git describe' (human readable description of the revision using tags in revision history).",
65 "type": "string"
66 },
67 "remotes": {
68 "description": "The dict of git remotes to add to this repository",
69 "type": "object",
70 "patternProperties": { ".*" : {
71 "description": "A git remote",
72 "type": "object",
73 "addtionalProperties": false,
74 "required": [
75 "uri"
76 ],
77 "properties": {
78 "uri": {
79 "description": "The URI for the remote",
80 "type": "string"
81 }
82 }
83 }}
84 }
85 }
86 }
87 }
88 }
89 }}
90 }
91}
diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py
index 549abe7d10..c753a7b795 100644
--- a/meta/lib/oeqa/selftest/cases/bblayers.py
+++ b/meta/lib/oeqa/selftest/cases/bblayers.py
@@ -8,12 +8,16 @@ import os
8import re 8import re
9 9
10import oeqa.utils.ftools as ftools 10import oeqa.utils.ftools as ftools
11from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars 11from oeqa.utils.commands import runCmd, get_bb_var, get_bb_vars, bitbake
12 12
13from oeqa.selftest.case import OESelftestTestCase 13from oeqa.selftest.case import OESelftestTestCase
14 14
15class BitbakeLayers(OESelftestTestCase): 15class BitbakeLayers(OESelftestTestCase):
16 16
17 def setUpLocal(self):
18 bitbake("python3-jsonschema-native")
19 bitbake("-c addto_recipe_sysroot python3-jsonschema-native")
20
17 def test_bitbakelayers_layerindexshowdepends(self): 21 def test_bitbakelayers_layerindexshowdepends(self):
18 result = runCmd('bitbake-layers layerindex-show-depends meta-poky') 22 result = runCmd('bitbake-layers layerindex-show-depends meta-poky')
19 find_in_contents = re.search("openembedded-core", result.output) 23 find_in_contents = re.search("openembedded-core", result.output)
@@ -128,3 +132,13 @@ class BitbakeLayers(OESelftestTestCase):
128 132
129 self.assertTrue(os.path.isfile(recipe_file), msg = "Can't find recipe file for %s" % recipe) 133 self.assertTrue(os.path.isfile(recipe_file), msg = "Can't find recipe file for %s" % recipe)
130 return os.path.basename(recipe_file) 134 return os.path.basename(recipe_file)
135
136 def validate_layersjson(self, json):
137 python = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-jsonschema-native'), 'nativepython3')
138 jsonvalidator = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-jsonschema-native'), 'jsonschema')
139 jsonschema = os.path.join(get_bb_var('COREBASE'), 'meta/files/layers.schema.json')
140 result = runCmd("{} {} -i {} {}".format(python, jsonvalidator, json, jsonschema))
141
142 def test_validate_examplelayersjson(self):
143 json = os.path.join(get_bb_var('COREBASE'), "meta/files/layers.example.json")
144 self.validate_layersjson(json)