|
| 1 | +1. 2nd and 3rd party plugins |
| 2 | +============================ |
| 3 | + |
| 4 | +Date: 2021-04-01 |
| 5 | + |
| 6 | +Status |
| 7 | +------ |
| 8 | + |
| 9 | +Draft |
| 10 | + |
| 11 | +Context |
| 12 | +------- |
| 13 | + |
| 14 | +DFFML currency has the main package and all plugins maintained within a single |
| 15 | +repo. We always intended to support 3rd party plugins, meaning displaying them |
| 16 | +on the main docs site as options for users. We are just now getting around to |
| 17 | +it. |
| 18 | + |
| 19 | +We decided that we will have the main package, 2nd party plugins, and 3rd party |
| 20 | +plugins. |
| 21 | + |
| 22 | +- The main package is ``dffml``. |
| 23 | + |
| 24 | +- 2nd party plugins are plugins that are maintained by the core maintainers and |
| 25 | + who's repos reside in the ``dffml`` organization. |
| 26 | + |
| 27 | +- 3rd party plugins are hosted in user or other org repos and core maintainers |
| 28 | + are not owners of those repos. |
| 29 | + |
| 30 | +We need to take the plugins that are currency maintained within the main repo |
| 31 | +and put them in their own repos. We need the docs site to reflect the working / |
| 32 | +not-working status of plugins on tutorial pages. We need to have a set of |
| 33 | +plugins that we don't release unless those all work together. This is because a |
| 34 | +core part of our functionality is letting users swap out underlying libraries, |
| 35 | +which they can't do if they can't be installed together. |
| 36 | + |
| 37 | +What do we know |
| 38 | +~~~~~~~~~~~~~~~ |
| 39 | + |
| 40 | +- Main package has no dependencies |
| 41 | + |
| 42 | +- The plugins page lists all plugins that are in ``dffml/plugins.py`` |
| 43 | + |
| 44 | +- There are tutorials that are associated with specific plugins |
| 45 | + |
| 46 | + - If a plugin's latest release doesn't pass CI against DFFML's latest |
| 47 | + release, any tutorials should show that it's not working. |
| 48 | + |
| 49 | +- A main point of DFFML is to have a set of ML libraries that work together in |
| 50 | + a single install environment so that a user can try multiple libraries and |
| 51 | + choose the best one. |
| 52 | + |
| 53 | + - This means we have to know which plugins can be installed together. |
| 54 | + |
| 55 | +Decision |
| 56 | +-------- |
| 57 | + |
| 58 | +- We want to do the compatibility matrix check in the main plugin and in each |
| 59 | + plugin. |
| 60 | + |
| 61 | + - This lets the main plugin know at time of docs build, what status is for |
| 62 | + each plugin. |
| 63 | + |
| 64 | + - This lets plugin authors know in PR CI, etc. if they are about to cause a |
| 65 | + compatibility issue. |
| 66 | + |
| 67 | +- We need the ability to move things from level 1 to level 2 if we want to |
| 68 | + deicide that that it's not longer a showstopper for release. |
| 69 | + |
| 70 | +- Working / not-working status of tutorials we want to show two things |
| 71 | + This only applies to support levels 2 and 3. Because support levels 0 and 1 |
| 72 | + must always work for release. |
| 73 | + |
| 74 | + - Does this tutorial work when other packages are installed latest / master? |
| 75 | + |
| 76 | + - Does this tutorial does work against all dependent packages for latest / |
| 77 | + master? |
| 78 | + |
| 79 | + - Some plugins rely only on the main package |
| 80 | + |
| 81 | + - Main package never has any dependencies. So from a dependency checking |
| 82 | + perspective, there should never be any issue. |
| 83 | + |
| 84 | + - Some plugin rely on other plugins as well |
| 85 | + |
| 86 | + - Main package never has any dependencies. So from a dependency checking |
| 87 | + perspective, there should never be any issue. |
| 88 | + |
| 89 | +- To know which plugins can be installed together |
| 90 | + |
| 91 | + - Which plugins failure to validate against master branch warrant blocking |
| 92 | + release |
| 93 | + |
| 94 | + - We need some sort of support level tracking. |
| 95 | + |
| 96 | + - Support level tracking means test against latest release and master |
| 97 | + branch. |
| 98 | + |
| 99 | + - Possible support levels |
| 100 | + |
| 101 | + - 0 main package |
| 102 | + |
| 103 | + - 1 2nd party required pass for release |
| 104 | + |
| 105 | + - 2 2nd party not required pass for release |
| 106 | + |
| 107 | + - Note on tutorials that involve level 2 plugins to say they aren't |
| 108 | + working at the moment |
| 109 | + |
| 110 | + - 3 3rd party not required pass for release |
| 111 | + |
| 112 | + - Note on tutorials that involve level 3 plugins to say they aren't |
| 113 | + working at the moment |
| 114 | + |
| 115 | +Consequences |
| 116 | +------------ |
| 117 | + |
| 118 | +- Based on support levels |
| 119 | + |
| 120 | + - The ``dffml/plugins.json`` should list the plugin, and it's support level |
| 121 | + |
| 122 | +- Documentation related to specific plugins |
| 123 | + |
| 124 | + - Tutorials that pip install packages of support level 2 or 3 must have some |
| 125 | + element that the top of the page that can show the working / not-working |
| 126 | + status. |
| 127 | + |
| 128 | + - When tutorials are tested, they only install the set of plugins that they |
| 129 | + need. So a tutorial CI test will fail if those plugins do not work together. |
| 130 | + Therefore, we display the warning because we know the tutorial works. If |
| 131 | + there is a failure to install all support level 1 and 2 plugins together, we |
| 132 | + know that we should display the warning. The tutorial works, but we're not |
| 133 | + sure what other other plugins installed in a same environment might cause |
| 134 | + dependency conflicts. |
| 135 | + |
| 136 | +- Matrix check, two perspectives (this translates into CI tests) |
| 137 | + |
| 138 | + - Main package |
| 139 | + |
| 140 | + - Support level 1 |
| 141 | + |
| 142 | + - For master, does installing all the plugins from their master zip |
| 143 | + archive URL work when all given to ``pip install`` at the same time. |
| 144 | + |
| 145 | + - For latest release, does installing all the plugins by PyPi name work |
| 146 | + when all given to ``pip install`` at the same time. |
| 147 | + |
| 148 | + - "work" here meaning does pip raise any issues about conflicting |
| 149 | + dependency versions. |
| 150 | + |
| 151 | + - Support level 2 |
| 152 | + |
| 153 | + - For master |
| 154 | + |
| 155 | + - Does installing all the plugins in support levels 1 and 2 work from |
| 156 | + their master zip archive URL work when all given to ``pip install`` |
| 157 | + at the same time. |
| 158 | + |
| 159 | + - PASS: No warning on tutorials. |
| 160 | + |
| 161 | + - FAIL: Warning on tutorials, this may not work when other plugins |
| 162 | + are install. This tutorial should still work when no other plugins |
| 163 | + are installed. |
| 164 | + |
| 165 | + - For latest release, does installing all the plugins by PyPi name work |
| 166 | + when all given to ``pip install`` at the same time. |
| 167 | + |
| 168 | + - Does installing all the plugins in support levels 1 and 2 work from |
| 169 | + their PyPi name when all given to ``pip install`` at the same time. |
| 170 | + |
| 171 | + - PASS: No warning on tutorials. |
| 172 | + |
| 173 | + - FAIL: Warning on tutorials, this may not work when other plugins |
| 174 | + are install. This tutorial should still work when no other plugins |
| 175 | + are installed. |
| 176 | + |
| 177 | + - "work" here meaning does pip raise any issues about conflicting |
| 178 | + dependency versions. |
| 179 | + |
| 180 | + - If they don't. Do we care about finding more info about which one's |
| 181 | + are braking it. No, we do not care, because figuring out matrix is |
| 182 | + exponential. |
| 183 | + |
| 184 | + - Support level 3 |
| 185 | + |
| 186 | + - Always have a warning on tutorials, this may not work when other plugins |
| 187 | + are installed, because this a tutorial based on a third party plugin. |
| 188 | + This tutorial should still work when no other plugins are installed. |
| 189 | + In the event that it doesn't please report issues to third party here: |
| 190 | + <Link to third party project URL for plugin> |
| 191 | + |
| 192 | + - Plugin package |
| 193 | + |
| 194 | + - Support level 1 |
| 195 | + |
| 196 | + - Fail CI if install of support level 1 plugins fails. |
| 197 | + |
| 198 | + - Support level 2 |
| 199 | + |
| 200 | + - Fail CI if install of support level 1 plugins fails. |
| 201 | + |
| 202 | + - If there is some way to warn via CI. Then warn if install of support |
| 203 | + level 1 and 2 plugins fails. |
| 204 | + |
| 205 | + - Support level 3 |
| 206 | + |
| 207 | + - Fail CI if install of support level 1 plugins fails. |
| 208 | + |
| 209 | + - If there is some way to warn via CI. Then warn if install of support |
| 210 | + level 1 and 2 plugins fails. |
0 commit comments