Skip to content

Commit 3d85c9a

Browse files
authored
Merge pull request #5859 from opsmill/fac-merge-stable-into-release-1.2
Merge stable into release-1.2
2 parents f46b28f + d207a09 commit 3d85c9a

26 files changed

+389
-1258
lines changed

.github/file-filters.yml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@ release_files: &release_files
3939
- CHANGELOG.md
4040
- "docs/docs/release_notes/infrahub/*.mdx"
4141

42-
helm_files: &helm_files
43-
- "helm/**"
44-
4542
python_all: &python_all
4643
- "**/*.py"
4744

@@ -83,9 +80,6 @@ documentation_generated_all:
8380
release_all:
8481
- *release_files
8582

86-
helm_all:
87-
- *helm_files
88-
8983
frontend_all:
9084
- *frontend_files
9185
- *ci_config

.github/labels.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@
2828
description: "Issue related to the CI pipeline"
2929
color: "f25009"
3030

31-
- name: "group/helm"
32-
description: "Issue related to the Helm chart"
33-
color: "326ce5"
34-
3531
- name: "group/schema"
3632
description: "Issue related to some schemas"
3733
color: "fbceb1"

.github/workflows/ci.yml

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ jobs:
4141
documentation_generated: ${{ steps.changes.outputs.documentation_generated_all }}
4242
release: ${{ steps.changes.outputs.release_all }}
4343
frontend: ${{ steps.changes.outputs.frontend_all }}
44-
helm: ${{ steps.changes.outputs.helm_all }}
4544
e2e: ${{ steps.changes.outputs.e2e_all }}
4645
python: ${{ steps.changes.outputs.python_all }}
4746
javascript: ${{ steps.changes.outputs.javascript_all }}
@@ -62,21 +61,6 @@ jobs:
6261
filters: .github/file-filters.yml
6362

6463
# ------------------------------------------ All Linter ------------------------------------------
65-
helm-lint:
66-
if: needs.files-changed.outputs.helm == 'true'
67-
needs: ["files-changed"]
68-
runs-on: "ubuntu-latest"
69-
timeout-minutes: 5
70-
steps:
71-
- name: "Check out repository code"
72-
uses: "actions/checkout@v4"
73-
with:
74-
submodules: true
75-
- name: "Install Helm"
76-
uses: azure/[email protected]
77-
- name: "Linting: helm lint"
78-
run: "helm lint helm/"
79-
8064
yaml-lint:
8165
if: needs.files-changed.outputs.yaml == 'true'
8266
needs: ["files-changed"]

.github/workflows/publish-helm-chart.yml

Lines changed: 0 additions & 71 deletions
This file was deleted.

.github/workflows/release.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,11 @@ jobs:
111111
publish-helm-chart:
112112
needs: check_release
113113
if: github.event.release.prerelease == false
114-
uses: ./.github/workflows/publish-helm-chart.yml
114+
uses: opsmill/infrahub-helm/.github/workflows/publish-helm-chart.yml@stable
115115
secrets: inherit
116116
with:
117117
publish: true
118+
chart: infrahub
118119

119120
publish-pypi:
120121
needs: check_release

.github/workflows/update-compose-file-and-chart.yml

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,36 @@ jobs:
5555
- name: "Update Infrahub Image Version in docker-compose.yml file"
5656
if: steps.release.outputs.is_prerelease == 0 && steps.release.outputs.is_devrelease == 0
5757
run: "poetry run invoke release.update-docker-compose"
58-
- name: "Update AppVersion in helm/chart.yaml file"
59-
if: steps.release.outputs.is_prerelease == 0 && steps.release.outputs.is_devrelease == 0
60-
run: "poetry run invoke release.update-helm-chart"
6158
- name: "Update Versions in python_testcontainers/pyproject.toml"
6259
run: "poetry run invoke release.update-test-containers"
63-
- name: Commit docker-compose.yml and helm
60+
- name: Commit docker-compose.yml
6461
uses: github-actions-x/[email protected]
6562
with:
6663
github-token: ${{ secrets.GH_INFRAHUB_BOT_TOKEN }}
6764
push-branch: 'stable'
68-
commit-message: 'chore: update docker-compose and helm chart'
65+
commit-message: 'chore: update docker-compose'
6966
files: |
7067
docker-compose.yml
71-
helm/Chart.yaml
7268
python_testcontainers/pyproject.toml
7369
name: opsmill-bot
7470
7571
rebase: true
72+
73+
- name: Checkout infrahub-helm
74+
if: steps.release.outputs.is_prerelease == 0 && steps.release.outputs.is_devrelease == 0
75+
uses: actions/checkout@v4
76+
with:
77+
repository: opsmill/infrahub-helm
78+
path: helm
79+
token: ${{ secrets.GH_INFRAHUB_BOT_TOKEN }}
80+
81+
- name: "Update AppVersion in helm/chart.yaml file"
82+
if: steps.release.outputs.is_prerelease == 0 && steps.release.outputs.is_devrelease == 0
83+
run: "poetry run invoke release.update-helm-chart"
84+
85+
- name: Commit helm
86+
if: steps.release.outputs.is_prerelease == 0 && steps.release.outputs.is_devrelease == 0
87+
working-directory: helm
88+
run: |
89+
git commit -a -m 'chore: bump appVersion'
90+
git push

