releasehx 0.1.1 → 0.2.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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +366 -331
  3. data/build/docs/_config.yml +18 -1
  4. data/build/docs/_release_index.adoc +10 -0
  5. data/build/docs/config-reference.adoc +203 -16
  6. data/build/docs/config-reference.json +60 -10
  7. data/build/docs/index.adoc +316 -59
  8. data/build/docs/landing.adoc +11 -4
  9. data/build/docs/manpage.adoc +2 -2
  10. data/build/docs/release-procedure.adoc +365 -0
  11. data/build/docs/release-procedure.html +87 -0
  12. data/build/docs/releasehx.1 +17 -5
  13. data/build/docs/releases.adoc +28 -0
  14. data/build/docs/sample-config.adoc +2 -0
  15. data/build/docs/sample-config.yml +16 -9
  16. data/lib/releasehx/cli.rb +21 -9
  17. data/lib/releasehx/configuration.rb +0 -1
  18. data/lib/releasehx/generated.rb +1 -1
  19. data/lib/releasehx/mcp/assets/agent-config-guide.md +1 -1
  20. data/lib/releasehx/mcp/assets/config-def.yml +126 -8
  21. data/lib/releasehx/mcp/assets/config-reference.adoc +203 -16
  22. data/lib/releasehx/mcp/assets/config-reference.json +60 -10
  23. data/lib/releasehx/mcp/assets/sample-config.yml +16 -9
  24. data/lib/releasehx/mcp/server.rb +0 -1
  25. data/lib/releasehx/ops/enrich_ops.rb +161 -55
  26. data/lib/releasehx/ops/template_ops.rb +1 -1
  27. data/lib/releasehx/rhyml/adapter.rb +13 -9
  28. data/lib/releasehx/rhyml/mappings/github.yaml +3 -1
  29. data/lib/releasehx/rhyml/templates/bootstrap-overrides.css +15 -0
  30. data/lib/releasehx/rhyml/templates/changelog.adoc.liquid +2 -0
  31. data/lib/releasehx/rhyml/templates/changelog.html.liquid +6 -4
  32. data/lib/releasehx/rhyml/templates/changelog.md.liquid +1 -0
  33. data/lib/releasehx/rhyml/templates/embedded.css.liquid +263 -0
  34. data/lib/releasehx/rhyml/templates/entry.adoc.liquid +4 -7
  35. data/lib/releasehx/rhyml/templates/entry.html.liquid +21 -20
  36. data/lib/releasehx/rhyml/templates/entry.md.liquid +14 -21
  37. data/lib/releasehx/rhyml/templates/head-parser.liquid +6 -2
  38. data/lib/releasehx/rhyml/templates/header.liquid +13 -4
  39. data/lib/releasehx/rhyml/templates/history.html.liquid +152 -33
  40. data/lib/releasehx/rhyml/templates/metadata-entry.adoc.liquid +83 -49
  41. data/lib/releasehx/rhyml/templates/metadata-entry.html.liquid +60 -1
  42. data/lib/releasehx/rhyml/templates/metadata-entry.md.liquid +65 -113
  43. data/lib/releasehx/rhyml/templates/metadata-note.adoc.liquid +83 -49
  44. data/lib/releasehx/rhyml/templates/metadata-note.html.liquid +59 -22
  45. data/lib/releasehx/rhyml/templates/metadata-note.md.liquid +68 -23
  46. data/lib/releasehx/rhyml/templates/note.adoc.liquid +2 -40
  47. data/lib/releasehx/rhyml/templates/note.html.liquid +25 -19
  48. data/lib/releasehx/rhyml/templates/note.md.liquid +43 -29
  49. data/lib/releasehx/rhyml/templates/parts-listing.liquid +6 -6
  50. data/lib/releasehx/rhyml/templates/release-notes.adoc.liquid +2 -0
  51. data/lib/releasehx/rhyml/templates/release-notes.html.liquid +6 -4
  52. data/lib/releasehx/rhyml/templates/release-notes.md.liquid +1 -0
  53. data/lib/releasehx/rhyml/templates/release.adoc.liquid +2 -0
  54. data/lib/releasehx/rhyml/templates/release.md.liquid +8 -7
  55. data/lib/releasehx/rhyml/templates/rhyml-change.yaml.liquid +36 -35
  56. data/lib/releasehx/rhyml/templates/wrapper.html.liquid +103 -0
  57. data/lib/releasehx/sgyml/helpers.rb +0 -2
  58. data/lib/releasehx/transforms/adf_to_markdown.rb +1 -1
  59. data/lib/releasehx/version.rb +0 -2
  60. data/lib/releasehx.rb +2 -2
  61. data/specs/data/config-def.yml +126 -8
  62. metadata +50 -26
  63. data/build/docs/Gemfile.lock +0 -95
  64. data/build/docs/schemagraphy_readme.html +0 -0
  65. data/build/docs/sourcerer_readme.html +0 -46
  66. data/lib/schemagraphy/attribute_resolver.rb +0 -48
  67. data/lib/schemagraphy/cfgyml/definition.rb +0 -90
  68. data/lib/schemagraphy/cfgyml/doc_builder.rb +0 -52
  69. data/lib/schemagraphy/cfgyml/path_reference.rb +0 -24
  70. data/lib/schemagraphy/data_query/json_pointer.rb +0 -42
  71. data/lib/schemagraphy/loader.rb +0 -59
  72. data/lib/schemagraphy/regexp_utils.rb +0 -215
  73. data/lib/schemagraphy/safe_expression.rb +0 -189
  74. data/lib/schemagraphy/schema_utils.rb +0 -124
  75. data/lib/schemagraphy/tag_utils.rb +0 -32
  76. data/lib/schemagraphy/templating.rb +0 -104
  77. data/lib/schemagraphy.rb +0 -17
  78. data/lib/sourcerer/builder.rb +0 -120
  79. data/lib/sourcerer/jekyll/bootstrapper.rb +0 -78
  80. data/lib/sourcerer/jekyll/liquid/file_system.rb +0 -74
  81. data/lib/sourcerer/jekyll/liquid/filters.rb +0 -215
  82. data/lib/sourcerer/jekyll/liquid/tags.rb +0 -44
  83. data/lib/sourcerer/jekyll/monkeypatches.rb +0 -73
  84. data/lib/sourcerer/jekyll.rb +0 -26
  85. data/lib/sourcerer/plaintext_converter.rb +0 -75
  86. data/lib/sourcerer/templating.rb +0 -190
  87. data/lib/sourcerer.rb +0 -322
