Skip to content

Commit b3b8727

Browse files
committed
NeedToRelease, ParallelBarrier memory, reorganize code
1 parent ba5a7d6 commit b3b8727

11 files changed

+165
-25
lines changed

config.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ packages:
5656
package_type: snap
5757
repo: redislabsdev/redis-snap
5858
# homebrew has one fixed release branch: main
59-
ref: master
59+
#ref: master
60+
ref: release_automation
6061
build_workflow: release_build_and_test.yml
62+
build_timeout_minutes: 60
6163
build_inputs: {}
6264
publish_internal_release: yes
6365
publish_workflow: release_publish.yml
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from py_trees.common import Status
2+
3+
from redis_release.bht.behaviours import LoggingAction
4+
from redis_release.bht.state import PackageMeta, ReleaseMeta
5+
6+
# Conditions
7+
8+
9+
class NeedToReleaseDebian(LoggingAction):
10+
"""Check if Debian package needs to be released."""
11+
12+
def __init__(
13+
self,
14+
name: str,
15+
package_meta: PackageMeta,
16+
release_meta: ReleaseMeta,
17+
log_prefix: str = "",
18+
) -> None:
19+
self.package_meta = package_meta
20+
self.release_meta = release_meta
21+
super().__init__(name=name, log_prefix=log_prefix)
22+
23+
def update(self) -> Status:
24+
# Debian packages are always released
25+
return Status.SUCCESS

src/redis_release/bht/behaviours_docker.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from py_trees.common import Status
22

3-
from redis_release.bht.behaviours import ReleaseAction
3+
from redis_release.bht.behaviours import LoggingAction, ReleaseAction
44
from redis_release.bht.state import PackageMeta, ReleaseMeta, Workflow
55

66

