mkdocstrings-github 0.5.0__py3-none-any.whl → 0.6.0__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mkdocstrings-github
3
- Version: 0.5.0
3
+ Version: 0.6.0
4
4
  Summary: A GitHub Action handler for mkdocstrings
5
5
  Author-email: Mark Hu <watermarkhu@gmail.com>
6
6
  License: MIT
@@ -21,9 +21,9 @@ Classifier: Topic :: Software Development :: Documentation
21
21
  Classifier: Topic :: Utilities
22
22
  Classifier: Typing :: Typed
23
23
  Requires-Python: <3.15,>=3.10
24
- Requires-Dist: gitpython~=3.1.45
25
- Requires-Dist: mkdocstrings~=0.29
26
- Requires-Dist: packaging~=25.0
24
+ Requires-Dist: gitpython<4,>=3.1.45
25
+ Requires-Dist: mkdocstrings<1,>=0.29
26
+ Requires-Dist: ruamel-yaml<1,>=0.18.16
27
27
  Requires-Dist: typing-extensions>=4.0; python_version < '3.11'
28
28
  Description-Content-Type: text/markdown
29
29
 
@@ -83,5 +83,6 @@ after which the generated documentation can be inserted in the markdown page wit
83
83
  - 🧩 **Individual Parameter Hyperlinks**: Each action or workflow parameter—including inputs, outputs, and secrets—receives a unique HTML id, facilitating direct linking to specific parameter documentation.
84
84
  - 🔒 **Automated Permission Aggregation**: For reusable workflows, if permissions are specified at the job level rather than the workflow level, the required final permissions are automatically determined and displayed in the signature.
85
85
  - 🔗 **Parameter cross-linking**: Link to other parameters of the action or workflow via a simple Markdown syntax.
86
+ - 🧑‍🤝‍🧑 **Parameter grouping**: Organize related inputs, outputs, and secrets into visual groups using inline YAML comments for clearer documentation structure.
86
87
 
87
88
  <!-- --8<-- [end:footer] -->
@@ -0,0 +1,18 @@
1
+ mkdocstrings_handlers/github/__init__.py,sha256=0WdFUIq4Xu2ZFtlZNIYCQSoqcx3Ot9Wv41_X_dwbFww,248
2
+ mkdocstrings_handlers/github/config.py,sha256=r7efiI-vKbVEeD6utrc55h4RP6VIlabqDebhiIIx_ZA,7120
3
+ mkdocstrings_handlers/github/handler.py,sha256=SQcd08VA3g4f3Fof2mam85ahPLiK99TteAJJpUg-iB4,8489
4
+ mkdocstrings_handlers/github/objects.py,sha256=v1GchB9fzqasnXbVEOXoDzOR2iVTwcfPQ9mFT4sdjgs,7625
5
+ mkdocstrings_handlers/github/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ mkdocstrings_handlers/github/rendering.py,sha256=pFk621Fqp_R6ZS2dJ0zwEEez0Urqpekial6kqKYDag8,3371
7
+ mkdocstrings_handlers/github/templates/material/_macros.html.jinja,sha256=1TNUgoOIxm-a1S7eiESrW1fYuzXOjrwFqXQSyA4tkkU,1576
8
+ mkdocstrings_handlers/github/templates/material/action.html.jinja,sha256=C7S8I9bjnrEUahyDB7CkFxtakFrr53KE3t3uyczBPzc,2864
9
+ mkdocstrings_handlers/github/templates/material/heading.html.jinja,sha256=wnvZpNED8Dhb935qnddeDExXN-MIUz8frRRfgq-A9VA,1396
10
+ mkdocstrings_handlers/github/templates/material/inputs.html.jinja,sha256=UE8RmfMlF6np7CP-920CwgkbXIcKNgl9KgK1BJ588GM,3271
11
+ mkdocstrings_handlers/github/templates/material/outputs.html.jinja,sha256=Z9QD1KSALLDS9VEyugWG1BHpLCHTKYEx4TEQkKIoC3M,2693
12
+ mkdocstrings_handlers/github/templates/material/secrets.html.jinja,sha256=jQ_HaG2ivbZTH74pyV4BAFGQu5Vn03kA_vaEbTSABds,2839
13
+ mkdocstrings_handlers/github/templates/material/style.css,sha256=Nfmds-xHtPJ_IzOv5svA7ih5talHDTiQryN_n0DGdZs,1553
14
+ mkdocstrings_handlers/github/templates/material/workflow.html.jinja,sha256=5dLdHRSQyulyFAVCVZAR_pkw-WXxCtM20cj6RS7IH1Q,4206
15
+ mkdocstrings_github-0.6.0.dist-info/METADATA,sha256=LMnLdluKYLRVWGSbmh30zSZ7TjfA5oCtYzhEgxN8RP4,4055
16
+ mkdocstrings_github-0.6.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
+ mkdocstrings_github-0.6.0.dist-info/licenses/LICENSE,sha256=5enZtJ4zSp0Ps3jTqFQ4kadcx62BhgTaDNPrXWb3g3E,1069
18
+ mkdocstrings_github-0.6.0.dist-info/RECORD,,
@@ -2,7 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import re
6
5
  import sys