@@ -1,30 +1,75 @@
1
- {%- capture change_metadata -%}
2
- {%- assign metadata_parts = "" | split: "," -%}
1
+ {%- comment -%} Build inline metadata with badges for release notes {%- endcomment -%}
2
+ {%- assign metadata_kinds = 'type,part' | split: ',' -%}
3
+ {%- assign metadata_items = "" | split: "," -%}
4
+
5
+ {%- comment -%} Type badge {%- endcomment -%}
6
+ {%- if metadata_kinds contains "type" and change.type -%}
7
+ {%- assign type_config = config.types[change.type] -%}
8
+ {%- if type_config -%}
9
+ {%- assign type_text = type_config.text | default: change.type -%}
10
+ {%- assign type_slug = change.type | sluggerize: slug_type -%}
11
+ {%- capture type_badge -%}<span class="badge type-badge type-{{ type_slug }}">{{ type_text }}</span>{%- endcapture -%}
12
+ {%- assign metadata_items = metadata_items | push: type_badge -%}
13
+ {%- endif -%}
14
+ {%- endif -%}
15
+
16
+ {%- comment -%} Parts {%- endcomment -%}
17
+ {%- if metadata_kinds contains "part" -%}
18
+ {%- assign effective_parts = "" | split: "," -%}
19
+ {%- if change.parts and change.parts.size > 0 -%}
20
+ {%- assign effective_parts = change.parts -%}
21
+ {%- elsif change.part -%}
22
+ {%- assign effective_parts = change.part | split: "," -%}
23
+ {%- endif -%}
24
+ {%- if effective_parts.size > 0 -%}
25
+ {%- for part in effective_parts -%}
26
+ {%- assign part_config = config.parts[part] -%}
27
+ {%- if part_config -%}
28
+ {%- assign part_text = part_config.text | default: part -%}
29
+ {%- assign part_slug = part | sluggerize: slug_type -%}
30
+ {%- capture part_badge -%}<span class="badge part-badge part-{{ part_slug }}">{{ part_text }}</span>{%- endcapture -%}
31
+ {%- assign metadata_items = metadata_items | push: part_badge -%}
32
+ {%- endif -%}
33
+ {%- endfor -%}
34
+ {%- endif -%}
35
+ {%- endif -%}
36
+
37
+ {%- comment -%} Tags {%- endcomment -%}
38
+ {%- if metadata_kinds contains "tag" and change.tags and change.tags.size > 0 -%}
39
+ {%- for tag in change.tags -%}
40
+ {%- assign tag_slug = tag | sluggerize: slug_type -%}
41
+ {%- capture tag_badge -%}<span class="badge tag-badge tag-{{ tag_slug }}">{{ tag }}</span>{%- endcapture -%}
42
+ {%- assign metadata_items = metadata_items | push: tag_badge -%}
43
+ {%- endfor -%}
44
+ {%- endif -%}
45
+
46
+ {%- comment -%} Lead/user {%- endcomment -%}
3
47
  {%- if note_show_lead and change.lead -%}
