From e5b83832055ab399e90d0489e4a8ffdddaa99c9b Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Fri, 2 Nov 2018 22:20:50 +0100 Subject: [PATCH] Build all components Signed-off-by: Igor Gnatenko --- stratis.yaml | 708 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 689 insertions(+), 19 deletions(-) diff --git a/stratis.yaml b/stratis.yaml index 56255a6..10e7516 100644 --- a/stratis.yaml +++ b/stratis.yaml @@ -6,35 +6,705 @@ data: license: module: [MIT] dependencies: - - buildrequires: - platform: [f30] - requires: - platform: [f30] - - buildrequires: - platform: [f30] - requires: - platform: [f29] - - buildrequires: - platform: [f30] - requires: - platform: [f28] + - buildrequires: + platform: [] + requires: + platform: [] references: community: https://github.com/stratis-storage documentation: https://stratis-storage.github.io tracker: https://github.com/stratis-storage/stratisd/issues api: rpms: - - stratisd + - stratisd profiles: default: rpms: - - stratisd - - stratis-cli + - stratisd + - stratis-cli + filter: + rpms: + # XXX: temporary workaround + - rust-packaging + - python3-rust2rpm + # crates, build-time only + - rust-aho-corasick+default-devel + - rust-aho-corasick-devel + - rust-ansi_term+default-devel + - rust-ansi_term-devel + - rust-arrayvec+default-devel + - rust-arrayvec+serde-1-devel + - rust-arrayvec+serde-devel + - rust-arrayvec+std-devel + - rust-arrayvec-devel + - rust-atty+default-devel + - rust-atty-devel + - rust-backtrace+backtrace-sys-devel + - rust-backtrace+cpp_demangle-devel + - rust-backtrace+default-devel + - rust-backtrace+dladdr-devel + - rust-backtrace+libbacktrace-devel + - rust-backtrace+libunwind-devel + - rust-backtrace+rustc-serialize-devel + - rust-backtrace+serde-devel + - rust-backtrace+serde_derive-devel + - rust-backtrace+serialize-rustc-devel + - rust-backtrace+serialize-serde-devel + - rust-backtrace+unix-backtrace-devel + - rust-backtrace-devel + - rust-backtrace-sys+default-devel + - rust-backtrace-sys-devel + - rust-bitflags+default-devel + - rust-bitflags-devel + - rust-build_const+default-devel + - rust-build_const+std-devel + - rust-build_const-devel + - rust-byteorder+default-devel + - rust-byteorder+i128-devel + - rust-byteorder+std-devel + - rust-byteorder-devel + - rust-bytes+default-devel + - rust-bytes+either-devel + - rust-bytes+i128-devel + - rust-bytes+serde-devel + - rust-bytes-devel + - rust-cc+default-devel + - rust-cc+parallel-devel + - rust-cc+rayon-devel + - rust-cc-devel + - rust-cfg-if+default-devel + - rust-cfg-if-devel + - rust-chrono+clock-devel + - rust-chrono+default-devel + - rust-chrono+rustc-serialize-devel + - rust-chrono+serde-devel + - rust-chrono+time-devel + - rust-chrono-devel + - rust-clap+ansi_term-devel + - rust-clap+atty-devel + - rust-clap+color-devel + - rust-clap+debug-devel + - rust-clap+default-devel + - rust-clap+no_cargo-devel + - rust-clap+strsim-devel + - rust-clap+suggestions-devel + - rust-clap+term_size-devel + - rust-clap+unstable-devel + - rust-clap+vec_map-devel + - rust-clap+wrap_help-devel + - rust-clap+yaml-devel + - rust-clap+yaml-rust-devel + - rust-clap-devel + - rust-cpp_demangle+alloc-devel + - rust-cpp_demangle+default-devel + - rust-cpp_demangle+logging-devel + - rust-cpp_demangle+std-devel + - rust-cpp_demangle-devel + - rust-crc+default-devel + - rust-crc+std-devel + - rust-crc-devel + - rust-crossbeam-deque0.4+default-devel + - rust-crossbeam-deque0.4-devel + - rust-crossbeam-epoch0.5+default-devel + - rust-crossbeam-epoch0.5+lazy_static-devel + - rust-crossbeam-epoch0.5+sanitize-devel + - rust-crossbeam-epoch0.5+use_std-devel + - rust-crossbeam-epoch0.5-devel + - rust-crossbeam-utils+default-devel + - rust-crossbeam-utils+use_std-devel + - rust-crossbeam-utils-devel + - rust-dbus+default-devel + - rust-dbus+no-string-validation-devel + - rust-dbus-devel + - rust-devicemapper+default-devel + - rust-devicemapper-devel + - rust-either+default-devel + - rust-either+serde-devel + - rust-either+use_std-devel + - rust-either-devel + - rust-env_logger+default-devel + - rust-env_logger+regex-devel + - rust-env_logger-devel + - rust-errno+default-devel + - rust-errno-devel + - rust-error-chain+backtrace-devel + - rust-error-chain+default-devel + - rust-error-chain+example_generated-devel + - rust-error-chain-devel + - rust-glob+default-devel + - rust-glob-devel + - rust-heapsize+default-devel + - rust-heapsize+unstable-devel + - rust-heapsize-devel + - rust-humantime+default-devel + - rust-humantime-devel + - rust-indexmap+default-devel + - rust-indexmap+serde-1-devel + - rust-indexmap+serde-devel + - rust-indexmap-devel + - rust-iovec+default-devel + - rust-iovec-devel + - rust-itoa+default-devel + - rust-itoa+i128-devel + - rust-itoa+std-devel + - rust-itoa-devel + - rust-lazy_static+default-devel + - rust-lazy_static-devel + - rust-libc+align-devel + - rust-libc+default-devel + - rust-libc+use_std-devel + - rust-libc-devel + - rust-libdbus-sys+default-devel + - rust-libdbus-sys-devel + - rust-libmount+default-devel + - rust-libmount-devel + - rust-libudev+default-devel + - rust-libudev-devel + - rust-libudev-sys+default-devel + - rust-libudev-sys-devel + - rust-linked-hash-map+default-devel + - rust-linked-hash-map+heapsize-devel + - rust-linked-hash-map+heapsize_impl-devel + - rust-linked-hash-map+serde-devel + - rust-linked-hash-map+serde_impl-devel + - rust-linked-hash-map-devel + - rust-log+default-devel + - rust-log+max_level_debug-devel + - rust-log+max_level_error-devel + - rust-log+max_level_info-devel + - rust-log+max_level_off-devel + - rust-log+max_level_trace-devel + - rust-log+max_level_warn-devel + - rust-log+release_max_level_debug-devel + - rust-log+release_max_level_error-devel + - rust-log+release_max_level_info-devel + - rust-log+release_max_level_off-devel + - rust-log+release_max_level_trace-devel + - rust-log+release_max_level_warn-devel + - rust-log+serde-devel + - rust-log+std-devel + - rust-log-devel + - rust-loopdev+default-devel + - rust-loopdev-devel + - rust-macro-attr+default-devel + - rust-macro-attr+std-devel + - rust-macro-attr+unstable-macros-1-1-devel + - rust-macro-attr-devel + - rust-md5+default-devel + - rust-md5-devel + - rust-memchr+default-devel + - rust-memchr+libc-devel + - rust-memchr+use_std-devel + - rust-memchr-devel + - rust-memoffset+default-devel + - rust-memoffset-devel + - rust-newtype_derive+default-devel + - rust-newtype_derive+std-devel + - rust-newtype_derive+std-unstable-devel + - rust-newtype_derive-devel + - rust-nix+default-devel + - rust-nix-devel + - rust-no-panic+default-devel + - rust-no-panic-devel + - rust-nodrop+default-devel + - rust-nodrop+std-devel + - rust-nodrop+use_needs_drop-devel + - rust-nodrop-devel + - rust-num-integer+default-devel + - rust-num-integer+i128-devel + - rust-num-integer+std-devel + - rust-num-integer-devel + - rust-num-traits+default-devel + - rust-num-traits+i128-devel + - rust-num-traits+std-devel + - rust-num-traits-devel + - rust-num_cpus+default-devel + - rust-num_cpus-devel + - rust-pkg-config+default-devel + - rust-pkg-config-devel + - rust-proc-macro2+default-devel + - rust-proc-macro2+proc-macro-devel + - rust-proc-macro2-devel + - rust-quick-error+default-devel + - rust-quick-error-devel + - rust-quickcheck0.6+default-devel + - rust-quickcheck0.6+env_logger-devel + - rust-quickcheck0.6+i128-devel + - rust-quickcheck0.6+log-devel + - rust-quickcheck0.6+regex-devel + - rust-quickcheck0.6+unstable-devel + - rust-quickcheck0.6+use_logging-devel + - rust-quickcheck0.6-devel + - rust-quote+default-devel + - rust-quote+proc-macro-devel + - rust-quote-devel + - rust-rand+alloc-devel + - rust-rand+default-devel + - rust-rand+i128_support-devel + - rust-rand+libc-devel + - rust-rand+log-devel + - rust-rand+serde-devel + - rust-rand+serde1-devel + - rust-rand+serde_derive-devel + - rust-rand+std-devel + - rust-rand-devel + - rust-rand0.4+alloc-devel + - rust-rand0.4+default-devel + - rust-rand0.4+i128_support-devel + - rust-rand0.4+libc-devel + - rust-rand0.4+std-devel + - rust-rand0.4-devel + - rust-rand_core+alloc-devel + - rust-rand_core+default-devel + - rust-rand_core+serde-devel + - rust-rand_core+serde1-devel + - rust-rand_core+serde_derive-devel + - rust-rand_core+std-devel + - rust-rand_core-devel + - rust-rand_core0.2+alloc-devel + - rust-rand_core0.2+default-devel + - rust-rand_core0.2+serde1-devel + - rust-rand_core0.2+std-devel + - rust-rand_core0.2-devel + - rust-rayon+default-devel + - rust-rayon-core+default-devel + - rust-rayon-core-devel + - rust-rayon-devel + - rust-regex+default-devel + - rust-regex+pattern-devel + - rust-regex+unstable-devel + - rust-regex+use_std-devel + - rust-regex-devel + - rust-regex-syntax+default-devel + - rust-regex-syntax-devel + - rust-remove_dir_all+default-devel + - rust-remove_dir_all-devel + - rust-rustc-demangle+default-devel + - rust-rustc-demangle-devel + - rust-rustc-serialize+default-devel + - rust-rustc-serialize-devel + - rust-rustc_version+default-devel + - rust-rustc_version-devel + - rust-ryu+default-devel + - rust-ryu+no-panic-devel + - rust-ryu+small-devel + - rust-ryu-devel + - rust-same-file+default-devel + - rust-same-file-devel + - rust-scopeguard+default-devel + - rust-scopeguard+use_std-devel + - rust-scopeguard-devel + - rust-semver+default-devel + - rust-semver+serde-devel + - rust-semver-devel + - rust-semver-parser0.7+default-devel + - rust-semver-parser0.7-devel + - rust-serde+alloc-devel + - rust-serde+default-devel + - rust-serde+derive-devel + - rust-serde+rc-devel + - rust-serde+serde_derive-devel + - rust-serde+std-devel + - rust-serde+unstable-devel + - rust-serde-devel + - rust-serde_derive+default-devel + - rust-serde_derive+deserialize_in_place-devel + - rust-serde_derive-devel + - rust-serde_json+arbitrary_precision-devel + - rust-serde_json+default-devel + - rust-serde_json+indexmap-devel + - rust-serde_json+preserve_order-devel + - rust-serde_json+raw_value-devel + - rust-serde_json-devel + - rust-serde_test+default-devel + - rust-serde_test-devel + - rust-sha1+default-devel + - rust-sha1+serde-devel + - rust-sha1+std-devel + - rust-sha1-devel + - rust-strsim+default-devel + - rust-strsim-devel + - rust-syn+clone-impls-devel + - rust-syn+default-devel + - rust-syn+derive-devel + - rust-syn+extra-traits-devel + - rust-syn+fold-devel + - rust-syn+full-devel + - rust-syn+parsing-devel + - rust-syn+printing-devel + - rust-syn+proc-macro-devel + - rust-syn+quote-devel + - rust-syn+visit-devel + - rust-syn+visit-mut-devel + - rust-syn-devel + - rust-tempfile+default-devel + - rust-tempfile-devel + - rust-term_size+debug-devel + - rust-term_size+default-devel + - rust-term_size+unstable-devel + - rust-term_size-devel + - rust-termcolor+default-devel + - rust-termcolor-devel + - rust-textwrap+default-devel + - rust-textwrap+term_size-devel + - rust-textwrap-devel + - rust-thread_local+default-devel + - rust-thread_local-devel + - rust-time+default-devel + - rust-time+rustc-serialize-devel + - rust-time-devel + - rust-timerfd+default-devel + - rust-timerfd-devel + - rust-ucd-util+default-devel + - rust-ucd-util-devel + - rust-unicode-width+default-devel + - rust-unicode-width+no_std-devel + - rust-unicode-width-devel + - rust-unicode-xid+default-devel + - rust-unicode-xid+no_std-devel + - rust-unicode-xid-devel + - rust-utf8-ranges+default-devel + - rust-utf8-ranges-devel + - rust-uuid+byteorder-devel + - rust-uuid+const_fn-devel + - rust-uuid+default-devel + - rust-uuid+md5-devel + - rust-uuid+nightly-devel + - rust-uuid+rand-devel + - rust-uuid+serde-devel + - rust-uuid+sha1-devel + - rust-uuid+std-devel + - rust-uuid+u128-devel + - rust-uuid+use_std-devel + - rust-uuid+v1-devel + - rust-uuid+v3-devel + - rust-uuid+v4-devel + - rust-uuid+v5-devel + - rust-uuid-devel + - rust-vec_map+default-devel + - rust-vec_map+eders-devel + - rust-vec_map+serde-devel + - rust-vec_map-devel + - rust-version_check+default-devel + - rust-version_check-devel + - rust-void+default-devel + - rust-void+std-devel + - rust-void-devel + - rust-walkdir+default-devel + - rust-walkdir-devel + - rust-yaml-rust0.3+default-devel + - rust-yaml-rust0.3+linked-hash-map-devel + - rust-yaml-rust0.3+preserve_order-devel + - rust-yaml-rust0.3-devel components: rpms: + rust-packaging: + buildorder: 0 + rationale: Something needs to orchestrate build of all stuff below. + rust-ansi_term: + buildorder: 10 + rationale: Dependency of rust-clap. + rust-bitflags: + buildorder: 10 + rationale: Dependency of rust-clap, rust-devicemapper, rust-nix. + rust-build_const: + buildorder: 10 + rationale: Dependency of rust-crc. + rust-byteorder: + buildorder: 10 + rationale: Dependency of rust-bytes, rust-uuid, stratisd. + rust-cfg-if: + buildorder: 10 + rationale: Dependency of rust-backtrace, rust-cpp_demangle, rust-crossbeam-epoch0.5, + rust-log, rust-memchr, rust-nix, rust-tempfile, rust-uuid. + rust-crossbeam-utils: + buildorder: 10 + rationale: Dependency of rust-crossbeam-deque0.4, rust-crossbeam-epoch0.5. + rust-glob: + buildorder: 10 + rationale: Dependency of rust-cpp_demangle. + rust-heapsize: + buildorder: 10 + rationale: Dependency of rust-linked-hash-map. + rust-itoa: + buildorder: 10 + rationale: Dependency of rust-serde_json. + rust-libc: + buildorder: 10 + rationale: Dependency of rust-atty, rust-backtrace, rust-backtrace-sys, rust-dbus, + rust-devicemapper, rust-errno, rust-iovec, rust-libmount, rust-libudev, + rust-libudev-sys, rust-loopdev, rust-memchr, rust-nix, rust-num_cpus, rust-rand, + rust-rand0.4, rust-rayon-core, rust-tempfile, rust-term_size, rust-time, + rust-timerfd, stratisd. + rust-md5: + buildorder: 10 + rationale: Dependency of rust-uuid. + rust-memoffset: + buildorder: 10 + rationale: Dependency of rust-crossbeam-epoch0.5. + rust-nodrop: + buildorder: 10 + rationale: Dependency of rust-arrayvec. + rust-num-traits: + buildorder: 10 + rationale: Dependency of rust-chrono, rust-num-integer. + rust-pkg-config: + buildorder: 10 + rationale: Dependency of rust-libdbus-sys, rust-libudev-sys. + rust-quick-error: + buildorder: 10 + rationale: Dependency of rust-humantime, rust-libmount. + rust-remove_dir_all: + buildorder: 10 + rationale: Dependency of rust-tempfile. + rust-rustc-demangle: + buildorder: 10 + rationale: Dependency of rust-backtrace. + rust-same-file: + buildorder: 10 + rationale: Dependency of rust-walkdir. + rust-scopeguard: + buildorder: 10 + rationale: Dependency of rust-crossbeam-epoch0.5. + rust-semver-parser0.7: + buildorder: 10 + rationale: Dependency of rust-semver. + rust-strsim: + buildorder: 10 + rationale: Dependency of rust-clap. + rust-termcolor: + buildorder: 10 + rationale: Dependency of rust-env_logger. + rust-ucd-util: + buildorder: 10 + rationale: Dependency of rust-regex-syntax. + rust-unicode-width: + buildorder: 10 + rationale: Dependency of rust-clap, rust-textwrap. + rust-unicode-xid: + buildorder: 10 + rationale: Dependency of rust-proc-macro2, rust-syn. + rust-utf8-ranges: + buildorder: 10 + rationale: Dependency of rust-regex. + rust-version_check: + buildorder: 10 + rationale: Dependency of rust-lazy_static, rust-memchr. + rust-void: + buildorder: 10 + rationale: Dependency of rust-nix. + rust-atty: + buildorder: 20 + rationale: Dependency of rust-clap, rust-env_logger. + rust-cpp_demangle: + buildorder: 20 + rationale: Dependency of rust-backtrace. + rust-crc: + buildorder: 20 + rationale: Dependency of stratisd. + rust-errno: + buildorder: 20 + rationale: Dependency of rust-loopdev. + rust-humantime: + buildorder: 20 + rationale: Dependency of rust-env_logger. + rust-iovec: + buildorder: 20 + rationale: Dependency of rust-bytes. + rust-lazy_static: + buildorder: 20 + rationale: Dependency of rust-crossbeam-epoch0.5, rust-nix, rust-rayon-core, + rust-thread_local, stratisd. + rust-libdbus-sys: + buildorder: 20 + rationale: Dependency of rust-dbus. + rust-libudev-sys: + buildorder: 20 + rationale: Dependency of rust-libudev. + rust-memchr: + buildorder: 20 + rationale: Dependency of rust-aho-corasick, rust-regex. + rust-num-integer: + buildorder: 20 + rationale: Dependency of rust-chrono. + rust-num_cpus: + buildorder: 20 + rationale: Dependency of rust-rayon-core. + rust-proc-macro2: + buildorder: 20 + rationale: Dependency of rust-no-panic, rust-quote, rust-serde_derive, rust-syn. + rust-rand0.4: + buildorder: 20 + rationale: Dependency of rust-nix, rust-quickcheck0.6, rust-rustc-serialize, + rust-uuid, stratisd. + rust-regex-syntax: + buildorder: 20 + rationale: Dependency of rust-regex. + rust-term_size: + buildorder: 20 + rationale: Dependency of rust-clap, rust-textwrap. + rust-timerfd: + buildorder: 20 + rationale: Dependency of stratisd. + rust-walkdir: + buildorder: 20 + rationale: Dependency of stratisd. + rust-aho-corasick: + buildorder: 30 + rationale: Dependency of rust-regex. + rust-dbus: + buildorder: 30 + rationale: Dependency of stratisd. + rust-libudev: + buildorder: 30 + rationale: Dependency of rust-devicemapper, stratisd. + rust-loopdev: + buildorder: 30 + rationale: Dependency of rust-devicemapper, stratisd. + rust-quote: + buildorder: 30 + rationale: Dependency of rust-no-panic, rust-serde_derive, rust-syn. + rust-rustc-serialize: + buildorder: 30 + rationale: Dependency of rust-backtrace, rust-chrono, rust-macro-attr, rust-time. + rust-textwrap: + buildorder: 30 + rationale: Dependency of rust-clap. + rust-thread_local: + buildorder: 30 + rationale: Dependency of rust-regex. + rust-macro-attr: + buildorder: 40 + rationale: Dependency of rust-devicemapper, stratisd. + rust-regex: + buildorder: 40 + rationale: Dependency of rust-env_logger. + rust-syn: + buildorder: 40 + rationale: Dependency of rust-no-panic, rust-serde_derive. + rust-no-panic: + buildorder: 50 + rationale: Dependency of rust-ryu. + rust-serde_derive: + buildorder: 50 + rationale: Dependency of rust-backtrace, rust-rand, rust-rand_core, rust-serde, + stratisd. + rust-ryu: + buildorder: 60 + rationale: Dependency of rust-serde_json. + rust-serde: + buildorder: 60 + rationale: Dependency of rust-arrayvec, rust-backtrace, rust-bytes, rust-chrono, + rust-devicemapper, rust-either, rust-indexmap, rust-linked-hash-map, rust-log, + rust-rand, rust-rand_core, rust-semver, rust-serde_json, rust-serde_test, + rust-sha1, rust-uuid, rust-vec_map, stratisd. + rust-arrayvec: + buildorder: 70 + rationale: Dependency of rust-crossbeam-epoch0.5. + rust-either: + buildorder: 70 + rationale: Dependency of rust-bytes, rust-rayon, stratisd. + rust-indexmap: + buildorder: 70 + rationale: Dependency of rust-serde_json. + rust-linked-hash-map: + buildorder: 70 + rationale: Dependency of rust-yaml-rust0.3. + rust-log: + buildorder: 70 + rationale: Dependency of rust-env_logger, rust-quickcheck0.6, rust-rand, rust-time, + stratisd. + rust-rand_core: + buildorder: 70 + rationale: Dependency of rust-rand_core0.2. + rust-semver: + buildorder: 70 + rationale: Dependency of rust-rustc_version. + rust-serde_test: + buildorder: 70 + rationale: Dependency of rust-uuid. + rust-sha1: + buildorder: 70 + rationale: Dependency of rust-uuid. + rust-vec_map: + buildorder: 70 + rationale: Dependency of rust-clap. + rust-bytes: + buildorder: 80 + rationale: Dependency of rust-nix. + rust-crossbeam-epoch0.5: + buildorder: 80 + rationale: Dependency of rust-crossbeam-deque0.4. + rust-env_logger: + buildorder: 80 + rationale: Dependency of rust-quickcheck0.6, stratisd. + rust-rand_core0.2: + buildorder: 80 + rationale: Dependency of rust-rand. + rust-rustc_version: + buildorder: 80 + rationale: Dependency of rust-newtype_derive. + rust-serde_json: + buildorder: 80 + rationale: Dependency of stratisd. + rust-time: + buildorder: 80 + rationale: Dependency of rust-chrono. + rust-uuid: + buildorder: 80 + rationale: Dependency of rust-devicemapper, stratisd. + rust-yaml-rust0.3: + buildorder: 80 + rationale: Dependency of rust-clap. + rust-chrono: + buildorder: 90 + rationale: Dependency of stratisd. + rust-clap: + buildorder: 90 + rationale: Dependency of stratisd. + rust-crossbeam-deque0.4: + buildorder: 90 + rationale: Dependency of rust-rayon, rust-rayon-core. + rust-newtype_derive: + buildorder: 90 + rationale: Dependency of rust-devicemapper. + rust-quickcheck0.6: + buildorder: 90 + rationale: Dependency of stratisd. + rust-rand: + buildorder: 90 + rationale: Dependency of rust-tempfile. + rust-rayon-core: + buildorder: 100 + rationale: Dependency of rust-rayon. + rust-tempfile: + buildorder: 100 + rationale: Dependency of rust-devicemapper, rust-nix, stratisd. + rust-nix: + buildorder: 110 + rationale: Dependency of rust-devicemapper, rust-libmount, stratisd. + rust-rayon: + buildorder: 110 + rationale: Dependency of rust-cc. + rust-cc: + buildorder: 120 + rationale: Dependency of rust-backtrace-sys. + rust-libmount: + buildorder: 120 + rationale: Dependency of rust-devicemapper, stratisd. + rust-backtrace-sys: + buildorder: 130 + rationale: Dependency of rust-backtrace. + rust-backtrace: + buildorder: 140 + rationale: Dependency of rust-error-chain. + rust-error-chain: + buildorder: 150 + rationale: Dependency of rust-devicemapper, stratisd. + rust-devicemapper: + buildorder: 160 + rationale: Dependency of stratisd. stratisd: - rationale: | - Daemon that manages a pool of block devices to create flexible filesystems. - - Main component. + buildorder: 170 + rationale: Main component. ref: 1