7
6
  from typing import Literal
8
7
 
@@ -99,7 +98,6 @@ class GitHubOptions(BaseModel):
99
98
  By default, the repository is inferred from the current git repository using the default origin remote.
100
99
  If it cannot be inferred, it must be set manually.
101
100
  """,
102
- pattern=re.compile(r"^[\w.-]+/[\w.-]+$"),
103
101
  )
104
102
 
105
103
  signature_show_secrets: bool = Field(
@@ -172,6 +170,32 @@ class GitHubOptions(BaseModel):
172
170
  """,
173
171
  )
174
172
 
173
+ parameters_groups: bool = Field(
174
+ default=True,
175
+ description="""Whether to group parameters by their group in the documentation.
176
+
177
+ This is done by adding a comment `# group: <group name>` directly after the parameter definition in the action/workflow file.
178
+ This can be done for inputs, outputs and secrets. E.g.:
179
+
180
+ ```yaml
181
+ inputs:
182
+ my_input: # group: Example Group
183
+ description: "An example input"
184
+ required: true
185
+ ```
186
+
187
+ This has no effect if there are no groups defined for any parameter.
188
+ """,
189
+ )
190
+
191
+ parameters_group_title_row: bool = Field(
192
+ default=True,
193
+ description="""Whether to add a title row for each parameter group in the documentation.
194
+ This only has an effect if [`parameters_groups`][mkdocstrings_handlers.github.config.GitHubOptions.parameters_groups] is set to `true`,
195
+ and if the [`parameters_section_style`][mkdocstrings_handlers.github.config.GitHubOptions.parameters_section_style] is set to `table`.
196
+ """,
197
+ )
198
+
175
199
  parameters_anchors: bool = Field(
176
200
  default=True,
177
201
  description="Whether to add anchors to parameters in the documentation.",
@@ -170,6 +170,7 @@ class GitHubHandler(BaseHandler):
170
170
  self.env.filters["format_action_signature"] = rendering.format_action_signature
171
171
  self.env.filters["order_parameters"] = rendering.order_parameters
172
172
  self.env.filters["filter_parameters"] = rendering.filter_parameters
173
+ self.env.filters["group_parameters"] = rendering.group_parameters
173
174
  self.env.filters["anchor_id"] = rendering.anchor_id
174
175
  self.env.filters["as_string"] = rendering.as_string
175
176
  self.env.globals["semver_tag"] = self.semver
@@ -1,10 +1,28 @@
1
- from collections import OrderedDict
1
+ import re
2
2
  from dataclasses import dataclass, field
3
3
  from enum import Enum
4
4
  from os import PathLike
5
5
  from typing import Any, Literal, Optional
6
6
 
7
- import yaml
7
+ from ruamel.yaml import YAML
8
+ from ruamel.yaml.comments import CommentedMap
9
+
10
+ yaml = YAML()
11
+
12
+
13
+ GROUP_PATTERN = r"#\s*group:\s*(.+)$"
14
+
15
+
16
+ def group_from_map(map: CommentedMap) -> str:
17
+ """Extract group string from a comment line if it matches the group pattern."""
18
+ if map.ca.comment:
19
+ for comment in map.ca.comment:
20
+ if comment is not None:
21
+ group_matches = re.finditer(GROUP_PATTERN, comment.value)
22
+ group_string = next((m.group(1).strip() for m in group_matches), "")
23
+ if group_string:
24
+ return group_string
25
+ return ""
8
26
 
9
27
 
10
28
  @dataclass
@@ -15,28 +33,15 @@ class Input:
15
33
  type: Literal["boolean", "number", "string"] = "string"
16
34
  default: bool | float | int | str | None = None
17
35
  deprecationMessage: Optional[str] = None
18
-
19
- @staticmethod
20
- def from_data(
21
- name: str,
22
- description: str = "",
23
- required: bool = False,
24
- type: Literal["boolean", "number", "string"] = "string",
25
- default: bool | float | int | str | None = None,
26
- deprecationMessage: Optional[str] = None,
27
- **kwargs,
28
- ) -> "Input":
29
- return Input(name, description, required, type, default, deprecationMessage)
36
+ group: str = ""
30
37
 
31
38
 
32
39
  @dataclass
33
40
  class Output:
34
41
  name: str
35
42
  description: str = ""
36
-
37
- @staticmethod
38
- def from_data(name: str, description: str = "", **kwargs) -> "Output":
39
- return Output(name, description)
43
+ value: str = ""
44
+ group: str = ""
40
45
 
41
46
 
42
47
  @dataclass
@@ -44,10 +49,7 @@ class Secret:
44
49
  name: str
45
50
  description: str = ""
46
51
  required: bool = False
47
-
48
- @staticmethod
49
- def from_data(name: str, description: str = "", required: bool = False, **kwargs) -> "Secret":
50
- return Secret(name, description, required)
52
+ group: str = ""
51
53
 
52
54
 
53
55
  def _get_member(d: dict, key: str, error_message: str = "", default: Any = None) -> Any:
@@ -58,36 +60,11 @@ def _get_member(d: dict, key: str, error_message: str = "", default: Any = None)
58
60
  return d[key]
59
61
 
60
62
 
61
- class _OrderedLoader(yaml.Loader):
62
- pass
63
-
64
-
65
- # Remove boolean resolver for "on", "off", "yes", "no" (and case variants)
66
- for ch in "yYnNoO":
67
- if ch in _OrderedLoader.yaml_implicit_resolvers:
68
- _OrderedLoader.yaml_implicit_resolvers[ch] = [
69
- res
70
- for res in _OrderedLoader.yaml_implicit_resolvers[ch]
71
- if res[0] != "tag:yaml.org,2002:bool"
72
- ]
73
-
74
-
75
- def _construct_mapping(loader, node):
76
- loader.flatten_mapping(node)
77
- return OrderedDict(loader.construct_pairs(node))
78
-
79
-
80
- _OrderedLoader.add_constructor(
81
- yaml.SafeLoader.DEFAULT_MAPPING_TAG,
82
- _construct_mapping,
83
- )
84
-
85
-
86
63
  def _read_file(file: PathLike) -> tuple[str, dict]:
87
64
  with open(file, "r", encoding="utf-8") as f:
88
65
  source = f.read()
89
66
  f.seek(0)
90
- data = yaml.load(f, Loader=_OrderedLoader)
67
+ data = yaml.load(f)
91
68
  return source, data
92
69
 
93
70
 
@@ -121,9 +98,9 @@ class Action:
121
98
  branding=_get_member(data, "branding", default={}),
122
99
  )