4
- {%- capture lead_text -%}
5
- {%- if note_show_lead_links and config.links.user.href -%}
6
- [{{ change.lead }}]({{ config.links.user.href | replace: '{{user}}', change.lead }})
7
- {%- else -%}
8
- {{ change.lead }}
9
- {%- endif -%}
10
- {%- endcapture -%}
11
- {%- assign metadata_parts = metadata_parts | push: lead_text -%}
48
+ {%- if note_show_lead_links and config.links.user.href -%}
49
+ {%- capture lead_link -%}[@{{ change.lead }}]({{ config.links.user.href | replace: '{{user}}', change.lead }}){%- endcapture -%}
50
+ {%- assign metadata_items = metadata_items | push: lead_link -%}
51
+ {%- else -%}
52
+ {%- capture lead_text -%}@{{ change.lead }}{%- endcapture -%}
53
+ {%- assign metadata_items = metadata_items | push: lead_text -%}
54
+ {%- endif -%}
12
55
  {%- endif -%}
56
+
57
+ {%- comment -%} Issue link {%- endcomment -%}
13
58
  {%- if note_show_issue_links and change.tick and config.links.web.href -%}
14
- {%- capture issue_link -%}[{{ config.links.web.text | render: change }}]({{ config.links.web.href | render: change }}){%- endcapture -%}
15
- {%- assign metadata_parts = metadata_parts | push: issue_link -%}
59
+ {%- capture issue_link -%}[{{ config.links.web.text | render: change }}]({{ config.links.web.href | render: change }}){%- endcapture -%}
60
+ {%- assign metadata_items = metadata_items | push: issue_link -%}
16
61
  {%- elsif change.tick -%}
17
- {%- assign metadata_parts = metadata_parts | push: change.tick -%}
18
- {%- endif -%}
19
- {%- embed parts-listing.liquid -%}
20
- {%- if parts_listing and parts_listing != "" -%}
21
- {%- assign metadata_parts = metadata_parts | push: parts_listing -%}
62
+ {%- assign metadata_items = metadata_items | push: change.tick -%}
22
63
  {%- endif -%}
23
- {%- embed tags-listing.liquid -%}
24
- {%- if tags_listing and tags_listing != "" -%}
25
- {%- assign metadata_parts = metadata_parts | push: tags_listing -%}
64
+
65
+ {%- comment -%} Git commit {%- endcomment -%}
66
+ {%- if metadata_kinds contains "git" and change.ghsh and config.links.git.href -%}
67
+ {%- capture git_link -%}[`{{ change.ghsh | slice: 0, 7 }}`]({{ config.links.git.href | render: change }}){%- endcapture -%}
68
+ {%- assign metadata_items = metadata_items | push: git_link -%}
26
69
  {%- endif -%}
27
- {%- if metadata_parts.size > 0 -%}
28
- ({{ metadata_parts | join: ", " }})
70
+
71
+ {%- if metadata_items.size > 0 -%}
72
+ {%- assign change_metadata = metadata_items | join: " " -%}
73
+ {%- else -%}
74
+ {%- assign change_metadata = "" -%}
29
75
  {%- endif -%}
30
- {%- endcapture -%}
@@ -3,50 +3,12 @@
3
3
  {%- else %}
4
4
  {%- assign change_note = change.note | default: "NO RELEASE NOTE PROVIDED" | trim %}
5
5
  {%- endif %}
6
- {%- include metadata-note.adoc.liquid %}
7
6
 
8
7
  {%- unless changes_listed contains change.chid %}
9
8
  [[note-{{ change.chid }}]]
