dycw-actions 0.2.2__py3-none-any.whl → 0.3.2__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.
actions/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.2.2"
3
+ __version__ = "0.3.2"
actions/publish/cli.py CHANGED
@@ -3,36 +3,34 @@ from __future__ import annotations
3
3
  from rich.pretty import pretty_repr
4
4
  from typed_settings import click_options
5
5
  from utilities.logging import basic_config
6
+ from utilities.os import is_pytest
7
+ from utilities.text import strip_and_dedent
6
8
 
7
9
  from actions import __version__
8
10
  from actions.logging import LOGGER
9
11
  from actions.publish.lib import publish_package
10
12
  from actions.publish.settings import PublishSettings
11
13
  from actions.settings import CommonSettings
12
- from actions.utilities import ENV_LOADER
14
+ from actions.utilities import LOADER
13
15
 
14
16
 
15
- @click_options(
16
- CommonSettings, [ENV_LOADER], show_envvars_in_help=True, argname="common"
17
- )
18
- @click_options(
19
- PublishSettings, [ENV_LOADER], show_envvars_in_help=True, argname="publish"
20
- )
17
+ @click_options(CommonSettings, [LOADER], show_envvars_in_help=True, argname="common")
18
+ @click_options(PublishSettings, [LOADER], show_envvars_in_help=True, argname="publish")
21
19
  def publish_sub_cmd(*, common: CommonSettings, publish: PublishSettings) -> None:
20
+ if is_pytest():
21
+ return
22
22
  basic_config(obj=LOGGER)
23
23
  LOGGER.info(
24
- """\
25
- Running '%r' (version %s) with settings:
26
- %s
27
- %s""",
24
+ strip_and_dedent("""
25
+ Running '%r' (version %s) with settings:
26
+ %s
27
+ %s
28
+ """),
28
29
  publish_package.__name__,
29
30
  __version__,
30
31
  pretty_repr(common),
31
32
  pretty_repr(publish),
32
33
  )
33
- if common.dry_run:
34
- LOGGER.info("Dry run; exiting...")
35
- return
36
34
  publish_package(
37
35
  username=publish.username,
38
36
  password=publish.password,
@@ -2,14 +2,11 @@ from __future__ import annotations
2
2
 
3
3
  from typed_settings import Secret, load_settings, option, secret, settings
4
4
 
5
- from actions.utilities import ENV_LOADER, empty_str_to_none
5
+ from actions.utilities import LOADER, empty_str_to_none
6
6
 
7
7
 
8
8
  @settings
9
9
  class PublishSettings:
10
- token: Secret[str] | None = secret(
11
- default=None, converter=empty_str_to_none, help="GitHub token"
12
- )
13
10
  username: str | None = option(
14
11
  default=None, converter=empty_str_to_none, help="The username of the upload"
15
12
  )
@@ -26,10 +23,9 @@ class PublishSettings:
26
23
  default=False,
27
24
  help="Whether to load TLS certificates from the platform's native certificate store",
28
25
  )
29
- dry_run: bool = option(default=False, help="Dry run the CLI")
30
26
 
31
27
 
32
- PUBLISH_SETTINGS = load_settings(PublishSettings, [ENV_LOADER])
28
+ PUBLISH_SETTINGS = load_settings(PublishSettings, [LOADER])
33
29
 
34
30
 
35
31
  __all__ = ["PUBLISH_SETTINGS", "PublishSettings"]
actions/settings.py CHANGED
@@ -1,8 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typed_settings import Secret, load_settings, option, secret, settings
3
+ from typed_settings import Secret, load_settings, secret, settings
4
4
 
5
- from actions.utilities import ENV_LOADER, empty_str_to_none
5
+ from actions.utilities import LOADER, empty_str_to_none
6
6
 
7
7
 
8
8
  @settings
@@ -10,10 +10,9 @@ class CommonSettings:
10
10
  token: Secret[str] | None = secret(
11
11
  default=None, converter=empty_str_to_none, help="GitHub token"
12
12
  )
