hybrid_platforms_conductor 32.17.0 → 33.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +36 -0
- data/README.md +6 -3
- data/bin/check-node +0 -1
- data/bin/deploy +0 -1
- data/bin/get_impacted_nodes +0 -1
- data/bin/last_deploys +12 -8
- data/bin/nodes_to_deploy +6 -6
- data/bin/setup +6 -6
- data/bin/topograph +1 -1
- data/docs/config_dsl.md +45 -1
- data/docs/executables.md +6 -7
- data/docs/executables/check-node.md +3 -3
- data/docs/executables/deploy.md +3 -3
- data/docs/executables/dump_nodes_json.md +3 -3
- data/docs/executables/test.md +3 -3
- data/docs/executables/topograph.md +3 -3
- data/docs/gen/mermaid/README.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/check-node.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/deploy.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/free_ips.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/get_impacted_nodes.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/last_deploys.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/nodes_to_deploy.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/report.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/run.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/ssh_config.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/test.md-0.png +0 -0
- data/docs/plugins.md +46 -0
- data/docs/plugins/connector/ssh.md +1 -1
- data/docs/plugins/log/remote_fs.md +26 -0
- data/docs/plugins/secrets_reader/cli.md +31 -0
- data/docs/plugins/secrets_reader/thycotic.md +46 -0
- data/docs/plugins/test/check_deploy_and_idempotence.md +1 -1
- data/docs/plugins/test/connection.md +1 -0
- data/docs/plugins/test/deploy_removes_root_access.md +1 -1
- data/docs/plugins/test/file_system.md +1 -0
- data/docs/plugins/test/hostname.md +1 -0
- data/docs/plugins/test/ip.md +1 -0
- data/docs/plugins/test/local_users.md +1 -0
- data/docs/plugins/test/mounts.md +1 -0
- data/docs/plugins/test/orphan_files.md +1 -0
- data/docs/plugins/test/ports.md +1 -0
- data/docs/plugins/test/spectre.md +1 -0
- data/docs/plugins/test/vulnerabilities.md +1 -0
- data/lib/hybrid_platforms_conductor/action.rb +4 -4
- data/lib/hybrid_platforms_conductor/actions_executor.rb +45 -43
- data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
- data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -12
- data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
- data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
- data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
- data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
- data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
- data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
- data/lib/hybrid_platforms_conductor/config.rb +8 -4
- data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
- data/lib/hybrid_platforms_conductor/connector.rb +5 -2
- data/lib/hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs.rb +116 -0
- data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
- data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
- data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
- data/lib/hybrid_platforms_conductor/deployer.rb +275 -224
- data/lib/hybrid_platforms_conductor/executable.rb +20 -15
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +2 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
- data/lib/hybrid_platforms_conductor/hpc_plugins/log/my_log_plugin.rb.sample +100 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +180 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +68 -66
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +118 -117
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +77 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +90 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +3 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +7 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +21 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +3 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +4 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +13 -10
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +7 -7
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +27 -25
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
- data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
- data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
- data/lib/hybrid_platforms_conductor/log.rb +31 -0
- data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
- data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
- data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
- data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
- data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
- data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
- data/lib/hybrid_platforms_conductor/plugins.rb +14 -8
- data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
- data/lib/hybrid_platforms_conductor/report.rb +2 -2
- data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
- data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
- data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
- data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +18 -0
- data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
- data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
- data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
- data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
- data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
- data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
- data/lib/hybrid_platforms_conductor/version.rb +1 -1
- data/spec/hybrid_platforms_conductor_test.rb +33 -12
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +18 -11
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +32 -21
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +75 -49
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +27 -15
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +90 -59
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +46 -44
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +106 -75
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +167 -142
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +16 -16
- data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +36 -36
- data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
- data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
- data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +43 -5
- data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +199 -216
- data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +223 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +64 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +268 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
- data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
- data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
- data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
- data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
- data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
- data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
- data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
- data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
- data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +5 -4
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
- data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
- data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +159 -113
- data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +299 -160
- data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
- data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -8
- data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -196
- data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
- data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
- data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
- data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
- data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
- data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
- data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
- data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
- data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
- data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +245 -56
- data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
- data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
- data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
- data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id1.rb → test_plugin_id_1.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id2.rb → test_plugin_id_2.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type/{test_plugin_id3.rb → test_plugin_id_3.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/{test_plugin_type2/test_plugin_id4.rb → test_plugin_type_2/test_plugin_id_4.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
- data/spec/hybrid_platforms_conductor_test/test_connector.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +84 -0
- data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +105 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
- data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
- data/spec/spec_helper.rb +17 -18
- data/tools/check_md +16 -20
- data/tools/generate_mermaid +1 -1
- metadata +195 -144
- data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -916
|
@@ -45,7 +45,7 @@ module HybridPlatformsConductorTest
|
|
|
45
45
|
#
|
|
46
46
|
# Parameters::
|
|
47
47
|
# * *options_parser* (OptionParser): The option parser to complete
|
|
48
|
-
def options_parse(
|
|
48
|
+
def options_parse(_options_parser)
|
|
49
49
|
@calls << [:options_parse]
|
|
50
50
|
end
|
|
51
51
|
|
|
@@ -102,7 +102,7 @@ module HybridPlatformsConductorTest
|
|
|
102
102
|
# * *bash_cmds* (String): Bash commands to execute
|
|
103
103
|
def remote_bash(bash_cmds)
|
|
104
104
|
@calls << [:remote_bash, bash_cmds]
|
|
105
|
-
@remote_bash_code
|
|
105
|
+
@remote_bash_code&.call(@stdout_io, @stderr_io, self)
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
# Execute an interactive shell on the remote node
|
|
@@ -140,7 +140,7 @@ module HybridPlatformsConductorTest
|
|
|
140
140
|
extra_opts[:owner] = owner if owner
|
|
141
141
|
extra_opts[:group] = group if group
|
|
142
142
|
@calls << [:remote_copy, from, to] + (extra_opts.empty? ? [] : [extra_opts])
|
|
143
|
-
@remote_copy_code
|
|
143
|
+
@remote_copy_code&.call(@stdout_io, @stderr_io, self)
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
# Integer: The current desired timeout
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
module HybridPlatformsConductorTest
|
|
2
|
+
|
|
3
|
+
# Test log without reading actions
|
|
4
|
+
class TestLogNoReadPlugin < HybridPlatformsConductor::Log
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
|
|
8
|
+
attr_accessor :calls
|
|
9
|
+
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Get actions to save logs
|
|
13
|
+
# [API] - This method is mandatory.
|
|
14
|
+
# [API] - The following API components are accessible:
|
|
15
|
+
# * *@config* (Config): Main configuration API.
|
|
16
|
+
# * *@nodes_handler* (NodesHandler): Nodes handler API.
|
|
17
|
+
# * *@actions_executor* (ActionsExecutor): Actions executor API.
|
|
18
|
+
#
|
|
19
|
+
# Parameters::
|
|
20
|
+
# * *node* (String): Node for which logs are being saved
|
|
21
|
+
# * *services* (Array<String>): The list of services that have been deployed on this node
|
|
22
|
+
# * *deployment_info* (Hash<Symbol,Object>): Additional information to attach to the logs
|
|
23
|
+
# * *exit_status* (Integer or Symbol): Exit status of the deployment
|
|
24
|
+
# * *stdout* (String): Deployment's stdout
|
|
25
|
+
# * *stderr* (String): Deployment's stderr
|
|
26
|
+
# Result::
|
|
27
|
+
# * Array< Hash<Symbol,Object> >: List of actions to be done
|
|
28
|
+
def actions_to_save_logs(node, services, deployment_info, exit_status, stdout, stderr)
|
|
29
|
+
TestLogNoReadPlugin.calls << {
|
|
30
|
+
method: :actions_to_save_logs,
|
|
31
|
+
node: node,
|
|
32
|
+
services: services,
|
|
33
|
+
# Don't store the date
|
|
34
|
+
deployment_info: deployment_info.reject { |k, _v| k == :date },
|
|
35
|
+
exit_status: exit_status,
|
|
36
|
+
stdout: stdout,
|
|
37
|
+
stderr: stderr
|
|
38
|
+
}
|
|
39
|
+
[{ bash: "echo Save test logs to #{node}" }]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Get deployment logs from a node.
|
|
43
|
+
# This method can use the result of actions previously run to read logs, as returned by the actions_to_read_logs method.
|
|
44
|
+
# [API] - This method is mandatory.
|
|
45
|
+
# [API] - The following API components are accessible:
|
|
46
|
+
# * *@config* (Config): Main configuration API.
|
|
47
|
+
# * *@nodes_handler* (NodesHandler): Nodes handler API.
|
|
48
|
+
# * *@actions_executor* (ActionsExecutor): Actions executor API.
|
|
49
|
+
#
|
|
50
|
+
# Parameters::
|
|
51
|
+
# * *node* (String): The node we want deployment logs from
|
|
52
|
+
# * *exit_status* (Integer, Symbol or nil): Exit status of actions to read logs, or nil if no action was returned by actions_to_read_logs
|
|
53
|
+
# * *stdout* (String or nil): stdout of actions to read logs, or nil if no action was returned by actions_to_read_logs
|
|
54
|
+
# * *stderr* (String or nil): stderr of actions to read logs, or nil if no action was returned by actions_to_read_logs
|
|
55
|
+
# Result::
|
|
56
|
+
# * Hash<Symbol,Object>: Deployment log information:
|
|
57
|
+
# * *error* (String): Error string in case deployment logs could not be retrieved. If set then further properties will be ignored. [optional]
|
|
58
|
+
# * *services* (Array<String>): List of services deployed on the node
|
|
59
|
+
# * *deployment_info* (Hash<Symbol,Object>): Deployment metadata
|
|
60
|
+
# * *exit_status* (Integer or Symbol): Deployment exit status
|
|
61
|
+
# * *stdout* (String): Deployment stdout
|
|
62
|
+
# * *stderr* (String): Deployment stderr
|
|
63
|
+
def logs_for(node, exit_status, stdout, stderr)
|
|
64
|
+
TestLogNoReadPlugin.calls << {
|
|
65
|
+
method: :logs_for,
|
|
66
|
+
node: node,
|
|
67
|
+
exit_status: exit_status,
|
|
68
|
+
stdout: stdout,
|
|
69
|
+
stderr: stderr
|
|
70
|
+
}
|
|
71
|
+
{
|
|
72
|
+
services: %w[unknown],
|
|
73
|
+
deployment_info: {
|
|
74
|
+
user: 'test_user'
|
|
75
|
+
},
|
|
76
|
+
exit_status: 666,
|
|
77
|
+
stdout: 'Deployment test stdout',
|
|
78
|
+
stderr: 'Deployment test stderr'
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
module HybridPlatformsConductorTest
|
|
2
|
+
|
|
3
|
+
# Test log
|
|
4
|
+
class TestLogPlugin < HybridPlatformsConductor::Log
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
|
|
8
|
+
attr_accessor :calls
|
|
9
|
+
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Get actions to save logs
|
|
13
|
+
# [API] - This method is mandatory.
|
|
14
|
+
# [API] - The following API components are accessible:
|
|
15
|
+
# * *@config* (Config): Main configuration API.
|
|
16
|
+
# * *@nodes_handler* (NodesHandler): Nodes handler API.
|
|
17
|
+
# * *@actions_executor* (ActionsExecutor): Actions executor API.
|
|
18
|
+
#
|
|
19
|
+
# Parameters::
|
|
20
|
+
# * *node* (String): Node for which logs are being saved
|
|
21
|
+
# * *services* (Array<String>): The list of services that have been deployed on this node
|
|
22
|
+
# * *deployment_info* (Hash<Symbol,Object>): Additional information to attach to the logs
|
|
23
|
+
# * *exit_status* (Integer or Symbol): Exit status of the deployment
|
|
24
|
+
# * *stdout* (String): Deployment's stdout
|
|
25
|
+
# * *stderr* (String): Deployment's stderr
|
|
26
|
+
# Result::
|
|
27
|
+
# * Array< Hash<Symbol,Object> >: List of actions to be done
|
|
28
|
+
def actions_to_save_logs(node, services, deployment_info, exit_status, stdout, stderr)
|
|
29
|
+
TestLogPlugin.calls << {
|
|
30
|
+
method: :actions_to_save_logs,
|
|
31
|
+
node: node,
|
|
32
|
+
services: services,
|
|
33
|
+
# Don't store the date
|
|
34
|
+
deployment_info: deployment_info.reject { |k, _v| k == :date },
|
|
35
|
+
exit_status: exit_status,
|
|
36
|
+
stdout: stdout,
|
|
37
|
+
stderr: stderr
|
|
38
|
+
}
|
|
39
|
+
[{ bash: "echo Save test logs to #{node}" }]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Get actions to read logs.
|
|
43
|
+
# If provided, this method can return some actions to be executed that will fetch logs from servers or remote nodes.
|
|
44
|
+
# By using this method to run actions instead of the synchronous method logs_from, such actions will be run in parallel which can greatly improve time-consuming operations when querying a lot of nodes.
|
|
45
|
+
# [API] - This method is optional.
|
|
46
|
+
# [API] - The following API components are accessible:
|
|
47
|
+
# * *@config* (Config): Main configuration API.
|
|
48
|
+
# * *@nodes_handler* (NodesHandler): Nodes handler API.
|
|
49
|
+
# * *@actions_executor* (ActionsExecutor): Actions executor API.
|
|
50
|
+
#
|
|
51
|
+
# Parameters::
|
|
52
|
+
# * *node* (String): Node for which deployment logs are being read
|
|
53
|
+
# Result::
|
|
54
|
+
# * Array< Hash<Symbol,Object> >: List of actions to be done
|
|
55
|
+
def actions_to_read_logs(node)
|
|
56
|
+
TestLogPlugin.calls << {
|
|
57
|
+
method: :actions_to_read_logs,
|
|
58
|
+
node: node
|
|
59
|
+
}
|
|
60
|
+
[{ bash: "echo Read logs for #{node}" }]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Get deployment logs from a node.
|
|
64
|
+
# This method can use the result of actions previously run to read logs, as returned by the actions_to_read_logs method.
|
|
65
|
+
# [API] - This method is mandatory.
|
|
66
|
+
# [API] - The following API components are accessible:
|
|
67
|
+
# * *@config* (Config): Main configuration API.
|
|
68
|
+
# * *@nodes_handler* (NodesHandler): Nodes handler API.
|
|
69
|
+
# * *@actions_executor* (ActionsExecutor): Actions executor API.
|
|
70
|
+
#
|
|
71
|
+
# Parameters::
|
|
72
|
+
# * *node* (String): The node we want deployment logs from
|
|
73
|
+
# * *exit_status* (Integer, Symbol or nil): Exit status of actions to read logs, or nil if no action was returned by actions_to_read_logs
|
|
74
|
+
# * *stdout* (String or nil): stdout of actions to read logs, or nil if no action was returned by actions_to_read_logs
|
|
75
|
+
# * *stderr* (String or nil): stderr of actions to read logs, or nil if no action was returned by actions_to_read_logs
|
|
76
|
+
# Result::
|
|
77
|
+
# * Hash<Symbol,Object>: Deployment log information:
|
|
78
|
+
# * *error* (String): Error string in case deployment logs could not be retrieved. If set then further properties will be ignored. [optional]
|
|
79
|
+
# * *services* (Array<String>): List of services deployed on the node
|
|
80
|
+
# * *deployment_info* (Hash<Symbol,Object>): Deployment metadata
|
|
81
|
+
# * *exit_status* (Integer or Symbol): Deployment exit status
|
|
82
|
+
# * *stdout* (String): Deployment stdout
|
|
83
|
+
# * *stderr* (String): Deployment stderr
|
|
84
|
+
def logs_for(node, exit_status, stdout, stderr)
|
|
85
|
+
TestLogPlugin.calls << {
|
|
86
|
+
method: :logs_for,
|
|
87
|
+
node: node,
|
|
88
|
+
exit_status: exit_status,
|
|
89
|
+
stdout: stdout,
|
|
90
|
+
stderr: stderr
|
|
91
|
+
}
|
|
92
|
+
{
|
|
93
|
+
services: %w[unknown],
|
|
94
|
+
deployment_info: {
|
|
95
|
+
user: 'test_user'
|
|
96
|
+
},
|
|
97
|
+
exit_status: 666,
|
|
98
|
+
stdout: 'Deployment test stdout',
|
|
99
|
+
stderr: 'Deployment test stderr'
|
|
100
|
+
}
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
@@ -33,6 +33,7 @@ module HybridPlatformsConductorTest
|
|
|
33
33
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
34
34
|
def test_for_node
|
|
35
35
|
raise "Failing test #{@name} for #{@node}" if Node.fail_for.key?(@name) && Node.fail_for[@name].include?(@node)
|
|
36
|
+
|
|
36
37
|
sleep_time = Node.sleeps.dig(@name, @node)
|
|
37
38
|
sleep sleep_time unless sleep_time.nil?
|
|
38
39
|
Node.runs << [@name, @node]
|
|
@@ -29,6 +29,7 @@ module HybridPlatformsConductorTest
|
|
|
29
29
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
30
30
|
def test_on_check_node(stdout, stderr, exit_status)
|
|
31
31
|
raise 'Failing test' if NodeCheck.fail_for.include? @node
|
|
32
|
+
|
|
32
33
|
NodeCheck.runs << [@name, @node, stdout, stderr, exit_status]
|
|
33
34
|
end
|
|
34
35
|
|
|
@@ -30,6 +30,7 @@ module HybridPlatformsConductorTest
|
|
|
30
30
|
def test_on_platform
|
|
31
31
|
platform_name = @platform.name
|
|
32
32
|
raise 'Failing test' if Platform.fail_for.include? platform_name
|
|
33
|
+
|
|
33
34
|
sleep_time = Platform.sleeps.dig(@name, platform_name)
|
|
34
35
|
sleep sleep_time unless sleep_time.nil?
|
|
35
36
|
Platform.runs << [@name, platform_name]
|
|
@@ -32,14 +32,14 @@ module HybridPlatformsConductorTest
|
|
|
32
32
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
33
33
|
def test_on_node
|
|
34
34
|
{
|
|
35
|
-
"test_#{@node}.sh" => proc do |stdout, stderr
|
|
35
|
+
"test_#{@node}.sh" => proc do |stdout, stderr|
|
|
36
36
|
SeveralChecks.runs << [@name, @node, "Node SSH test: #{stdout.join("\n")} - #{stderr.join("\n")}"]
|
|
37
37
|
end
|
|
38
38
|
}
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
42
|
-
def test_on_check_node(stdout,
|
|
42
|
+
def test_on_check_node(stdout, _stderr, _exit_status)
|
|
43
43
|
SeveralChecks.runs << [@name, @node, "Node check-node test: #{stdout}"]
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/secrets_reader'
|
|
2
|
+
|
|
3
|
+
module HybridPlatformsConductorTest
|
|
4
|
+
|
|
5
|
+
# Mock a secrets reader plugin
|
|
6
|
+
class TestSecretsReaderPlugin < HybridPlatformsConductor::SecretsReader
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
|
|
10
|
+
attr_accessor :calls, :deployer, :mocked_secrets
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Return secrets for a given service to be deployed on a node.
|
|
15
|
+
# [API] - This method is mandatory
|
|
16
|
+
# [API] - The following API components are accessible:
|
|
17
|
+
# * *@config* (Config): Main configuration API.
|
|
18
|
+
# * *@cmd_runner* (CmdRunner): Command Runner API.
|
|
19
|
+
# * *@nodes_handler* (NodesHandler): Nodes handler API.
|
|
20
|
+
#
|
|
21
|
+
# Parameters::
|
|
22
|
+
# * *node* (String): Node to be deployed
|
|
23
|
+
# * *service* (String): Service to be deployed
|
|
24
|
+
# Result::
|
|
25
|
+
# * Hash: The secrets
|
|
26
|
+
def secrets_for(node, service)
|
|
27
|
+
# Get the name by looking into the plugins' map
|
|
28
|
+
plugin_name, _plugin = TestSecretsReaderPlugin.deployer.instance_variable_get(:@secrets_readers).find { |_plugin_name, plugin| plugin == self }
|
|
29
|
+
TestSecretsReaderPlugin.calls << {
|
|
30
|
+
instance: plugin_name,
|
|
31
|
+
node: node,
|
|
32
|
+
service: service
|
|
33
|
+
}
|
|
34
|
+
TestSecretsReaderPlugin.mocked_secrets.dig(node, service, plugin_name) || {
|
|
35
|
+
node => {
|
|
36
|
+
service => {
|
|
37
|
+
plugin_name.to_s => 'Secret value'
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
@@ -4,9 +4,11 @@ module HybridPlatformsConductorTest
|
|
|
4
4
|
class TestsReportPlugin < HybridPlatformsConductor::TestReport
|
|
5
5
|
|
|
6
6
|
class << self
|
|
7
|
+
|
|
7
8
|
# Reports (that can be compared), per report name
|
|
8
9
|
# Array< Hash<Symbol, Object> >
|
|
9
10
|
attr_accessor :reports
|
|
11
|
+
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
# Handle tests reports
|
|
@@ -15,12 +17,9 @@ module HybridPlatformsConductorTest
|
|
|
15
17
|
global_tests: report_from(global_tests),
|
|
16
18
|
platform_tests: report_from(platform_tests),
|
|
17
19
|
node_tests: report_from(node_tests),
|
|
18
|
-
errors_per_test:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
errors.map { |error| error.split("\n").first }
|
|
22
|
-
]
|
|
23
|
-
end],
|
|
20
|
+
errors_per_test: group_errors(node_tests, :test_name).transform_values do |errors|
|
|
21
|
+
errors.map { |error| error.split("\n").first }
|
|
22
|
+
end,
|
|
24
23
|
nodes_by_nodes_list: nodes_by_nodes_list
|
|
25
24
|
}
|
|
26
25
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -32,7 +32,7 @@ RSpec.configure do |config|
|
|
|
32
32
|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
|
33
33
|
|
|
34
34
|
# Increase the diffs length being output, as some tests are dealing with a few lines of stdout
|
|
35
|
-
expectations.max_formatted_output_length =
|
|
35
|
+
expectations.max_formatted_output_length = 65_536
|
|
36
36
|
|
|
37
37
|
end
|
|
38
38
|
|
|
@@ -55,57 +55,56 @@ RSpec.configure do |config|
|
|
|
55
55
|
# triggering implicit auto-inclusion in groups with matching metadata.
|
|
56
56
|
config.shared_context_metadata_behavior = :apply_to_host_groups
|
|
57
57
|
|
|
58
|
-
# The settings below are suggested to provide a good initial experience
|
|
59
|
-
# with RSpec, but feel free to customize to your heart's content.
|
|
60
|
-
|
|
58
|
+
# The settings below are suggested to provide a good initial experience
|
|
59
|
+
# with RSpec, but feel free to customize to your heart's content.
|
|
60
|
+
|
|
61
61
|
# This allows you to limit a spec run to individual examples or groups
|
|
62
62
|
# you care about by tagging them with `:focus` metadata. When nothing
|
|
63
63
|
# is tagged with `:focus`, all examples get run. RSpec also provides
|
|
64
64
|
# aliases for `it`, `describe`, and `context` that include `:focus`
|
|
65
65
|
# metadata: `fit`, `fdescribe` and `fcontext`, respectively.
|
|
66
|
-
config.filter_run_when_matching :focus
|
|
66
|
+
# config.filter_run_when_matching :focus
|
|
67
67
|
|
|
68
68
|
# Allows RSpec to persist some state between runs in order to support
|
|
69
69
|
# the `--only-failures` and `--next-failure` CLI options. We recommend
|
|
70
70
|
# you configure your source control system to ignore this file.
|
|
71
|
-
config.example_status_persistence_file_path = "spec/examples.txt"
|
|
71
|
+
# config.example_status_persistence_file_path = "spec/examples.txt"
|
|
72
72
|
|
|
73
73
|
# Limits the available syntax to the non-monkey patched syntax that is
|
|
74
74
|
# recommended. For more details, see:
|
|
75
75
|
# - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
|
|
76
76
|
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
|
77
77
|
# - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
|
|
78
|
-
config.disable_monkey_patching!
|
|
78
|
+
# config.disable_monkey_patching!
|
|
79
79
|
|
|
80
80
|
# This setting enables warnings. It's recommended, but in some cases may
|
|
81
81
|
# be too noisy due to issues in dependencies.
|
|
82
|
-
config.warnings = true
|
|
82
|
+
# config.warnings = true
|
|
83
83
|
|
|
84
84
|
# Many RSpec users commonly either run the entire suite or an individual
|
|
85
85
|
# file, and it's useful to allow more verbose output when running an
|
|
86
86
|
# individual spec file.
|
|
87
|
-
if config.files_to_run.one?
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
end
|
|
87
|
+
# if config.files_to_run.one?
|
|
88
|
+
# # Use the documentation formatter for detailed output,
|
|
89
|
+
# # unless a formatter has already been configured
|
|
90
|
+
# # (e.g. via a command-line flag).
|
|
91
|
+
# config.default_formatter = "doc"
|
|
92
|
+
# end
|
|
93
93
|
|
|
94
94
|
# Print the 10 slowest examples and example groups at the
|
|
95
95
|
# end of the spec run, to help surface which specs are running
|
|
96
96
|
# particularly slow.
|
|
97
|
-
config.profile_examples = 10
|
|
97
|
+
# config.profile_examples = 10
|
|
98
98
|
|
|
99
99
|
# Run specs in random order to surface order dependencies. If you find an
|
|
100
100
|
# order dependency and want to debug it, you can fix the order by providing
|
|
101
101
|
# the seed, which is printed after each run.
|
|
102
102
|
# --seed 1234
|
|
103
|
-
config.order = :random
|
|
103
|
+
# config.order = :random
|
|
104
104
|
|
|
105
105
|
# Seed global randomization in this process using the `--seed` CLI option.
|
|
106
106
|
# Setting this allows you to use `--seed` to deterministically reproduce
|
|
107
107
|
# test failures related to randomization by passing the same `--seed` value
|
|
108
108
|
# as the one that triggered the failure.
|
|
109
|
-
Kernel.srand config.seed
|
|
110
|
-
=end
|
|
109
|
+
# Kernel.srand config.seed
|
|
111
110
|
end
|
data/tools/check_md
CHANGED
|
@@ -18,7 +18,7 @@ def link_to_file(link, file)
|
|
|
18
18
|
if link_file == ''
|
|
19
19
|
file
|
|
20
20
|
elsif link_file.start_with?('/')
|
|
21
|
-
link_file[1
|
|
21
|
+
link_file[1..]
|
|
22
22
|
else
|
|
23
23
|
File.expand_path("#{File.dirname(file)}/#{link_file}").gsub("#{Dir.pwd}/", '')
|
|
24
24
|
end
|
|
@@ -29,22 +29,20 @@ end
|
|
|
29
29
|
# Parameters::
|
|
30
30
|
# * *file* (String): Markdown file to be parsed
|
|
31
31
|
def parse_md(file)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
parse_md(linked_file) if File.exist?(linked_file) && linked_file.end_with?('.md')
|
|
47
|
-
end
|
|
32
|
+
return if @info.key?(file)
|
|
33
|
+
|
|
34
|
+
puts "Parsing #{file}..."
|
|
35
|
+
content = File.read(file)
|
|
36
|
+
@info[file] = {
|
|
37
|
+
anchors: content.scan(%r{<a name="([^"]*)"></a>}).map { |(anchor)| anchor },
|
|
38
|
+
links: content.scan(/\[[^\]]*\]\(([^)]*)\)/).map { |(link)| link }
|
|
39
|
+
}
|
|
40
|
+
# Parse linked files
|
|
41
|
+
@info[file][:links].each do |link|
|
|
42
|
+
puts "Found #{file} => #{link}"
|
|
43
|
+
unless link.start_with?('http')
|
|
44
|
+
linked_file = link_to_file(link, file)
|
|
45
|
+
parse_md(linked_file) if File.exist?(linked_file) && linked_file.end_with?('.md')
|
|
48
46
|
end
|
|
49
47
|
end
|
|
50
48
|
end
|
|
@@ -63,9 +61,7 @@ errors = []
|
|
|
63
61
|
anchor = link.split('#')[1]
|
|
64
62
|
linked_file = link_to_file(link, file)
|
|
65
63
|
if @info.key?(linked_file)
|
|
66
|
-
if anchor.nil?
|
|
67
|
-
'*'
|
|
68
|
-
elsif @info[linked_file][:anchors].include?(anchor)
|
|
64
|
+
if anchor.nil? || @info[linked_file][:anchors].include?(anchor)
|
|
69
65
|
'*'
|
|
70
66
|
else
|
|
71
67
|
errors << "[#{file} -> #{link}] - Destination has no anchor named #{anchor}"
|