10
9
  {%- endunless %}
11
10
  [.release-note]
12
- {%- if config.notes.items.frame == "table-cols-1" %}
13
- |===
14
- a| {{ change_metadata }} +
15
- {%- if change.head %}
16
- *{{ change.head }}* +
17
- {%- endif %}
11
+ --
18
12
  {{ change_note }}
19
- |===
20
- {%- elsif config.notes.items.frame == "table-cols-2" %}
21
- [cols="5,2"]
22
- |===
23
- {%- if change.head %}
24
- 2+a| *{{ change.head }}*
25
- {%- endif %}
26
- a| {{ change_note }}
27
- a| {{ change_metadata }}
28
- |===
29
- {%- elsif config.notes.items.frame == "desc-list" %}
30
- {{ change.head }}::
31
- {{ change_note }} +
32
- {{ change_metadata }}
33
- {%- elsif config.notes.items.frame == "admonition" %}
34
- {%- if change.type == "removal" or change.type == "deprecation" or change.type == "breaking" %}
35
- {%- assign admonition_type = "WARNING" %}
36
- {%- elsif change.type == "security" %}
37
- {%- assign admonition_type = "IMPORTANT" %}
38
- {%- elsif change.type == "experimental" %}
39
- {%- assign admonition_type = "TIP" %}
40
- {%- else %}
41
- {%- assign admonition_type = "NOTE" %}
42
- {%- endif %}
43
- [{{ admonition_type }}]
44
- {%- if change.head %}
45
- .{{ change.head }}
46
- {%- endif %}
47
- ====
48
- {{ change_note }} +
49
- {{ change_metadata }}
50
- ====
51
- {%- endif %}
13
+ --
52
14
 
@@ -1,25 +1,31 @@
1
+ {%- assign raw_note = change.note | default: "NO RELEASE NOTE PROVIDED" %}
2
+ {%- assign change_note = raw_note | replace: "## Release Note", "" | trim %}
1
3
  {%- if config.conversions.markup == "markdown" %}
2
- {%- assign change_note = change.note | default: "NO RELEASE NOTE PROVIDED" | md_to_html | trim %}
3
- {%- else %}
4
- {%- assign change_note = change.note | default: "NO RELEASE NOTE PROVIDED" | trim %}
4
+ {%- assign change_note = change_note | markdownify | trim %}
5
+ {%- elsif config.conversions.markup == "asciidoc" %}
6
+ {%- assign change_note = change_note | asciidocify | trim %}
5
7
  {%- endif %}
6
8
  {%- include metadata-note.html.liquid %}
7
9
 
8
- <div class="release-note card mb-3" id="note-{{ change.chid }}">
9
- <div class="card-body">
10
- {%- if change.head %}
11
- <h5 class="card-title">{{ change.head }}</h5>
12
- {%- endif %}
13
-
14
- <div class="card-text">
15
- {{ change_note }}
16
- </div>
17
-
18
- {%- if change_metadata != "" %}
19
- <div class="change-metadata mt-3 pt-2 border-top">
20
- {{ change_metadata | trim }}
21
- </div>
22
- {%- endif %}
10
+ <article class="release-note card mb-3" id="note-{{ change.chid }}">
11
+ <div class="card-header bg-light border-bottom">
12
+ {%- if change.head %}
13
+ <h5 class="card-title mb-0">{{ change.head }}</h5>
14
+ {%- else %}
15
+ <h5 class="card-title mb-0 text-muted">Release Note</h5>
16
+ {%- endif %}
17
+ </div>
18
+ <div class="card-body">
19
+ <div class="card-text prose mb-3">
20
+ {{ change_note }}
21
+ </div>
22
+ {%- if change_metadata != "" %}
23
+ <div class="card-footer border-top pt-2">
24
+ <div class="change-metadata">
25
+ {{ change_metadata | trim }}
26
+ </div>
23
27
  </div>
24
- </div>
28
+ {%- endif %}
29
+ </div>
30
+ </article>
25
31
 
@@ -1,37 +1,51 @@
1
- {% if config.conversions.markup == "markdown" -%}
2
- {% assign change_note = change.note | default: "NO RELEASE NOTE PROVIDED" | trim -%}
1
+ <!-- .release-note -->
2
+ {% if config.conversions.markup == 'markdown' -%}
3
+ {% assign change_note = change.note | default: 'NO RELEASE NOTE PROVIDED' | trim -%}
3
4
  {% else -%}