123
100
  for key, value in data.get("inputs", {}).items():
124
- action.inputs.append(Input.from_data(key, **value))
101
+ action.inputs.append(Input(name=key, **value, group=group_from_map(value)))
125
102
  for key, value in data.get("outputs", {}).items():
126
- action.outputs.append(Output.from_data(key, **value))
103
+ action.outputs.append(Output(name=key, **value, group=group_from_map(value)))
127
104
  return action
128
105
 
129
106
 
@@ -218,11 +195,11 @@ class Workflow:
218
195
  call = data["on"]["workflow_call"]
219
196
  if call:
220
197
  for key, value in call.get("inputs", {}).items():
221
- workflow.inputs.append(Input.from_data(key, **value))
198
+ workflow.inputs.append(Input(name=key, **value, group=group_from_map(value)))
222
199
  for key, value in call.get("outputs", {}).items():
223
- workflow.outputs.append(Output.from_data(key, **value))
200
+ workflow.outputs.append(Output(name=key, **value, group=group_from_map(value)))
224
201
  for key, value in call.get("secrets", {}).items():
225
- workflow.secrets.append(Secret.from_data(key, **value))
202
+ workflow.secrets.append(Secret(name=key, **value, group=group_from_map(value)))
226
203
 
227
204
  def set_all_permissions(level: str):