@@ -24,3 +24,25 @@ def __init__(
2424

2525
def update(self) -> Status:
2626
return Status.SUCCESS
27+
28+
29+
# Conditions
30+
31+
32+
class NeedToReleaseDocker(LoggingAction):
33+
"""Check if Docker package needs to be released."""
34+
35+
def __init__(
36+
self,
37+
name: str,
38+
package_meta: PackageMeta,
39+
release_meta: ReleaseMeta,
40+
log_prefix: str = "",
41+
) -> None:
42+
self.package_meta = package_meta
43+
self.release_meta = release_meta
44+
super().__init__(name=name, log_prefix=log_prefix)
45+
46+
def update(self) -> Status:
47+
# Docker packages are always released
48+
return Status.SUCCESS

src/redis_release/bht/behaviours_homebrew.py

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,6 @@
1010
from redis_release.models import HomebrewChannel, RedisVersion, ReleaseType
1111

1212

13-
class NeedToReleaseHomebrew(LoggingAction):
14-
def __init__(
15-
self,
16-
name: str,
17-
package_meta: HomebrewMeta,
18-
release_meta: ReleaseMeta,
19-
log_prefix: str = "",
20-
) -> None:
21-
self.package_meta = package_meta
22-
self.release_meta = release_meta
23-
super().__init__(name=name, log_prefix=log_prefix)
24-
25-
def update(self) -> Status:
26-
if self.package_meta.ephemeral.is_version_acceptable is True:
27-
return Status.SUCCESS
28-
return Status.FAILURE
29-
30-
3113
class HomewbrewWorkflowInputs(ReleaseAction):
3214
def __init__(
3315
self,
@@ -271,3 +253,24 @@ def update(self) -> Status:
271253

272254
except Exception as e:
273255
return self.log_exception_and_return_failure(e)
256+
257+
258+
# Conditions
259+
260+
261+
class NeedToReleaseHomebrew(LoggingAction):
262+
def __init__(
263+
self,
264+
name: str,
265+
package_meta: HomebrewMeta,
266+
release_meta: ReleaseMeta,
267+
log_prefix: str = "",
268+
) -> None:
269+
self.package_meta = package_meta
270+
self.release_meta = release_meta
271+
super().__init__(name=name, log_prefix=log_prefix)
272+
273+
def update(self) -> Status:
274+
if self.package_meta.ephemeral.is_version_acceptable is True:
275+
return Status.SUCCESS
276+
return Status.FAILURE
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from py_trees.common import Status
2+
3+
from redis_release.bht.behaviours import LoggingAction
4+
from redis_release.bht.state import PackageMeta, ReleaseMeta
5+
6+
# Conditions
7+
8+
9+
class NeedToReleaseRPM(LoggingAction):
10+
"""Check if RPM package needs to be released."""
11+
12+
def __init__(
13+
self,
14+
name: str,
15+
package_meta: PackageMeta,
16+
release_meta: ReleaseMeta,
17+
log_prefix: str = "",
18+
) -> None:
19+
self.package_meta = package_meta
20+
self.release_meta = release_meta
21+
super().__init__(name=name, log_prefix=log_prefix)
22+
23+
def update(self) -> Status:
24+
# RPM packages are always released
25+
return Status.SUCCESS

src/redis_release/bht/composites.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@ class ParallelBarrier(Composite):
6161
def __init__(
6262
self,
6363
name: str,
64+
memory: bool = True,
6465
children: Optional[TypingSequence[Behaviour]] = None,
6566
):
67+
self.memory = memory
6668
super().__init__(name, children)
6769

6870
def tick(self) -> Iterator[Behaviour]:
@@ -84,7 +86,7 @@ def tick(self) -> Iterator[Behaviour]:
8486
# Tick all children, skipping those that have already converged
8587
for child in self.children:
8688
# Skip children that have already converged (synchronized mode)
87-
if child.status in [Status.SUCCESS, Status.FAILURE]:
89+
if self.memory and child.status in [Status.SUCCESS, Status.FAILURE]:
8890
continue
8991
# Tick the child
9092
for node in child.tick():
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
1+
from py_trees.behaviour import Behaviour
2+
3+
from redis_release.bht.behaviours_debian import NeedToReleaseDebian
4+
from redis_release.bht.state import PackageMeta, ReleaseMeta
15
from redis_release.bht.tree_factory_generic import GenericPackageFactory
26

37

48
class DebianFactory(GenericPackageFactory):
5-
pass
9+
def create_need_to_release_behaviour(
10+
self,
11+
name: str,
12+
package_meta: PackageMeta,
13+
release_meta: ReleaseMeta,
14+
log_prefix: str,
15+
) -> Behaviour:
16+
return NeedToReleaseDebian(
17+
name, package_meta, release_meta, log_prefix=log_prefix
18+
)

src/redis_release/bht/tree_factory_docker.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from py_trees.behaviour import Behaviour
22

3-
from redis_release.bht.behaviours_docker import DockerWorkflowInputs
3+
from redis_release.bht.behaviours_docker import (
4+
DockerWorkflowInputs,
5+
NeedToReleaseDocker,
6+
)
47
from redis_release.bht.state import PackageMeta, ReleaseMeta, Workflow
58
from redis_release.bht.tree_factory_generic import GenericPackageFactory
69

@@ -31,3 +34,14 @@ def create_publish_workflow_inputs(
3134
return DockerWorkflowInputs(
3235
name, workflow, package_meta, release_meta, log_prefix=log_prefix
3336
)
37+
38+
def create_need_to_release_behaviour(
39+
self,
40+
name: str,
41+
package_meta: PackageMeta,
42+
release_meta: ReleaseMeta,
43+
log_prefix: str,
44+
) -> Behaviour:
45+
return NeedToReleaseDocker(
46+
name, package_meta, release_meta, log_prefix=log_prefix
47+
)

src/redis_release/bht/tree_factory_generic.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from py_trees.behaviour import Behaviour
55
from py_trees.behaviours import Failure as AlwaysFailure
6+
from py_trees.behaviours import Success as AlwaysSuccess
67
from py_trees.composites import Selector, Sequence
78
from py_trees.decorators import Inverter
89

@@ -45,7 +46,7 @@ def create_package_release_goal_tree_branch(
4546
return Selector(
4647
f"Package Release {package_name} Goal",
4748
memory=False,
48-
children=[AlwaysFailure("Yes"), package_release],
49+
children=[AlwaysFailure("Always"), package_release],
4950
)
5051

5152
def create_build_workflow_inputs(
@@ -327,6 +328,20 @@ def create_extract_result_tree_branch(
327328
latch_chains(extract_artifact_result, download_artifacts)
328329
return extract_artifact_result
329330

331+
def create_need_to_release_behaviour(
332+
self,
333+
name: str,
334+
package_meta: PackageMeta,
335+
release_meta: ReleaseMeta,
336+
log_prefix: str,
337+
) -> Behaviour:
338+
"""Create a behaviour that checks if the package needs to be released.
339+
340+
Default implementation always returns SUCCESS (always release).
341+
Override in subclasses for package-specific logic.
342+
"""
343+
return AlwaysSuccess(name)
344+
330345

331346
class PackageWithValidation:
332347
"""

src/redis_release/bht/tree_factory_protocol.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,11 @@ def create_extract_result_tree_branch(
9595
github_client: GitHubClientAsync,
9696
log_prefix: str,
9797
) -> Union[Selector, Sequence]: ...
98+
99+
def create_need_to_release_behaviour(
100+
self,
101+
name: str,
102+
package_meta: PackageMeta,
103+
release_meta: ReleaseMeta,
104+
log_prefix: str,
105+
) -> Behaviour: ...

0 commit comments

Comments
 (0)