way_of_working-for-hdi 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.alexignore +2 -0
  3. data/.alexrc +3 -0
  4. data/.mega-linter.yml +145 -0
  5. data/.rubocop +1 -0
  6. data/CHANGELOG.md +27 -0
  7. data/CODE_OF_CONDUCT.md +133 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +77 -0
  10. data/Rakefile +16 -0
  11. data/code_safety.yml +314 -0
  12. data/docs/.gitignore +5 -0
  13. data/docs/404.md +11 -0
  14. data/docs/Gemfile +38 -0
  15. data/docs/Gemfile.lock +293 -0
  16. data/docs/_config.yml +90 -0
  17. data/docs/_includes/components/sidebar.html +69 -0
  18. data/docs/_includes/footer_custom.html +3 -0
  19. data/docs/_sass/color_schemes/hdi-light.scss +31 -0
  20. data/docs/_sass/custom/OneDarkJekyll.scss +203 -0
  21. data/docs/_sass/custom/a11y-colours.scss +4 -0
  22. data/docs/_sass/custom/color-scheme-shims.scss +66 -0
  23. data/docs/_sass/custom/custom.scss +60 -0
  24. data/docs/_sass/custom/setup.scss +3 -0
  25. data/docs/decisions/0000-use-markdown-any-decision-records.md +30 -0
  26. data/docs/decisions/0001-adoption-of-an-off-the-shelf-code-of-conduct.md +34 -0
  27. data/docs/decisions/0002-use-megalinter-for-linting-common-file-formats.md +41 -0
  28. data/docs/decisions/0003-use-keep-a-changelog-v1-1-as-the-format-for-changelogs.md +40 -0
  29. data/docs/decisions/0004-end-to-end-aka-system-testing.md +41 -0
  30. data/docs/decisions/0005-standardised-approach-to-versioning.md +27 -0
  31. data/docs/decisions/0006-standard-approach-to-automated-accessibility-testing.md +54 -0
  32. data/docs/decisions/0007-test-for-insensitive-and-inconsiderate-writing.md +32 -0
  33. data/docs/decisions/0008-software-as-a-service-saas-web-analytics-solution.md +30 -0
  34. data/docs/decisions/0009-pull-request-guidlines-and-template.md +31 -0
  35. data/docs/decisions/README.md +7 -0
  36. data/docs/decisions/adr-template.md +82 -0
  37. data/docs/decisions/index.md +48 -0
  38. data/docs/index.md +33 -0
  39. data/docs/pa11y.json +9 -0
  40. data/docs/way_of_working/accessibility-testing.md +29 -0
  41. data/docs/way_of_working/changelog.md +58 -0
  42. data/docs/way_of_working/code-linting/index.md +39 -0
  43. data/docs/way_of_working/code-linting/linters.md +153 -0
  44. data/docs/way_of_working/code-of-conduct.md +31 -0
  45. data/docs/way_of_working/decision-records.md +58 -0
  46. data/docs/way_of_working/end-to-end-testing.md +35 -0
  47. data/docs/way_of_working/inclusive-language.md +28 -0
  48. data/docs/way_of_working/pull-request-template-and-guidelines.md +18 -0
  49. data/docs/way_of_working/readme-badges.md +24 -0
  50. data/docs/way_of_working/versioning.md +25 -0
  51. data/lib/way_of_working/for/hdi/paths.rb +20 -0
  52. data/lib/way_of_working/for/hdi/plugin.rb +12 -0
  53. data/lib/way_of_working/for/hdi/version.rb +9 -0
  54. data/lib/way_of_working/for/hdi.rb +23 -0
  55. data/lib/way_of_working/rake_tasks/generators/init.rb +47 -0
  56. data/lib/way_of_working/rake_tasks.rb +22 -0
  57. metadata +257 -0
