gha-utils 4.19.1__py3-none-any.whl → 4.20.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.

Potentially problematic release.


This version of gha-utils might be problematic. Click here for more details.

gha_utils/__init__.py CHANGED
@@ -17,4 +17,4 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = "4.19.1"
20
+ __version__ = "4.20.0"
gha_utils/mailmap.py CHANGED
@@ -128,7 +128,7 @@ class Mailmap:
128
128
 
129
129
  @cached_property
130
130
  def git_contributors(self) -> set[str]:
131
- """Returns the set of all constributors found in the Git commit history.
131
+ """Returns the set of all contributors found in the Git commit history.
132
132
 
133
133
  No normalization happens: all variations of authors and committers strings
134
134
  attached to all commits are considered.
gha_utils/metadata.py CHANGED
@@ -20,6 +20,7 @@ The following variables are `printed to the environment file
20
20
  <https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#environment-files>`_:
21
21
 
22
22
  ```text
23
+ is_bot=false
23
24
  new_commits=346ce664f055fbd042a25ee0b7e96702e95 6f27db47612aaee06fdf08744b09a9f5f6c2
24
25
  release_commits=6f27db47612aaee06fdf08744b09a9f5f6c2
25
26
  gitignore_exists=true
@@ -34,119 +35,233 @@ released_version=2.0.0
34
35
  is_sphinx=true
35
36
  active_autodoc=true
36
37
  release_notes=[🐍 Available on PyPi](https://pypi.org/project/click-extra/2.21.3).
37
- new_commits_matrix={'commit': ['346ce664f055fbd042a25ee0b7e96702e95',
38
- '6f27db47612aaee06fdf08744b09a9f5f6c2'],
39
- 'include': [{'commit': '346ce664f055fbd042a25ee0b7e96702e95',
40
- 'short_sha': '346ce66',
41
- 'current_version': '2.0.1'},
42
- {'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
43
- 'short_sha': '6f27db4',
44
- 'current_version': '2.0.0'}]}
45
- release_commits_matrix={'commit': ['6f27db47612aaee06fdf08744b09a9f5f6c2'],
46
- 'include': [{'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
47
- 'short_sha': '6f27db4',
48
- 'current_version': '2.0.0'}]}
49
- nuitka_matrix={'os': ['ubuntu-24.04-arm', 'ubuntu-24.04', 'macos-15', 'macos-13', 'windows-11-arm', 'windows-2025'],
50
- 'entry_point': ['mpm'],
51
- 'commit': ['346ce664f055fbd042a25ee0b7e96702e95',
52
- '6f27db47612aaee06fdf08744b09a9f5f6c2'],
53
- 'include': [{'target': 'linux-arm64',
54
- 'os': 'ubuntu-24.04-arm',
55
- 'platform_id': 'linux',
56
- 'arch': 'arm64',
57
- 'extension': 'bin'},
58
- {'target': 'linux-x64',
59
- 'os': 'ubuntu-24.04',
60
- 'platform_id': 'linux',
61
- 'arch': 'x64',
62
- 'extension': 'bin'},
63
- {'target': 'macos-arm64',
64
- 'os': 'macos-15',
65
- 'platform_id': 'macos',
66
- 'arch': 'arm64',
67
- 'extension': 'bin'},
68
- {'target': 'macos-x64',
69
- 'os': 'macos-13',
70
- 'platform_id': 'macos',
71
- 'arch': 'x64',
72
- 'extension': 'bin'},
73
- {'target': 'windows-arm64',
74
- 'os': 'windows-11-arm',
75
- 'platform_id": 'windows',
76
- 'arch": 'arm64',
77
- 'extension": 'exe'},
78
- {'target': 'windows-x64',
79
- 'os': 'windows-2025',
80
- 'platform_id': 'windows',
81
- 'arch': 'x64',
82
- 'extension': 'exe'},
83
- {'entry_point': 'mpm',
84
- 'cli_id': 'mpm',
85
- 'module_id': 'meta_package_manager.__main__',
86
- 'callable_id': 'main',
87
- 'module_path': 'meta_package_manager/__main__.py'},
88
- {'commit': '346ce664f055fbd042a25ee0b7e96702e95',
89
- 'short_sha': '346ce66',
90
- 'current_version': '2.0.0'},
91
- {'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
92
- 'short_sha': '6f27db4',
93
- 'current_version': '1.9.1'},
94
- {'os': 'ubuntu-24.04-arm',
95
- 'entry_point': 'mpm',
96
- 'commit': '346ce664f055fbd042a25ee0b7e96702e95',
97
- 'bin_name': 'mpm-linux-arm64-346ce66.bin'},
98
- {'os': 'ubuntu-24.04-arm',
99
- 'entry_point': 'mpm',
100
- 'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
101
- 'bin_name': 'mpm-linux-arm64-6f27db4.bin'},
102
- {'os': 'ubuntu-24.04',
103
- 'entry_point': 'mpm',
104
- 'commit': '346ce664f055fbd042a25ee0b7e96702e95',
105
- 'bin_name': 'mpm-linux-x64-346ce66.bin'},
106
- {'os': 'ubuntu-24.04',
107
- 'entry_point': 'mpm',
108
- 'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
109
- 'bin_name': 'mpm-linux-x64-6f27db4.bin'},
110
- {'os': 'macos-15',
111
- 'entry_point': 'mpm',
112
- 'commit': '346ce664f055fbd042a25ee0b7e96702e95',
113
- 'bin_name': 'mpm-macos-arm64-346ce66.bin'},
114
- {'os': 'macos-15',
115
- 'entry_point': 'mpm',
116
- 'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
117
- 'bin_name': 'mpm-macos-arm64-6f27db4.bin'},
118
- {'os': 'macos-13',
119
- 'entry_point': 'mpm',
120
- 'commit': '346ce664f055fbd042a25ee0b7e96702e95',
121
- 'bin_name': 'mpm-macos-x64-346ce66.bin'},
122
- {'os': 'macos-13',
123
- 'entry_point': 'mpm',
124
- 'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
125
- 'bin_name': 'mpm-macos-x64-6f27db4.bin'},
126
- {'os': 'windows-11-arm',
127
- 'entry_point': 'mpm',
128
- 'commit': '346ce664f055fbd042a25ee0b7e96702e95',
129
- 'bin_name': 'mpm-windows-arm64-346ce66.bin'},
130
- {'os': 'windows-11-arm',
131
- 'entry_point': 'mpm',
132
- 'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
133
- 'bin_name': 'mpm-windows-arm64-6f27db4.bin'},
134
- {'os': 'windows-2025',
135
- 'entry_point': 'mpm',
136
- 'commit': '346ce664f055fbd042a25ee0b7e96702e95',
137
- 'bin_name': 'mpm-windows-x64-346ce66.exe'},
138
- {'os': 'windows-2025',
139
- 'entry_point': 'mpm',
140
- 'commit': '6f27db47612aaee06fdf08744b09a9f5f6c2',
141
- 'bin_name': 'mpm-windows-x64-6f27db4.exe'},
142
- {'state': 'stable'}]}
38
+ new_commits_matrix={
39
+ "commit": [
40
+ "346ce664f055fbd042a25ee0b7e96702e95",
41
+ "6f27db47612aaee06fdf08744b09a9f5f6c2"
42
+ ],
43
+ "include": [
44
+ {
45
+ "commit": "346ce664f055fbd042a25ee0b7e96702e95",
46
+ "short_sha": "346ce66",
47
+ "current_version": "2.0.1"
48
+ },
49
+ {
50
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
51
+ "short_sha": "6f27db4",
52
+ "current_version": "2.0.0"
53
+ }
54
+ ]
55
+ }
56
+ release_commits_matrix={
57
+ "commit": ["6f27db47612aaee06fdf08744b09a9f5f6c2"],
58
+ "include": [
59
+ {
60
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
61
+ "short_sha": "6f27db4",
62
+ "current_version": "2.0.0"
63
+ }
64
+ ]
65
+ }
66
+ build_targets=[
67
+ {
68
+ "target": "linux-arm64",
69
+ "os": "ubuntu-24.04-arm",
70
+ "platform_id": "linux",
71
+ "arch": "arm64",
72
+ "extension": "bin"
73
+ },
74
+ {
75
+ "target": "linux-x64",
76
+ "os": "ubuntu-24.04",
77
+ "platform_id": "linux",
78
+ "arch": "x64",
79
+ "extension": "bin"
80
+ },
81
+ {
82
+ "target": "macos-arm64",
83
+ "os": "macos-15",
84
+ "platform_id": "macos",
85
+ "arch": "arm64",
86
+ "extension": "bin"
87
+ },
88
+ {
89
+ "target": "macos-x64",
90
+ "os": "macos-13",
91
+ "platform_id": "macos",
92
+ "arch": "x64",
93
+ "extension": "bin"
94
+ },
95
+ {
96
+ "target": "windows-arm64",
97
+ "os": "windows-11-arm",
98
+ "platform_id": "windows",
99
+ "arch": "arm64",
100
+ "extension": "exe"
101
+ },
102
+ {
103
+ "target": "windows-x64",
104
+ "os": "windows-2025",
105
+ "platform_id": "windows",
106
+ "arch": "x64",
107
+ "extension": "exe"
108
+ }
109
+ ]
110
+ nuitka_matrix={
111
+ "os": [
112
+ "ubuntu-24.04-arm",
113
+ "ubuntu-24.04",
114
+ "macos-15",
115
+ "macos-13",
116
+ "windows-11-arm",
117
+ "windows-2025"
118
+ ],
119
+ "entry_point": ["mpm"],
120
+ "commit": [
121
+ "346ce664f055fbd042a25ee0b7e96702e95",
122
+ "6f27db47612aaee06fdf08744b09a9f5f6c2"
123
+ ],
124
+ "include": [
125
+ {
126
+ "target": "linux-arm64",
127
+ "os": "ubuntu-24.04-arm",
128
+ "platform_id": "linux",
129
+ "arch": "arm64",
130
+ "extension": "bin"
131
+ },
132
+ {
133
+ "target": "linux-x64",
134
+ "os": "ubuntu-24.04",
135
+ "platform_id": "linux",
136
+ "arch": "x64",
137
+ "extension": "bin"
138
+ },
139
+ {
140
+ "target": "macos-arm64",
141
+ "os": "macos-15",
142
+ "platform_id": "macos",
143
+ "arch": "arm64",
144
+ "extension": "bin"
145
+ },
146
+ {
147
+ "target": "macos-x64",
148
+ "os": "macos-13",
149
+ "platform_id": "macos",
150
+ "arch": "x64",
151
+ "extension": "bin"
152
+ },
153
+ {
154
+ "target": "windows-arm64",
155
+ "os": "windows-11-arm",
156
+ "platform_id": "windows",
157
+ "arch": "arm64",
158
+ "extension": "exe"
159
+ },
160
+ {
161
+ "target": "windows-x64",
162
+ "os": "windows-2025",
163
+ "platform_id": "windows",
164
+ "arch": "x64",
165
+ "extension": "exe"
166
+ },
167
+ {
168
+ "entry_point": "mpm",
169
+ "cli_id": "mpm",
170
+ "module_id": "meta_package_manager.__main__",
171
+ "callable_id": "main",
172
+ "module_path": "meta_package_manager/__main__.py"
173
+ },
174
+ {
175
+ "commit": "346ce664f055fbd042a25ee0b7e96702e95",
176
+ "short_sha": "346ce66",
177
+ "current_version": "2.0.0"
178
+ },
179
+ {
180
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
181
+ "short_sha": "6f27db4",
182
+ "current_version": "1.9.1"
183
+ },
184
+ {
185
+ "os": "ubuntu-24.04-arm",
186
+ "entry_point": "mpm",
187
+ "commit": "346ce664f055fbd042a25ee0b7e96702e95",
188
+ "bin_name": "mpm-linux-arm64-346ce66.bin"
189
+ },
190
+ {
191
+ "os": "ubuntu-24.04-arm",
192
+ "entry_point": "mpm",
193
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
194
+ "bin_name": "mpm-linux-arm64-6f27db4.bin"
195
+ },
196
+ {
197
+ "os": "ubuntu-24.04",
198
+ "entry_point": "mpm",
199
+ "commit": "346ce664f055fbd042a25ee0b7e96702e95",
200
+ "bin_name": "mpm-linux-x64-346ce66.bin"
201
+ },
202
+ {
203
+ "os": "ubuntu-24.04",
204
+ "entry_point": "mpm",
205
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
206
+ "bin_name": "mpm-linux-x64-6f27db4.bin"
207
+ },
208
+ {
209
+ "os": "macos-15",
210
+ "entry_point": "mpm",
211
+ "commit": "346ce664f055fbd042a25ee0b7e96702e95",
212
+ "bin_name": "mpm-macos-arm64-346ce66.bin"
213
+ },
214
+ {
215
+ "os": "macos-15",
216
+ "entry_point": "mpm",
217
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
218
+ "bin_name": "mpm-macos-arm64-6f27db4.bin"
219
+ },
220
+ {
221
+ "os": "macos-13",
222
+ "entry_point": "mpm",
223
+ "commit": "346ce664f055fbd042a25ee0b7e96702e95",
224
+ "bin_name": "mpm-macos-x64-346ce66.bin"
225
+ },
226
+ {
227
+ "os": "macos-13",
228
+ "entry_point": "mpm",
229
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
230
+ "bin_name": "mpm-macos-x64-6f27db4.bin"
231
+ },
232
+ {
233
+ "os": "windows-11-arm",
234
+ "entry_point": "mpm",
235
+ "commit": "346ce664f055fbd042a25ee0b7e96702e95",
236
+ "bin_name": "mpm-windows-arm64-346ce66.bin"
237
+ },
238
+ {
239
+ "os": "windows-11-arm",
240
+ "entry_point": "mpm",
241
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
242
+ "bin_name": "mpm-windows-arm64-6f27db4.bin"
243
+ },
244
+ {
245
+ "os": "windows-2025",
246
+ "entry_point": "mpm",
247
+ "commit": "346ce664f055fbd042a25ee0b7e96702e95",
248
+ "bin_name": "mpm-windows-x64-346ce66.exe"
249
+ },
250
+ {
251
+ "os": "windows-2025",
252
+ "entry_point": "mpm",
253
+ "commit": "6f27db47612aaee06fdf08744b09a9f5f6c2",
254
+ "bin_name": "mpm-windows-x64-6f27db4.exe"
255
+ },
256
+ {"state": "stable"}
257
+ ]
258
+ }
143
259
  ```