backend/infrahub/core/migrations/query/node_duplicate.py

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,27 +48,47 @@ def render_match(self) -> str:
4848

4949
@staticmethod
5050
def _render_sub_query_per_rel_type(
51-
rel_name: str, rel_type: str, rel_def: FieldInfo, direction: GraphRelDirection
51+
rel_name: str,
52+
rel_type: str,
53+
rel_def: FieldInfo,
5254
) -> str:
5355
subquery = [
5456
f"WITH peer_node, {rel_name}, active_node, new_node",
5557
f"WITH peer_node, {rel_name}, active_node, new_node",
5658
f'WHERE type({rel_name}) = "{rel_type}"',
5759
]
58-
if rel_def.default.direction in [direction, GraphRelDirection.EITHER]:
59-
subquery.append(f"CREATE (new_node)-[:{rel_type} $rel_props_new ]->(peer_node)")
60-
subquery.append(f"CREATE (active_node)-[:{rel_type} $rel_props_prev ]->(peer_node)")
61-
elif rel_def.default.direction in [direction, GraphRelDirection.EITHER]:
62-
subquery.append(f"CREATE (new_node)<-[:{rel_type} $rel_props_new ]-(peer_node)")
63-
subquery.append(f"CREATE (active_node)<-[:{rel_type} $rel_props_prev ]-(peer_node)")
60+
if rel_def.default.direction in [GraphRelDirection.OUTBOUND, GraphRelDirection.EITHER]:
61+
subquery.append(f"""
62+
CREATE (new_node)-[new_active_edge:{rel_type} $rel_props_new ]->(peer_node)
63+
SET new_active_edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
64+
SET new_active_edge.branch_level = CASE WHEN {rel_name}.branch = "-global-" THEN {rel_name}.branch_level ELSE $branch_level END
65+
""")
66+
subquery.append(f"""
67+
CREATE (active_node)-[deleted_edge:{rel_type} $rel_props_prev ]->(peer_node)
68+
SET deleted_edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
69+
SET deleted_edge.branch_level = CASE WHEN {rel_name}.branch = "-global-" THEN {rel_name}.branch_level ELSE $branch_level END
70+
""")
71+
elif rel_def.default.direction in [GraphRelDirection.INBOUND, GraphRelDirection.EITHER]:
72+
subquery.append(f"""
73+
CREATE (new_node)<-[new_active_edge:{rel_type} $rel_props_new ]-(peer_node)
74+
SET new_active_edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
75+
SET new_active_edge.branch_level = CASE WHEN {rel_name}.branch = "-global-" THEN {rel_name}.branch_level ELSE $branch_level END
76+
""")
77+
subquery.append(f"""
78+
CREATE (active_node)<-[deleted_edge:{rel_type} $rel_props_prev ]-(peer_node)
79+
SET new_active_edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
80+
SET new_active_edge.branch_level = CASE WHEN {rel_name}.branch = "-global-" THEN {rel_name}.branch_level ELSE $branch_level END
81+
""")
6482
subquery.append("RETURN peer_node as p2")
6583
return "\n".join(subquery)
6684