data/docs/_config.yml ADDED
@@ -0,0 +1,90 @@
1
+ ---
2
+ # Welcome to Jekyll!
3
+ #
4
+ # This config file is meant for settings that affect your whole blog, values
5
+ # which you are expected to set up once and rarely edit after that. If you find
6
+ # yourself editing this file very often, consider using Jekyll's data files
7
+ # feature for the data you need to update frequently.
8
+ #
9
+ # For technical reasons, this file is *NOT* reloaded automatically when you use
10
+ # 'bundle exec jekyll serve'. If you change this file, please restart the server process.
11
+ #
12
+ # If you need help with YAML syntax, here are some quick references for you:
13
+ # https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
14
+ # https://learnxinyminutes.com/docs/yaml/
15
+ #
16
+ # Site settings
17
+ # These are used to personalize your new site. If you look in the HTML files,
18
+ # you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
19
+ # You can create any custom variable you would like, and they will be accessible
20
+ # in the templates via {{ site.myvariable }}.
21
+
22
+ title: HDI Way Of Working
23
+ # email: your-email@example.com
24
+ # description: >- # this means to ignore newlines until "baseurl:"
25
+ # Write an awesome description for your new site here. You can edit this
26
+ # line in _config.yml. It will appear in your document head meta (for
27
+ # Google search results) and in your feed.xml site description.
28
+ # baseurl: "" # the subpath of your site, e.g. /blog
29
+ # url: "" # the base hostname & protocol for your site, e.g. http://example.com
30
+ # twitter_username: jekyllrb
31
+ # github_username: jekyll
32
+
33
+ # Build settings
34
+ remote_theme: just-the-docs/just-the-docs@v0.4.0
35
+ plugins:
36
+ - jekyll-feed
37
+
38
+ # Exclude from processing.
39
+ # The following items will not be processed, by default.
40
+ # Any item listed under the `exclude:` key here will be automatically added to
41
+ # the internal "default list".
42
+ #
43
+ # Excluded items can be processed by explicitly listing the directories or
44
+ # their entries' file path in the `include:` list.
45
+ #
46
+ exclude:
47
+ - decisions/adr-template.md
48
+ # - .sass-cache/
49
+ # - .jekyll-cache/
50
+ # - gemfiles/
51
+ # - Gemfile
52
+ # - Gemfile.lock
53
+ # - node_modules/
54
+ # - vendor/bundle/
55
+ # - vendor/cache/
56
+ # - vendor/gems/
57
+ # - vendor/ruby/
58
+
59
+ color_scheme: hdi-light
60
+
61
+ callouts:
62
+ highlight:
63
+ color: yellow
64
+ important:
65
+ title: Important
66
+ color: blue
67
+ new:
68
+ title: New
69
+ color: green
70
+ note:
71
+ title: Note
72
+ color: purple
73
+ warning:
74
+ title: Warning
75
+ color: red
76
+
77
+ aux_links:
78
+ "HDI Way of Working on GitHub":
79
+ - "//github.com/healthdatainsight/way_of_working-for-hdi"
80
+
81
+ favicon_ico: "https://healthdatainsight.org.uk/wp-content/uploads/2020/11/cropped-hdi-favicon-1-32x32.png"
82
+ search_enabled: false
83
+
84
+ # Footer
85
+ gh_edit_link: true # show or hide edit this page link
86
+ gh_edit_link_text: "Edit this page on GitHub."
87
+ gh_edit_repository: "https://github.com/healthdatainsight/way_of_working-for-hdi" # the github URL for your repo
88
+ gh_edit_branch: main
89
+ gh_edit_source: docs
90
+ gh_edit_view_mode: "tree" # "tree" or "edit" if you want the user to jump into the editor immediately
@@ -0,0 +1,69 @@
1
+ <div class="side-bar">
2
+ <div class="site-header">
3
+ <a href="{{ '/' | relative_url }}" class="site-title lh-tight">{% include title.html %}</a>
4
+ <a href="#" id="menu-button" class="site-button" aria-label="Open the menu">
5
+ <svg viewBox="0 0 24 24" class="icon"><use xlink:href="#svg-menu"></use></svg>
6
+ </a>
7
+ </div>
8
+ <nav aria-label="Main" id="site-nav" class="site-nav">
9
+ {% assign pages_top_size = site.html_pages
10
+ | where_exp:"item", "item.title != nil"
11
+ | where_exp:"item", "item.parent == nil"
12
+ | where_exp:"item", "item.nav_exclude != true"
13
+ | size %}
14
+ {% if pages_top_size > 0 %}
15
+ {% include nav.html pages=site.html_pages key=nil %}
16
+ {% endif %}
17
+ {%- if site.nav_external_links -%}
18
+ <ul class="nav-list">
19
+ {%- for node in site.nav_external_links -%}
20
+ <li class="nav-list-item external">
21
+ <a href="{{ node.url | absolute_url }}" class="nav-list-link external">
22
+ {{ node.title }}
23
+ {% unless node.hide_icon %}<svg viewBox="0 0 24 24" aria-labelledby="svg-external-link-title"><use xlink:href="#svg-external-link"></use></svg>{% endunless %}
24
+ </a>
25
+ </li>
26
+ {%- endfor -%}
27
+ </ul>
28
+ {%- endif -%}
29
+ {% if site.just_the_docs.collections %}
30
+ {% assign collections_size = site.just_the_docs.collections | size %}
31
+ {% for collection_entry in site.just_the_docs.collections %}
32
+ {% assign collection_key = collection_entry[0] %}
33
+ {% assign collection_value = collection_entry[1] %}
34
+ {% assign collection = site[collection_key] %}
35
+ {% if collection_value.nav_exclude != true %}
36
+ {% if collections_size > 1 or pages_top_size > 0 %}
37
+ {% if collection_value.nav_fold == true %}
38
+ <ul class="nav-list nav-category-list">
39
+ <li class="nav-list-item{% if page.collection == collection_key %} active{% endif %}">
40
+ {%- if collection.size > 0 -%}
41
+ <a href="#" class="nav-list-expander"><svg viewBox="0 0 24 24"><use xlink:href="#svg-arrow-right"></use></svg></a>
42
+ {%- endif -%}
43
+ <div class="nav-category">{{ collection_value.name }}</div>
44
+ {% include nav.html pages=collection key=collection_key %}
45
+ </li>
46
+ </ul>
47
+ {% else %}
48
+ <div class="nav-category">{{ collection_value.name }}</div>
49
+ {% include nav.html pages=collection key=collection_key %}
50
+ {% endif %}
51
+ {% else %}
52
+ {% include nav.html pages=collection key=collection_key %}
53
+ {% endif %}
54
+ {% endif %}
55
+ {% endfor %}
56
+ {% endif %}
57
+ </nav>
58
+
59
+ {% capture nav_footer_custom %}
60
+ {%- include nav_footer_custom.html -%}
61
+ {% endcapture %}
62
+ {% if nav_footer_custom != "" %}
63
+ {{ nav_footer_custom }}
64
+ {% else %}
65
+ <footer class="site-footer">
66
+ This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
67
+ </footer>
68
+ {% endif %}
69
+ </div>
@@ -0,0 +1,3 @@
1
+ <p class="text-small mb-0">
2
+ Copyright &copy; 2023-2025 Health Data Insight CIC. Distributed by an <a href="https://github.com/healthdatainsight/way_of_working-for-hdi/tree/main/LICENSE.txt">MIT license.</a>
3
+ </p>
@@ -0,0 +1,31 @@
1
+ @import "../custom/a11y-colours";
2
+
3
+ $body-background-color: $white;
4
+ $body-heading-color: $a11y-darker-grey;
5
+ $body-text-color: $a11y-dark-grey;
6
+ $link-color: $a11y-purple;
7
+ $nav-child-link-color: $grey-dk-100;
8
+ $sidebar-color: $grey-lt-000;
9
+ // $base-button-color: #f7f7f7;
10
+ // $btn-primary-color: $purple-100;
11
+ $code-background-color: $a11y-light-grey;
12
+ $feedback-color: darken($sidebar-color, 3%);
13
+ // $table-background-color: $white;
14
+ // $search-background-color: $white;
15
+ // $search-result-preview-color: $grey-dk-000;
16
+
17
+ // $body-background-color: $white;
18
+ // $body-heading-color: red;
19
+ // $body-text-color: red;
20
+ // $link-color: red;
21
+ // $nav-child-link-color: red;
22
+ // $sidebar-color: yellow;
23
+ // // $base-button-color: #f7f7f7;
24
+ // // $btn-primary-color: $purple-100;
25
+ // $code-background-color: orange;
26
+ // $feedback-color: red;
27
+ // $table-background-color: red;
28
+ // $search-background-color: red;
29
+ // $search-result-preview-color: red;
30
+
31
+ // @import "./vendor/OneLightJekyll/syntax";
@@ -0,0 +1,203 @@
1
+ // Generated with OneDarkJekyll applied to Atom's One Dark Vivid theme
2
+ /* stylelint-disable rule-empty-line-before */
3
+
4
+ .highlight,
5
+ pre.highlight {
6
+ background: #31343f;
7
+ color: #dee2f7;
8
+ }
9
+ .highlight pre {
10
+ background: #31343f;
11
+ }
12
+ .highlight .hll {
13
+ background: #31343f;
14
+ }
15
+ .highlight .c {
16
+ color: #63677e;
17
+ font-style: italic;
18
+ }
19
+ .highlight .err {
20
+ color: #960050;
21
+ background-color: #1e0010;
22
+ }
23
+ .highlight .k {
24
+ color: #e19ef5;
25
+ }
26
+ .highlight .l {
27
+ color: #a3eea0;
28
+ }
29
+ .highlight .n {
30
+ color: #dee2f7;
31
+ }
32
+ .highlight .o {
33
+ color: #dee2f7;
34
+ }
35
+ .highlight .p {
36
+ color: #dee2f7;
37
+ }
38
+ .highlight .cm {
39
+ color: #63677e;
40
+ font-style: italic;
41
+ }
42
+ .highlight .cp {
43
+ color: #63677e;
44
+ font-style: italic;
45
+ }
46
+ .highlight .c1 {
47
+ color: #63677e;
48
+ font-style: italic;
49
+ }
50
+ .highlight .cs {
51
+ color: #63677e;
52
+ font-style: italic;
53
+ }
54
+ .highlight .ge {
55
+ font-style: italic;
56
+ }
57
+ .highlight .gs {
58
+ font-weight: 700;
59
+ }
60
+ .highlight .kc {
61
+ color: #e19ef5;
62
+ }
63
+ .highlight .kd {
64
+ color: #e19ef5;
65
+ }
66
+ .highlight .kn {
67
+ color: #e19ef5;
68
+ }
69
+ .highlight .kp {
70
+ color: #e19ef5;
71
+ }
72
+ .highlight .kr {
73
+ color: #e19ef5;
74
+ }
75
+ .highlight .kt {
76
+ color: #e19ef5;
77
+ }
78
+ .highlight .ld {
79
+ color: #a3eea0;
80
+ }
81
+ .highlight .m {
82
+ color: #eddc96;
83
+ }
84
+ .highlight .s {
85
+ color: #a3eea0;
86
+ }
87
+ .highlight .na {
88
+ color: #eddc96;
89
+ }
90
+ .highlight .nb {
91
+ color: #fdce68;
92
+ }
93
+ .highlight .nc {
94
+ color: #fdce68;
95
+ }
96
+ .highlight .no {
97
+ color: #fdce68;
98
+ }
99
+ .highlight .nd {
100
+ color: #fdce68;
101
+ }
102
+ .highlight .ni {
103
+ color: #fdce68;
104
+ }
105
+ .highlight .ne {
106
+ color: #fdce68;
107
+ }
108
+ .highlight .nf {
109
+ color: #dee2f7;
110
+ }
111
+ .highlight .nl {
112
+ color: #fdce68;
113
+ }
114
+ .highlight .nn {
115
+ color: #dee2f7;
116
+ }
117
+ .highlight .nx {
118
+ color: #dee2f7;
119
+ }
120
+ .highlight .py {
121
+ color: #fdce68;
122
+ }
123
+ .highlight .nt {
124
+ color: #f9867b;
125
+ }
126
+ .highlight .nv {
127
+ color: #fdce68;
128
+ }
129
+ .highlight .ow {
130
+ font-weight: 700;
131
+ }
132
+ .highlight .w {
133
+ color: #f8f8f2;
134
+ }
135
+ .highlight .mf {
136
+ color: #eddc96;
137
+ }
138
+ .highlight .mh {
139
+ color: #eddc96;
140
+ }
141
+ .highlight .mi {
142
+ color: #eddc96;
143
+ }
144
+ .highlight .mo {
145
+ color: #eddc96;
146
+ }
147
+ .highlight .sb {
148
+ color: #a3eea0;
149
+ }
150
+ .highlight .sc {
151
+ color: #a3eea0;
152
+ }
153
+ .highlight .sd {
154
+ color: #a3eea0;
155
+ }
156
+ .highlight .s2 {
157
+ color: #a3eea0;
158
+ }
159
+ .highlight .se {
160
+ color: #a3eea0;
161
+ }
162
+ .highlight .sh {
163
+ color: #a3eea0;
164
+ }
165
+ .highlight .si {
166
+ color: #a3eea0;
167
+ }
168
+ .highlight .sx {
169
+ color: #a3eea0;
170
+ }
171
+ .highlight .sr {
172
+ color: #7be2f9;
173
+ }
174
+ .highlight .s1 {
175
+ color: #a3eea0;
176
+ }
177
+ .highlight .ss {
178
+ color: #7be2f9;
179
+ }
180
+ .highlight .bp {
181
+ color: #fdce68;
182
+ }
183
+ .highlight .vc {
184
+ color: #fdce68;
185
+ }
186
+ .highlight .vg {
187
+ color: #fdce68;
188
+ }
189
+ .highlight .vi {
190
+ color: #f9867b;
191
+ }
192
+ .highlight .il {
193
+ color: #eddc96;
194
+ }
195
+ .highlight .gu {
196
+ color: #75715e;
197
+ }
198
+ .highlight .gd {
199
+ color: #f92672;
200
+ }
201
+ .highlight .gi {
202
+ color: #a6e22e;
203
+ }
@@ -0,0 +1,4 @@
1
+ $a11y-dark-grey: #55525a;
2
+ $a11y-darker-grey: #46434a;
3
+ $a11y-light-grey: #f5f6fa;
4
+ $a11y-purple: #573fb4;
@@ -0,0 +1,66 @@
1
+ // $body-background-color
2
+ // $body-heading-color
3
+ .site-title {
4
+ color: $body-heading-color;
5
+ }
6
+
7
+ // $body-text-color
8
+ .site-footer {
9
+ color: $body-text-color;
10
+ }
11
+
12
+ // $link-color
13
+ .nav-list .nav-list-item .nav-list-expander {
14
+ color: $link-color;
15
+ }
16
+
17
+ .main-content .anchor-heading svg {
18
+ color: $link-color;
19
+ }
20
+
21
+ // $nav-child-link-color
22
+ .nav-list .nav-list-item > .nav-list .nav-list-item .nav-list-link {
23
+ color: $nav-child-link-color;
24
+ }
25
+
26
+ // $sidebar-color
27
+ // $base-button-color
28
+ // $btn-primary-color
29
+ // $code-background-color
30
+ // $feedback-color
31
+ // $table-background-color
32
+ // $search-background-color
33
+ // $search-result-preview-color
34
+
35
+ // $highlight-background-color
36
+ p.highlight, blockquote.highlight {
37
+ background: $highlight-background-color;
38
+ color: $body-heading-color;
39
+ }
40
+
41
+ // $important-background-color
42
+ p.important, blockquote.important {
43
+ background: $important-background-color;
44
+ color: $body-heading-color;
45
+ }
46
+
47
+ p.note, blockquote.note {
48
+ background: $note-background-color;
49
+ color: $body-heading-color;
50
+ }
51
+
52
+ // footer p {
53
+ // color: $a11y-dark-grey;
54
+ // }
55
+
56
+ // div.highlight {
57
+ // background: $a11y-light-grey;
58
+
59
+ // code {
60
+ // color: $a11y-dark-grey;
61
+ // }
62
+ // }
63
+
64
+ // .language-plaintext {
65
+ // color: $a11y-dark-grey !important;
66
+ // }
@@ -0,0 +1,60 @@
1
+ // {% if site.logo %}
2
+ // $logo: "{{ site.logo | relative_url }}";
3
+ // {% endif %}
4
+ // @import "./support/support";
5
+ // @import "./color_schemes/light";
6
+ // {% unless include.color_scheme == "light" %}
7
+ // @import "./color_schemes/{{ include.color_scheme }}";
8
+ // {% endunless %}
9
+ // @import "./custom/setup";
10
+ // @import "./modules";
11
+ // {% include css/callouts.scss.liquid color_scheme = include.color_scheme %}
12
+ // {% include css/custom.scss.liquid %}
13
+
14
+ @import "./color-scheme-shims";
15
+
16
+ @media (prefers-color-scheme: dark) {
17
+ @import "./a11y-colours";
18
+ // @import "./support/support";
19
+
20
+ // $body-background-color: $grey-dk-300;
21
+ $body-background-color: black;
22
+ $body-heading-color: $grey-lt-000;
23
+ $body-text-color: $grey-lt-300;
24
+ $link-color: #a48dff;
25
+ $nav-child-link-color: $grey-dk-000;
26
+ $sidebar-color: #0d1117;
27
+ // $base-button-color: $grey-dk-250;
28
+ // $btn-primary-color: $blue-200;
29
+ $code-background-color: #31343f; // OneDarkJekyll default for syntax-one-dark-vivid
30
+ $code-linenumber-color: #dee2f7; // OneDarkJekyll .nf for syntax-one-dark-vivid
31
+ // $feedback-color: darken($sidebar-color, 3%);
32
+ $feedback-color: #0d1117;
33
+ $table-background-color: #111013;
34
+ // $search-background-color: $grey-dk-250;
35
+ // $search-result-preview-color: $grey-dk-000;
36
+ $border-color: $grey-dk-200;
37
+
38
+ @import "OneDarkJekyll"; // this is the one-dark-vivid atom syntax theme
39
+
40
+ $highlight-background-color: #3d3d2c;
41
+ $important-background-color: #132844;
42
+ $note-background-color: #211f41;
43
+
44
+ // Modules
45
+ @import "./base";
46
+ @import "./layout";
47
+ // @import "./content"; // contains a second charset
48
+ @import "./navigation";
49
+ // @import "./typography";
50
+ // @import "./labels";
51
+ // @import "./buttons";
52
+ // @import "./search";
53
+ @import "./tables";
54
+ @import "./code";
55
+ // @import "./utilities/utilities";
56
+ // @import "./print";
57
+ // @import "./skiptomain";
58
+
59
+ @import "./color-scheme-shims";
60
+ }
@@ -0,0 +1,3 @@
1
+ $highlight-background-color: #fffbe7 !default;
2
+ $important-background-color: #d7e6fe !default;
3
+ $note-background-color: #e3ddfd !default;
@@ -0,0 +1,30 @@
1
+ ---
2
+ nav_order: 0
3
+ parent: Decision Records
4
+ ---
5
+ # Use Markdown Any Decision Records
6
+
7
+ ## Context and Problem Statement
8
+
9
+ We want to record any decisions made in this project independent whether decisions concern the architecture ("architectural decision record"), the code, or other fields.
10
+ Which format and structure should these records follow?
11
+
12
+ ## Considered Options
13
+
14
+ * [MADR](https://adr.github.io/madr/) 3.0.0 – The Markdown Any Decision Records
15
+ * [Michael Nygard's template](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions) – The first incarnation of the term "ADR"
16
+ * [Sustainable Architectural Decisions](https://www.infoq.com/articles/sustainable-architectural-design-decisions) – The Y-Statements
17
+ * Other templates listed at <https://github.com/joelparkerhenderson/architecture_decision_record>
18
+ * Formless – No conventions for file format and structure
19
+
20
+ ## Decision Outcome
21
+
22
+ Chosen option: "MADR 3.0.0", because
23
+
24
+ * Implicit assumptions should be made explicit.
25
+ Design documentation is important to enable people understanding the decisions later on.
26
+ See also [A rational design process: How and why to fake it](https://doi.org/10.1109/TSE.1986.6312940).
27
+ * MADR allows for structured capturing of any decision.
28
+ * The MADR format is lean and fits our development style.
29
+ * The MADR structure is comprehensible and facilitates usage & maintenance.
30
+ * The MADR project is vivid.
@@ -0,0 +1,34 @@
1
+ ---
2
+ nav_order: 1
3
+ parent: Decision Records
4
+
5
+ status: accepted
6
+ date: 2023-01-04
7
+ ---
8
+ # Adoption of an off-the-shelf Code of Conduct
9
+
10
+ ## Context and Problem Statement
11
+
12
+ We want an explicit and documented code of conduct to support people collaborating with us on our projects. We need contributors to understand the code and enforcement policy.
13
+ Which one should we adopt?
14
+
15
+ ## Considered Options
16
+
17
+ * [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/) v2.1
18
+ * [Citizen Code of Conduct](https://github.com/stumpsyn/policies/blob/master/citizen_code_of_conduct.md)
19
+ * Formless – No conventions for code of conduct
20
+
21
+ ## Decision Outcome
22
+
23
+ Chosen option: "Contributor Covenant", because
24
+
25
+ * It is used by tens of thousands of repos on GitHub, and is therefore likely the most recognised code of conduct of contributors.
26
+ * It contains enforcement guidelines and is well maintained.
27
+ * Citizen Code of Conduct hasn't been touched since 2018.
28
+
29
+ ### Consequences
30
+
31
+ * Good, because it prevents us from needing to write one from scratch
32
+ * Neutral, because teams need to discuss the implications of adopting the code of conduct
33
+ * Neutral, because teams need to thoroughly read the [enforcement guidelines](https://www.contributor-covenant.org/version/2/1/code_of_conduct/#enforcement-guidelines) section of the code
34
+ * Neutral, because teams need to set up and monitor an enforcement contact method.
@@ -0,0 +1,41 @@
1
+ ---
2
+ # Configuration for the Jekyll template "Just the Docs"
3
+ nav_order: 2
4
+ parent: Decision Records
5
+
6
+ status: accepted
7
+ date: 2023-01-05
8
+ ---
9
+ # Use MegaLinter for linting common file formats
10
+
11
+ ## Context and Problem Statement
12
+
13
+ We want to consistently manage the running of a large number of linters against our codebase containing a wide range of file formats, providing projects with a preconfigured GitHub Action.
14
+
15
+ We also want to store our standard linter configurations centrally, so that contributors can comment on, and propose changes to, our coding standards. With coding standards we can move more quickly between projects. There are several tools which orchestrate this task. Which one should we adopt?
16
+
17
+ ## Considered Options
18
+
19
+ * [Super-Linter](https://github.com/github/super-linter) for all languages, formats and tools.
20
+ * [MegaLinter](https://megalinter.io/) is an Open-Source tool for CI/CD workflows that analyzes the consistency of your code, IAC, configuration, and scripts in your repository sources, to ensure all your projects sources are clean and formatted whatever IDE/toolbox is used by their developers, powered by OX Security.
21
+ * Roll-our-own solution.
22
+ * Have no conventions for common approach to linting.
23
+
24
+ ## Decision Outcome
25
+
26
+ Chosen option: "MegaLinter", because:
27
+
28
+ * The differences between MegaLinter and Super-Linter are [well documented](https://megalinter.io/latest/mega-linter-vs-super-linter), but having used both on this project first had, MegaLinter was more than 8 time faster in linting the project on my local machine than Super-Linter.
29
+ * The ability to enable/disable linters allows us to take a more bespoke approach where the standard linter isn't adequate. E.g. The Ruby linter, Rubocop, contained in the Docker container, doesn't have access to the Rails linting we would adopt to adhere to the existing NDRS standard.
30
+
31
+ Initially we will lint bash, c++, c#, coffeescript, dart, go, java, javascript, jsx, kotlin, make, python, R, rust, scala, SQL, swift, typescript, tsx, css, sass, html, json, markdown, xml, yaml, github actions, ansible, ARM, cloudformation, kubernetes, openapi, puppet and terraform files.
32
+
33
+ These have been chosen as an initial list where they have been, are or could be used in projects both internally and with partner organisations.
34
+
35
+ ### Consequences
36
+
37
+ * Good, because we can spend less time writing a bespoke orchestration tool that would have to manage all the different output formats from all the different linters.
38
+ * Good, because we get secret scanning, security scanning of Infrastructure-as-Code code and dependency scanning as well as style checking.
39
+ * Neutral, because where a particular coding style has been adopted for a particular language, it can be adopted here.
40
+ * Neutral, because the rake task to run MegaLinter abstracts away any complexity with using Docker. Contributors only need to have Docker installed.
41
+ * Bad, because developers will need to adapt to the standard coding style, if it is unfamiliar to them.
@@ -0,0 +1,40 @@
1
+ ---
2
+ # Configuration for the Jekyll template "Just the Docs"
3
+ nav_order: 3
4
+ parent: Decision Records
5
+
6
+ # These are optional elements. Feel free to remove any of them.
7
+ status: accepted
8
+ date: 2023-01-31
9
+ ---
10
+ # Use keep a changelog v1.1 as the format for changelogs
11
+
12
+ ## Context and Problem Statement
13
+
14
+ There is enormous variation in the way changelogs are written. We want to adopt a standardised approach that enables them to be read by other contributors and be machine readable for conversion to HTML for end-users. We want one that isn't a dump of version control commit logs.
15
+
16
+ Which should we choose?
17
+
18
+ ## Considered Options
19
+
20
+ * [keep a changelog v1.1.0](https://keepachangelog.com/en/1.1.0/)
21
+ * [github-changelog-generator](https://github.com/github-changelog-generator/github-changelog-generator#github-changelog-generator-)
22
+ * [GNU changelog style guide](https://www.gnu.org/prep/standards/html_node/Style-of-Change-Logs.html#Style-of-Change-Logs)
23
+ * Roll-our-own solution.
24
+ * Have no conventions for common approach to changelogs.
25
+
26
+ ## Decision Outcome
27
+
28
+ Chosen option: "keep a changelog", because
29
+
30
+ * It is an accessible format, both for people and tooling.
31
+ * It is a human-written, plain English summary of changes, not a commit log dump.
32
+ * It has a well defined structure that makes automation easier.
33
+ * GNU changelog style is inadequate.
34
+
35
+ ### Consequences
36
+
37
+ * Good, because we can programatically create a template changelog for the first time on new and existing projects
38
+ * Good, because scaffolds the changes needed when we tag a new release
39
+ * Good, because we can provide helpers (using existing tooling) than convert the changelog into HTML for inclusion in an end user system
40
+ * Bad, because, unlike fully automated tools like github-changelog-generator, effort is required to turn commit messages into plain English.