├── rebar.lock ├── test_project ├── gleam.toml ├── src │ ├── test_project.gleam │ └── test_project.app.src ├── test │ └── test_project_test.gleam ├── .gitignore ├── README.md ├── rebar.config └── LICENSE ├── rebar.config ├── .gitignore ├── src ├── rebar_gleam.app.src ├── rebar_gleam.erl ├── rebar_gleam_prv_compile.erl ├── rebar_gleam_prv_eunit.erl └── rebar_gleam_prv_common_test.erl ├── README.md └── LICENSE /rebar.lock: -------------------------------------------------------------------------------- 1 | []. 2 | -------------------------------------------------------------------------------- /test_project/gleam.toml: -------------------------------------------------------------------------------- 1 | name = "test_project" 2 | -------------------------------------------------------------------------------- /rebar.config: -------------------------------------------------------------------------------- 1 | {erl_opts, [debug_info]}. 2 | {deps, []}. 3 | -------------------------------------------------------------------------------- /test_project/src/test_project.gleam: -------------------------------------------------------------------------------- 1 | pub fn hello_world() { 2 | "Hello, from test_project!" 3 | } 4 | -------------------------------------------------------------------------------- /test_project/test/test_project_test.gleam: -------------------------------------------------------------------------------- 1 | import test_project 2 | import gleam/expect 3 | 4 | pub fn hello_world_test() { 5 | test_project.hello_world() 6 | |> expect.equal(_, "Hello, from test_project!") 7 | } 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .rebar3 2 | _* 3 | .eunit 4 | *.o 5 | *.beam 6 | *.plt 7 | *.swp 8 | *.swo 9 | .erlang.cookie 10 | ebin 11 | log 12 | erl_crash.dump 13 | .rebar 14 | logs 15 | _build 16 | .idea 17 | *.iml 18 | rebar3.crashdump 19 | -------------------------------------------------------------------------------- /test_project/.gitignore: -------------------------------------------------------------------------------- 1 | *.beam 2 | *.iml 3 | *.o 4 | *.plt 5 | *.swo 6 | *.swp 7 | *~ 8 | .erlang.cookie 9 | .eunit 10 | .idea 11 | .rebar 12 | .rebar3 13 | _* 14 | _build 15 | ebin 16 | erl_crash.dump 17 | gen 18 | log 19 | logs 20 | rebar3.crashdump 21 | -------------------------------------------------------------------------------- /test_project/README.md: -------------------------------------------------------------------------------- 1 | # test_project 2 | 3 | 4 | A Gleam program 5 | 6 | 7 | ## Quick start 8 | 9 | ```sh 10 | # Build the project 11 | rebar3 compile 12 | 13 | # Run the eunit tests 14 | rebar3 eunit 15 | 16 | # Run the Erlang REPL 17 | rebar3 shell 18 | ``` 19 | -------------------------------------------------------------------------------- /test_project/src/test_project.app.src: -------------------------------------------------------------------------------- 1 | {application, test_project, 2 | [{description, "A Gleam program"}, 3 | {vsn, "0.1.0"}, 4 | {registered, []}, 5 | {applications, 6 | [kernel, 7 | stdlib 8 | ]}, 9 | {env,[]}, 10 | {modules, []}, 11 | 12 | {licenses, ["Apache 2.0"]}, 13 | {links, []} 14 | ]}. 15 | -------------------------------------------------------------------------------- /test_project/rebar.config: -------------------------------------------------------------------------------- 1 | {erl_opts, [debug_info]}. 2 | {src_dirs, ["src", "gen/src"]}. 3 | 4 | {project_plugins, [ 5 | rebar_gleam 6 | ]}. 7 | 8 | {profiles, [ 9 | {test, [{src_dirs, ["src", "test", "gen/src", "gen/test"]}]} 10 | ]}. 11 | 12 | {deps, [ 13 | {gleam_stdlib, {git, "https://github.com/gleam-lang/stdlib", {branch, "master"}}} 14 | ]}. 15 | -------------------------------------------------------------------------------- /src/rebar_gleam.app.src: -------------------------------------------------------------------------------- 1 | {application, rebar_gleam, 2 | [{description, "Build Gleam projects with rebar3"}, 3 | {vsn, "0.2.0"}, 4 | {registered, []}, 5 | {applications, 6 | [kernel, 7 | stdlib 8 | ]}, 9 | {env,[]}, 10 | {modules, []}, 11 | 12 | {licenses, ["Apache 2.0"]}, 13 | {links, [{"GitHub", "https://github.com/gleam-lang/rebar_gleam"}]} 14 | ]}. 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # rebar_gleam 2 | 3 | Build Gleam projects with rebar3! 4 | 5 | ## Installation 6 | 7 | Add the plugin to your project's `rebar.config`. 8 | 9 | ```erlang 10 | {project_plugins, [rebar_gleam]}. 11 | ``` 12 | 13 | If you wish to write Gleam modules in your project as well as being able to 14 | use dependency modules written in Gleam add this configuration to your 15 | project's `rebar.config`: 16 | 17 | ```erlang 18 | {src_dirs, ["src", "gen/src"]}. 19 | {profiles, [ 20 | {test, [{src_dirs, ["src", "test", "gen/src", "gen/test"]}]} 21 | ]}. 22 | ``` 23 | -------------------------------------------------------------------------------- /src/rebar_gleam.erl: -------------------------------------------------------------------------------- 1 | -module(rebar_gleam). 2 | 3 | % https://www.rebar3.org/docs/plugins 4 | 5 | -export([init/1, provider_do/2]). 6 | 7 | -spec init(rebar_state:t()) -> {ok, rebar_state:t()}. 8 | init(State) -> 9 | {ok, State1} = rebar_gleam_prv_compile:init(State), 10 | {ok, State2} = rebar_gleam_prv_eunit:init(State1), 11 | {ok, State3} = rebar_gleam_prv_common_test:init(State2), 12 | {ok, State3}. 13 | 14 | provider_do(State, Do) -> 15 | case rebar_utils:sh("gleam build", [use_stdout, return_on_error]) of 16 | {ok, _} -> 17 | Do(State); 18 | 19 | _ -> 20 | io:put_chars("\n"), 21 | {error, "Unable to compile Gleam project"} 22 | end. 23 | -------------------------------------------------------------------------------- /src/rebar_gleam_prv_compile.erl: -------------------------------------------------------------------------------- 1 | -module(rebar_gleam_prv_compile). 2 | 3 | -behaviour(provider). 4 | -export([init/1, do/1, format_error/1]). 5 | 6 | -define(PROVIDER, compile). 7 | -define(DEPS, [lock]). 8 | 9 | %% =================================================================== 10 | %% Public API 11 | %% =================================================================== 12 | -spec init(rebar_state:t()) -> {ok, rebar_state:t()}. 13 | init(State) -> 14 | Provider = providers:create([ 15 | {name, ?PROVIDER}, 16 | {module, ?MODULE}, 17 | {bare, true}, 18 | {deps, ?DEPS}, 19 | {example, "rebar3 compile"}, 20 | {short_desc, "Build Gleam projects with rebar3"}, 21 | {desc, "Build Gleam projects with rebar3"}, 22 | {opts, [{deps_only, $d, "deps_only", undefined, 23 | "Only compile dependencies, no project apps will be built."}]} 24 | ]), 25 | {ok, rebar_state:add_provider(State, Provider)}. 26 | 27 | 28 | -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. 29 | do(State) -> 30 | rebar_gleam:provider_do(State, fun rebar_prv_compile:do/1). 31 | 32 | -spec format_error(any()) -> iolist(). 33 | format_error(Reason) -> 34 | rebar_prv_compile:format_error(Reason). 35 | -------------------------------------------------------------------------------- /src/rebar_gleam_prv_eunit.erl: -------------------------------------------------------------------------------- 1 | -module(rebar_gleam_prv_eunit). 2 | 3 | -behaviour(provider). 4 | -export([init/1, do/1, format_error/1]). 5 | 6 | -define(PROVIDER, eunit). 7 | -define(DEPS, [lock]). 8 | 9 | %% =================================================================== 10 | %% Public API 11 | %% =================================================================== 12 | 13 | -spec init(rebar_state:t()) -> {ok, rebar_state:t()}. 14 | init(State) -> 15 | Provider = providers:create([{name, ?PROVIDER}, 16 | {module, ?MODULE}, 17 | {deps, ?DEPS}, 18 | {bare, true}, 19 | {example, "rebar3 eunit"}, 20 | {short_desc, "Run EUnit Tests."}, 21 | {desc, "Run EUnit Tests."}, 22 | {opts, rebar_prv_eunit:eunit_opts(State)}, 23 | {profiles, [test]}]), 24 | State1 = rebar_state:add_provider(State, Provider), 25 | {ok, State1}. 26 | 27 | -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. 28 | do(State) -> 29 | rebar_gleam:provider_do(State, fun rebar_prv_eunit:do/1). 30 | 31 | -spec format_error(any()) -> iolist(). 32 | format_error(Reason) -> 33 | rebar_prv_compile:format_error(Reason). 34 | -------------------------------------------------------------------------------- /src/rebar_gleam_prv_common_test.erl: -------------------------------------------------------------------------------- 1 | -module(rebar_gleam_prv_common_test). 2 | 3 | -behaviour(provider). 4 | -export([init/1, do/1, format_error/1]). 5 | 6 | -define(PROVIDER, ct). 7 | -define(DEPS, [lock]). 8 | 9 | %% =================================================================== 10 | %% Public API 11 | %% =================================================================== 12 | 13 | -spec init(rebar_state:t()) -> {ok, rebar_state:t()}. 14 | init(State) -> 15 | Provider = providers:create([{name, ?PROVIDER}, 16 | {module, ?MODULE}, 17 | {deps, ?DEPS}, 18 | {bare, true}, 19 | {example, "rebar3 ct"}, 20 | {short_desc, "Run Common Tests."}, 21 | {desc, "Run Common Tests."}, 22 | {opts, ct_opts(State)}, 23 | {profiles, [test]}]), 24 | {ok, rebar_state:add_provider(State, Provider)}. 25 | 26 | -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. 27 | do(State) -> 28 | rebar_gleam:provider_do(State, fun rebar_prv_common_test:do/1). 29 | 30 | -spec format_error(any()) -> iolist(). 31 | format_error(Reason) -> 32 | rebar_prv_compile:format_error(Reason). 33 | 34 | ct_opts(_State) -> 35 | [{dir, undefined, "dir", string, help(dir)}, %% comma-separated list 36 | {suite, undefined, "suite", string, help(suite)}, %% comma-separated list 37 | {group, undefined, "group", string, help(group)}, %% comma-separated list 38 | {testcase, undefined, "case", string, help(testcase)}, %% comma-separated list 39 | {label, undefined, "label", string, help(label)}, %% String 40 | {config, undefined, "config", string, help(config)}, %% comma-separated list 41 | {spec, undefined, "spec", string, help(spec)}, %% comma-separated list 42 | {join_specs, undefined, "join_specs", boolean, help(join_specs)}, 43 | {allow_user_terms, undefined, "allow_user_terms", boolean, help(allow_user_terms)}, %% Bool 44 | {logdir, undefined, "logdir", string, help(logdir)}, %% dir 45 | {logopts, undefined, "logopts", string, help(logopts)}, %% comma-separated list 46 | {verbosity, undefined, "verbosity", integer, help(verbosity)}, %% Integer 47 | {cover, $c, "cover", {boolean, false}, help(cover)}, 48 | {cover_export_name, undefined, "cover_export_name", string, help(cover_export_name)}, 49 | {repeat, undefined, "repeat", integer, help(repeat)}, %% integer 50 | {duration, undefined, "duration", string, help(duration)}, % format: HHMMSS 51 | {until, undefined, "until", string, help(until)}, %% format: YYMoMoDD[HHMMSS] 52 | {force_stop, undefined, "force_stop", string, help(force_stop)}, %% String 53 | {basic_html, undefined, "basic_html", boolean, help(basic_html)}, %% Boolean 54 | {stylesheet, undefined, "stylesheet", string, help(stylesheet)}, %% String 55 | {decrypt_key, undefined, "decrypt_key", string, help(decrypt_key)}, %% String 56 | {decrypt_file, undefined, "decrypt_file", string, help(decrypt_file)}, %% String 57 | {abort_if_missing_suites, undefined, "abort_if_missing_suites", {boolean, true}, help(abort_if_missing_suites)}, %% Boolean 58 | {multiply_timetraps, undefined, "multiply_timetraps", integer, help(multiple_timetraps)}, %% Integer 59 | {scale_timetraps, undefined, "scale_timetraps", boolean, help(scale_timetraps)}, 60 | {create_priv_dir, undefined, "create_priv_dir", string, help(create_priv_dir)}, 61 | {include, undefined, "include", string, help(include)}, 62 | {readable, undefined, "readable", string, help(readable)}, 63 | {verbose, $v, "verbose", boolean, help(verbose)}, 64 | {name, undefined, "name", atom, help(name)}, 65 | {sname, undefined, "sname", atom, help(sname)}, 66 | {setcookie, undefined, "setcookie", atom, help(setcookie)}, 67 | {sys_config, undefined, "sys_config", string, help(sys_config)}, %% comma-separated list 68 | {compile_only, undefined, "compile_only", boolean, help(compile_only)}, 69 | {retry, undefined, "retry", boolean, help(retry)}, 70 | {fail_fast, undefined, "fail_fast", {boolean, false}, help(fail_fast)} 71 | ]. 72 | 73 | help(compile_only) -> 74 | "Compile modules in the project with the test configuration but do not run the tests"; 75 | help(dir) -> 76 | "List of additional directories containing test suites"; 77 | help(suite) -> 78 | "List of test suites to run"; 79 | help(group) -> 80 | "List of test groups to run"; 81 | help(testcase) -> 82 | "List of test cases to run"; 83 | help(label) -> 84 | "Test label"; 85 | help(config) -> 86 | "List of config files"; 87 | help(spec) -> 88 | "List of test specifications"; 89 | help(join_specs) -> 90 | "Merge all test specifications and perform a single test run"; 91 | help(sys_config) -> 92 | "List of application config files"; 93 | help(allow_user_terms) -> 94 | "Allow user defined config values in config files"; 95 | help(logdir) -> 96 | "Log folder"; 97 | help(logopts) -> 98 | "Options for common test logging"; 99 | help(verbosity) -> 100 | "Verbosity"; 101 | help(cover) -> 102 | "Generate cover data"; 103 | help(cover_export_name) -> 104 | "Base name of the coverdata file to write"; 105 | help(repeat) -> 106 | "How often to repeat tests"; 107 | help(duration) -> 108 | "Max runtime (format: HHMMSS)"; 109 | help(until) -> 110 | "Run until (format: HHMMSS)"; 111 | help(force_stop) -> 112 | "Force stop on test timeout (true | false | skip_rest)"; 113 | help(basic_html) -> 114 | "Show basic HTML"; 115 | help(stylesheet) -> 116 | "CSS stylesheet to apply to html output"; 117 | help(decrypt_key) -> 118 | "Path to key for decrypting config"; 119 | help(decrypt_file) -> 120 | "Path to file containing key for decrypting config"; 121 | help(abort_if_missing_suites) -> 122 | "Abort if suites are missing"; 123 | help(multiply_timetraps) -> 124 | "Multiply timetraps"; 125 | help(scale_timetraps) -> 126 | "Scale timetraps"; 127 | help(create_priv_dir) -> 128 | "Create priv dir (auto_per_run | auto_per_tc | manual_per_tc)"; 129 | help(include) -> 130 | "Directories containing additional include files"; 131 | help(readable) -> 132 | "Shows test case names and only displays logs to shell on failures (true | compact | false)"; 133 | help(verbose) -> 134 | "Verbose output"; 135 | help(name) -> 136 | "Gives a long name to the node"; 137 | help(sname) -> 138 | "Gives a short name to the node"; 139 | help(setcookie) -> 140 | "Sets the cookie if the node is distributed"; 141 | help(retry) -> 142 | "Experimental feature. If any specification for previously failing test is found, runs them."; 143 | help(fail_fast) -> 144 | "Experimental feature. If any test fails, the run is aborted. Since common test does not " 145 | "support this natively, we abort the rebar3 run on a failure. This May break CT's disk logging and " 146 | "other rebar3 features."; 147 | help(_) -> 148 | "". 149 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | Copyright 2019, Louis Pilfold . 179 | 180 | Licensed under the Apache License, Version 2.0 (the "License"); 181 | you may not use this file except in compliance with the License. 182 | You may obtain a copy of the License at 183 | 184 | http://www.apache.org/licenses/LICENSE-2.0 185 | 186 | Unless required by applicable law or agreed to in writing, software 187 | distributed under the License is distributed on an "AS IS" BASIS, 188 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 189 | See the License for the specific language governing permissions and 190 | limitations under the License. 191 | 192 | -------------------------------------------------------------------------------- /test_project/LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | Copyright {{copyright_year}}, {{author_name}} <{{author_email}}>. 179 | 180 | Licensed under the Apache License, Version 2.0 (the "License"); 181 | you may not use this file except in compliance with the License. 182 | You may obtain a copy of the License at 183 | 184 | http://www.apache.org/licenses/LICENSE-2.0 185 | 186 | Unless required by applicable law or agreed to in writing, software 187 | distributed under the License is distributed on an "AS IS" BASIS, 188 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 189 | See the License for the specific language governing permissions and 190 | limitations under the License. 191 | 192 | --------------------------------------------------------------------------------