Skip to content
This repository was archived by the owner on Aug 25, 2024. It is now read-only.

Commit 5354f23

Browse files
pdxjohnnyyashlambasakshamarora1
committed
docs: arch: 2nd and 3rd party plugins
Co-authored-by: Yash Lamba <[email protected]> Co-authored-by: Saksham Arora <[email protected]> Signed-off-by: John Andersen <[email protected]>
1 parent ba45ea6 commit 5354f23

File tree

2 files changed

+211
-0
lines changed

2 files changed

+211
-0
lines changed
Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
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.

docs/arch/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
77
.. toctree::
88
:titlesonly:
99

10+
0001-2nd-and-3rd-party-plugins
1011
0002-Object-Loading-and-Instantiation-in-Examples

0 commit comments

Comments
 (0)