144
260
 
145
261
  .. warning::
146
-
147
- The ``new_commits_matrix``, ``release_commits_matrix`` and ``nuitka_matrix``
148
- variables in the block above are pretty-printed for readability. They are not
149
- actually formatted this way in the environment file, but inlined.
262
+ Fields with serialized lists and dictionaries, like ``new_commits_matrix``,
263
+ ``build_targets`` or ``nuitka_matrix``, are pretty-printed in the example above for
264
+ readability. They are inlined in the actual output and not formatted this way.
150
265
  """
151
266
 
152
267
  from __future__ import annotations
@@ -166,13 +281,13 @@ from random import randint
166
281
  from re import escape
167
282
  from typing import Any, Final, cast
168
283
 
169
- import gitignore_parser
170
284
  from bumpversion.config import get_configuration # type: ignore[import-untyped]
171
285
  from bumpversion.config.files import find_config_file # type: ignore[import-untyped]
172
286
  from bumpversion.show import resolve_name # type: ignore[import-untyped]
173
287
  from extra_platforms import is_github_ci
174
288
  from packaging.specifiers import SpecifierSet
175
289
  from packaging.version import Version
290
+ from py_walk import get_parser_from_file
176
291
  from pydriller import Commit, Git, Repository # type: ignore[import-untyped]
177
292
  from pyproject_metadata import ConfigurationError, StandardMetadata
178
293
  from wcmatch.glob import (
@@ -269,6 +384,13 @@ Values are dictionaries with the following keys:
269
384
  """
