Skip to content

Commit 9644387

Browse files
authored
Merge branch 'main' into OCEAN-27-MULTIPLE-WORKERS-DOC-GITHUB-OCEAN
2 parents ff39d23 + a243baf commit 9644387

25 files changed

+654
-112
lines changed

.github/workflows/claude-pr-reviewer.yml

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ jobs:
3535
runs-on: ubuntu-latest
3636
permissions:
3737
contents: read
38-
pull-requests: read
39-
issues: read
38+
pull-requests: write
39+
issues: write
4040
id-token: write
4141
steps:
4242
- name: Checkout repository
@@ -49,6 +49,23 @@ jobs:
4949
git config --global user.name "Port Claude AI"
5050
git config --global user.email "port-claude-ai@port.io"
5151
52+
- name: Find and Delete Last Claude Comment
53+
env:
54+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
55+
run: |
56+
echo "Looking for the last Claude comment to delete..."
57+
58+
# Get the last Claude comment ID (trying common patterns)
59+
last_claude_comment=$(gh api repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments \
60+
--jq '.[] | select(.user.login | test("claude"; "i")) | .id' | tail -1)
61+
62+
if [ ! -z "$last_claude_comment" ]; then
63+
echo "Deleting last Claude comment ID: $last_claude_comment"
64+
gh api repos/${{ github.repository }}/issues/comments/$last_claude_comment -X DELETE
65+
else
66+
echo "No Claude comments found to delete"
67+
fi
68+
5269
- name: Run Claude PR Action
5370
uses: anthropics/claude-code-action@beta
5471
with:

docs/actions-and-automations/define-automations/setup-trigger.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,13 @@ The table below describes the fields in the JSON structure under the `trigger` k
247247
| **`type`** | The automation's trigger type. Should be set to `automation`. |
248248
| **`event`** | An object containing data about the event that triggers the automation. |
249249
| **`event.type`** | The [trigger event type](/actions-and-automations/define-automations/setup-trigger#available-triggers). |
250-
| **`event.blueprintIdentifier`**<br/>or<br/>**`event.actionIdentifier`** | If using an *entity trigger* - the identifier of the blueprint whose entities will trigger the automation.<br/>If using an *action run trigger* - the identifier of the action whose runs will trigger the automation. |
250+
| **`event.blueprintIdentifier`**<br/>or<br/>**`event.actionIdentifier`** | If using an *entity trigger* - the identifier of the blueprint whose entities will trigger the automation.<br/>If using an *action run trigger* - the identifier of the action/automation whose runs will trigger the automation. |
251251
| `condition` | An optional object containing `jq` expressions used to determine which entities the automation will be triggered for. |
252252
| `condition.type` | The type of condition. Should be set to `JQ`. |
253253
| `condition.expressions` | An array of expressions used to filter the entities for which the automation will be triggered. |
254254
| `condition.combinator` | The combinator used to combine the expressions. Should be set to `and` or `or`. |
255+
256+
:::tip Automation action identifiers
257+
When using the `actionIdentifier` key, you can use an identifier that belongs to an automation as well.
258+
This means that automations can be triggered by other automations and are not limited to self-service actions.
259+
:::

docs/ai-agents/port-mcp-server.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ import TabItem from "@theme/TabItem"
88

99
# Port MCP server
1010

11+
<center>
12+
<div className="video-container">
13+
<iframe
14+
style={{borderRadius:'4px'}}
15+
width="568"
16+
height="320"
17+
src="https://www.youtube.com/embed/hxUTTPSApQs"
18+
title="YouTube video player"
19+
frameborder="0"
20+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
21+
allowfullscreen>
22+
</iframe>
23+
</div>
24+
</center>
25+
<br/>
1126

1227
The Port Model Context Protocol (MCP) Server acts as a bridge, enabling Large Language Models (LLMs)—like those powering Claude, Cursor, or GitHub Copilot—to interact directly with your Port.io developer portal. This allows you to leverage natural language to query your software catalog, analyze service health, manage resources, and even streamline development workflows, all from your preferred interfaces.
1328

docs/build-your-software-catalog/sync-data-to-catalog/git/azure-devops/_azuredevops_exporter_example_monorepo_port_app_config.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ resources:
1818
mappings:
1919
identifier: .objectId
2020
title: .path
21-
url: .__repository.url
22-
blueprint: '"azureDevopsRepository"'
21+
url: .__repository.remoteUrl
22+
blueprint: '"service"'
2323
properties:
2424
defaultBranch: .__repository.defaultBranch
2525
relations:

docs/build-your-software-catalog/sync-data-to-catalog/git/azure-devops/_azuredevops_exporter_example_port_app_config.mdx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ resources:
2626
port:
2727
entity:
2828
mappings:
29-
identifier: "\(.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.name | ascii_downcase | gsub("[ ();]"; ""))"
29+
identifier: >-
30+
"\(.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.name | ascii_downcase | gsub("[ ();]"; ""))"
3031
title: .name
31-
blueprint: '"azureDevopsRepository"'
32+
blueprint: '"service"'
3233
properties:
33-
url: .url
34+
url: .remoteUrl
3435
readme: file://README.md
3536
relations:
3637
project: .project.id | gsub(" "; "")
@@ -40,8 +41,9 @@ resources:
4041
port:
4142
entity:
4243
mappings:
43-
identifier: '.__repository.project.name + "/" + .__repository.name | gsub(" "; "")'
44-
blueprint: '"azureDevopsRepository"'
44+
identifier: >-
45+
"\(.__repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.__repository.name | ascii_downcase | gsub("[ ();]"; ""))"
46+
blueprint: '"service"'
4547
properties:
4648
minimumApproverCount: .settings.minimumApproverCount
4749
- kind: repository-policy
@@ -50,8 +52,9 @@ resources:
5052
port:
5153
entity:
5254
mappings:
53-
identifier: '.__repository.project.name + "/" + .__repository.name | gsub(" "; "")'
54-
blueprint: '"azureDevopsRepository"'
55+
identifier: >-
56+
"\(.__repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.__repository.name | ascii_downcase | gsub("[ ();]"; ""))"
57+
blueprint: '"service"'
5558
properties:
5659
workItemLinking: .isEnabled and .isBlocking
5760
- kind: pull-request
@@ -61,13 +64,10 @@ resources:
6164
entity:
6265
mappings:
6366
identifier: >-
64-
.repository.project.name + "/" + .repository.name + (.pullRequestId
65-
| tostring) | gsub(" "; "")
67+
"\(.repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.repository.name | ascii_downcase | gsub("[ ();]"; ""))/\(.pullRequestId | tostring)"
6668
blueprint: '"azureDevopsPullRequest"'
6769
properties:
68-
creator: .createdBy.uniqueName
6970
status: .status
70-
reviewers: '[.reviewers[].uniqueName]'
7171
createdAt: .creationDate
7272
leadTimeHours: >-
7373
(.creationDate as $createdAt | .status as $status | .closedDate as $closedAt |
@@ -78,7 +78,10 @@ resources:
7878
(((($closedTimestamp - $createdTimestamp) / 3600) * 100 | floor) / 100)
7979
else null end)
8080
relations:
81-
repository: '.repository.project.name + "/" + .repository.name | gsub(" "; "")'
81+
service: >-
82+
"\(.repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.repository.name | ascii_downcase | gsub("[ ();]"; ""))"
83+
creator: .createdBy.uniqueName
84+
reviewers: '[.reviewers[].uniqueName]'
8285
```
8386
8487
</details>

docs/build-your-software-catalog/sync-data-to-catalog/git/azure-devops/_azuredevops_exporter_example_pull_request_blueprint.mdx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88
"icon": "AzureDevops",
99
"schema": {
1010
"properties": {
11-
"creator": {
12-
"title": "Creator",
13-
"type": "string"
14-
},
1511
"status": {
1612
"title": "Status",
1713
"type": "string",
@@ -26,14 +22,6 @@
2622
"active": "green"
2723
}
2824
},
29-
"reviewers": {
30-
"type": "array",
31-
"title": "Reviewers",
32-
"items": {
33-
"type": "string",
34-
"format": "user"
35-
}
36-
},
3725
"createdAt": {
3826
"title": "Create At",
3927
"type": "string",
@@ -55,11 +43,23 @@
5543
"calculationProperties": {},
5644
"aggregationProperties": {},
5745
"relations": {
58-
"repository": {
59-
"title": "Repository",
60-
"target": "azureDevopsRepository",
46+
"service": {
47+
"title": "Service",
48+
"target": "service",
6149
"required": false,
6250
"many": false
51+
},
52+
"creator": {
53+
"title": "Creator",
54+
"target": "azureDevopsUser",
55+
"required": false,
56+
"many": false
57+
},
58+
"reviewers": {
59+
"title": "Reviewers",
60+
"target": "azureDevopsUser",
61+
"required": false,
62+
"many": true
6363
}
6464
}
6565
}

docs/build-your-software-catalog/sync-data-to-catalog/git/azure-devops/_azuredevops_exporter_example_repository_blueprint.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
```json showLineNumbers
55
{
6-
"identifier": "azureDevopsRepository",
7-
"title": "Repository",
6+
"identifier": "service",
7+
"title": "Service",
88
"icon": "AzureDevops",
99
"schema": {
1010
"properties": {

docs/build-your-software-catalog/sync-data-to-catalog/git/azure-devops/azure-devops.md

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ resources:
5353
entity:
5454
mappings:
5555
identifier: .id | gsub(" "; "")
56-
blueprint: '"azureDevopsProject"'
56+
blueprint: '"project"'
5757
title: .name
5858
properties:
5959
state: .state
@@ -67,11 +67,12 @@ resources:
6767
port:
6868
entity:
6969
mappings:
70-
identifier: .project.name + "/" + .name | gsub(" "; "")
70+
identifier: >-
71+
"\(.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.name | ascii_downcase | gsub("[ ();]"; ""))"
7172
title: .name
72-
blueprint: '"azureDevopsRepository"'
73+
blueprint: '"service"'
7374
properties:
74-
url: .url
75+
url: .remoteUrl
7576
readme: file://README.md
7677
id: .id
7778
last_activity: .project.lastUpdateTime
@@ -83,8 +84,9 @@ resources:
8384
port:
8485
entity:
8586
mappings:
86-
identifier: .__repository.project.name + "/" + .__repository.name | gsub(" "; "")
87-
blueprint: '"azureDevopsRepository"'
87+
identifier: >-
88+
"\(.__repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.__repository.name | ascii_downcase | gsub("[ ();]"; ""))"
89+
blueprint: '"service"'
8890
properties:
8991
minimumApproverCount: .settings.minimumApproverCount
9092
- kind: repository-policy
@@ -93,8 +95,9 @@ resources:
9395
port:
9496
entity:
9597
mappings:
96-
identifier: .__repository.project.name + "/" + .__repository.name | gsub(" "; "")
97-
blueprint: '"azureDevopsRepository"'
98+
identifier: >-
99+
"\(.__repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.__repository.name | ascii_downcase | gsub("[ ();]"; ""))"
100+
blueprint: '"service"'
98101
properties:
99102
workItemLinking: .isEnabled and .isBlocking
100103
- kind: user
@@ -131,7 +134,8 @@ resources:
131134
port:
132135
entity:
133136
mappings:
134-
identifier: .repository.project.name + "/" + .repository.name + (.pullRequestId | tostring) | gsub(" "; "")
137+
identifier: >-
138+
"\(.repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.repository.name | ascii_downcase | gsub("[ ();]"; ""))/\(.pullRequestId | tostring)"
135139
blueprint: '"azureDevopsPullRequest"'
136140
properties:
137141
status: .status
@@ -159,11 +163,6 @@ resources:
159163
value: '[.reviewers[].uniqueName]'
160164
azure_devops_reviewers: '[.reviewers[].id]'
161165
azure_devops_creator: .createdBy.id
162-
163-
164-
165-
166-
167166
```
168167
169168
</details>
@@ -888,9 +887,9 @@ The combination of the sample payload and the Ocean configuration generates the
888887

889888
```json showLineNumbers
890889
{
891-
"identifier": "PortIntegration/final_project_to_project_test",
890+
"identifier": "portintegration/final_project_to_project_test",
892891
"title": "final_project_to_project_test",
893-
"blueprint": "azureDevopsRepository",
892+
"blueprint": "service",
894893
"properties": {
895894
"url": "[REDACTED]/fd029361-7854-4cdd-8ace-bb033fca399c/_apis/git/repositories/43c319c8-5adc-41f8-8486-745fe2130cd6",
896895
"readme": "<README.md Content>",

docs/build-your-software-catalog/sync-data-to-catalog/git/azure-devops/example-teams/_azuredevops_exporter_example_teams_port_app_config.mdx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ resources:
2626
port:
2727
entity:
2828
mappings:
29-
identifier: '.project.name + "/" + .name | gsub(" "; "")'
29+
identifier: >-
30+
"\(.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.name | ascii_downcase | gsub("[ ();]"; ""))"
3031
title: .name
31-
blueprint: '"azureDevopsRepository"'
32+
blueprint: '"service"'
3233
properties:
33-
url: .url
34+
url: .remoteUrl
3435
readme: file://README.md
3536
relations:
3637
project: .project.id | gsub(" "; "")
@@ -40,8 +41,9 @@ resources:
4041
port:
4142
entity:
4243
mappings:
43-
identifier: '.__repository.project.name + "/" + .__repository.name | gsub(" "; "")'
44-
blueprint: '"azureDevopsRepository"'
44+
identifier: >-
45+
"\(.__repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.__repository.name | ascii_downcase | gsub("[ ();]"; ""))"
46+
blueprint: '"service"'
4547
properties:
4648
minimumApproverCount: .settings.minimumApproverCount
4749
- kind: repository-policy
@@ -50,8 +52,9 @@ resources:
5052
port:
5153
entity:
5254
mappings:
53-
identifier: '.__repository.project.name + "/" + .__repository.name | gsub(" "; "")'
54-
blueprint: '"azureDevopsRepository"'
55+
identifier: >-
56+
"\(.__repository.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.__repository.name | ascii_downcase | gsub("[ ();]"; ""))"
57+
blueprint: '"service"'
5558
properties:
5659
workItemLinking: .isEnabled and .isBlocking
5760
- kind: team

docs/build-your-software-catalog/sync-data-to-catalog/git/azure-devops/mapping_extensions.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ To do so, we will use the `file://` prefix with the path of the file to tell the
3737
port:
3838
entity:
3939
mappings:
40-
identifier: .project.name + "/" + .name
40+
identifier: >-
41+
"\(.project.name | ascii_downcase | gsub("[ ();]"; ""))/\(.name | ascii_downcase | gsub("[ ();]"; ""))"
4142
title: .name
42-
blueprint: '"azureDevopsRepository"'
43+
blueprint: '"service"'
4344
properties:
44-
url: .url
45+
url: .remoteUrl
4546
// highlight-next-line
4647
readme: file://README.md
4748
```

0 commit comments

Comments
 (0)