13
- dry_run: bool = option(default=False, help="Dry run the CLI")
14
13
 
15
14
 
16
- COMMON_SETTINGS = load_settings(CommonSettings, [ENV_LOADER])
15
+ COMMON_SETTINGS = load_settings(CommonSettings, [LOADER])
17
16
 
18
17
 
19
18
  __all__ = ["COMMON_SETTINGS", "CommonSettings"]
actions/sleep/cli.py CHANGED
@@ -3,34 +3,34 @@ from __future__ import annotations
3
3
  from rich.pretty import pretty_repr
4
4
  from typed_settings import click_options
5
5
  from utilities.logging import basic_config
6
+ from utilities.os import is_pytest
7
+ from utilities.text import strip_and_dedent
6
8
 
7
9
  from actions import __version__
8
10
  from actions.logging import LOGGER
9
11
  from actions.settings import CommonSettings
10
12
  from actions.sleep.lib import random_sleep
11
13
  from actions.sleep.settings import SleepSettings
12
- from actions.utilities import ENV_LOADER
14
+ from actions.utilities import LOADER
13
15
 
14
16
 
15
- @click_options(
16
- CommonSettings, [ENV_LOADER], show_envvars_in_help=True, argname="common"
17
- )
18
- @click_options(SleepSettings, [ENV_LOADER], show_envvars_in_help=True, argname="sleep")
17
+ @click_options(CommonSettings, [LOADER], show_envvars_in_help=True, argname="common")
18
+ @click_options(SleepSettings, [LOADER], show_envvars_in_help=True, argname="sleep")
19
19
  def sleep_sub_cmd(*, common: CommonSettings, sleep: SleepSettings) -> None:
20
+ if is_pytest():
21
+ return
20
22
  basic_config(obj=LOGGER)
21
23
  LOGGER.info(
22
- """\
23
- Running '%r' (version %s) with settings:
24
- %s
25
- %s""",
24
+ strip_and_dedent("""
25
+ Running '%r' (version %s) with settings:
26
+ %s
27
+ %s
28
+ """),
26
29
  random_sleep.__name__,
27
30
  __version__,
28
31
  pretty_repr(common),
29
32
  pretty_repr(sleep),
30
33
  )
31
- if common.dry_run:
32
- LOGGER.info("Dry run; exiting...")
33
- return
34
34
  random_sleep(
35
35
  min_=sleep.min, max_=sleep.max, step=sleep.step, log_freq=sleep.log_freq
36
36
  )
actions/sleep/settings.py CHANGED
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typed_settings import load_settings, option, settings
4
4
 
5
- from actions.utilities import ENV_LOADER
5
+ from actions.utilities import LOADER
6
6
 
7
7
 
8
8
  @settings
@@ -13,7 +13,7 @@ class SleepSettings:
13
13
  log_freq: int = option(default=60, help="Log frequency, in seconds")
14
14
 
15
15
 
16
- SLEEP_SETTINGS = load_settings(SleepSettings, [ENV_LOADER])
16
+ SLEEP_SETTINGS = load_settings(SleepSettings, [LOADER])
17
17
 
18
18
 
19
19
  __all__ = ["SLEEP_SETTINGS", "SleepSettings"]
actions/tag/cli.py CHANGED
@@ -3,34 +3,34 @@ from __future__ import annotations
3
3
  from rich.pretty import pretty_repr
4
4
  from typed_settings import click_options
5
5
  from utilities.logging import basic_config
6
+ from utilities.os import is_pytest
7
+ from utilities.text import strip_and_dedent
6
8
 
7
9
  from actions import __version__
8
10
  from actions.logging import LOGGER
9
11
  from actions.settings import CommonSettings
10
12
  from actions.tag.lib import tag_commit
11
13
  from actions.tag.settings import TagSettings
12
- from actions.utilities import ENV_LOADER
14
+ from actions.utilities import LOADER
13
15
 
14
16
 