270
385
 
271
386
 
387
+ FLAT_BUILD_TARGETS = [
388
+ {"target": target_id} | target_data
389
+ for target_id, target_data in NUITKA_BUILD_TARGETS.items()
390
+ ]
391
+ """List of build targets in a flat format, suitable for matrix inclusion."""
392
+
393
+
272
394
  WorkflowEvent = StrEnum(
273
395
  "WorkflowEvent",
274
396
  (
@@ -339,6 +461,7 @@ class TargetVersion(StrEnum):
339
461
  PY311 = "3.11"
340
462
  PY312 = "3.12"
341
463
  PY313 = "3.13"
464
+ PY314 = "3.14"
342
465
 
343
466
 
344
467
  MYPY_VERSION_MIN: Final = (3, 8)
@@ -570,6 +693,31 @@ class Metadata:
570
693
  return WorkflowEvent.pull_request
571
694
  return WorkflowEvent.push
572
695
 
696
+ @cached_property
697
+ def event_actor(self) -> str | None:
698
+ """Returns the GitHub login of the user that triggered the workflow run."""
699
+ return self.github_context.get("actor")
700
+
701
+ @cached_property
702
+ def event_sender_type(self) -> str | None:
703
+ """Returns the type of the user that triggered the workflow run."""
704
+ sender_type = self.github_context.get("event", {}).get("sender", {}).get("type")
705
+ return cast(str | None, sender_type)
706
+
707
+ @cached_property
708
+ def is_bot(self) -> bool:
709
+ """Returns ``True`` if the workflow was triggered by a bot or automated process.
710
+
711
+ This is useful to only run some jobs on human-triggered events. Or skip jobs
712
+ triggered by bots to avoid infinite loops.
713
+ """
714
+ if self.event_sender_type == "Bot" or self.event_actor in (
715
+ "dependabot[bot]",
716
+ "dependabot-preview[bot]",
717
+ ):
718
+ return True
719
+ return False
720
+
573
721
  @cached_property
574
722
  def commit_range(self) -> tuple[str, str] | None:
575
723
  """Range of commits bundled within the triggering event.
@@ -734,7 +882,7 @@ class Metadata:
734
882
  gitignore = None
735
883
  if self.gitignore_exists:
736
884
  logging.debug(f"Load {GITIGNORE_PATH} to filter out ignored files.")
737
- gitignore = gitignore_parser.parse_gitignore(GITIGNORE_PATH)
885
+ gitignore = get_parser_from_file(GITIGNORE_PATH)
738
886
 
739
887
  for file_path in iglob(
740
888
  patterns,
@@ -765,7 +913,7 @@ class Metadata:
765
913
  continue
766
914
 
767
915
  # Skip files that are ignored by .gitignore.
768
- if gitignore and gitignore(file_path):
916
+ if gitignore and gitignore.match(file_path):
769
917
  logging.debug(f"Skip file matching {GITIGNORE_PATH}: {file_path}")
770
918
  continue
771
919
 
@@ -775,12 +923,33 @@ class Metadata:
775
923
  @cached_property
776
924
  def python_files(self) -> list[Path]:
777
925
  """Returns a list of python files."""
778
- return self.glob_files("**/*.py", "!.venv/**")
926
+ return self.glob_files("**/*.{py,pyi,pyw,pyx,ipynb}")
927
+
928
+ @cached_property
929
+ def json_files(self) -> list[Path]:
930
+ """Returns a list of JSON files."""
931
+ return self.glob_files(
932
+ "**/*.{json,jsonc,json5}",
933
+ "**/.code-workspace",
934
+ "!**/package-lock.json",
935
+ )
779
936
 
780
937
  @cached_property
781
938
  def doc_files(self) -> list[Path]:
782
939
  """Returns a list of doc files."""
783
- return self.glob_files("**/*.{md,markdown,rst,tex}", "!.venv/**")
940
+ return self.glob_files(
941
+ "**/*.{markdown,mdown,mkdn,mdwn,mkd,md,mdtxt,mdtext,rst,tex}"
942
+ )
943
+
944
+ @cached_property
945
+ def markdown_files(self) -> list[Path]:
946
+ """Returns a list of Markdown files."""
947
+ return self.glob_files("**/*.{markdown,mdown,mkdn,mdwn,mkd,md,mdtxt,mdtext}")
948
+
949
+ @cached_property
950
+ def zsh_files(self) -> list[Path]:
951
+ """Returns a list of Zsh files."""
952
+ return self.glob_files("**/*.{sh,zsh}", "**/.{zshrc,zprofile,zshenv,zlogin}")
784
953
 
785
954
  @cached_property
786
955
  def is_python_project(self):
@@ -1186,8 +1355,8 @@ class Metadata:
1186
1355
  "os", tuple(map(itemgetter("os"), NUITKA_BUILD_TARGETS.values()))
1187
1356
  )
1188
1357
  # Augment each "os" entry with platform-specific data.
1189
- for target_id, target_data in NUITKA_BUILD_TARGETS.items():
1190
- matrix.add_includes({"target": target_id} | target_data)
1358
+ for target_data in FLAT_BUILD_TARGETS:
1359
+ matrix.add_includes(target_data)
1191
1360
 
1192
1361
  # Augment each entry point with some metadata.
1193
1362
  for cli_id, module_id, callable_id in self.script_entries:
@@ -1289,9 +1458,9 @@ class Metadata:
1289
1458
  - `None` into empty string
1290
1459
  - `bool` into lower-cased string
1291
1460
  - `Matrix` into JSON string
1292
- - `Iterable` of strings into a serialized space-separated string
1293
- - `Iterable` of `Path` into a serialized string whose items are space-separated
1294
- and double-quoted
1461
+ - `Iterable` of mixed strings and `Path` into a serialized space-separated
1462
+ string, where `Path` items are double-quoted
1463
+ - other `Iterable` into a JSON string
1295
1464
  """
1296
1465
  # Structured metadata to be rendered as JSON.
1297
1466
  if isinstance(value, Matrix):
@@ -1309,9 +1478,26 @@ class Metadata:
1309
1478
  raise NotImplementedError
1310
1479
 
1311
1480
  elif isinstance(value, Iterable):
1312
- # Cast all items to string, wrapping Path items with double-quotes.
1313
- items = ((f'"{i}"' if isinstance(i, Path) else str(i)) for i in value)
1314
- value = " ".join(items)
1481
+ # Cast all items to strings, wrapping Path items with double-quotes.
1482
+ if all(isinstance(i, (str, Path)) for i in value):
1483
+ items = (
1484
+ (f'"{i}"' if isinstance(i, Path) else str(i)) for i in value
1485
+ )
1486
+ value = " ".join(items)
1487
+ # XXX We only support iterables of dict[str, str] for now.
1488
+ else:
1489
+ assert all(
1490
+ isinstance(i, dict)
1491
+ and all(
1492
+ isinstance(k, str) and isinstance(v, str)
1493
+ for k, v in i.items()
1494
+ )
1495
+ for i in value
1496
+ ), f"Unsupported iterable value: {value!r}"
1497
+ value = json.dumps(value)
1498
+
1499
+ else:
1500
+ raise NotImplementedError(f"GitHub formatting for: {value!r}")
1315
1501
 
1316
1502
  return cast(str, value)
1317
1503
 
@@ -1321,11 +1507,15 @@ class Metadata:
1321
1507
  Defaults to GitHub dialect.
1322
1508
  """
1323
1509
  metadata: dict[str, Any] = {
1510
+ "is_bot": self.is_bot,
1324
1511
  "new_commits": self.new_commits_hash,
1325
1512
  "release_commits": self.release_commits_hash,
1326
1513
  "gitignore_exists": self.gitignore_exists,
1327
1514
  "python_files": self.python_files,
1515
+ "json_files": self.json_files,
1328
1516
  "doc_files": self.doc_files,
1517
+ "markdown_files": self.markdown_files,
1518
+ "zsh_files": self.zsh_files,
1329
1519
  "is_python_project": self.is_python_project,
1330
1520
  "package_name": self.package_name,
1331
1521
  "blacken_docs_params": self.blacken_docs_params,
@@ -1337,6 +1527,7 @@ class Metadata:
1337
1527
  "release_notes": self.release_notes,
1338
1528
  "new_commits_matrix": self.new_commits_matrix,
1339
1529
  "release_commits_matrix": self.release_commits_matrix,
1530
+ "build_targets": FLAT_BUILD_TARGETS,
1340
1531
  "nuitka_matrix": self.nuitka_matrix,
1341
1532
  }
1342
1533
 
@@ -1353,7 +1544,7 @@ class Metadata:
1353
1544
  content += f"{env_name}={env_value}\n"
1354
1545
  else:
1355
1546
  # Use a random unique delimiter to encode multiline value:
1356
- delimiter = f"ghadelimiter_{randint(10**8, (10**9) - 1)}"
1547
+ delimiter = f"GHA_DELIMITER_{randint(10**8, (10**9) - 1)}"
1357
1548
  content += f"{env_name}<<{delimiter}\n{env_value}\n{delimiter}\n"
1358
1549
  else:
1359
1550
  assert dialect == Dialects.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gha-utils
3
- Version: 4.19.1
3
+ Version: 4.20.0
4
4
  Summary: ⚙️ CLI helpers for GitHub Actions + reuseable workflows
5
5
  Author-email: Kevin Deldycke <kevin@deldycke.com>
6
6
  Project-URL: Homepage, https://github.com/kdeldycke/workflows
@@ -18,10 +18,14 @@ Classifier: License :: OSI Approved :: GNU General Public License v2 or later (G
18
18
  Classifier: Operating System :: MacOS :: MacOS X
19
19
  Classifier: Operating System :: Microsoft :: Windows
20
20
  Classifier: Operating System :: POSIX :: Linux
21
+ Classifier: Operating System :: POSIX :: BSD :: FreeBSD
22
+ Classifier: Operating System :: POSIX :: BSD :: NetBSD
23
+ Classifier: Operating System :: POSIX :: BSD :: OpenBSD
21
24
  Classifier: Programming Language :: Python :: 3
22
25
  Classifier: Programming Language :: Python :: 3.11
23
26
  Classifier: Programming Language :: Python :: 3.12
24
27
  Classifier: Programming Language :: Python :: 3.13
28
+ Classifier: Programming Language :: Python :: 3.14
25
29
  Classifier: Programming Language :: Python :: Implementation :: CPython
26
30
  Classifier: Programming Language :: Unix Shell
27
31
  Classifier: Topic :: Documentation :: Sphinx
@@ -48,8 +52,8 @@ Requires-Dist: boltons>=24.0.0
48
52
  Requires-Dist: bump-my-version<1.1.1,>=0.32.2
49
53
  Requires-Dist: click-extra~=6.0.0
50
54
  Requires-Dist: extra-platforms~=3.2.0
51
- Requires-Dist: gitignore-parser~=0.1.13
52
55
  Requires-Dist: packaging~=25.0
56
+ Requires-Dist: py-walk~=0.3.3
53
57
  Requires-Dist: PyDriller~=2.6
54
58
  Requires-Dist: pyproject-metadata~=0.9.0
55
59
  Requires-Dist: pyyaml~=6.0.0
@@ -0,0 +1,14 @@
1
+ gha_utils/__init__.py,sha256=6pjMI0MO85LQg0A1nfuJZcqASUAH-A2ofuD_WIyjlr4,866
2
+ gha_utils/__main__.py,sha256=Dck9BjpLXmIRS83k0mghAMcYVYiMiFLltQdfRuMSP_Q,1703
3
+ gha_utils/changelog.py,sha256=JR7iQrWjLoIOpVNe6iXQSyEii82_hM_zrYpR7QO_Uxo,5777
4
+ gha_utils/cli.py,sha256=jmrSI05qfrkxcB3fQuiB6xf4eumXqg-MBiCITdeW104,15273
5
+ gha_utils/mailmap.py,sha256=oQt3m0hj-mwg7WxsuJQXWeQTFjlkqTgRNjYsUv7dlYQ,7013
6
+ gha_utils/matrix.py,sha256=eBAU3bKrCif7FQ74EWhK_AwDcNUkGp8Om1NtlFdYJpI,12431
7
+ gha_utils/metadata.py,sha256=AozR7hXSANQpjKZ3_GpRq8L_m3KrO4MTLStCQzbKjGo,56490
8
+ gha_utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ gha_utils/test_plan.py,sha256=AE8Mf1vSQG5EZTytoTts-gzMwUg2Zy21gUwkMlzXT94,13394
10
+ gha_utils-4.20.0.dist-info/METADATA,sha256=MFcEp0QvN2ojvKfSiYDoHZUyzLPGQtyzoUmx5ZljItE,21420
11
+ gha_utils-4.20.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
12
+ gha_utils-4.20.0.dist-info/entry_points.txt,sha256=8bJOwQYf9ZqsLhBR6gUCzvwLNI9f8tiiBrJ3AR0EK4o,54
13
+ gha_utils-4.20.0.dist-info/top_level.txt,sha256=C94Blb61YkkyPBwCdM3J_JPDjWH0lnKa5nGZeZ5M6yE,10
14
+ gha_utils-4.20.0.dist-info/RECORD,,
@@ -1,14 +0,0 @@
1
- gha_utils/__init__.py,sha256=lMEtwh0IU3Npa59dfCNSMgI1ilQQl-4K09Qjz3bjXIg,866
2
- gha_utils/__main__.py,sha256=Dck9BjpLXmIRS83k0mghAMcYVYiMiFLltQdfRuMSP_Q,1703
3
- gha_utils/changelog.py,sha256=JR7iQrWjLoIOpVNe6iXQSyEii82_hM_zrYpR7QO_Uxo,5777
4
- gha_utils/cli.py,sha256=jmrSI05qfrkxcB3fQuiB6xf4eumXqg-MBiCITdeW104,15273
5
- gha_utils/mailmap.py,sha256=g3LQiPNjHsAgCbEYOJcQwdlXqxzmFh697vv2sxHZq-s,7014
6
- gha_utils/matrix.py,sha256=eBAU3bKrCif7FQ74EWhK_AwDcNUkGp8Om1NtlFdYJpI,12431
7
- gha_utils/metadata.py,sha256=lAnBC2p17cwpgzpTFw5qYjqvI29wsWtvMlBx4B3rFc4,53791
8
- gha_utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- gha_utils/test_plan.py,sha256=AE8Mf1vSQG5EZTytoTts-gzMwUg2Zy21gUwkMlzXT94,13394
10
- gha_utils-4.19.1.dist-info/METADATA,sha256=CTP2UDJIakJ9NC7QWc2JcLtoczOjznA1wX169iG9VH8,21212
11
- gha_utils-4.19.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
12
- gha_utils-4.19.1.dist-info/entry_points.txt,sha256=8bJOwQYf9ZqsLhBR6gUCzvwLNI9f8tiiBrJ3AR0EK4o,54
13
- gha_utils-4.19.1.dist-info/top_level.txt,sha256=C94Blb61YkkyPBwCdM3J_JPDjWH0lnKa5nGZeZ5M6yE,10
14
- gha_utils-4.19.1.dist-info/RECORD,,