Skip to content

Commit

Permalink
Added MADR for decision making following
Browse files Browse the repository at this point in the history
Also added first adr for comparing Skopeo and Crane
  • Loading branch information
OneFlyingBanana committed Apr 16, 2024
1 parent f067bbe commit 65dc586
Show file tree
Hide file tree
Showing 16 changed files with 544 additions and 0 deletions.
26 changes: 26 additions & 0 deletions docs/decisions/0000-use-markdown-any-decision-records.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Use Markdown Any Decision Records

## Context and Problem Statement

We want to record any decisions made in this project independent whether decisions concern the architecture ("architectural decision record"), the code, or other fields.
Which format and structure should these records follow?

## Considered Options

* [MADR](https://adr.github.io/madr/) 3.0.0 – The Markdown Any Decision Records
* [Michael Nygard's template](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions) – The first incarnation of the term "ADR"
* [Sustainable Architectural Decisions](https://www.infoq.com/articles/sustainable-architectural-design-decisions) – The Y-Statements
* Other templates listed at <https://github.com/joelparkerhenderson/architecture_decision_record>
* Formless – No conventions for file format and structure

## Decision Outcome

Chosen option: "MADR 3.0.0", because

* Implicit assumptions should be made explicit.
Design documentation is important to enable people understanding the decisions later on.
See also [A rational design process: How and why to fake it](https://doi.org/10.1109/TSE.1986.6312940).
* MADR allows for structured capturing of any decision.
* The MADR format is lean and fits our development style.
* The MADR structure is comprehensible and facilitates usage & maintenance.
* The MADR project is vivid.
24 changes: 24 additions & 0 deletions docs/decisions/0001-skopeo-vs-crane.md.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Skopeo vs Crane

## Context and Problem Statement

We want to decide wether to use Skopeo or Crane to replicate images from a remote source registry to a local destination registry.

## Considered Options

* [Skopeo](https://github.com/containers/skopeo)
* [Crane](https://github.com/google/go-containerregistry/tree/main/cmd/crane)

## Decision Outcome

Chosen option: "Crane", because according to our use cases _(listed in the table below)_, Crane works for all of them :

| Use Case | Skopeo | Crane |
|---|---|---|
| **Programmable, can be used as an SDK** | No (CLI only or via wrapping) | Yes (CLI + library) |
| **Configuration can be done via API** | No | Yes |
| **Move OCI Artifacts** | Yes (copy + delete) | Yes (copy + delete) |
| **Remapping Artifacts (programmatically)** _( = modify or move image)_ | No | Yes |
| **Image Consistency Verification** (was it really pulled correctly, is it present) | Yes (inspect manifest and compare hashes) | Yes (validate well-formed image + compare digest of image) |
| **Memory and CPU consumption on low end devices, Disk consumption** | "Very lightweight CPU usage" / 37.1MB | "Lightweight CPU usage" / 34.7MB |
| **Dealing with Low bandwidth networks, resume, etc.** | Can report transfer rate and progress per blob, can use `--retry`/`--retry-times` flags, evidence of people using it with [intermittent networking issues](https://github.com/containers/common/issues/654) | No resumable push -> works with single PATCH request, as per [this issue](https://github.com/google/go-containerregistry/issues/1448), can use `.withRetry`, support for [very slow speeds via buffering](https://github.com/google/go-containerregistry/issues/920) / [here](https://github.com/google/go-containerregistry/pull/923) |
7 changes: 7 additions & 0 deletions docs/decisions/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Decisions

This directory contains decision records for Harbor Satellite.

For new ADRs, please use [adr-template.md](adr-template.md) or [0000-use-markdown-any-decision-records.md](0000-use-markdown-any-decision-records.md) as basis.
More information on MADR is available at <https://adr.github.io/madr/>.
General information about architectural decision records is available at <https://adr.github.io/>.
79 changes: 79 additions & 0 deletions docs/decisions/adr-template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
# These are optional elements. Feel free to remove any of them.
status: {proposed | rejected | accepted | deprecated | … | superseded by [ADR-0005](0005-example.md)}
date: {YYYY-MM-DD when the decision was last updated}
deciders: {list everyone involved in the decision}
consulted: {list everyone whose opinions are sought (typically subject-matter experts); and with whom there is a two-way communication}
informed: {list everyone who is kept up-to-date on progress; and with whom there is a one-way communication}
---
# {short title of solved problem and solution}

## Context and Problem Statement

{Describe the context and problem statement, e.g., in free form using two to three sentences or in the form of an illustrative story.
You may want to articulate the problem in form of a question and add links to collaboration boards or issue management systems.}

<!-- This is an optional element. Feel free to remove. -->
## Decision Drivers

* {decision driver 1, e.g., a force, facing concern, …}
* {decision driver 2, e.g., a force, facing concern, …}
*<!-- numbers of drivers can vary -->

## Considered Options

* {title of option 1}
* {title of option 2}
* {title of option 3}
*<!-- numbers of options can vary -->

## Decision Outcome

Chosen option: "{title of option 1}", because
{justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force {force} | … | comes out best (see below)}.

<!-- This is an optional element. Feel free to remove. -->
### Consequences

* Good, because {positive consequence, e.g., improvement of one or more desired qualities, …}
* Bad, because {negative consequence, e.g., compromising one or more desired qualities, …}
*<!-- numbers of consequences can vary -->

<!-- This is an optional element. Feel free to remove. -->
## Validation

{describe how the implementation of/compliance with the ADR is validated. E.g., by a review or an ArchUnit test}

<!-- This is an optional element. Feel free to remove. -->
## Pros and Cons of the Options

### {title of option 1}

<!-- This is an optional element. Feel free to remove. -->
{example | description | pointer to more information | …}

* Good, because {argument a}
* Good, because {argument b}
<!-- use "neutral" if the given argument weights neither for good nor bad -->
* Neutral, because {argument c}
* Bad, because {argument d}
*<!-- numbers of pros and cons can vary -->

### {title of other option}

{example | description | pointer to more information | …}

* Good, because {argument a}
* Good, because {argument b}
* Neutral, because {argument c}
* Bad, because {argument d}
*

<!-- This is an optional element. Feel free to remove. -->
## More Information

{You might want to provide additional evidence/confidence for the decision outcome here and/or
document the team agreement on the decision and/or
define when this decision when and how the decision should be realized and if/when it should be re-visited and/or
how the decision is validated.
Links to other decisions and resources might here appear as well.}
12 changes: 12 additions & 0 deletions node_modules/.package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions node_modules/madr/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

121 changes: 121 additions & 0 deletions node_modules/madr/LICENSE.CC0-1.0

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions node_modules/madr/LICENSE.MIT

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

67 changes: 67 additions & 0 deletions node_modules/madr/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 65dc586

Please sign in to comment.