4
- {% assign change_note = change.note | default: "NO RELEASE NOTE PROVIDED" | adoc_to_md | trim -%}
5
+ {% assign change_note = change.note | default: 'NO RELEASE NOTE PROVIDED' | adoc_to_md | trim -%}
5
6
  {% endif -%}
7
+ {%- comment -%} Remove "## Release Note" heading if it appears in the note content {%- endcomment -%}
8
+ {%- assign change_note = change_note | replace: '## Release Note', '' | trim -%}
6
9
  {% embed metadata-note.md.liquid -%}
7
10
 
8
11
  <a id="note-{{ change.chid }}"></a>
9
- {%- if config.notes.items.frame == "table" %}
10
- | Change | Details |
11
- |--------|---------|
12
- | {{ change_metadata }} | {% if change.head %}**{{ change.head }}**<br>{% endif %}{{ change_note }} |
13
- {%- elsif config.notes.items.frame == "desc-list" %}
14
- **{{ change.head }}**
15
- {{ change_note }}
16
- *{{ change_metadata }}*
17
- {% elsif config.notes.items.frame == "admonition" %}
18
- {% if change.type == "removal" or change.type == "deprecation" or change.type == "breaking" %}
19
- {% assign admonition_type = "Warning" %}
20
- {% elsif change.type == "security" %}
21
- {% assign admonition_type = "Important" %}
22
- {% elsif change.type == "experimental" %}
23
- {% assign admonition_type = "Tip" %}
24
- {% else %}
25
- {% assign admonition_type = "Note" %}
26
- {% endif %}
27
12
 
28
- > **{{ admonition_type }}**: {% if change.head %}**{{ change.head }}** - {% endif %}{{ change_note }}
29
- > {{ change_metadata }}
13
+ {%- if config.notes.items.frame == 'table' %}
14
+ | Change | Details | |--------|---------| | {{ change_metadata }} |
15
+ {% if change.head %}**{{ change.head }}**<br>{% endif -%}
16
+ {{- change_note }} |
17
+ {%- elsif config.notes.items.frame == 'table-cols-1' %}
18
+ | Note | |------| | {{ change_metadata -}}
19
+ <br>
20
+ {% if change.head %}**{{ change.head }}**<br>{% endif -%}
21
+ {{- change_note }} |
22
+ {%- elsif config.notes.items.frame == 'table-cols-2' %}
23
+ | Note | Metadata | |------|----------| | {% if change.head %}**{{ change.head }}**<br>{% endif -%}
24
+ {{- change_note }} | {{ change_metadata }} |
25
+ {%- elsif config.notes.items.frame == 'desc-list' %}
26
+ {% if change.head -%}
27
+ **{{ change.head }}**
28
+ {% endif -%}
29
+ {{ change_note }}
30
+ {{ change_metadata }}
31
+ {% elsif config.notes.items.frame == 'admonition' %}
32
+ {% if change.type == 'removal' or change.type == 'deprecation' or change.type == 'breaking' %}
33
+ {% assign admonition_type = '⚠️ Warning' %}
34
+ {% elsif change.type == 'security' %}
35
+ {% assign admonition_type = '🔒 Security' %}
36
+ {% elsif change.type == 'experimental' %}
37
+ {% assign admonition_type = '💡 Tip' %}
38
+ {% else %}
39
+ {% assign admonition_type = '📝 Note' %}
40
+ {% endif %}
41
+
42
+ > **{{ admonition_type }}**: {% if change.head %}**{{ change.head }}** — {% endif -%}
43
+ {{- change_note }} > {{ change_metadata }}
30
44
  {% else -%}
31
- {% if change.head -%}
32
- ### {{ change.head }}
33
- {% endif -%}
34
- {{ change_note }}
35
- {{- change_metadata }}
36
- {% endif %}
45
+ {% if change.head -%}
46
+ ### {{ change.head }}
47
+ {% endif -%}
48
+ {{ change_note }}
37
49
 
50
+ {{ change_metadata }}
51
+ {% endif %}
@@ -19,10 +19,10 @@
19
19
  {%- if show_labels -%}
20
20
  {%- if format == "asciidoc" -%}
21
21
  {%- if labeling_singularize_labels and parts_count == 1 -%}