6785
@classmethod
6886
def _render_sub_query_out(cls) -> str:
6987
sub_queries_out = [
7088
cls._render_sub_query_per_rel_type(
71-
rel_name="rel_outband", rel_type=rel_type, rel_def=rel_def, direction=GraphRelDirection.OUTBOUND
89+
rel_name="rel_outband",
90+
rel_type=rel_type,
91+
rel_def=rel_def,
7292
)
7393
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
7494
]
@@ -79,7 +99,9 @@ def _render_sub_query_out(cls) -> str:
7999
def _render_sub_query_in(cls) -> str:
80100
sub_queries_in = [
81101
cls._render_sub_query_per_rel_type(
82-
rel_name="rel_inband", rel_type=rel_type, rel_def=rel_def, direction=GraphRelDirection.INBOUND
102+
rel_name="rel_inband",
103+
rel_type=rel_type,
104+
rel_def=rel_def,
83105
)
84106
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
85107
]
@@ -94,19 +116,16 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
94116
self.params["previous_node"] = self.previous_node.model_dump()
95117

96118
self.params["current_time"] = self.at.to_string()
97-
self.params["branch_name"] = self.branch.name
119+
self.params["branch"] = self.branch.name
120+
self.params["branch_level"] = self.branch.hierarchy_level
98121
self.params["branch_support"] = self.new_node.branch_support
99122

100123
self.params["rel_props_new"] = {
101-
"branch": self.branch.name,
102-
"branch_level": self.branch.hierarchy_level,
103124
"status": RelationshipStatus.ACTIVE.value,
104125
"from": self.at.to_string(),
105126
}
106127