15
- @click_options(
16
- CommonSettings, [ENV_LOADER], show_envvars_in_help=True, argname="common"
17
- )
18
- @click_options(TagSettings, [ENV_LOADER], show_envvars_in_help=True, argname="tag")
17
+ @click_options(CommonSettings, [LOADER], show_envvars_in_help=True, argname="common")
18
+ @click_options(TagSettings, [LOADER], show_envvars_in_help=True, argname="tag")
19
19
  def tag_sub_cmd(*, common: CommonSettings, tag: TagSettings) -> None:
20
+ if is_pytest():
21
+ return
20
22
  basic_config(obj=LOGGER)
21
23
  LOGGER.info(
22
- """\
23
- Running '%r' (version %s) with settings:
24
- %s
25
- %s""",
24
+ strip_and_dedent("""
25
+ Running '%r' (version %s) with settings:
26
+ %s
27
+ %s
28
+ """),
26
29
  tag_commit.__name__,
27
30
  __version__,
28
31
  pretty_repr(common),
29
32
  pretty_repr(tag),
30
33
  )
31
- if common.dry_run:
32
- LOGGER.info("Dry run; exiting...")
33
- return
34
34
  tag_commit(
35
35
  user_name=tag.user_name,
36
36
  user_email=tag.user_email,
actions/tag/lib.py CHANGED
@@ -38,7 +38,9 @@ Running %r (version %s) with settings:
38
38
  )
39
39
  _ = log_run("git", "config", "--global", "user.name", user_name)
40
40
  _ = log_run("git", "config", "--global", "user.email", user_email)
41
- version = parse_version(log_run("bump-my-version", "show", "current_version"))
41
+ version = parse_version(
42
+ log_run("bump-my-version", "show", "current_version", return_=True)
43
+ )
42
44
  _tag(str(version))
43
45
  if major_minor:
44
46
  _tag(f"{version.major}.{version.minor}")
actions/tag/settings.py CHANGED
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typed_settings import load_settings, option, settings
4
4
 
5
- from actions.utilities import ENV_LOADER
5
+ from actions.utilities import LOADER
6
6
 
7
7
 
8
8
  @settings
@@ -14,7 +14,7 @@ class TagSettings:
14
14
  latest: bool = option(default=False, help="Add the 'latest' tag")
15
15
 
16
16
 
17
- TAG_SETTINGS = load_settings(TagSettings, [ENV_LOADER])
17
+ TAG_SETTINGS = load_settings(TagSettings, [LOADER])
18
18
 
19
19
 
20
20
  __all__ = ["TAG_SETTINGS", "TagSettings"]
actions/types.py ADDED
@@ -0,0 +1,8 @@
1
+ from __future__ import annotations
2
+
3
+ from typed_settings import Secret
4
+
5
+ type SecretLike = str | Secret[str]
6
+
7
+
8
+ __all__ = ["SecretLike"]
actions/utilities.py CHANGED
@@ -1,23 +1,50 @@
1
1
  from __future__ import annotations
2
2
 
3
- from subprocess import check_output
3
+ from typing import TYPE_CHECKING, Literal, overload
4
4
 
5
- from typed_settings import EnvLoader, Secret
5
+ from typed_settings import EnvLoader
6
+ from utilities.subprocess import run
6
7
 
7
8
  from actions.logging import LOGGER
8
9
 
9
- ENV_LOADER = EnvLoader("")
10
+ if TYPE_CHECKING:
11
+ from actions.types import SecretLike
10
12
 
11
13
 
12
- def empty_str_to_none(text: str, /) -> str | None:
13
- return None if text == "" else text
14
+ LOADER = EnvLoader("")
14
15
 
15
16
 
16
- def log_run(*cmds: str | Secret[str]) -> str:
17
- LOGGER.info("Running '%s'...", " ".join(map(str, cmds)))
18
- return check_output(
19
- [c if isinstance(c, str) else c.get_secret_value() for c in cmds], text=True
20
- ).rstrip("\n")
17
+ def empty_str_to_none(text: str, /) -> str | None:
18
+ return None if text == "" else text
21
19
 
22
20
 