22
- [.meta-label.parts-label]*{{ labeling_part_label }}:*{%- else -%}[.meta-label.parts-label]*{{ labeling_parts_label }}:*{%- endif -%}
22
+ **{{ labeling_part_label }}:** {% else -%}**{{ labeling_parts_label }}:** {% endif -%}
23
23
  {%- elsif format == "markdown" -%}
24
24
  {%- if labeling_singularize_labels and parts_count == 1 -%}
25
- {{ labeling_part_label }}: {%- else -%}{{ labeling_parts_label }}: {%- endif -%}
25
+ {{ labeling_part_label }}: {% else -%}{{ labeling_parts_label }}: {% endif -%}
26
26
  {%- endif -%}
27
27
  {%- endif -%}
28
28
  {%- assign part_texts = "" | split: "," -%}
@@ -38,10 +38,10 @@
38
38
  {%- unless skip_part -%}
39
39
  {%- capture part_text -%}
40
40
  {%- if config.parts[part].icon and show_icons and show_icons == "before" -%}
41
- {%- if format == "asciidoc" -%}icon:{{ config.parts[part].icon }}[] {%- endif -%}
41
+ {%- if format == "asciidoc" -%}icon:{{ config.parts[part].icon }}[]{%- endif -%}
42
42
  {%- endif -%}
43
43
  {%- if format == "asciidoc" -%}
44
- {{ config.parts[part]['text'] | default: part }}{%- elsif format == "markdown" -%}**{{ config.parts[part]['text'] | default: part }}**{%- endif -%}
44
+ {{ config.parts[part]['head'] | default: config.parts[part]['text'] | default: part }}{%- elsif format == "markdown" -%}**{{ config.parts[part]['head'] | default: config.parts[part]['text'] | default: part }}**{%- endif -%}
45
45
  {%- if config.parts[part].icon and show_icons and show_icons == "after" -%}
46
46
  {%- if format == "asciidoc" -%} icon:{{ config.parts[part].icon }}[]{%- endif -%}
47
47
  {%- endif -%}
@@ -52,10 +52,10 @@
52
52
  {%- if part_texts.size > 0 -%}
53
53
  {%- if format == "asciidoc" -%}
54
54
  {%- for part_text in part_texts -%}
55
- {{ part_text }}{%- unless forloop.last %} {%- endunless -%}
55
+ {{ part_text }}{%- unless forloop.last %}, {% endunless -%}
56
56
  {%- endfor -%}
57
57
  {%- elsif format == "markdown" -%}
58
- {{ part_texts | join: ", " }}{%- endif -%}
58
+ {{ part_texts | join: ", " }}{% endif -%}
59
59
  {%- endif -%}
60
60
  {%- endcapture -%}
61
61
  {%- endif -%}
@@ -11,4 +11,6 @@
11
11
  {%- assign item_count = 0 %}
12
12
  {%- embed section-text.liquid %}
13
13
 
14
+ [.notes-section]
15
+
14
16
  {%- embed groupings.liquid %}
@@ -4,11 +4,13 @@
4
4
  {%- assign dflt_next_header_level = level | plus: 1 -%}
5
5
  {%- assign item_count = 0 %}
6
6
 
7
- <div class="notes-section">
8
- {%- include header.liquid format=format level=level text=content_config.head %}
7
+ <section class="notes-section py-4 px-3 mb-4">
8
+ {%- include header.liquid format=format level=level text=content_config.head %}
9
9
 
10
- {%- embed section-text.liquid %}
10
+ {%- embed section-text.liquid %}
11
11
 
12
+ <div class="notes-content mt-4">
12
13
  {%- embed groupings.liquid %}
13
- </div>
14
+ </div>
15
+ </section>
14
16
 
@@ -1,3 +1,4 @@
1
+ <!-- .notes-section -->
1
2
  {%- assign content_config = config.notes %}
2
3
  {%- assign section_type = "notes" %}
3
4
  {%- embed config-cascade.liquid %}
@@ -6,6 +6,8 @@
6
6
  :icons: font
7
7
  {% embed head-parser.liquid %}
8
8
 
9
+ [.release-section]
10
+
9
11
  {%- if release.hash and release.hash != "" and config.links.git and config.links.git.trim != "" %}
10
12
  link:{{ config.links.git | render: release }}[icon:{{ config.links.git_icon | default: 'code-fork' }}[]{{ release.hash | slice: 0, 7 }}]
11
13
  {%- endif %}
