Skip to content

Commit

Permalink
Add: Allow to enforce uploading releases as GitHub pre-releases (#894)
Browse files Browse the repository at this point in the history
* Add: Allow to enforce uploading releases as GitHub pre-releases

When creating a release it is now possible to enforce uploading the
release with a pre-release status to GitHub.

* Fix typings and linting

* Change: Refactor tests for pontos-release create CLI

The CLI subcommand is intended to create a release and therefore got
renamed from `release` to `create`. Adjust the tests to reflect this
change.

* Add: Add tests for `--github-pre-release` flag for `pontos-release create`

Ensure the correct behavior of parsing the new flag.
  • Loading branch information
bjoernricks committed Oct 5, 2023
1 parent 9222594 commit 710fb09
Show file tree
Hide file tree
Showing 6 changed files with 303 additions and 152 deletions.
12 changes: 10 additions & 2 deletions pontos/git/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,15 @@
from enum import Enum
from os import PathLike, fspath
from pathlib import Path
from typing import Collection, Iterable, Iterator, List, Optional, Union
from typing import (
Collection,
Iterable,
Iterator,
List,
Optional,
Sequence,
Union,
)

from pontos.errors import PontosError
from pontos.git.status import StatusEntry, parse_git_status
Expand Down Expand Up @@ -384,7 +392,7 @@ def list_tags(

def add(
self,
files: Union[str, PathLike[str], list[Union[PathLike[str], str]]],
files: Union[str, PathLike[str], Sequence[Union[PathLike[str], str]]],
) -> None:
"""
Add files to the git staging area
Expand Down
19 changes: 16 additions & 3 deletions pontos/release/create.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,11 @@ def _create_changelog(
)

async def _create_release(
self, release_version: Version, token: str, release_text: str
self,
release_version: Version,
token: str,
release_text: str,
github_pre_release: bool,
) -> None:
github = GitHubAsyncRESTApi(token=token)

Expand All @@ -126,7 +130,7 @@ async def _create_release(
git_version,
name=f"{self.project} {release_version}",
body=release_text,
prerelease=release_version.is_pre_release,
prerelease=release_version.is_pre_release or github_pre_release,
)

async def async_run( # type: ignore[override]
Expand All @@ -146,6 +150,7 @@ async def async_run( # type: ignore[override]
local: Optional[bool] = False,
release_series: Optional[str] = None,
update_project: bool = True,
github_pre_release: bool = False,
) -> CreateReleaseReturnValue:
"""
Create a release
Expand Down Expand Up @@ -177,6 +182,8 @@ async def async_run( # type: ignore[override]
release_series: Optional release series to use.
For example: "1.2", "2", "23".
update_project: Update version in project files.
github_pre_release: Enforce uploading a release as a GitHub pre
release
"""
git_signing_key = (
git_signing_key
Expand Down Expand Up @@ -296,7 +303,12 @@ async def async_run( # type: ignore[override]
try:
self.terminal.info(f"Creating release for {release_version}")

await self._create_release(release_version, token, release_text)
await self._create_release(
release_version,
token,
release_text,
github_pre_release,
)

self.terminal.ok(f"Created release {release_version}")
except httpx.HTTPStatusError as e:
Expand Down Expand Up @@ -385,4 +397,5 @@ def create_release(
local=args.local,
release_series=args.release_series,
update_project=args.update_project,
github_pre_release=args.github_pre_release,
)
5 changes: 5 additions & 0 deletions pontos/release/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,11 @@ def parse_args(args) -> Tuple[Optional[str], Optional[str], Namespace]:
action=BooleanOptionalAction,
default=True,
)
create_parser.add_argument(
"--github-pre-release",
help="Enforce uploading a release as GitHub " "pre-release. ",
action="store_true",
)

sign_parser = subparsers.add_parser(
"sign", help="Create signatures for an existing release"
Expand Down
4 changes: 3 additions & 1 deletion pontos/version/commands/_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ class VersionCommand(ABC):

project_file_name: str

def __init__(self, versioning_scheme: VersioningScheme) -> None:
def __init__(
self, versioning_scheme: Union[VersioningScheme, type[VersioningScheme]]
) -> None:
self.project_file_path = Path.cwd() / self.project_file_name
self.versioning_scheme = versioning_scheme

Expand Down
Loading

0 comments on commit 710fb09

Please sign in to comment.