diff --git a/.circleci/config.yml b/.circleci/config.yml index 9df55c5..2875986 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,14 +1,5 @@ version: 2 jobs: - script_tests: - docker: - - image: djhaskin987/lein-script-tester:latest - version: 2 - steps: - - checkout - - run: - command: | - test/resources/scripts/test-all lein_tests: docker: - image: clojure:lein @@ -23,12 +14,6 @@ jobs: ls target/test-results/html lein uberjar buildutils/generate-manifest - - - persist_to_workspace: - root: . - paths: - - target/uberjar/degasolv-*-standalone.jar - - target/manifest - store_artifacts: path: target/test-results/xml/ destination: test-results/xml @@ -37,55 +22,113 @@ jobs: destination: uberjar/ - store_test_results: path: target/test-results/xml/ + - persist_to_workspace: + root: . + paths: + - target/uberjar/degasolv-*-standalone.jar + - target/manifest + + script_tests: + docker: + - image: djhaskin987/lein-script-tester:latest + version: 2 + steps: + - checkout + - run: + command: | + test/resources/scripts/test-all - package_ubuntu: + package_ubuntu16: docker: - - image: alanfranz/fpm-within-docker:ubuntu-zesty + - image: djhaskin987/graal-lein-fpm:ubuntu16 version: 2 steps: - attach_workspace: - at: /tmp/tested-artifacts + at: /tmp/workspace - checkout - - run: cp -af /tmp/tested-artifacts/target ./ - - run: buildutils/package deb + - run: cp -af /tmp/workspace/target ./ + - run: + name: "Package debian for Ubuntu 16" + command: buildutils/package deb + no_output_timeout: 30m + - run: mv target/package target/package_u16 - persist_to_workspace: root: . paths: - - target/package/*.deb + - target/package_u16/*.deb - store_artifacts: - path: target/package/ - destination: package/ + path: target/package_u16/ + destination: package_u16/ - test_ubuntu_package: + package_ubuntu18: docker: - - image: djhaskin987/test-ubuntu-installer:latest + - image: djhaskin987/graal-lein-fpm:ubuntu18 version: 2 steps: - attach_workspace: at: /tmp/workspace - checkout - run: cp -af /tmp/workspace/target ./ - - run: buildutils/test-install-package-ubuntu + - run: + name: "Package debian for Ubuntu 18" + command: buildutils/package deb + no_output_timeout: 30m + - run: mv target/package target/package_u18 + - persist_to_workspace: + root: . + paths: + - target/package_u18/*.deb + - store_artifacts: + path: target/package_u18/ + destination: package_u18/ - package_centos: + package_centos7: docker: - - image: alanfranz/fpm-within-docker:centos-7 + - image: djhaskin987/graal-lein-fpm:centos7 version: 2 steps: - attach_workspace: - at: /tmp/tested-artifacts + at: /tmp/workspace - checkout - - run: cp -af /tmp/tested-artifacts/target ./ - - run: buildutils/package rpm + - run: cp -af /tmp/workspace/target ./ + - run: + name: "Package debian for CentOS 7" + command: buildutils/package rpm + no_output_timeout: 30m + - run: mv target/package target/package_c7 - persist_to_workspace: root: . paths: - - target/package/*.rpm + - target/package_c7/*.rpm - store_artifacts: - path: target/package/ - destination: package/ + path: target/package_c7/ + destination: package_c7/ + + test_ubuntu16_package: + docker: + - image: djhaskin987/test-ubuntu-installer:ubuntu16 + version: 2 + steps: + - attach_workspace: + at: /tmp/workspace + - checkout + - run: cp -af /tmp/workspace/target ./ + - run: mv target/package_u16 target/package + - run: buildutils/test-install-package-ubuntu + + test_ubuntu18_package: + docker: + - image: djhaskin987/test-ubuntu-installer:ubuntu18 + version: 2 + steps: + - attach_workspace: + at: /tmp/workspace + - checkout + - run: cp -af /tmp/workspace/target ./ + - run: mv target/package_u18 target/package + - run: buildutils/test-install-package-ubuntu - test_centos_package: + test_centos7_package: docker: - image: bzohdy/centos-sudo:latest version: 2 @@ -94,24 +137,30 @@ jobs: at: /tmp/workspace - checkout - run: cp -af /tmp/workspace/target ./ + - run: mv target/package_c7 target/package - run: buildutils/test-install-package-centos - workflows: version: 2 build_and_test: jobs: - script_tests - lein_tests - - package_ubuntu: + - package_ubuntu16: requires: - lein_tests - - test_ubuntu_package: + - package_ubuntu18: requires: - - package_ubuntu - - package_centos: + - lein_tests + - package_centos7: requires: - lein_tests - - test_centos_package: + - test_ubuntu16_package: + requires: + - package_ubuntu16 + - test_ubuntu18_package: + requires: + - package_ubuntu18 + - test_centos7_package: requires: - - package_centos + - package_centos7 diff --git a/.gitignore b/.gitignore index b23e431..f8220bc 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,9 @@ /test/resources/data/test-option-packs/ /test/resources/data/test-json-config/ /test/resources/data/test-query-output-format/ +/test/resources/data/test-list-strat/ /buildutils/boot +/degasolv-*-standalone /*.dscard /*.dsrepo /classes diff --git a/Degasolv-01.png b/Degasolv-01.png deleted file mode 100644 index cfdd9ed..0000000 Binary files a/Degasolv-01.png and /dev/null differ diff --git a/Degasolv-small.png b/Degasolv-small.png new file mode 100644 index 0000000..84a059d Binary files /dev/null and b/Degasolv-small.png differ diff --git a/Degasolv.png b/Degasolv.png index 4edef03..cfdd9ed 100644 Binary files a/Degasolv.png and b/Degasolv.png differ diff --git a/README.md b/README.md index 1521082..cef7623 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![Degasolv Logo](https://github.com/djhaskin987/degasolv/raw/develop/Degasolv.png) +![Degasolv Logo](https://github.com/djhaskin987/degasolv/raw/develop/Degasolv-small.png) # Degasolv diff --git a/TODO b/TODO index 0b3ed4e..5b91ba3 100644 --- a/TODO +++ b/TODO @@ -1,8 +1,3 @@ - [ ] Docs: common pitfall of subproc: "name" vs "id" in json or strings vs keywords in EDN -- [ ] BOOT fix so that most of build is in it -- [ ] 1.13 release: the http package system, allowing the query - per-package of some process (for e.g. helm purposes) -- [ ] 1.13 release: remove-packages -- [ ] 1.13 release: --state-file -- [ ] 1.13 release: tree print out +- [ ] 2.0.0 release: run test scripts on graal output as part of the build diff --git a/build.boot.disabled b/build.boot.disabled index bbaaedd..4d121c2 100644 --- a/build.boot.disabled +++ b/build.boot.disabled @@ -9,7 +9,6 @@ '[[org.clojure/clojure "1.9.0-alpha14"] [version-clj "0.1.2"] [org.clojure/tools.cli "0.3.5"] - [me.raynes/fs "1.4.6"] [adzerk/boot-test "1.2.0"] [org.clojure/core.match "0.3.0-alpha4"] [com.velisco/tagged "0.5.0"]]) diff --git a/buildutils/package b/buildutils/package index e5a3468..c3ccb93 100755 --- a/buildutils/package +++ b/buildutils/package @@ -7,9 +7,9 @@ shift if [ "${type}" = "rpm" ] then - dep="java" + dep="java-headless" else - dep="java-runtime" + dep="default-jre-headless" fi . target/manifest @@ -40,7 +40,7 @@ fpm \ --name "${name}" \ --version "${basic_version}" \ --iteration "${iteration}.djh987" \ - --license "Eclipse Public License" \ + --license "Eclipse Public License v1.0" \ --architecture "all" \ --depends "${dep}" \ --maintainer "djhaskin987@gmail.com" \ diff --git a/buildutils/test-install-package-centos b/buildutils/test-install-package-centos index 2d6fb9d..d7c0c94 100755 --- a/buildutils/test-install-package-centos +++ b/buildutils/test-install-package-centos @@ -5,7 +5,7 @@ set -exuo . target/manifest find /tmp -sudo yum install -y /tmp/workspace/target/package/*.rpm +sudo yum install -y target/package/*.rpm java -version rpm -qi degasolv rpm -q --list degasolv diff --git a/buildutils/test-install-package-ubuntu b/buildutils/test-install-package-ubuntu index eb45445..69dcecd 100755 --- a/buildutils/test-install-package-ubuntu +++ b/buildutils/test-install-package-ubuntu @@ -6,7 +6,7 @@ set -exuo find /tmp sudo apt-get update -sudo dpkg -i /tmp/workspace/target/package/*.deb || : +sudo dpkg -i target/package/*.deb || : sudo apt-get install -y -f java -version dpkg-query -l degasolv diff --git a/docs/3rd-party-licenses.rst b/docs/3rd-party-licenses.rst new file mode 100644 index 0000000..0ce0eb2 --- /dev/null +++ b/docs/3rd-party-licenses.rst @@ -0,0 +1,707 @@ +.. _3rd-party-licenses: + +3rd Party Licenses +================== + +Degasolv is built on the shoulders of giants. Here are the licenses for the +third party software that comes with Degasolv. + +Native-Image +------------ + ++------------------------------+--------------------------------------+ +| Software | `GraalVM Community Edition 19.0.0`_ | ++------------------------------+--------------------------------------+ +| Version of software | 19.0.0 | ++------------------------------+--------------------------------------+ +| Degasolv version introduced | 2.0.0 | ++------------------------------+--------------------------------------+ + +.. _GraalVM Community Edition 19.0.0: https://github.com/oracle/graal/releases/tag/vm-19.0.0 + +.. note:: Degasolv falls under Native-Image's "classpath exception" + and so does not need to conform to the license for Native-Image; + however, as a courtesy, its license is presented here. + +Verbatim License +++++++++++++++++ + +The GNU General Public License (GPL) + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public License is intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. This General Public License applies to +most of the Free Software Foundation's software and to any other program whose +authors commit to using it. (Some other Free Software Foundation software is +covered by the GNU Library General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom to +distribute copies of free software (and charge for this service if you wish), +that you receive source code or can get it if you want it, that you can change +the software or use pieces of it in new free programs; and that you know you +can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny +you these rights or to ask you to surrender the rights. These restrictions +translate to certain responsibilities for you if you distribute copies of the +software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for +a fee, you must give the recipients all the rights that you have. You must +make sure that they, too, receive or can get the source code. And you must +show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, distribute +and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If the +software is modified by someone else and passed on, we want its recipients to +know that what they have is not the original, so that any problems introduced +by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program proprietary. +To prevent this, we have made it clear that any patent must be licensed for +everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the terms of +this General Public License. The "Program", below, refers to any such program +or work, and a "work based on the Program" means either the Program or any +derivative work under copyright law: that is to say, a work containing the +Program or a portion of it, either verbatim or with modifications and/or +translated into another language. (Hereinafter, translation is included +without limitation in the term "modification".) Each licensee is addressed as +"you". + +Activities other than copying, distribution and modification are not covered by +this License; they are outside its scope. The act of running the Program is +not restricted, and the output from the Program is covered only if its contents +constitute a work based on the Program (independent of having been made by +running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as +you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and give any other recipients of the +Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may +at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus +forming a work based on the Program, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all of +these conditions: + + a) You must cause the modified files to carry prominent notices stating + that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in whole or + in part contains or is derived from the Program or any part thereof, to be + licensed as a whole at no charge to all third parties under the terms of + this License. + + c) If the modified program normally reads commands interactively when run, + you must cause it, when started running for such interactive use in the + most ordinary way, to print or display an announcement including an + appropriate copyright notice and a notice that there is no warranty (or + else, saying that you provide a warranty) and that users may redistribute + the program under these conditions, and telling the user how to view a copy + of this License. (Exception: if the Program itself is interactive but does + not normally print such an announcement, your work based on the Program is + not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Program, and can be reasonably +considered independent and separate works in themselves, then this License, and +its terms, do not apply to those sections when you distribute them as separate +works. But when you distribute the same sections as part of a whole which is a +work based on the Program, the distribution of the whole must be on the terms +of this License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based on +the Program. + +In addition, mere aggregation of another work not based on the Program with the +Program (or with a work based on the Program) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + +3. You may copy and distribute the Program (or a work based on it, under +Section 2) in object code or executable form under the terms of Sections 1 and +2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source + code, which must be distributed under the terms of Sections 1 and 2 above + on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three years, to + give any third party, for a charge no more than your cost of physically + performing source distribution, a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed only + for noncommercial distribution and only if you received the program in + object code or executable form with such an offer, in accord with + Subsection b above.) + +The source code for a work means the preferred form of the work for making +modifications to it. For an executable work, complete source code means all +the source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and installation +of the executable. However, as a special exception, the source code +distributed need not include anything that is normally distributed (in either +source or binary form) with the major components (compiler, kernel, and so on) +of the operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the source +code from the same place counts as distribution of the source code, even though +third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as +expressly provided under this License. Any attempt otherwise to copy, modify, +sublicense or distribute the Program is void, and will automatically terminate +your rights under this License. However, parties who have received copies, or +rights, from you under this License will not have their licenses terminated so +long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. +However, nothing else grants you permission to modify or distribute the Program +or its derivative works. These actions are prohibited by law if you do not +accept this License. Therefore, by modifying or distributing the Program (or +any work based on the Program), you indicate your acceptance of this License to +do so, and all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), +the recipient automatically receives a license from the original licensor to +copy, distribute or modify the Program subject to these terms and conditions. +You may not impose any further restrictions on the recipients' exercise of the +rights granted herein. You are not responsible for enforcing compliance by +third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), conditions +are imposed on you (whether by court order, agreement or otherwise) that +contradict the conditions of this License, they do not excuse you from the +conditions of this License. If you cannot distribute so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not distribute the Program at all. +For example, if a patent license would not permit royalty-free redistribution +of the Program by all those who receive copies directly or indirectly through +you, then the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system, which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Program under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In +such case, this License incorporates the limitation as if written in the body +of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the +General Public License from time to time. Such new versions will be similar in +spirit to the present version, but may differ in detail to address new problems +or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any later +version", you have the option of following the terms and conditions either of +that version or of any later version published by the Free Software Foundation. +If the Program does not specify a version number of this License, you may +choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs +whose distribution conditions are different, write to the author to ask for +permission. For software which is copyrighted by the Free Software Foundation, +write to the Free Software Foundation; we sometimes make exceptions for this. +Our decision will be guided by the two goals of preserving the free status of +all derivatives of our free software and of promoting the sharing and reuse of +software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE +PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE +PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA +BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER +OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible +use to the public, the best way to achieve this is to make it free software +which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach +them to the start of each source file to most effectively convey the exclusion +of warranty; and each file should have at least the "copyright" line and a +pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + + Copyright (C) + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., 59 + Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it +starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes + with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free + software, and you are welcome to redistribute it under certain conditions; + type 'show c' for details. + +The hypothetical commands 'show w' and 'show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may be +called something other than 'show w' and 'show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the program, if necessary. Here +is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + 'Gnomovision' (which makes passes at compilers) written by James Hacker. + + signature of Ty Coon, 1 April 1989 + + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General Public +License instead of this License. + + +"CLASSPATH" EXCEPTION TO THE GPL + +Certain source files distributed by Oracle America and/or its affiliates are +subject to the following clarification and special exception to the GPL, but +only where Oracle has expressly included in the particular source file's header +the words "Oracle designates this particular file as subject to the "Classpath" +exception as provided by Oracle in the LICENSE file that accompanied this code." + + Linking this library statically or dynamically with other modules is making + a combined work based on this library. Thus, the terms and conditions of + the GNU General Public License cover the whole combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules, + and to copy and distribute the resulting executable under terms of your + choice, provided that you also meet, for each linked independent module, + the terms and conditions of the license of that module. An independent + module is a module which is not derived from or based on this library. If + you modify this library, you may extend this exception to your version of + the library, but you are not obligated to do so. If you do not wish to do + so, delete this exception statement from your version. + +Clojure and Clojure Libraries +----------------------------- + +All of Clojure, the language in which Degasolv was written, and the clojure +libraries it uses all use the same license: The Eclipse Public License, +version 1.0. It is presented below along with the names of the libraries used +in Degasolv. + +Clojure ++++++++ + ++------------------------------+--------------------------------------+ +| Software | `Clojure Programming Language`_ | ++------------------------------+--------------------------------------+ +| Author(s) | Rich Hickey and Contributors | ++------------------------------+--------------------------------------+ +| Version of software | 1.10.1 | ++------------------------------+--------------------------------------+ +| Degasolv version introduced | 1.0.2 | ++------------------------------+--------------------------------------+ + +.. _Clojure Programming Language: https://github.com/clojure/clojure/releases/tag/clojure-1.10.1 + +serovers +++++++++ + ++------------------------------+--------------------------------------+ +| Software | `serovers`_ | ++------------------------------+--------------------------------------+ +| Author(s) | Daniel Jay Haskin | ++------------------------------+--------------------------------------+ +| Version of software | 1.6.2 | ++------------------------------+--------------------------------------+ +| Degasolv version introduced | 1.8.0 | ++------------------------------+--------------------------------------+ + +.. _Serovers: https://gitlab.com/djhaskin987/serovers/-/tags/1.6.2 + + +tools.cli ++++++++++ + ++------------------------------+--------------------------------------+ +| Software | `tools.cli`_ | ++------------------------------+--------------------------------------+ +| Author(s) | Rich Hickey and contributors | ++------------------------------+--------------------------------------+ +| Version of software | 0.3.5 | ++------------------------------+--------------------------------------+ +| Degasolv version introduced | 1.0.2 | ++------------------------------+--------------------------------------+ + +.. _tools.cli: https://github.com/clojure/tools.cli/releases/tag/tools.cli-0.3.5 + +tagged +++++++ + ++------------------------------+--------------------------------------+ +| Software | `tagged`_ | ++------------------------------+--------------------------------------+ +| Author(s) | Stephen E. Miner | ++------------------------------+--------------------------------------+ +| Version of software | 0.5.0 | ++------------------------------+--------------------------------------+ +| Degasolv version introduced | 1.0.2 | ++------------------------------+--------------------------------------+ + +.. _tagged: https://github.com/miner/tagged + +data.json ++++++++++ + ++------------------------------+--------------------------------------+ +| Software | `data.json`_ | ++------------------------------+--------------------------------------+ +| Author(s) | Stuart Sierra | ++------------------------------+--------------------------------------+ +| Version of software | 0.2.6 | ++------------------------------+--------------------------------------+ +| Degasolv version introduced | 1.10.0 | ++------------------------------+--------------------------------------+ + +.. _data.json: https://github.com/clojure/data.json/releases/tag/data.json-0.2.6 + + +core.match +++++++++++ + ++------------------------------+--------------------------------------+ +| Software | `core.match`_ | ++------------------------------+--------------------------------------+ +| Author(s) | David Nolen, Ambrose Bonnaire- | +| | Sergeant, Rich Hickey & contributors | ++------------------------------+--------------------------------------+ +| Version of software | 0.3.0-alpha5 | ++------------------------------+--------------------------------------+ +| Degasolv version introduced | 1.0.2 | ++------------------------------+--------------------------------------+ + +.. _core.match: https://github.com/clojure/core.match/releases/tag/core.match-0.3.0-alpha5 + +Eclipse Public License +++++++++++++++++++++++ + + Eclipse Public License - v 1.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF + THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial code and + documentation distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + + i) changes to the Program, and + + ii) additions to the Program; + + where such changes and/or additions to the Program originate from and + are distributed by that particular Contributor. A Contribution + 'originates' from a Contributor if it was added to the Program by such + Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include additions to the Program which: (i) are + separate modules of software distributed in conjunction with the + Program under their own license agreement, and (ii) are not derivative + works of the Program. + + "Contributor" means any person or entity that distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement, + including all Contributors. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare derivative works of, publicly display, + publicly perform, distribute and sublicense the Contribution of such + Contributor, if any, and such derivative works, in source code and + object code form. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, if + any, in source code and object code form. This patent license shall + apply to the combination of the Contribution and the Program if, at the + time the Contribution is added by the Contributor, such addition of the + Contribution causes such combination to be covered by the Licensed + Patents. The patent license shall not apply to any other combinations + which include the Contribution. No hardware per se is licensed + hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. Each + Contributor disclaims any liability to Recipient for claims brought by + any other entity based on infringement of intellectual property rights + or otherwise. As a condition to exercising the rights and licenses + granted hereunder, each Recipient hereby assumes sole responsibility to + secure any other intellectual property rights needed, if any. For + example, if a third party patent license is required to allow Recipient + to distribute the Program, it is Recipient's responsibility to acquire + that license before distributing the Program. + + d) Each Contributor represents that to its knowledge it has sufficient + copyright rights in its Contribution, if any, to grant the copyright + license set forth in this Agreement. + + 3. REQUIREMENTS + + A Contributor may choose to distribute the Program in object code form + under its own license agreement, provided that: + + a) it complies with the terms and conditions of this Agreement; and + + b) its license agreement: + + i) effectively disclaims on behalf of all Contributors all warranties + and conditions, express and implied, including warranties or conditions + of title and non-infringement, and implied warranties or conditions of + merchantability and fitness for a particular purpose; + + ii) effectively excludes on behalf of all Contributors all liability + for damages, including direct, indirect, special, incidental and + consequential damages, such as lost profits; + + iii) states that any provisions which differ from this Agreement are + offered by that Contributor alone and not by any other party; and + + iv) states that source code for the Program is available from such + Contributor, and informs licensees how to obtain it in a reasonable + manner on or through a medium customarily used for software exchange. + + When the Program is made available in source code form: + + a) it must be made available under this Agreement; and + + b) a copy of this Agreement must be included with each copy of the + Program. + + Contributors may not remove or alter any copyright notices contained + within the Program. + + Each Contributor must identify itself as the originator of its + Contribution, if any, in a manner that reasonably allows subsequent + Recipients to identify the originator of the Contribution. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the + Indemnified Contributor to the extent caused by the acts or omissions + of such Commercial Contributor in connection with its distribution of + the Program in a commercial product offering. The obligations in this + section do not apply to any claims or Losses relating to any actual or + alleged intellectual property infringement. In order to qualify, an + Indemnified Contributor must: a) promptly notify the Commercial + Contributor in writing of such claim, and b) allow the Commercial + Contributor to control, and cooperate with the Commercial Contributor + in, the defense and any related settlement negotiations. The + Indemnified Contributor may participate in any such claim at its own + expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those + performance claims and warranties, and if a court requires any other + Contributor to pay any damages as a result, the Commercial Contributor + must pay those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS + PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY + WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR + FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible + for determining the appropriateness of using and distributing the + Program and assumes all risks associated with its exercise of rights + under this Agreement , including but not limited to the risks and costs + of program errors, compliance with applicable laws, damage to or loss + of data, programs or equipment, and unavailability or interruption of + operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR + ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING + WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR + DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED + HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity (including + a cross-claim or counterclaim in a lawsuit) alleging that the Program + itself (excluding combinations of the Program with other software or + hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it fails + to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of time + after becoming aware of such noncompliance. If all Recipient's rights + under this Agreement terminate, Recipient agrees to cease use and + distribution of the Program as soon as reasonably practicable. However, + Recipient's obligations under this Agreement and any licenses granted + by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a + distinguishing version number. The Program (including Contributions) + may always be distributed subject to the version of the Agreement under + which it was received. In addition, after a new version of the + Agreement is published, Contributor may elect to distribute the Program + (including its Contributions) under the new version. Except as + expressly stated in Sections 2(a) and 2(b) above, Recipient receives no + rights or licenses to the intellectual property of any Contributor + under this Agreement, whether expressly, by implication, estoppel or + otherwise. All rights in the Program not expressly granted under this + Agreement are reserved. + + This Agreement is governed by the laws of the State of New York and the + intellectual property laws of the United States of America. No party to + this Agreement will bring a legal action under this Agreement more than + one year after the cause of action arose. Each party waives its rights + to a jury trial in any resulting litigation. diff --git a/docs/changelog.rst b/docs/changelog.rst index dc9e50b..25d6a80 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -17,12 +17,59 @@ and this project adheres to `Semantic Versioning`_. Added +++++ +- Documentation saying what return codes are given and what they mean. + +- For #15, added ability to specify output format for ``display-config``. + +- Added :ref:`3rd Party Licenses <3rd-party-licenses>` document + Changed +++++++ +- In the docs, ``java -jar degasolv--standalone.jar`` changed to + ``degasolv`` with added note for clarity + +- For #13, return code for ``resolve-locations`` changed to 3 when dependency + resolutions occur to distinguish them from normal "you got the argument + string wrong" errors + +- Default ``--{enable|disable}-error-format`` set to ``enabled`` for + :ref:`resolve-locations ` and + :ref:`query-repo `. + +- Default for ``--list-strat`` option for :ref:`resolve-locations + ` set to ``lazy``, a much saner default. + +- Option pack ``v1`` :ref:`added ` to help administrators + keep compatibility with version 1 of degasolv if required. + +- Default for the ``--version-comparison`` option when ``--package-system`` + is ``degasolv`` set to ``semver`` for + :ref:`generate-repo-index ` (option :ref:`here + `), :ref:`resolve-locations + ` (option :ref:`here `) + and :ref:`query-repo ` (option :ref:`here + `). + +- Removed less-than-useful warning about absent config files. + Fixed +++++ +- Fixed #14, "Degasolv pulls in X" + +- Fixed bug where ``display-config`` didn't allow the user + to specify valid options for other things, now it does + +- Fixed bug where index.dsrepo didn't generate anything except + an empty map inside the file. This was *completely* broken. + +- Fixed #6, "If one config file fails to load, the rest do as well" + +- Fixed #9, "Heading for 'Specifying Subproc Executable' is wrong in docs" + +- Fixed #10, "How do you specify requirements of a package (deps) in the output + of a subproc to degasolv?" `1.12.1`_ --------- diff --git a/docs/command-reference.rst b/docs/command-reference.rst index 1019283..7308520 100644 --- a/docs/command-reference.rst +++ b/docs/command-reference.rst @@ -3,7 +3,7 @@ Degasolv Command Reference ========================== -This article describes the Degasolv CLI, what subcommands and options +This guide describes the Degasolv CLI, what subcommands and options there are, and what they are for. Some Notes on Versions @@ -34,7 +34,7 @@ Top-Level CLI Top-Level Usage Page ++++++++++++++++++++ -Running ``java -jar degasolv--standalone.jar -h`` will yield +Running ``degasolv -h`` will yield a page that looks something like this:: Usage: degasolv <-options> @@ -58,6 +58,13 @@ a page that looks something like this:: Simply run `degasolv -h` for help information. + +.. note:: In this guide, for brevity, the reference is presented + as if the command to execute degasolv were simply ``degasolv`` rather + than the more correct ``java -jar degasolv--standalone.jar``. A + bash or batch script can easily be made to turn one command into the other, + and the change was made to the former form for clarity. + .. _specifying-files: A Note on Specifying Files @@ -78,7 +85,9 @@ Explanation of Options ++++++++++++++++++++++ Degasolv parses global options before it parses subcommands or the options for -subcommands; therefore, global options need to be specified first. +subcommands; therefore, global options need to be specified first. If any +option, whether global or for a subcommand is given incorrectly, the program +exits with a return code of 1. Using Configuration Files ************************* @@ -107,7 +116,7 @@ in the `EDN format`_. As a rule, any option for any sub-command may be given a value from this config file, using the keyword form of the argument. For example, instead of running this command:: - java -jar degasolv--standalone.jar \ + degasolv \ generate-repo-index --search-directory /some/directory \ [...] @@ -120,7 +129,7 @@ A configuration file that looks like this could be used instead:: With this command:: - java -jar degasolv--standalone.jar \ + degasolv \ --config-file "$PWD/config.edn" \ generate-repo-index [...] @@ -133,7 +142,7 @@ configuration file keys are specified using plural nouns (e.g., So, instead of using this command:: - java -jar degasolv--standalone.jar \ + degasolv \ resolve-locations \ --disable-alternatives \ --present-package "x==0.1" \ @@ -159,7 +168,7 @@ This configuration file might be used:: With this command:: - java -jar degasolv--standalone.jar \ + degasolv \ --config-file "$PWD/config.edn" \ resolve-locations \ [...] @@ -200,7 +209,7 @@ For example, instead of using this config file:: With this command:: - java -jar degasolv--standalone.jar \ + degasolv \ --config-file "$PWD/config.edn" \ resolve-locations \ [...] @@ -221,7 +230,7 @@ This JSON config file may be used instead:: The command to use the above JSON config file would look like this:: - java -jar degasolv--standalone.jar \ + degasolv \ --json-config "$PWD/config.json" \ resolve-locations \ [...] @@ -243,7 +252,7 @@ option specified in the latter specified configuration file will be used. As an example, consider the following `display-config command`_:: - java -jar degasolv--standalone.jar \ + degasolv \ --config-file "$PWD/a.edn" \ --json-config "$PWD/j.json" \ --config-file "$PWD/b.edn" \ @@ -313,7 +322,7 @@ site config file, then serving that config file internally via HTTP(S) would allow all instances of Degasolv to point to a site-wide file, together with a build-specific config file, as in this example:: - java -jar degasolv--standalone.jar \ + degasolv \ --config-file "https://nas.example.com/degasolv/site.edn" \ --config-file "./degasolv.edn" \ generate-card @@ -347,11 +356,19 @@ file, the option packs on the command line are used and the ones in the config file are ignored. The following option packs are supported in the current version: + - ``v1``: Added as of version 2.0.0 . Implies + ``--list-strat as-set`` and ``--disable-error-format``. This + pack was added to help support legacy deployments of degasolv. + It should be noted that to achieve full compatibility with degasolv + version 1, the argument ``--version-comparison maven`` should be used + as well as this option pack. It could not be included in the option + pack due to complications with the version comparison option and its + relationship to how the ``--package-system`` option is affected by it. - ``multi-version-mode``: Added as of version 1.7.0 . Implies ``--conflict-strat inclusive``, ``--resolve-strat fast``, and ``--disable-alternatives``. - ``firstfound-version-mode``: Added as of version 1.7.0 . Implies - ``--conflic-strat prioritized``, + ``--conflict-strat prioritized``, ``--resolve-strat fast``, and ``--disable-alternatives``. Print the Help Page @@ -380,7 +397,7 @@ CLI for ``display-config`` Usage Page for ``display-config`` +++++++++++++++++++++++++++++++++ -Running ``java -jar degasolv--standalone.jar display-config -h`` +Running ``degasolv display-config -h`` returns a page that looks something like this:: Usage: degasolv display-config @@ -406,7 +423,7 @@ returns a page that looks something like this:: --resolve-strat STRAT thorough May be 'fast' or 'thorough'. --location true URL or filepath of the package --package-system SYS degasolv May be 'degasolv' or 'apt'. - --version-comparison CMP maven May be 'debian', 'maven', 'naive', 'python', 'rpm', 'rubygem', or 'semver'. + --version-comparison CMP semver May be 'debian', 'maven', 'naive', 'python', 'rpm', 'rubygem', or 'semver'. --version true Version of the package -h, --help Print this help page @@ -427,6 +444,11 @@ subcommand. This enables the user to print out the effective configuration resulting from multiple config files as well as any options that might be given on the CLI. +As of version 2.0.0, ``display-config`` honors the setting of +``--output-format``, if given in the configuration or on the command line: It +will output JSON if set to ``json``, EDN if set to ``edn`` or what it printed +before version 2.0.0 (pretty EDN) if set to ``plain``. + .. _generate-card-options: CLI for ``generate-card`` @@ -435,7 +457,7 @@ CLI for ``generate-card`` Usage Page for ``generate-card`` ++++++++++++++++++++++++++++++++ -Running ``java -jar degasolv--standalone.jar generate-card -h`` +Running ``degasolv generate-card -h`` returns a page that looks something like this:: Usage: degasolv generate-card @@ -649,7 +671,7 @@ CLI for ``generate-repo-index`` Usage Page for ``generate-repo-index`` ++++++++++++++++++++++++++++++++++++++ -Running ``java -jar degasolv--standalone.jar generate-repo-index -h`` +Running ``degasolv generate-repo-index -h`` returns a page that looks something like this:: Usage: degasolv generate-repo-index @@ -741,10 +763,10 @@ created within the index. These lists are sorted in descending order by version number, so that the latest version of a given package is tried first when resolving dependencies. -This option allows the operator to change what version comparison -algorithm is used. By default, the algorithm is ``maven``. May be -``maven``, ``debian``, ``maven``, ``naive``, ``python``, ``npm``, -``rubygem``, or ``semver``. +This option allows the operator to change what version comparison algorithm is +used. May be ``debian``, ``maven``, ``naive``, ``python``, ``npm``, +``rubygem``, or ``semver``. As of version 2.0, the default algorithm is +``semver``. .. caution:: This is one of those options that should not be used unless the operator has a good reason, but it is available @@ -782,11 +804,11 @@ to a repository index file in the same build script:: #!/bin/sh - java -jar degasolv--standalone.jar generate-card \ + degasolv generate-card \ -i "a" -v "1.0.0" -l "http://example.com/repo/a-1.0.0.zip" \ -C "a-1.0.0.zip.dscard" - java -jar degasolv--standalone.jar generate-repo-index \ + degasolv generate-repo-index \ -I "new-index.dsrepo" -a "http://example.com/repo/index.dsrepo" \ -d "." @@ -814,7 +836,7 @@ CLI for ``resolve-locations`` Usage Page for ``resolve-locations`` ++++++++++++++++++++++++++++++++++++ -Running ``java -jar degasolv--standalone.jar resolve-locations -h`` +Running ``degasolv resolve-locations -h`` returns a page that looks something like this:: Usage: resolve-locations @@ -826,10 +848,10 @@ returns a page that looks something like this:: -a, --enable-alternatives Consider all alternatives (default) -A, --disable-alternatives Consider only first alternatives -e, --search-strat STRAT breadth-first May be 'breadth-first' or 'depth-first'. - -g, --enable-error-format Enable output format for errors - -G, --disable-error-format Disable output format for errors (default) + -g, --enable-error-format Enable output format for errors (default) + -G, --disable-error-format Disable output format for errors -f, --conflict-strat STRAT exclusive May be 'exclusive', 'inclusive' or 'prioritized'. - -L, --list-strat STRAT as-set May be 'as-set', 'lazy' or 'eager'. + -L, --list-strat STRAT lazy May be 'as-set', 'lazy' or 'eager'. -o, --output-format FORMAT plain May be 'plain', 'edn' or 'json' -p, --present-package PKG Hard present package. ** -r, --requirement REQ Resolve req. ** @@ -858,8 +880,8 @@ resolve the requirements given at the command line. If successful, it exits with a return code of 0 and outputs the name of each package in the solution it has found, together with that package's location. -If the command fails, a non-zero exit code is returned. The output from such -a run might look like this:: +If the command fails because of dependency resolution problems, an exit code of +3 is returned. The output from such a run might look like this:: The resolver encountered the following problems: @@ -1057,8 +1079,8 @@ Specify List Strategy +-----------------------------+---------------------------------------+ This option determines how packages will be listed once they are resolved. -Valid values are ``as-set``, ``lazy``, and ``eager``. The default value -is ``as-set``. +Valid values are ``as-set``, ``lazy``, and ``eager``. As of version 2.0.0, +the default value is ``lazy``. When the value is ``as-set``, packages are listed in no particular order. @@ -1151,8 +1173,7 @@ in the dictionary, except: - A new key, ``problems``, appears in place of the ``packages`` key containing information describing what went wrong. -The default behavior is to have ``:error-format`` disabled; this -CLI option enables it. +As of version 2.0, the default behavior is to have ``:error-format`` enabled. .. _disable-error-format-resolve: @@ -1171,8 +1192,7 @@ Disable Error Output Format | Version introduced | 1.12.0 | +-----------------------------+---------------------------------------+ -This option sets the ``:error-format`` flag back to ``false``, which is the -default behavior. +This option sets the ``:error-format`` flag to ``false``. .. _output-format: @@ -1607,14 +1627,14 @@ Or, in the case of naive apt repositories:: For example, I might use the repository option like this:: - java -jar degasolv--standalone.jar resolve-locations \ + degasolv resolve-locations \ -R "binary-amd64 https://example.com/ubuntu/ /" -t "apt" \ --requirement "ubuntu-desktop" Or this:: - java -jar degasolv--standalone.jar resolve-locations \ + degasolv resolve-locations \ -R "binary-amd64 https://example.com/ubuntu/ yakkety main" \ -R "binary-i386 https://example.com/ubuntu/ yakkety main" \ -t "apt" \ @@ -1632,13 +1652,23 @@ is ``any``. The ``subproc`` package system allows the user to give Degasolv package information via a subprocess (shell-out) command. A path -to an executable on the filesystem is given via the `subproc-exe`_ option. -For each repository specified via the `repository option`_, the -subproc executable path is executed with the string given for the -repository as its only argument. The executable is expected to -print out JSON or EDN to standard output, depending on the value -of the `subproc-output-format`_ option. This information will then -be read into Degasolv and used to resolve dependencies. +to an executable on the filesystem is given via the `subproc-exe`_ option. For +each repository specified via the `repository option`_, the subproc executable +path is executed with the string given for the repository as its only argument. +The executable is expected to print out JSON or EDN to standard output, +depending on the value of the `subproc-output-format`_ option. + +The output should be a dictionary of packages listed by name. The value for +each dictionary key should be an array of dictionaries, with each dictionary +giving information about a particular package instance. Within each package +instance dictionary, there should exist the keys ``id`` for the package name, +``version`` for its version, and ``location`` giving its location. Any +requirements for the package instance should be listed under the +``requirements`` key according to the rules laid out in :ref:`Specifying a +requirement`. + +This information will then be read into Degasolv and used to resolve +dependencies. If the format is JSON, which is the default, the output should be of the form:: @@ -1648,6 +1678,7 @@ If the format is JSON, which is the default, the output should be of the form:: "id": "pkgname", "version": "p.k.g-version", "location": "pkg-url", + "requirements": ["birch>=3.3", "lime|lemon"], } ], @@ -1661,8 +1692,9 @@ If the format is EDN, the output should be of the form:: # The following will be referred { :id "pkgname" - :version: "p.k.g-version" - :location": "pkg-url" + :version "p.k.g-version" + :location" "pkg-url" + :requirements ["birch>=3.3" "lime|lemon"] } ] @@ -1752,8 +1784,8 @@ the `Serovers docs`_. .. _subproc-exe: -Specify Subproc Package System Output Format -******************************************** +Specify Subproc Package System Executable +***************************************** +-----------------------------+---------------------------------------+ | Short option | ``-x PATH`` | @@ -1781,7 +1813,7 @@ CLI for ``query-repo`` Usage Page for ``query-repo`` +++++++++++++++++++++++++++++ -Running ``java -jar degasolv--standalone.jar query-repo -h`` returns a +Running ``degasolv query-repo -h`` returns a page that looks something like this:: Usage: degasolv query-repo @@ -1790,8 +1822,8 @@ page that looks something like this:: descriptions. Options marked with `**` may be used more than once. - -g, --enable-error-format Enable output format for errors - -G, --disable-error-format Disable output format for errors (default) + -g, --enable-error-format Enable output format for errors (default) + -G, --disable-error-format Disable output format for errors -q, --query QUERY Display packages matching query string. -R, --repository INDEX Search INDEX for packages. ** -S, --index-strat STRAT priority May be 'priority' or 'global'. @@ -1811,7 +1843,9 @@ Overview of ``query-repo`` This subcommand queries a repository index or indices for packages. This comand is intended to be useful or debugging dependency -problems. +problems. If errors occur relative to finding packages in the repository, +as opposed to errors occuring because incorrect arguments were given, +a return code of 2 is returned to the calling program (likely a shell). Explanation of Options for ``query-repo`` +++++++++++++++++++++++++++++++++++++++++ @@ -1838,9 +1872,9 @@ when errors happen as well. Normally, when the `output-format`_ key is specified, such as to cause Degasolv to emit JSON or EDN, this only happens if the command runs -successfully. If querying thre repo was unsuccessful, an error message +successfully. If querying the repo was unsuccessful, an error message is printed to standard error and the program exits with non-zero -return code. If ``error-format`` is specified, then any error +return code. If ``error-format`` is enabled, then any error information will be printed in the form of whatever `output-format`_ specifies to standard output, while still maintaining the same exit code. @@ -1855,8 +1889,7 @@ in the dictionary, except: - A new key, ``problems``, appears in place of the ``packages`` key containing information describing what went wrong. -The default behavior is to have ``:error-format`` disabled; this -CLI option enables it. +As of version 2.0, the default behavior is to have ``:error-format`` enabled. .. _disable-error-format-query: @@ -1875,8 +1908,7 @@ Disable Error Output Format | Version introduced | 1.12.0 | +-----------------------------+---------------------------------------+ -This option sets the ``:error-format`` flag back to ``false``, which is the -default behavior. +This option sets the ``:error-format`` flag to ``false``. .. _output-format-query-repo: @@ -1972,8 +2004,8 @@ This option works exactly the same as the `index strategy`_ option for the ``resolve-locations`` command, except that it is used for simple index queries. See that option's explanation for more information. -Specify a Package System (Experimental) -*************************************** +Specify a Package System +************************ +--------------+---------------------------+-----------------------------------+ | Short option | Long option | Config File Key | diff --git a/docs/conf.py b/docs/conf.py index b844b0f..1864b10 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -58,9 +58,9 @@ # built documents. # # The short X.Y version. -version = '1.12' +version = '2.0' # The full version, including alpha/beta/rc tags. -release = '1.12.1' +release = '2.0.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/index.rst b/docs/index.rst index 42e8d6f..661f544 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,19 +1,19 @@ Degasolv ======== -.. image:: ../Degasolv-01.png +.. image:: ../Degasolv.png :scale: 25 % Star Degasolv on Github: .. image:: http://githubbadges.com/star.svg?user=djhaskin987&repo=degasolv&style=default - :alt: star this repo + :alt: Star this repo :target: https://github.com/djhaskin987/degasolv Fork Degasolv on Github: .. image:: http://githubbadges.com/fork.svg?user=djhaskin987&repo=degasolv&style=default - :alt: fork this repo + :alt: Fork this repo :target: https://github.com/djhaskin987/degasolv/fork .. toctree:: @@ -27,6 +27,7 @@ Fork Degasolv on Github: Code of Conduct Contributing Guide Authors and Contributions + 3rd Party Licenses <3rd-party-licenses> Indices and tables ****************** diff --git a/docs/recipes.rst b/docs/recipes.rst new file mode 100644 index 0000000..6af770d --- /dev/null +++ b/docs/recipes.rst @@ -0,0 +1,34 @@ +.. _A Longer Example: + +Some Useful Recipes +=================== + +Audience +-------- + +For the impatient. + +Make a bash script to wrap the degasolv jar like this, making sure to make the +script executable:: + + #!/bin/sh + # Filename: /usr/bin/degasolv + java -jar /degasolv.jar "${@}" + +Generate a card:: + + degasolv generate-card -i "name" -v "0.1.0" -l "https://example.com/repo/name-0.1.0.zip" -r "a-dep" -r "another-dep>=3.5.0" -C name-0.1.0.zip.dscard + +BASH: Download each location, then its signature, and verify it:: + + #!/bin/sh + set -exou pipefail + degasolv resolve-locations -R ./index.dsrepo -r a -o json | \ + jq -r .packages[].location | \ + while read url + do + wget $url + wget $url.asc + gpg --verify $url.asc + done + diff --git a/project.clj b/project.clj index d6ba163..019b150 100644 --- a/project.clj +++ b/project.clj @@ -1,26 +1,26 @@ -(defproject degasolv/degasolv "1.12.1" +(defproject degasolv/degasolv "2.0.0" :description "Dependency tracker with an eye toward building and shipping software." :url "http://github.com/djhaskin987/degasolv" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :main degasolv.cli :dependencies [ - [org.clojure/clojure "1.9.0-alpha14"] - [serovers "1.6.0"] - [org.clojure/tools.cli "0.3.5"] - [me.raynes/fs "1.4.6"] [com.velisco/tagged "0.5.0"] - [tupelo "0.9.31"] + [org.clojure/clojure "1.10.1"] [org.clojure/data.json "0.2.6"] + ;;[org.clojure/spec.alpha "0.2.176"] + [org.clojure/tools.cli "0.3.5"] + [serovers "1.6.2"] ] - :plugins [[lein-print "0.1.0"]] + :plugins [[lein-licenses "0.2.2"] + [lein-print "0.1.0"]] ;; :source-paths ["src/degasolv"] :java-source-paths ["src/java" "test/java"] :junit ["test/java"] - + :global-vars {*warn-on-reflection* true} :test-selectors { @@ -28,6 +28,14 @@ } :profiles { :dev { + :dependencies [ + [org.clojure/core.match "0.3.0-alpha5"] + [org.clojure/clojure "1.10.1"] + [serovers "1.6.2"] + [org.clojure/tools.cli "0.3.5"] + [com.velisco/tagged "0.5.0"] + [org.clojure/data.json "0.2.6"] + ] :plugins [[test2junit "1.3.3"]] :test2junit-output-dir "target/test-results" } diff --git a/src/degasolv/cli.clj b/src/degasolv/cli.clj index 8d02bae..aaa392e 100644 --- a/src/degasolv/cli.clj +++ b/src/degasolv/cli.clj @@ -1,25 +1,24 @@ (ns degasolv.cli (:require - [clojure.data.json :as json] - [clojure.edn :as edn] - [clojure.pprint :as pprint] - [clojure.set :as st] - [clojure.spec :as s] - [clojure.string :as string] - [clojure.tools.cli :refer [parse-opts summarize]] - [degasolv.pkgsys.apt :as apt-pkg] - [degasolv.pkgsys.core :as degasolv-pkg] - [degasolv.pkgsys.subproc :as subproc-pkg] - [degasolv.resolver :as r :refer :all] - [degasolv.util :refer :all] - [me.raynes.fs :as fs] - [miner.tagged :as tag] - [serovers.core :as vers] - [tupelo.core :as t]) + [clojure.pprint :as pprint] + [clojure.data.json :as json] + [clojure.edn :as edn] + [clojure.set :as st] + [clojure.spec.alpha :as s] + [clojure.string :as string] + [clojure.tools.cli :refer [parse-opts summarize]] + [clojure.java.io :as io] + [degasolv.pkgsys.apt :as apt-pkg] + [degasolv.pkgsys.core :as degasolv-pkg] + [degasolv.pkgsys.subproc :as subproc-pkg] + [degasolv.resolver :as r :refer :all] + [degasolv.util :refer :all] + [miner.tagged :as tag] + [serovers.core :as vers]) (:gen-class)) (defn- exit [status msg] - (.println *err* msg) + (.println ^java.io.PrintWriter *err* msg) (System/exit status)) (defn- out-exit [status msg] @@ -100,7 +99,7 @@ {"apt" {:genrepo apt-pkg/slurp-apt-repo :version-comparison "debian"} "degasolv" {:genrepo degasolv-pkg/slurp-degasolv-repo - :version-comparison "maven"} + :version-comparison "semver"} "subproc" {:constructor subproc-pkg/make-slurper :required-arguments {:subproc-exe ["-x" "--subproc-exe"]}}}) @@ -227,8 +226,19 @@ (defn- display-config! [options arguments] - (pprint/pprint - (assoc options :arguments arguments))) + (let [result-info + { + :command "display-config" + :options options + :arguments arguments + }] + (case (:output-format options) + "json" + (println (json/write-str result-info :escape-slash false)) + "edn" + (println (pr-str result-info)) + "plain" + (pprint/pprint result-info)))) (defn- resolver-error [problems] @@ -321,7 +331,7 @@ version-comparator) (catch Exception e (exit 1 (str "Error while evaluating repositories: " - (.getMessage e))))) + (.getMessage ^java.lang.Exception e))))) result (resolve-dependencies requirement-data @@ -361,7 +371,7 @@ :output-format output-format :result (first result)})))) (if error-format - (out-exit 1 + (out-exit 3 (case output-format "json" (json/write-str result-info :escape-slash false) @@ -373,7 +383,7 @@ {:subcommand "resolve-locations" :output-format output-format :result (first result)})))) - (exit 1 (resolver-error (:problems result-info)))))))) + (exit 3 (resolver-error (:problems result-info)))))))) (defn- generate-card! [{:keys [id version location requirements card-file meta]} @@ -458,7 +468,7 @@ (def subcommand-option-defaults { :alternatives true - :error-format false + :error-format true :card-file "./out.dscard" :conflict-strat "exclusive" :index-file "index.dsrepo" @@ -470,11 +480,16 @@ :search-directory "." :search-strat "breadth-first" :subproc-out-format "json" - :list-strat "as-set" + :list-strat "lazy" }) (def available-option-packs { + "v1" + { + :error-format false + :list-strat "as-set" + } "multi-version-mode" { :conflict-strat "inclusive" @@ -580,9 +595,9 @@ ["-d" "--search-directory DIR" "Find degasolv cards here" :default nil :default-desc (str (:search-directory subcommand-option-defaults)) - :validate [#(and - (fs/directory? %) - (fs/exists? %)) + :validate [#(let [f (io/file %)] + (and (.isDirectory ^java.io.File f) + (.exists ^java.io.File f))) "Must be a directory which exists on the file system."]] ["-I" "--index-file FILE" "The name of the repo file" @@ -591,7 +606,7 @@ ["-V" "--version-comparison CMP" "May be 'debian', 'maven', 'naive', 'python', 'rpm', 'rubygem', or 'semver'." :default nil - :default-desc "maven" + :default-desc "semver" :validate [#(some #{%} (keys version-comparators)) "Version comparison must be 'debian', 'maven', 'naive', 'python', 'rubygem', or 'semver'."]]]} @@ -612,9 +627,9 @@ :validate [#(or (= "breadth-first" %) (= "depth-first" %)) "Search strategy must either be 'breadth-first' or 'depth-first'."]] - ["-g" "--enable-error-format" "Enable output format for errors" + ["-g" "--enable-error-format" "Enable output format for errors (default)" :assoc-fn (fn [m k v] (assoc m :error-format true))] - ["-G" "--disable-error-format" "Disable output format for errors (default)" + ["-G" "--disable-error-format" "Disable output format for errors" :assoc-fn (fn [m k v] (assoc m :error-format false))] ["-f" "--conflict-strat STRAT" "May be 'exclusive', 'inclusive' or 'prioritized'." @@ -692,14 +707,14 @@ ["-V" "--version-comparison CMP" "May be 'debian', 'maven', 'naive', 'python', 'rpm', 'rubygem', or 'semver'." :default nil - :default-desc "maven" + :default-desc "semver" :validate [#(some #{%} (keys version-comparators)) "Version comparison must be 'debian', 'maven', 'naive', 'python', 'rubygem', or 'semver'."]] ["-x" "--subproc-exe PATH" "Path to the executable to call to get package data" - :validate [#(and - (fs/exists? %) - (fs/executable? %)) + :validate [#(let [f (io/file %)] + (and (.exists ^java.io.File f) + (.canExecute ^java.io.File f))) "Must be an executable file which exists on the file system."]] ]} "query-repo" @@ -708,9 +723,9 @@ :required-arguments {:repositories ["-R" "--repository"] :query ["-q" "--query"]} :cli [ - ["-g" "--enable-error-format" "Enable output format for errors" + ["-g" "--enable-error-format" "Enable output format for errors (default)" :assoc-fn (fn [m k v] (assoc m :error-format true))] - ["-G" "--disable-error-format" "Disable output format for errors (default)" + ["-G" "--disable-error-format" "Disable output format for errors" :assoc-fn (fn [m k v] (assoc m :error-format false))] ["-o" "--output-format FORMAT" "May be 'plain', 'edn' or 'json'" :default nil @@ -746,7 +761,7 @@ ["-V" "--version-comparison CMP" "May be 'debian', 'maven', 'naive', 'python', 'rpm', 'rubygem', or 'semver'." :default nil - :default-desc "maven" + :default-desc "semver" :validate [#(some #{%} (keys version-comparators)) "Version comparison must be 'debian', 'maven', 'naive', 'python', 'rubygem', or 'semver'."]] ] @@ -768,24 +783,14 @@ "")) (defn get-config [configs] - (try - (as-> configs it - (map (fn [{:keys [file read-fn]}] - {:string (default-slurp file) - :read-fn read-fn}) it) - (map (fn [{:keys [string read-fn]}] - (read-fn string)) - it) - (reduce merge it)) - (catch Exception e - (binding [*out* *err*] - (println "Warning: problem reading config files, they were not used:" - (str "\n" - (string/join - \newline - (map #(str " - " %) - (map :file configs)))))) - (hash-map)))) + (as-> configs it + (map (fn [{:keys [file read-fn]}] + (try + (read-fn (default-slurp file)) + (catch Exception e + (hash-map)))) + it) + (reduce merge it))) (defn -main [& args] @@ -797,7 +802,7 @@ subcmd-cli (if (not (= subcommand "display-config")) (get subcommand-cli subcommand) ; this grabs all other options as part of display-config - (t/it-> subcommand-cli + (as-> subcommand-cli it (vals it) (map :cli it) (filter #(not (nil? %)) it) @@ -814,10 +819,10 @@ (when (nil? subcmd-cli) (exit 1 (error-msg [(str "Unknown command: " subcommand)]))) (let [{:keys [options arguments]} - (parseplz! subcommand (rest arguments) (get subcommand-cli subcommand))] + (parseplz! subcommand (rest arguments) subcmd-cli)] (let [config-files (if (empty? (:config-files global-options)) - [{:file (fs/file (fs/expand-home "./degasolv.edn")) + [{:file (io/file "./degasolv.edn") :read-fn tag/read-string}] (:config-files global-options)) config @@ -828,8 +833,8 @@ (into [] (:option-packs config)) cli-option-packs) effective-options - (t/it-> - selected-option-packs + (as-> + selected-option-packs it (mapv available-option-packs it) (into [subcommand-option-defaults] it) (conj it (dissoc config :option-packs)) diff --git a/src/degasolv/pkgsys/apt.clj b/src/degasolv/pkgsys/apt.clj index ae743a4..8408249 100644 --- a/src/degasolv/pkgsys/apt.clj +++ b/src/degasolv/pkgsys/apt.clj @@ -4,7 +4,6 @@ [clojure.java.io :as io] [degasolv.util :refer :all] [degasolv.resolver :as r :refer :all] - [tupelo.core :as t] [serovers.core :as vers]) (:import (java.util.zip GZIPInputStream))) @@ -19,7 +18,7 @@ [s] (if (empty? s) nil - (t/it-> s + (as-> s it (string/replace it #":(any|i386|amd64)" "") (string/replace it #"[ ()]" "") (string/replace it #"<<" "<") @@ -33,7 +32,7 @@ (defn lines-to-map [lines] - (t/it-> lines + (as-> lines it (map (fn [line] (let [[_ k v] (re-matches #"^([^:]+): +(.*)$" line)] @@ -58,7 +57,7 @@ [pkg url] (assoc! pkg :location - (t/it-> url + (as-> url it (str it "/" (:filename pkg)) (string/replace it @@ -71,7 +70,7 @@ (defn deb-to-degasolv-provides [s] - (t/it-> s + (as-> s it (string/replace it #"\p{Blank}" "") (string/split it #",") (into [] it))) @@ -96,8 +95,8 @@ (:depends pkg)) restof-package)] (if (:provides pkg) - (t/it-> - (deb-to-degasolv-provides (:provides pkg)) + (as-> + (deb-to-degasolv-provides (:provides pkg)) it (map #(into (->PackageInfo % @@ -113,8 +112,8 @@ (defn apt-repo [url info] - (t/it-> - info + (as-> + info it (string/split it #"\n\n") (map (fn each-package @@ -158,16 +157,16 @@ (mapv (fn each-loc [loc] - (t/it-> - loc + (as-> loc it (string/join "/" it) - (with-open + (let [in (->zip-input-stream (io/input-stream it))] - (slurp in)) + (try (slurp in) + (finally (.close ^java.io.InputStream in)))) (apt-repo url it))) - (if (.contains dist "/") + (if (.contains ^java.lang.String dist "/") [[url dist "Packages.gz"]] diff --git a/src/degasolv/pkgsys/core.clj b/src/degasolv/pkgsys/core.clj index ac8ec59..5feec32 100644 --- a/src/degasolv/pkgsys/core.clj +++ b/src/degasolv/pkgsys/core.clj @@ -1,10 +1,11 @@ (ns degasolv.pkgsys.core (:require [degasolv.util :refer :all] - [clojure.spec :as s] + [clojure.spec.alpha :as s] [degasolv.resolver :as r :refer :all] [serovers.core :as vers] - [me.raynes.fs :as fs] + [clojure.java.io :as io] + [clojure.string :as st] [miner.tagged :as tag])) (defn- read-card! @@ -52,9 +53,9 @@ initial-repository (map read-card! - (filter #(and (fs/file? %) - (= ".dscard" (fs/extension %))) - (file-seq (fs/file search-directory)))))))))) + (filter #(and (.isFile ^java.io.File (io/file %)) + (= "dscard" (st/replace % #"[^.]*[.]" ""))) + (file-seq (io/file search-directory)))))))))) (defn slurp-degasolv-repo [url] diff --git a/src/degasolv/pkgsys/subproc.clj b/src/degasolv/pkgsys/subproc.clj index df4e0e5..05109de 100644 --- a/src/degasolv/pkgsys/subproc.clj +++ b/src/degasolv/pkgsys/subproc.clj @@ -7,7 +7,6 @@ [clojure.walk :as walk] [miner.tagged :as tag] [degasolv.util :refer :all] - [tupelo.core :as t] [degasolv.resolver :as r :refer :all]) (:import (java.util.zip GZIPInputStream))) diff --git a/src/degasolv/resolver.clj b/src/degasolv/resolver.clj index e532c2e..1ca94e7 100644 --- a/src/degasolv/resolver.clj +++ b/src/degasolv/resolver.clj @@ -1,9 +1,8 @@ (ns degasolv.resolver "Namespace containing `resolve-dependencies` and supporting functions." (:require [degasolv.util :refer :all] - [clojure.spec :as s] + [clojure.spec.alpha :as s] [clojure.string :as clj-str] - [tupelo.core :as t] [miner.tagged :as tag])) (defmacro dbg [body] @@ -14,4 +13,3 @@ (load "resolver_core") (load "resolver_spec") (load "resolver_utils") - diff --git a/test/resources/scripts/test-list-strat b/test/resources/scripts/test-list-strat index a56516a..bf3ca9b 100755 --- a/test/resources/scripts/test-list-strat +++ b/test/resources/scripts/test-list-strat @@ -9,7 +9,7 @@ then fi root_path=${PWD} -test_home=test/resources/data/test-search-strat +test_home=test/resources/data/test-list-strat name=$(lein print :name | sed 's|"||g') version=$(lein print :version | sed 's|"||g') diff --git a/test/resources/scripts/test-option-packs b/test/resources/scripts/test-option-packs index df5d114..54e6968 100755 --- a/test/resources/scripts/test-option-packs +++ b/test/resources/scripts/test-option-packs @@ -9,7 +9,7 @@ rm -rf "${test_home}" mkdir -p "${test_home}" name=$(lein print :name | sed 's|"||g' ) -version=$(lein print :version | sed 's|"||g') +version=$(lein print :version | sed 's|"||g') cat > ${test_home}/test-option-packs.edn <1.0.0") printf '%s\n' "${output}" -echo "${output}" | grep -qE '==1\.0\.0 @' +echo "${output}" | grep -qE '==1\.0\.0-1 @' output=$(java -jar ${root_path}/target/uberjar/${name}-${version}-standalone.jar \ resolve-locations \ - --search-strat depth-first \ -R ${PWD}/index.dsrepo \ - -V semver \ - --requirement "a<=1.0.0") + -V maven \ + --requirement "a<1.0.0-1") printf '%s\n' "${output}" -echo "${output}" | grep -qE '==1\.0\.0-1 @' +echo "${output}" | grep -qE '==1\.0\.0 @' output=$(java -jar ${root_path}/target/uberjar/${name}-${version}-standalone.jar \ resolve-locations \ - --search-strat depth-first \ -R ${PWD}/index.dsrepo \ - --requirement "a") + -V semver \ + --requirement "a<1.0.0") printf '%s\n' "${output}" echo "${output}" | grep -qE '==1\.0\.0-1 @' -java -jar ${root_path}/target/uberjar/${name}-${version}-standalone.jar \ - generate-repo-index \ - -d $PWD \ - -V semver \ - -I $PWD/index.dsrepo - output=$(java -jar ${root_path}/target/uberjar/${name}-${version}-standalone.jar \ resolve-locations \ - --search-strat depth-first \ -R ${PWD}/index.dsrepo \ - --requirement "a") + --requirement "a>1.0.0-1") printf '%s\n' "${output}"