You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ARCHITECTURE.md
+16-19Lines changed: 16 additions & 19 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,21 +11,18 @@ This design document shall be stable and amendments go through a proper process
11
11
## Overview
12
12
13
13
Standard is a collection of functionality and best practices (_"framework"_) to bootstrap and sustain the automatable sections of the Software Delivery Lifecycle (SDLC) _efficiently_ with the power of Nix and Flakes.
14
-
In particular, Standard is a _Horizontal Integration Framework_ which integrates _vertical_ tooling.
14
+
In particular, Standard is a _Horizontal\* Integration Framework_ which integrates _vertical\*_ tooling.
15
15
16
-
> Glossary:
16
+
> <sub>We occasionally adapt concepts from non-technical contexts. This is one instance.</sub>
17
17
>
18
18
> _Vertical Tooling_ does one thing and does it well in a narrow scope (i.e "vertical").
19
19
>
20
20
> _Horizontal Tooling_ stitches vertical tooling together to a polished whole.
21
-
>
22
-
> <sub>
23
-
> Where does this terminology come from?
24
-
> We occasionally borrow concepts from organizational science.
25
-
> </sub>
26
21
27
-
In that context, subject to integration are the end-to-end automatable sections of the SDLC process for which we offer well-integrated tools and best practices.
28
-
_Efficient_ SDLCs are characterized by two things.
22
+
What is being integrated are the end-to-end automatable sections of the SDLC.
23
+
For these we curate a collection of functionality, tools and best practices.
24
+
25
+
An SDLCs _efficiency_ on the is characterized by two things.
29
26
30
27
Firstly, by adequate _lead time_ which is the amount of time it takes to set up an initial version of the software delivery pipeline.
31
28
It needs to be _adequate_ rather than _just fast_, as it takes place in the context of a team.
@@ -94,14 +91,14 @@ And we focus on:
94
91
95
92
Where is Standard located in the big picture?
96
93
97
-
This graphic locates Standard across the SDLC & ALM.
94
+
This graphic locates Standard across the SDLC & Application Lifecycle Management (ALM).
98
95
99
96
But not only that.
100
97
It also explains how automation in itself is implemented as _code_, just as the application itself.
101
98
Therefore, we make a distinction between:
102
99
103
-
- first order application code on the first level (L1); and
104
-
- higher order supporting code on higher levels as exemplified by L2 and L3.
100
+
- first order application code (L1); and
101
+
-above that, higher order supporting code as exemplified by L2 and L3.
105
102
106
103
> Glossary:
107
104
>
@@ -125,7 +122,7 @@ They are abstract definitions of artifact classes.
125
122
Those abstract classes implement _shared functionality_.
126
123
127
124
A few examples of artifact classes in our scope are: packages, containers, scripts and manifests, among others.
128
-
Examples of shared functionality are _push_ on containers and on packages_build_.
125
+
Examples of shared functionality are _push_ on containers and _build_on packages.
129
126
130
127
_**Cells**_, in turn, organize your code into related units of functionality.
131
128
Hence, Cells are a code _orgnization principle_.
@@ -141,11 +138,11 @@ On the right side of the graphic, we sketch an idea how these components are put
141
138
142
139
### Paisano (Code Organization)
143
140
144
-
We already learnt about Paisano's two main abstractions: Cells & Block Types.
141
+
We already learned about Paisano's two main abstractions: Cells & Block Types.
145
142
146
143
Cells enable and encourage the user to cleanly organize their code into related units of functionality.
147
144
The concrete semantics of code layout are completely at her choosing.
148
-
For example, she could separate application tiers like frontend and backend into their own Cell, each.
145
+
For example, she could separate application tiers like frontend and backend into their own cells, each.
149
146
Or she could reflect the microservices architecture in the Cells.
150
147
151
148
Paisano has a first class concept of Cells.
@@ -170,21 +167,21 @@ By using these principles rather than a rigid opinionated structure, it also rem
170
167
171
168
In summary, all these organization and typing principles enable:
172
169
173
-
- Easy refactoring of your repository's namespace for devops artifacts
170
+
- Easy refactoring of your repository's devops namespace
174
171
- Intuitive grouping of functionality that encourages well-defined internal boundaries
175
-
-Thereby keeping your automation code clean and maintainable
172
+
-Allowing for keeping your automation code clean and maintainable
176
173
- Making use of Block Types and the shared library to implement the DRY principle
177
174
- Reasoning about the content of your repo through structured data
178
175
- Thereby interesting user interfaces, such as a CLI, TUI or even a UI
179
-
-But also services such as (close to) zero config & self-updating CI
176
+
-As well as also services like a (close to) zero config, self-updating CI
180
177
- Similar organizational principles help to lower the cost of context switching between different projects
181
178
182
179
### Standard's Block Types (DevOps Type System)
183
180
184
181
As mentioned above, Standard exploits the Block Type abstraction to provide artifact types for the SDLC.
185
182
Within the semantics of each Block Type, we implement shared functionality.
186
183
This is designed to offer the user an optimized, audited implementation.
187
-
It also saves the need to devise "yet another" local implementation of otherwise well-understood generic functionality, such as, for example the building of a package or the pushing of a container image.
184
+
Alleviates the burdon of devising "yet another" local implementation of otherwise well-understood generic functionality, such as, the building of a package or the pushing of a container image.
Copy file name to clipboardExpand all lines: COMPARE.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,14 +6,14 @@ _Where appropriate, we compare with `divnix/paisano`, instead_.
6
6
7
7
### flake-utils
8
8
9
-
`numtide/flake-utils` is a small & lightweight utility with a focus on generating flake file _outputs_ in accordance with the packaging use case built-in into the Nix CLI tooling.
9
+
`numtide/flake-utils` is a small & lightweight utility with a focus on generating flake file _outputs_ in accordance with the packaging use case built into the Nix CLI tooling.
10
10
11
11
Paisano, in turn, is an importer with a focus on _code organization_; it still plugs well into a `flake.nix` file, but also preserves its index function by keeping it clean.
12
12
While you _can_ use it to match the schema that Nix CLI expects, it also enables more flexibility as it is not specially optimized for the Nix _package manager use case_.
13
13
14
14
### flake-parts
15
15
16
-
`hercules-ci/flake-parts` is a component aggregator with a focus on a flake schema that is built-in into the Nix CLI tooling that makes use of the NixOS module system for composability and aggregation.
16
+
`hercules-ci/flake-parts` is a component aggregator with a focus on a flake schema that is built into the Nix CLI tooling that makes use of the NixOS module system for composability and aggregation.
17
17
18
18
Paisano, in turn, is an importer with a focus on _code organization_; it still plugs well into a `flake.nix` file, but also preserves its index function by keeping it clean.
19
19
While you _can_ use it to match the schema that Nix CLI expects, it also enables more flexibility as it is not specially optimized for the Nix _package manager use case_.
@@ -24,12 +24,12 @@ However, in that role, it gives you back the freedom to use the output schema th
24
24
Convergence towards the Flakes output schema is provided via the harvester family of functions (`winnow`, `harvest` & `pick`).
25
25
Depending on the domain schema, it can be a _lossy_ convergence due the lesser expressivity of the flake output schema.
26
26
27
-
Flake Parts aggregates bespoke use-case specific interfaces implemented in the module system DSL.
27
+
Flake Parts aggregates bespoke use-case specific interfaces implemented in a domain specific language based on Nix (i.e. "the module system").
28
28
Paisano, in turn, focuses on code organization along high level code boundaries connected by generic interfaces.
29
29
30
-
The core tenet of Flake Parts is bespoke module system DSL interfaces for each use case.
30
+
The core tenet of Flake Parts is domain specific interfaces for each use case.
31
31
32
-
The core tenet of Paisano remains Nix' original functional style.
32
+
The core tenet of Paisano remains Nix' original functional style paired with a function library.
33
33
34
34
### Devshell
35
35
@@ -45,7 +45,7 @@ Most languages are already covered.
45
45
### Bazel
46
46
47
47
Bazel is similar to Nix in that it creates cross-language build graphs.
48
-
However, it doesn't not guarantee reproducibility.
48
+
However, it does not guarantee reproducibility.
49
49
Currently it has more advanced build caching strategies: a gap that the Nix community is very eager to close soon.
0 commit comments