228
205
  if level == "read-all":
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import os
4
+ from collections import OrderedDict
4
5
  from typing import TYPE_CHECKING, Sequence
5
6
 
6
7
  from jinja2 import pass_context
@@ -40,6 +41,22 @@ def format_action_signature(context: Context, id: str, repo: str, options: GitHu
40
41
  return f"{name}@{version}"
41
42
 
42
43
 
44
+ def group_parameters(
45
+ parameters: Sequence[Input | Output | Secret],
46
+ do_group: bool,
47
+ ) -> OrderedDict[str, list[Input | Output | Secret]]:
48
+ grouped: OrderedDict[str, list[Input | Output | Secret]] = OrderedDict()
49
+ if not do_group:
50
+ grouped[""] = list(parameters)
51
+ return grouped
52
+ for parameter in parameters:
53
+ group = getattr(parameter, "group", "")
54
+ if group not in grouped:
55
+ grouped[group] = []
56
+ grouped[group].append(parameter)
57
+ return grouped
58
+
59
+
43
60
  def order_parameters(
44
61
  parameters: Sequence[Input | Output | Secret], parameters_order: PARAMETERS_ORDER
45
62
  ):
@@ -0,0 +1,38 @@
1
+ {#- Shared macros for rendering parameters in different styles -#}
2
+
3
+ {#- Macro to render a single parameter item in list style -#}
4
+ {% macro render_parameter_item(item, item_type, options, data) %}
5
+ {% set anchor_id = item.name | anchor_id(item_type, data.id) %}
6
+ <li class="doc-section-item field-body">
7
+ <b><code>{{ item.name }}</code></b>
8
+ {%- if item.required is defined and item.required %} - <em>required</em>{% endif %}
9
+ {% if options.parameters_anchors %}
10
+ <a class="headerlink" href="#{{ anchor_id }}" title="Link to {{ item.name }}">¤</a>
11
+ {% endif %}
12
+ <div class="doc-md-description">
13
+ {{ item.description | convert_markdown(options.heading_level, data.id) }}
14
+ </div>
15
+ {% if item.default is defined and item.default is not none %}
16
+ <div class="doc-md-description">
17
+ <code>{{ item.default | as_string }}</code>
18
+ </div>
19
+ {% endif %}
20
+ </li>
21
+ {% endmacro %}
22
+
23
+ {#- Macro to render grouped parameters in list style -#}
24
+ {% macro render_grouped_list(items, item_type, options, data) %}
25
+ {% set grouped_items = items | group_parameters(options.parameters_groups) %}
26
+ {% for group, group_items in grouped_items.items() %}
27
+ {% if group %}
28
+ <li class="gh-group-item">
29
+ <em>{{ group }}:</em>
30
+ <ul>
31
+ {% for item in group_items %}{{ render_parameter_item(item, item_type, options, data) }}{% endfor %}
32
+ </ul>
33
+ </li>
34
+ {% else %}
35
+ {% for item in group_items %}{{ render_parameter_item(item, item_type, options, data) }}{% endfor %}
36
+ {% endif %}
37
+ {% endfor %}
38
+ {% endmacro %}
@@ -7,6 +7,8 @@ Context:
7
7
  options (dict): The local options
8
8
  -#}
9
9
 
10
+ {% from "_macros.html.jinja" import render_grouped_list %}
11
+
10
12
  {% block logs scoped %}
11
13
  {{ log.debug("Rendering inputs of " + data.id) }}
12
14
  {% endblock logs %}
@@ -27,7 +29,7 @@ Context:
27
29
  <span class="doc-section-title">Inputs:</span>
28
30
  <a class="headerlink" href="#{{ header_id }}" title="Link to {{ data.name }} outputs">¤</a>
29
31
  </p>
30
- <table>
32
+ <table data-gh-parameters>
31
33
  <thead>
32
34
  <tr>
33
35
  <th>Name</th>
@@ -35,8 +37,15 @@ Context:
35
37
  {% if default_column %}<th>Default</th>{% endif %}
36
38
  </tr>
37
39
  </thead>
40
+ {% set grouped_inputs = inputs | group_parameters(options.parameters_groups) %}
41
+ {% for group, group_inputs in grouped_inputs.items() %}
38
42
  <tbody>
39
- {% for input in inputs %}
43
+ {% if options.parameters_group_title_row and grouped_inputs | length > 1 and group != "" %}
44
+ <tr class="doc-section-item">
45
+ <td class="gh-group-title" colspan="{% if default_column %}3{% else %}2{% endif %}">{{ group }}</td>
46
+ </tr>
47
+ {% endif %}
48
+ {% for input in group_inputs %}
40
49
  {% if options.parameters_anchors %}
41
50
  {% set anchor_id = input.name | anchor_id("inputs", data.id) %}
42
51
  {% else %}
@@ -66,6 +75,7 @@ Context:
66
75
  </tr>
67
76
  {% endfor %}
68
77
  </tbody>
78
+ {% endfor %}
69
79
  </table>
70
80
  {% endblock table_style %}
71
81
  {% elif options.parameters_section_style == "list" %}
@@ -75,24 +85,7 @@ Context:
75
85
  <a class="headerlink" href="#{{ header_id }}" title="Link to {{ data.name }} outputs">¤</a>
76
86
  </p>
77
87
  <ul>
78
- {% for input in inputs %}
79
- {% set anchor_id = input.name | anchor_id("inputs", data.id) %}
80
- <li class="doc-section-item field-body">
81
- <b><code>{{ input.name }}</code></b>
82
- {%- if input.required %} - <em>required</em>{% endif %}
83
- {% if options.parameters_anchors %}
84
- <a class="headerlink" href="#{{ anchor_id }}" title="Link to {{ input.name }}">¤</a>
85
- {% endif %}
86
- <div class="doc-md-description">
87
- {{ input.description | convert_markdown(options.heading_level, data.id) }}
88
- </div>
89
- {% if input.default is not none %}
90
- <div class="doc-md-description">
91
- Default: <code>{{ input.default | as_string }}</code>
92
- </div>
93
- {% endif %}
94
- </li>
95
- {% endfor %}
88
+ {{ render_grouped_list(inputs, "inputs", options, data) }}
96
89
  </ul>
97
90
  {% endblock list_style %}
98
91
  {% endif %}
@@ -7,6 +7,8 @@ Context:
7
7
  options (dict): The local options
8
8
  -#}
9
9
 
10
+ {% from "_macros.html.jinja" import render_grouped_list %}
11
+
10
12
  {% block logs scoped %}
11
13
  {{ log.debug("Rendering outputs of " + data.id) }}
12
14
  {% endblock logs %}
@@ -24,15 +26,22 @@ Context:
24
26
  <span class="doc-section-title">Outputs:</span>
25
27
  <a class="headerlink" href="#{{ header_id }}" title="Link to {{ data.name }} outputs">¤</a>
26
28
  </p>
27
- <table>
29
+ <table data-gh-parameters>
28
30
  <thead>
29
31
  <tr>
30
32
  <th>Name</th>
31
33
  <th>Description</th>
32
34
  </tr>
33
35
  </thead>
36
+ {% set grouped_outputs = outputs | group_parameters(options.parameters_groups) %}
37
+ {% for group, group_outputs in grouped_outputs.items() %}
34
38
  <tbody>
35
- {% for output in outputs %}
39
+ {% if options.parameters_group_title_row and grouped_outputs | length > 1 and group != "" %}
40
+ <tr class="doc-section-item">
41
+ <td class="gh-group-title" colspan="2">{{ group }}</td>
42
+ </tr>
43
+ {% endif %}
44
+ {% for output in group_outputs %}
36
45
  {% if options.parameters_anchors %}
37
46
  {% set anchor_id = output.name | anchor_id("outputs", data.id) %}
38
47
  {% else %}
@@ -48,8 +57,10 @@ Context:
48
57
  <td>
49
58
  {{ output.description | convert_markdown(options.heading_level, data.id) }}
50
59
  </td>
60
+ </tr>
51
61
  {% endfor %}
52
62
  </tbody>
63
+ {% endfor %}
53
64
  </table>
54
65
  {% endblock table_style %}
55
66
  {% elif options.parameters_section_style == "list" %}
@@ -59,18 +70,7 @@ Context:
59
70
  <a class="headerlink" href="#{{ header_id }}" title="Link to {{ data.name }} outputs">¤</a>
60
71
  </p>
61
72
  <ul>
62
- {% for output in outputs %}
63
- {% set anchor_id = output.name | anchor_id("outputs", data.id) %}
64
- <li class="doc-section-item field-body">
65
- <b><code>{{ output.name }}</code></b>
66
- {% if options.parameters_anchors %}
67
- <a class="headerlink" href="#{{ anchor_id }}" title="Link to {{ output.name }}">¤</a>
68
- {% endif %}
69
- <div class="doc-md-description">
70
- {{ output.description | convert_markdown(options.heading_level, data.id) }}
71
- </div>
72
- </li>
73
- {% endfor %}
73
+ {{ render_grouped_list(outputs, "outputs", options, data) }}
74
74
  </ul>
75
75
  {% endblock list_style %}
76
76
  {% endif %}
@@ -7,6 +7,8 @@ Context:
7
7
  options (dict): The local options
8
8
  -#}
9
9
 
10
+ {% from "_macros.html.jinja" import render_grouped_list %}
11
+
10
12
  {% block logs scoped %}
11
13
  {{ log.debug("Rendering secrets of " + data.id) }}
12
14
  {% endblock logs %}
@@ -24,15 +26,22 @@ Context:
24
26
  <span class="doc-section-title">Secrets:</span>
25
27
  <a class="headerlink" href="#{{ header_id }}" title="Link to {{ data.name }} outputs">¤</a>
26
28
  </p>
27
- <table>
29
+ <table data-gh-parameters>
28
30
  <thead>
29
31
  <tr>
30
32
  <th>Name</th>
31
33
  <th>Description</th>
32
34
  </tr>
33
35
  </thead>
36
+ {% set grouped_secrets = secrets | group_parameters(options.parameters_groups) %}
37
+ {% for group, group_secrets in grouped_secrets.items() %}
34
38
  <tbody>
35
- {% for secret in secrets %}
39
+ {% if options.parameters_group_title_row and grouped_secrets | length > 1 and group != "" %}
40
+ <tr class="doc-section-item">
41
+ <td class="gh-group-title" colspan="2">{{ group }}</td>
42
+ </tr>
43
+ {% endif %}
44
+ {% for secret in group_secrets %}
36
45
  {% if options.parameters_anchors %}
37
46
  {% set anchor_id = secret.name | anchor_id("secrets", data.id) %}
38
47
  {% else %}
@@ -52,8 +61,10 @@ Context:
52
61
  <td>
53
62
  {{ secret.description | convert_markdown(options.heading_level, data.id) }}
54
63
  </td>
64
+ </tr>
55
65
  {% endfor %}
56
66
  </tbody>
67
+ {% endfor %}
57
68
  </table>
58
69
  {% endblock table_style %}
59
70
  {% elif options.parameters_section_style == "list" %}
@@ -63,19 +74,7 @@ Context:
63
74
  <a class="headerlink" href="#{{ header_id }}" title="Link to {{ data.name }} outputs">¤</a>
64
75
  </p>
65
76
  <ul>
66
- {% for secret in secrets %}
67
- {% set anchor_id = secret.name | anchor_id("secrets", data.id) %}
68
- <li class="doc-section-item field-body">
69
- <b><code>{{ secret.name }}</code></b>
70
- {%- if secret.required %} - <em>required</em>{% endif %}
71
- {% if options.parameters_anchors %}
72
- <a class="headerlink" href="#{{ anchor_id }}" title="Link to {{ secret.name }}">¤</a>
73
- {% endif %}
74
- <div class="doc-md-description">
75
- {{ secret.description | convert_markdown(options.heading_level, data.id) }}
76
- </div>
77
- </li>
78
- {% endfor %}
77
+ {{ render_grouped_list(secrets, "secrets", options, data) }}
79
78
  </ul>
80
79
  {% endblock list_style %}
81
80
  {% endif %}
@@ -57,3 +57,22 @@
57
57
  background-color: #24292e;
58
58
  color: #ffffff;
59
59
  }
60
+
61
+
62
+ /* Add thicker divider between thead and tbody, and between tbody groups */
63
+ table[data-gh-parameters] thead + tbody tr:first-child td,
64
+ table[data-gh-parameters] tbody:not(:first-of-type) tr:first-child td {
65
+ border-top: 2px solid var(--md-default-fg-color--lighter) !important;
66
+ }
67
+
68
+ /* Disable word-wrap in first column (except group titles) */
69
+ table[data-gh-parameters] td:first-child:not(.gh-group-title) {
70
+ white-space: nowrap;
71
+ }
72
+
73
+ /* Style group title rows */
74
+ table[data-gh-parameters] td.gh-group-title {
75
+ text-align: center !important;
76
+ font-style: italic;
77
+ white-space: normal;
78
+ }
@@ -1,17 +0,0 @@
1
- mkdocstrings_handlers/github/__init__.py,sha256=0WdFUIq4Xu2ZFtlZNIYCQSoqcx3Ot9Wv41_X_dwbFww,248
2
- mkdocstrings_handlers/github/config.py,sha256=JrI9HK6g-XwXuKFJegfPOpvw-_ZMG0iipSNnEqU0wcw,6105
3
- mkdocstrings_handlers/github/handler.py,sha256=ShE0EUsWDgonE4LtR3MFPEzCLwvDb2UztrAiXqQs_oc,8415
4
- mkdocstrings_handlers/github/objects.py,sha256=ckMEEoj3pdLasGHzZMwYY7XdjwbUdHRch07dAzgEHs0,8217
5
- mkdocstrings_handlers/github/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- mkdocstrings_handlers/github/rendering.py,sha256=6xcE2WwyTRW_38g7Ek55hlm53EsFFqueazFw12__DyA,2820
7
- mkdocstrings_handlers/github/templates/material/action.html.jinja,sha256=C7S8I9bjnrEUahyDB7CkFxtakFrr53KE3t3uyczBPzc,2864
8
- mkdocstrings_handlers/github/templates/material/heading.html.jinja,sha256=wnvZpNED8Dhb935qnddeDExXN-MIUz8frRRfgq-A9VA,1396
9
- mkdocstrings_handlers/github/templates/material/inputs.html.jinja,sha256=CIcw3OBQdCP4e5A4srLu1v3xoOjsedIw1Zh3qxtG0-A,3482
10
- mkdocstrings_handlers/github/templates/material/outputs.html.jinja,sha256=jlzVF93q5AyJfOiSl3_1VBVL3c6rjmEcS81s3sri5Gg,2670
11
- mkdocstrings_handlers/github/templates/material/secrets.html.jinja,sha256=1lMJoxjjeiqetVu0mdLKmZ1faYRReeyjiYvYTZESots,2881
12
- mkdocstrings_handlers/github/templates/material/style.css,sha256=R2hh1RfHwJ6XNT4YQl_txNkNXcPBZJMCBZn5kQEMQ6M,962
13
- mkdocstrings_handlers/github/templates/material/workflow.html.jinja,sha256=5dLdHRSQyulyFAVCVZAR_pkw-WXxCtM20cj6RS7IH1Q,4206
14
- mkdocstrings_github-0.5.0.dist-info/METADATA,sha256=maSQ6Gbg1xgruSrClF-EHllBLo4fy2q5A30XctacPSw,3867
15
- mkdocstrings_github-0.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- mkdocstrings_github-0.5.0.dist-info/licenses/LICENSE,sha256=5enZtJ4zSp0Ps3jTqFQ4kadcx62BhgTaDNPrXWb3g3E,1069
17
- mkdocstrings_github-0.5.0.dist-info/RECORD,,