23
- __all__ = ["ENV_LOADER", "empty_str_to_none", "log_run"]
21
+ @overload
22
+ def log_run(
23
+ cmd: SecretLike, /, *cmds: SecretLike, print: bool = False, return_: Literal[True]
24
+ ) -> str: ...
25
+ @overload
26
+ def log_run(
27
+ cmd: SecretLike,
28
+ /,
29
+ *cmds: SecretLike,
30
+ print: bool = False,
31
+ return_: Literal[False] = False,
32
+ ) -> None: ...
33
+ @overload
34
+ def log_run(
35
+ cmd: SecretLike, /, *cmds: SecretLike, print: bool = False, return_: bool = False
36
+ ) -> str | None: ...
37
+ def log_run(
38
+ cmd: SecretLike,
39
+ /,
40
+ *cmds: SecretLike,
41
+ print: bool = False, # noqa: A002
42
+ return_: bool = False,
43
+ ) -> str | None:
44
+ all_cmds = [cmd, *cmds]
45
+ LOGGER.info("Running '%s'...", " ".join(map(str, all_cmds)))
46
+ unwrapped = [c if isinstance(c, str) else c.get_secret_value() for c in all_cmds]
47
+ return run(*unwrapped, print=print, return_=return_)
48
+
49
+
50
+ __all__ = ["LOADER", "empty_str_to_none", "log_run"]
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dycw-actions
3
- Version: 0.2.2
3
+ Version: 0.3.2
4
4
  Summary: GitHub actions
5
5
  Requires-Dist: click>=8.3.1,<8.4
6
- Requires-Dist: dycw-utilities>=0.170.0,<0.171
6
+ Requires-Dist: dycw-utilities>=0.172.5,<0.173
7
7
  Requires-Dist: rich>=14.2.0,<14.3
8
8
  Requires-Dist: typed-settings[attrs,click]>=25.3.0,<25.4
9
9
  Requires-Python: >=3.13