107128
self.params["rel_props_prev"] = {
108-
"branch": self.branch.name,
109-
"branch_level": self.branch.hierarchy_level,
110129
"status": RelationshipStatus.DELETED.value,
111130
"from": self.at.to_string(),
112131
}
@@ -141,12 +160,12 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
141160
LIMIT 1
142161
}
143162
WITH n1 as active_node, rel_outband1 as rel_outband, p1 as peer_node, new_node
144-
WHERE rel_outband.status = "active"
163+
WHERE rel_outband.status = "active" AND rel_outband.to IS NULL
145164
CALL {
146165
%(sub_query_out)s
147166
}
148167
WITH p2 as peer_node, rel_outband, active_node, new_node
149-
FOREACH (i in CASE WHEN rel_outband.branch = $branch_name THEN [1] ELSE [] END |
168+
FOREACH (i in CASE WHEN rel_outband.branch IN ["-global-", $branch] THEN [1] ELSE [] END |
150169
SET rel_outband.to = $current_time
151170
)
152171
WITH active_node, new_node
@@ -160,14 +179,15 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
160179
LIMIT 1
161180
}
162181
WITH n1 as active_node, rel_inband1 as rel_inband, p1 as peer_node, new_node
163-
WHERE rel_inband.status = "active"
182+
WHERE rel_inband.status = "active" AND rel_inband.to IS NULL
164183
CALL {
165184
%(sub_query_in)s
166185
}
167186
WITH p2 as peer_node, rel_inband, active_node, new_node
168-
FOREACH (i in CASE WHEN rel_inband.branch = $branch_name THEN [1] ELSE [] END |
187+
FOREACH (i in CASE WHEN rel_inband.branch IN ["-global-", $branch] THEN [1] ELSE [] END |
169188
SET rel_inband.to = $current_time
170189
)
190+
171191
RETURN DISTINCT new_node
172192
""" % {
173193
"branch_filter": branch_filter,

backend/infrahub/core/migrations/schema/node_remove.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,28 @@
1515

1616
class NodeRemoveMigrationBaseQuery(MigrationQuery):
1717
def render_sub_query_per_rel_type(
18-
self, rel_name: str, rel_type: str, rel_def: FieldInfo, direction: GraphRelDirection
18+
self,
19+
rel_name: str,
20+
rel_type: str,
21+
rel_def: FieldInfo,
1922
) -> str:
2023
subquery = [
2124
f"WITH peer_node, {rel_name}, active_node",
2225
f"WITH peer_node, {rel_name}, active_node",
2326
f'WHERE type({rel_name}) = "{rel_type}"',
2427
]
25-
if rel_def.default.direction in [direction, GraphRelDirection.EITHER]:
26-
subquery.append(f"CREATE (active_node)-[:{rel_type} $rel_props ]->(peer_node)")
27-
elif rel_def.default.direction in [direction, GraphRelDirection.EITHER]:
28-
subquery.append(f"CREATE (active_node)<-[:{rel_type} $rel_props ]-(peer_node)")
28+
if rel_def.default.direction in [GraphRelDirection.OUTBOUND, GraphRelDirection.EITHER]:
29+
subquery.append(f"""
30+
CREATE (active_node)-[edge:{rel_type} $rel_props ]->(peer_node)
31+
SET edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
32+
SET edge.branch_level = CASE WHEN {rel_name}.branch = "-global-" THEN {rel_name}.branch_level ELSE $branch_level END
33+
""")
34+
elif rel_def.default.direction in [GraphRelDirection.INBOUND, GraphRelDirection.EITHER]:
35+
subquery.append(f"""
36+
CREATE (active_node)<-[edge:{rel_type} $rel_props ]-(peer_node)
37+
SET edge.branch = CASE WHEN {rel_name}.branch = "-global-" THEN "-global-" ELSE $branch END
38+
SET edge.branch_level = CASE WHEN {rel_name}.branch = "-global-" THEN {rel_name}.branch_level ELSE $branch_level END
39+
""")
2940
subquery.append("RETURN peer_node as p2")
3041
return "\n".join(subquery)
3142

@@ -38,10 +49,10 @@ async def query_init(self, db: InfrahubDatabase, **kwargs: dict[str, Any]) -> No
3849

3950
self.params["current_time"] = self.at.to_string()
4051
self.params["branch_name"] = self.branch.name
52+
self.params["branch"] = self.branch.name
53+
self.params["branch_level"] = self.branch.hierarchy_level
4154

4255
self.params["rel_props"] = {
43-
"branch": self.branch.name,
44-
"branch_level": self.branch.hierarchy_level,
4556
"status": RelationshipStatus.DELETED.value,
4657
"from": self.at.to_string(),
4758
}
@@ -99,7 +110,7 @@ def render_node_remove_query(self, branch_filter: str) -> str:
99110
%(sub_query)s
100111
}
101112
WITH p2 as peer_node, rel_inband, active_node
102-
FOREACH (i in CASE WHEN rel_inband.branch = $branch_name THEN [1] ELSE [] END |
113+
FOREACH (i in CASE WHEN rel_inband.branch IN ["-global-", $branch] THEN [1] ELSE [] END |
103114
SET rel_inband.to = $current_time
104115
)
105116
""" % {"sub_query": sub_query, "branch_filter": branch_filter}
@@ -108,7 +119,9 @@ def render_node_remove_query(self, branch_filter: str) -> str:
108119
def render_sub_query_in(self) -> str:
109120
sub_queries_in = [
110121
self.render_sub_query_per_rel_type(
111-
rel_name="rel_inband", rel_type=rel_type, rel_def=rel_def, direction=GraphRelDirection.INBOUND
122+
rel_name="rel_inband",
123+
rel_type=rel_type,
124+
rel_def=rel_def,
112125
)
113126
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
114127
]
@@ -142,8 +155,7 @@ def render_node_remove_query(self, branch_filter: str) -> str:
142155
CALL {
143156
%(sub_query)s
144157
}
145-
WITH p2 as peer_node, rel_outband, active_node
146-
FOREACH (i in CASE WHEN rel_outband.branch = $branch_name THEN [1] ELSE [] END |
158+
FOREACH (i in CASE WHEN rel_outband.branch IN ["-global-", $branch] THEN [1] ELSE [] END |
147159
SET rel_outband.to = $current_time
148160
)
149161
""" % {"sub_query": sub_query, "branch_filter": branch_filter}
@@ -153,7 +165,9 @@ def render_node_remove_query(self, branch_filter: str) -> str:
153165
def render_sub_query_out(self) -> str:
154166
sub_queries_out = [
155167
self.render_sub_query_per_rel_type(
156-
rel_name="rel_outband", rel_type=rel_type, rel_def=rel_def, direction=GraphRelDirection.OUTBOUND
168+
rel_name="rel_outband",
169+
rel_type=rel_type,
170+
rel_def=rel_def,
157171
)
158172
for rel_type, rel_def in GraphNodeRelationships.model_fields.items()
159173
]

0 commit comments

Comments
 (0)