@@ -1,12 +1,13 @@
1
- {% assign format = "markdown" -%}
2
- {% assign config = vars.config -%}
3
- {% assign release = vars.release -%}
4
- {% assign changes = vars.changes -%}
5
- {% assign sorted = vars.sorted -%}
1
+ {%- assign format = "markdown" -%}
2
+ {%- assign config = vars.config -%}
3
+ {%- assign release = vars.release -%}
4
+ {%- assign changes = vars.changes -%}
5
+ {%- assign sorted = vars.sorted -%}
6
6
  {%- embed head-parser.liquid %}
7
- {% if release.memo -%}
7
+ <!-- .release-section -->
8
+ {%- if release.memo -%}
8
9
  {{ release.memo }}
9
- {% endif -%}
10
+ {%- endif -%}
10
11
 
11
12
  {% if release.hash and release.hash != "" and config.links.git and config.links.git.trim != "" -%}
12
13
  **Git:** [{{ release.hash | slice: 0, 7 }}]({{ config.links.git | render: release }})
@@ -1,39 +1,40 @@
1
- {%- assign change = include.change %}
2
- {%- assign config = include.config %}
3
- - chid: {{ change.chid }}
4
- {%- if change.tick %}
5
- tick: {{ change.tick }}
6
- {%- endif %}
7
- {%- if change.type %}
8
- type: {{ change.type }}
9
- {%- endif %}
10
- {%- if change.parts.size > 0 %}
11
- {%- if change.parts.size == 1 %}
1
+ {%- assign change = include.change %}
2
+ {%- assign config = include.config %}
3
+ - chid: {{ change.chid }}
4
+ {%- if change.tick %}
5
+ tick: {{ change.tick }}
6
+ {%- endif %}
7
+ {%- if change.type %}
8
+ type: {{ change.type }}
9
+ {%- endif %}
10
+ {%- if change.parts.size > 0 %}
11
+ {%- if change.parts.size == 1 %}
12
12
  part: {{ change.parts[0] }}
13
- {%- else %}
13
+ {%- else %}
14
14
  parts:
15
- {%- for part in change.parts %}
15
+ {%- for part in change.parts %}
16
16
  - {{ part }}
17
- {%- endfor %}
18
- {%- endif %}
19
- {%- endif %}
20
- {%- if change.hash %}
21
- hash: {{ change.hash }}
22
- {%- endif %}
23
- summ: {{ change.summ }}
24
- {%- if change.head %}
25
- head: {{ change.head }}
26
- {%- endif %}
27
- {%- if change.note and change.note.strip != "" %}
28
- note: |
29
- {{ change.note | indent: 6 }}
30
- {%- endif %}
31
- {%- if change.tags.size > 0 %}
32
- tags:
33
- {%- for tag in change.tags %}
34
- - {{ tag }}
35
17
  {%- endfor %}