@@ -0,0 +1,22 @@
1
+ actions/__init__.py,sha256=xm1u7RHIf6fYv7ou5-vxQ9OiaAwZ0vJK7AngPQ7IBek,58
2
+ actions/cli.py,sha256=S2q5iRqZ-AsB-IF0GxExRBBnguPcKRH_97o-kxg-RLU,536
3
+ actions/logging.py,sha256=rMTcQMGndUHTCaXXtyOHt_VXUMhQGRHoN7okpoX0y5I,120
4
+ actions/publish/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
5
+ actions/publish/cli.py,sha256=dcodn7jxjfaf2OfWaZh1ae5j2fZ5jXlma1OXkeRcSw4,1334
6
+ actions/publish/lib.py,sha256=4efV3RnJNrPPebCHS_a6FzSRM9ifFJtBXZXXc5ORNFw,1651
7
+ actions/publish/settings.py,sha256=4WgKG_ZhGkrlyRActam2ponIHZDu5U9aQHrnO2F1Vi4,969
8
+ actions/settings.py,sha256=nLebb6eRHcY2F48WTuFrF8ir4v6mT_cTWs9e4VHRGMA,421
9
+ actions/sleep/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
10
+ actions/sleep/cli.py,sha256=ilPHPYygoIQgG_Nggot2w5vNKdes0L6XxUG6Pb67DmI,1181
11
+ actions/sleep/lib.py,sha256=uMre9J4A4ZEOfDntxn-PZmi7glaHI_QaXuZmmvpq0go,1660
12
+ actions/sleep/settings.py,sha256=1hMd5mUsFb6gLajdAZ8bvFYjDhE1BWiPSKOYiHJEvqM,556
13
+ actions/tag/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
14
+ actions/tag/cli.py,sha256=5mZ7inpLAdtIkQXp4c-t2C3Iw7tnJedR8GRN0ijatco,1231
15
+ actions/tag/lib.py,sha256=Xoc3i6kR0jCbakDOlGDN8eO8PiPe1shc0egcaCkC0jQ,1723
16
+ actions/tag/settings.py,sha256=s6QBI4bZFjk2mIPKIlyb3sLET5ZpXsTb-2bzjW9m5Ew,646
17
+ actions/types.py,sha256=4k6WkQ0ByQxzJtajoufdx8VQ9xAPPq6WU4nseQcwmyw,134
18
+ actions/utilities.py,sha256=OkwoVUd00JtBctCUlVuAriMjMPRl8W8nJorgWpedOkI,1222
19
+ dycw_actions-0.3.2.dist-info/WHEEL,sha256=ZyFSCYkV2BrxH6-HRVRg3R9Fo7MALzer9KiPYqNxSbo,79
20
+ dycw_actions-0.3.2.dist-info/entry_points.txt,sha256=2Uu7wAZOm0mmcsGBEsGB370HAWgVWECRFJ9rKgfC3-I,46
21
+ dycw_actions-0.3.2.dist-info/METADATA,sha256=NPpbP9_F61qYpr7HhvXM99AKBYT68ec45CP3EMcipoE,343
22
+ dycw_actions-0.3.2.dist-info/RECORD,,
@@ -1,21 +0,0 @@
1
- actions/__init__.py,sha256=p-v1DNzSSlMZQrSYK8zcIuyQfiDyhSSgIRE1gXXYcJ0,58
2
- actions/cli.py,sha256=S2q5iRqZ-AsB-IF0GxExRBBnguPcKRH_97o-kxg-RLU,536
3
- actions/logging.py,sha256=rMTcQMGndUHTCaXXtyOHt_VXUMhQGRHoN7okpoX0y5I,120
4
- actions/publish/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
5
- actions/publish/cli.py,sha256=QN9I8jdZVeRLG0DuYFigV-3uTrAkBfa9XHkpzfpJgJk,1263
6
- actions/publish/lib.py,sha256=4efV3RnJNrPPebCHS_a6FzSRM9ifFJtBXZXXc5ORNFw,1651
7
- actions/publish/settings.py,sha256=LPuU3PMDByuxukaDsEVLnZQVRX9Fzwm11ashvn1Gm8g,1160
8
- actions/settings.py,sha256=__Lu6E960DTvP05C0C0NCauOazn6SS5-fu6y3ENWz7Y,503
9
- actions/sleep/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
10
- actions/sleep/cli.py,sha256=3AGGpovn1pdVYn6TOmB_TOusGnjUDMjstemVTvJ3Ci8,1104
11
- actions/sleep/lib.py,sha256=uMre9J4A4ZEOfDntxn-PZmi7glaHI_QaXuZmmvpq0go,1660
12
- actions/sleep/settings.py,sha256=M3nn8r9P5lYWz_I-lBNX_dhpWPvtprC48bW55uSgwIA,564
13
- actions/tag/__init__.py,sha256=U4S_2y3zgLZVfMenHRaJFBW8yqh2mUBuI291LGQVOJ8,35
14
- actions/tag/cli.py,sha256=txW0XDc71eVrQuyKpfk8rrbK2UWU4LuwbuFk03KQkAY,1154
15
- actions/tag/lib.py,sha256=BHRedlrgk-JpECcPc7yxj7JnAQIScwecoGTFNWwkzUY,1695
16
- actions/tag/settings.py,sha256=Lg5rE08dSl9rQ_EuqJ5CoW9D_6pxcxiNZEJwQOfcW5w,654
17
- actions/utilities.py,sha256=F1p07eXZt0m0Ho92_70u-85E-CBWGYfzhiwFJUzdKwo,572
18
- dycw_actions-0.2.2.dist-info/WHEEL,sha256=ZyFSCYkV2BrxH6-HRVRg3R9Fo7MALzer9KiPYqNxSbo,79
19
- dycw_actions-0.2.2.dist-info/entry_points.txt,sha256=2Uu7wAZOm0mmcsGBEsGB370HAWgVWECRFJ9rKgfC3-I,46
20
- dycw_actions-0.2.2.dist-info/METADATA,sha256=uqq2NqHNuqX4k69OOd00Gave-paWkRiDhFs0uBDpuBg,343
21
- dycw_actions-0.2.2.dist-info/RECORD,,