36
- {%- endif %}
37
- {%- if change.lead %}
38
- lead: {{ change.lead }}
39
- {%- endif %}
18
+ {%- endif %}
19
+ {%- endif %}
20
+ {%- if change.hash %}
21
+ hash: {{ change.hash }}
22
+ {%- endif %}
23
+ summ: |
24
+ {{ change.summ }}
25
+ {%- if change.head %}
26
+ head: {{ change.head }}
27
+ {%- endif %}
28
+ {%- if change.note and change.note.strip != '' %}
29
+ note: |
30
+ {{ _note | indent: 6 }}
31
+ {%- endif %}
32
+ {%- if change.tags.size > 0 %}
33
+ tags:
34
+ {%- for tag in change.tags %}
35
+ - {{ tag }}
36
+ {%- endfor %}
37
+ {%- endif %}
38
+ {%- if change.lead %}
39
+ lead: {{ change.lead }}
40
+ {%- endif %}
@@ -0,0 +1,103 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="description" content="Release history and changelog">
7
+ {% assign title = config.history.head | default: 'Release History' | escape %}
8
+ <title>{{ title }}</title>
9
+
10
+ {%- assign styling_mode = config.history.styling.mode | default: 'framework' %}
11
+ {%- assign css_url = config.history.styling.css_url %}
12
+ {%- assign embed_css = config.history.styling.embed_css | default: false %}
13
+ {%- assign theme = config.history.styling.theme | default: 'default' %}
14
+
15
+ {%- if styling_mode == 'external' and css_url %}
16
+ <link rel="stylesheet" href="{{ css_url }}">
17
+ {%- elsif styling_mode == 'framework' or styling_mode == 'embedded' %}
18
+ {%- if framework == 'bootstrap' %}
19
+ {%- case framework_version %}
20
+ {%- when '5.3.0' %}
21
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
22
+ {%- when '4.6.2' %}
23
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" rel="stylesheet">
24
+ {%- else %}
25
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@{{ framework_version }}/dist/css/bootstrap.min.css" rel="stylesheet">
26
+ {%- endcase %}
27
+ {%- endif %}
28
+
29
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
30
+
31
+ {%- comment %}Load Bootstrap overrides (can be customized in _templates/bootstrap-overrides.css){%- endcomment %}
32
+ <style>
33
+ {% embed bootstrap-overrides.css %}
34
+ </style>
35
+ {%- endif %}
36
+
37
+ {%- if styling_mode == 'embedded' or embed_css %}
38
+ <style>
39
+ {% embed embedded.css.liquid %}
40
+ </style>
41
+ {%- elsif styling_mode == 'minimal' %}
42
+ <style>
43
+ /* Minimal Styling Mode */
44
+ body {
45
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
46
+ line-height: 1.6;
47
+ max-width: 1000px;
48
+ margin: 0 auto;
49
+ padding: 2rem;
50
+ }
51
+
52
+ .release-section {
53
+ margin-bottom: 3rem;
54
+ }
55
+
56
+ .changelog-section, .notes-section {
57
+ margin-bottom: 2rem;
58
+ padding-left: 1rem;
59
+ border-left: 3px solid #ccc;
60
+ }
61
+
62
+ .release-note {
63
+ margin-bottom: 1.5rem;
64
+ padding: 1rem;
65
+ border: 1px solid #eee;
66
+ }
67
+
68
+ .change-entry {
69
+ margin-bottom: 0.75rem;
70
+ padding: 0.5rem 0;
71
+ border-bottom: 1px solid #f0f0f0;
72
+ }
73
+ </style>
74
+ {%- endif %}
75
+ </head>
76
+ <body>
77
+ <div class="container-lg py-5">
78
+ <article class="release-history">
79
+ {{ content }}
80
+ </article>
81
+ </div>
82
+ {%- if framework == 'bootstrap' %}
83
+ {%- case framework_version %}
84
+ {%- when '5.3.0' %}
85
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
86
+ <script>
87
+ // Auto-detect and apply Bootstrap 5 dark mode
88
+ if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
89
+ document.documentElement.setAttribute('data-bs-theme', 'dark');
90
+ }
91
+ // Listen for system theme changes
92
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {
93
+ document.documentElement.setAttribute('data-bs-theme', e.matches ? 'dark' : 'light');
94
+ });
95
+ </script>
96
+ {%- when '4.6.2' %}
97
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
98
+ {%- else %}
99
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@{{ framework_version }}/dist/js/bootstrap.bundle.min.js"></script>
100
+ {%- endcase %}
101
+ {%- endif %}
102
+ </body>
103
+ </html>
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../schemagraphy/templating'
4
-
5
3
  module ReleaseHx
6
4
  module SgymlHelpers
7
5
  # Precompiles a schema into a set of templates, using the provided data and schema.
@@ -135,7 +135,7 @@ module ReleaseHx
135
135
  end
136
136
 
137
137
  # Converts a list (bullet or ordered)
138
- def self.convert_list node, excluded, depth, unordered: true
138
+ def self.convert_list node, excluded, depth, unordered: true # rubocop:disable Lint/UnusedMethodArgument
139
139
  content = node['content'] || []
140
140
  items = content.map { |item| convert_node(item, excluded, depth + 1) }
141
141
  "#{items.join}\n"
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../sourcerer'
4
-
5
3
  module ReleaseHx
6
4
  VERSION = ReleaseHx::ATTRIBUTES[:globals]['this_prod_vrsn']
7
5
  end
data/lib/releasehx.rb CHANGED
@@ -4,8 +4,8 @@ require 'thor'
4
4
  require 'logger'
5
5
  require 'liquid'
6
6
  require 'yaml'
7
- require_relative 'sourcerer'
8
- require_relative 'schemagraphy'
7
+ require 'schemagraphy'
8
+ require 'asciisourcerer'
9
9
  begin
10
10
  require_relative 'releasehx/generated'
11
11
  rescue LoadError