From 09f784989ee0f1ea6e6cbbf3d4d41e9c9103381a Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Mon, 12 May 2025 17:13:23 +0100 Subject: [PATCH 01/42] Initial setup for Github-v2 documentation --- .../git/github-v2/_category_.json | 4 ++++ .../_github_exporter_supported_resources.mdx | 17 +++++++++++++++++ .../git/github-v2/github-v2.md | 18 ++++++++++++++++++ .../git/github-v2/installation.md | 3 +++ 4 files changed, 42 insertions(+) create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_category_.json create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_github_exporter_supported_resources.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/github-v2.md create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/installation.md diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_category_.json b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_category_.json new file mode 100644 index 000000000..d5df8a75d --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Github V2", + "position": 1 +} diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_github_exporter_supported_resources.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_github_exporter_supported_resources.mdx new file mode 100644 index 000000000..3af8b2e56 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_github_exporter_supported_resources.mdx @@ -0,0 +1,17 @@ +- [`repository`](https://docs.github.com/en/rest/repos/repos#get-a-repository) +{/* - [`pull-request`](https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request) */} +{/* - [`environment`](https://docs.github.com/en/rest/deployments/environments#get-an-environment) */} +{/* - [`deployment`](https://docs.github.com/en/rest/deployments/deployments#get-a-deployment) */} +{/* - [`workflow`](https://docs.github.com/en/rest/actions/workflows#get-a-workflow) */} +{/* - [`workflow-run`](https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run) */} +{/* - [`issue`](https://docs.github.com/en/rest/issues/issues#get-an-issue) */} +{/* - [`folder`](https://docs.github.com/en/rest/git/trees#get-a-tree) */} +{/* - [`file`](/build-your-software-catalog/sync-data-to-catalog/git/github/#ingest-files-from-your-repositories) */} +{/* - [`user`](https://docs.github.com/en/rest/users/users#get-a-user) */} +{/* - [`team`](https://docs.github.com/en/rest/teams/teams#get-a-team-by-name) */} +{/* - [`dependabot-alert`](https://docs.github.com/en/rest/dependabot/alerts#list-dependabot-alerts-for-a-repository) */} +{/* - [`branches`](https://docs.github.com/en/rest/branches/branches#get-a-branch) */} +{/* - [`code-scanning`](https://docs.github.com/en/rest/code-scanning/code-scanning#list-code-scanning-alerts-for-a-repository) */} +{/* - [`releases`](https://docs.github.com/en/rest/releases/releases#list-releases) */} +{/*- [`tags`](https://docs.github.com/en/rest/repos/repos#list-repository-tags) */} + diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/github-v2.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/github-v2.md new file mode 100644 index 000000000..1f5d3a06c --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/github-v2.md @@ -0,0 +1,18 @@ +import GitHubResources from './\_github_exporter_supported_resources.mdx' + +# Github V2 + +Port's GitHub integration allows you to model GitHub resources in your software catalog and ingest data into them. + +## Overview + +This integration allows you to: + +- Map and organize your desired GitHub resources and their metadata in Port (see supported resources below). +- Watch for GitHub object changes (create/update/delete) in real-time, and automatically apply the changes to your software catalog. +- Manage Port entities using GitOps. +- Trigger GitHub workflows directly from Port. + +## Supported Resources + + diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/installation.md new file mode 100644 index 000000000..cd3b9a391 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/installation.md @@ -0,0 +1,3 @@ +--- +sidebar_position: 1 +--- From 29891099ff70923d66d9ab26af6f5645b9706a8f Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 08:43:17 +0100 Subject: [PATCH 02/42] Rename documentation directory to Github ocean --- .../git/github-ocean/_category_.json | 4 + .../_github_docker_parameters.mdx | 10 + .../_github_exporter_supported_resources.mdx | 17 + .../git/github-ocean/advanced.md | 123 ++++ .../git/github-ocean/examples/_category_.json | 4 + ...ithub_exporter_example_port_app_config.mdx | 52 ++ ...xporter_example_pull_request_blueprint.mdx | 84 +++ ..._exporter_example_repository_blueprint.mdx | 34 ++ ..._git_exporter_example_branch_blueprint.mdx | 43 ++ ...er_example_branch_protection_blueprint.mdx | 111 ++++ ...ter_example_last_contributor_blueprint.mdx | 47 ++ ...xporter_example_branch_port_app_config.mdx | 35 ++ ...mple_branch_protection_port_app_config.mdx | 48 ++ ...ample_last_contributor_port_app_config.mdx | 31 + ..._exporter_example_deployment_blueprint.mdx | 58 ++ ...ments_and_environments_port_app_config.mdx | 59 ++ ...exporter_example_environment_blueprint.mdx | 51 ++ .../_example_package_blueprint.mdx | 34 ++ .../_package_json_app_config.mdx | 29 + .../_git_exporter_example_issue_blueprint.mdx | 76 +++ ...exporter_example_issue_port_app_config.mdx | 44 ++ ...orter_example_monorepo_port_app_config.mdx | 26 + ...ository_with_admins_relation_blueprint.mdx | 38 ++ ...r_example_admins_users_port_app_config.mdx | 48 ++ ...xporter_example_github_users_blueprint.mdx | 32 ++ ...ithub_exporter_example_users_blueprint.mdx | 25 + ...orter_example_codeScan_alert_blueprint.mdx | 48 ++ ...ter_example_dependabot_alert_blueprint.mdx | 102 ++++ ...xample_repo_dependabot_port_app_config.mdx | 63 ++ ...mple_custom_properties_port_app_config.mdx | 27 + ...itory_with_custom_properties_blueprint.mdx | 41 ++ ...thub_exporter_example_folder_blueprint.mdx | 37 ++ ...xporter_example_pull_request_blueprint.mdx | 68 +++ ...r_example_repo_folders_port_app_config.mdx | 64 +++ ...hub_exporter_example_release_blueprint.mdx | 48 ++ ...er_example_release_tag_port_app_config.mdx | 51 ++ ..._github_exporter_example_tag_blueprint.mdx | 34 ++ ...pository_with_teams_relation_blueprint.mdx | 42 ++ .../_github_export_example_team_blueprint.mdx | 42 ++ ..._repository_with_teams_port_app_config.mdx | 42 ++ ...it_exporter_example_workflow_blueprint.mdx | 66 +++ ...xporter_example_workflow_run_blueprint.mdx | 114 ++++ ...xporter_example_wf_wfr_port_app_config.mdx | 62 ++ .../examples/resource-mapping-examples.md | 340 +++++++++++ .../git/github-ocean/github-ocean.md | 539 ++++++++++++++++++ .../git/github-ocean/gitops/_category_.json | 4 + .../git/github-ocean/gitops/gitops.md | 173 ++++++ .../git/github-ocean/installation.md | 406 +++++++++++++ .../github-ocean/self-hosted-installation.md | 160 ++++++ .../git/github-v2/_category_.json | 4 - .../_github_exporter_supported_resources.mdx | 17 - .../git/github-v2/github-v2.md | 18 - .../git/github-v2/installation.md | 3 - 53 files changed, 3736 insertions(+), 42 deletions(-) create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_category_.json create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_exporter_supported_resources.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/advanced.md create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_category_.json create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_pull_request_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_repository_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_protection_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_last_contributor_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_protection_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_last_contributor_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployment_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployments_and_environments_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_environment_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_example_package_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_git_exporter_example_issue_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_github_exporter_example_issue_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-monorepo/_github_exporter_example_monorepo_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_export_example_repository_with_admins_relation_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_admins_users_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_github_users_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_users_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_codeScan_alert_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_dependabot_alert_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_repo_dependabot_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_custom_properties_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_repository_with_custom_properties_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_folder_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_pull_request_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_repo_folders_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_tag_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_tag_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_repository_with_teams_relation_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_team_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_exporter_example_repository_with_teams_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_run_blueprint.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_github_exporter_example_wf_wfr_port_app_config.mdx create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/_category_.json create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md create mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_category_.json delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_github_exporter_supported_resources.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/github-v2.md delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/installation.md diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_category_.json b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_category_.json new file mode 100644 index 000000000..8dfd91e52 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "GitHub Ocean", + "position": 1 +} diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx new file mode 100644 index 000000000..0743141c5 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx @@ -0,0 +1,10 @@ +| Parameter | Description | Example | Required | +| --------- | ----------- | ------- | -------- | +| `OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN` | The GitLab access token used to authenticate with your GitLab instance | | ✅ | +| `OCEAN__INTEGRATION__CONFIG__GITLAB_URL` | The URL of your GitLab instance (e.g., https://gitlab.com or your self-hosted URL) | | ✅ | +| `OCEAN__BASE_URL` | The URL of your GitLab integration instance, used for real-time updates | | ❌ | +| `OCEAN__PORT__CLIENT_ID` | Your Port client ([How to get the credentials](https://docs.port.io/build-your-software-catalog/custom-integration/api/#find-your-port-credentials)) id | | ✅ | +| `OCEAN__PORT__CLIENT_SECRET` | Your Port client ([How to get the credentials](https://docs.port.io/build-your-software-catalog/custom-integration/api/#find-your-port-credentials)) secret | | ✅ | +| `OCEAN__PORT__BASE_URL` | Your Port API URL - `https://api.getport.io` for EU, `https://api.us.getport.io` for US | | ✅ | +| `OCEAN__INITIALIZE_PORT_RESOURCES` | Default true, When set to true the integration will create default blueprints and the port App config Mapping. Read more about [initializePortResources](https://ocean.getport.io/develop-an-integration/integration-configuration/#initializeportresources---initialize-port-resources) | | ❌ | +| `OCEAN__INTEGRATION__IDENTIFIER` | The identifier of the integration that will be installed | | ❌ | \ No newline at end of file diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_exporter_supported_resources.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_exporter_supported_resources.mdx new file mode 100644 index 000000000..a6982fa7a --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_exporter_supported_resources.mdx @@ -0,0 +1,17 @@ +- [`repository`](https://docs.github.com/en/rest/repos/repos#get-a-repository) +- [`pull-request`](https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request) +- [`environment`](https://docs.github.com/en/rest/deployments/environments#get-an-environment) +- [`deployment`](https://docs.github.com/en/rest/deployments/deployments#get-a-deployment) +- [`workflow`](https://docs.github.com/en/rest/actions/workflows#get-a-workflow) +- [`workflow-run`](https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run) +- [`issue`](https://docs.github.com/en/rest/issues/issues#get-an-issue) +- [`folder`](https://docs.github.com/en/rest/git/trees#get-a-tree) +- [`file`](/build-your-software-catalog/sync-data-to-catalog/git/github/#ingest-files-from-your-repositories) +- [`user`](https://docs.github.com/en/rest/users/users#get-a-user) +- [`team`](https://docs.github.com/en/rest/teams/teams#get-a-team-by-name) +- [`dependabot-alert`](https://docs.github.com/en/rest/dependabot/alerts#list-dependabot-alerts-for-a-repository) +- [`branches`](https://docs.github.com/en/rest/branches/branches#get-a-branch) +- [`code-scanning`](https://docs.github.com/en/rest/code-scanning/code-scanning#list-code-scanning-alerts-for-a-repository) +- [`releases`](https://docs.github.com/en/rest/releases/releases#list-releases) +- [`tags`](https://docs.github.com/en/rest/repos/repos#list-repository-tags) + diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/advanced.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/advanced.md new file mode 100644 index 000000000..b27cbbb43 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/advanced.md @@ -0,0 +1,123 @@ +--- +sidebar_position: 4 +--- + +import Tabs from "@theme/Tabs" +import TabItem from "@theme/TabItem" +import DeleteDependents from '../../../../generalTemplates/\_delete_dependents_git_explanation_template.md' + +# Advanced + +The GitHub integration supports additional flags to provide additional configuration, making it easier to configure its behavior to your liking. + +To use the advanced configuration and additional flags, add them as a root key to your [`port-app-config.yml`](./github.md#port-app-configyml-file) file, for example to add the +`createMissingRelatedEntities` flag: + +```yaml showLineNumbers +# highlight-next-line +createMissingRelatedEntities: false +resources: + - kind: pull-request + selector: + query: "true" + port: + entity: + mappings: + ... mappings configuration +``` + +## Using advanced configurations + +The following advanced configuration parameters are available and can be added to the [`port-app-config.yml`](./github.md#port-app-configyml-file) file: + + + + + +The `specPath` parameter specifies a list of [globPatterns](https://www.malikbrowne.com/blog/a-beginners-guide-glob-patterns) that Port's GitHub app will search for `port.yml` files in. + +- Default value: `**/port.yml` +- Use case: + - If you want the app to scan a different file than `port.yml` (for example, change configure the app to scan files named `my-port-config.yml` using the pattern `**/my-port-config.yml`); + - If you want the app to ignore `port.yml` files in certain paths. + + + + + + + +- Default: `false` (disabled) +- Use case: Deletion of dependent Port entities. Must be enabled, if you want to delete a target entity (and its source entities) in a required relation. + + + + + +The `enableMergeEntity` parameter specifies whether to use the [create/update](/build-your-software-catalog/custom-integration/api?operation=create-update#usage) or [create/override](/build-your-software-catalog/custom-integration/api?operation=create-override#usage) strategy when creating entities listed in a `port.yml` file. + +- Default value: `true` (use create/update) +- Use case: use `false` if you want GitHub to be the source-of-truth for catalog entities. Use `true` if you want to use GitHub as the source for some properties of entities in the catalog, and use other sources to for properties which are subject to change automatically. + + + + + +The `createMissingRelatedEntities` parameter is used to enable the creation of missing related Port entities automatically in cases where the target related entity does not exist in the software catalog yet. + +- Default value: `true` to allow the GitHub app to create barebones related entities, in case those related entities do not exist in the software catalog. +- Use case: use `false` if you do not want this default behavior (do not create missing related entities). + + + + + +The `enrichEntitiesWithGitopsMetadata` parameter is used to enable the enrichment of Port entities that are managed by GitOps with additional metadata. + +When the parameter is active, ingesting entities listed in a `port.yml` file to Port will include additional information such as the spec file path (for example: `port.yml`, `/path/to/port.yml`, etc.), the latest commit information and more. + +The additional information is reported as a JSON object property in your GitOps managed entities. In order to view the information, your respective [blueprint](/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/setup-blueprint.md) needs to include an [object property](/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/object.md) to store the metadata. The default identifier this parameter sends data to is `gitopsMetadata`. + +- Default value: `true` (enrich entities with GitOps metadata) +- Use case: use `true` if you want the GitHub app to enrich the Port entities managed by GitOps with additional JSON metadata. + - Use the `gitopsMetadataProperty` to change the identifier of the `object` property, according to your blueprint schema definition (default property identifier: `gitopsMetadata`). + +**Configuration example** + +```yaml showLineNumbers +enrichEntitiesWithGitopsMetadata: true +gitopsMetadataProperty: myGitopsMetadata # the GitOps metadata will be sent to the "myGitopsMetadata" property of the blueprint's entities +``` + + + + + +Use the `closedPullRequests` parameter to enable the fetching of closed pull requests on re-sync. + +- Default value: `false` (do not fetch closed pull requests). +- Use case: Useful for analyzing closed pull request history, such as DORA metrics. + + +Port will fetch the last 100 updated closed pull requests or those from the past 60 days, whichever comes first. + + +**Configuration example** + +```yaml showLineNumbers +integrationConfig: + resources: + - kind: pull-request + selector: + query: "true" +# highlight-next-line + closedPullRequests: true + port: + entity: + mappings: + ... mappings configuration +``` + + + + diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_category_.json b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_category_.json new file mode 100644 index 000000000..4810441a0 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "Examples", + "position": 2 +} diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_port_app_config.mdx new file mode 100644 index 000000000..ed0d62c2a --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_port_app_config.mdx @@ -0,0 +1,52 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".name" # The Entity identifier will be the repository name. + title: ".name" + blueprint: '"githubRepository"' + properties: + readme: file://README.md # fetching the README.md file that is within the root folder of the repository and ingesting its contents as a markdown property + url: .html_url + defaultBranch: .default_branch + - kind: pull-request + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".head.repo.name + (.id|tostring)" # The Entity identifier will be the repository name + the pull request ID. + title: ".title" + blueprint: '"githubPullRequest"' + properties: + creator: ".user.login" + assignees: "[.assignees[].login]" + reviewers: "[.requested_reviewers[].login]" + status: ".status" # merged, closed, opened + closedAt: ".closed_at" + updatedAt: ".updated_at" + mergedAt: ".merged_at" + createdAt: ".created_at" + prNumber: ".id" + link: ".html_url" + leadTimeHours: >- + (.created_at as $createdAt | .merged_at as $mergedAt | + ($createdAt | sub("\\..*Z$"; "Z") | strptime("%Y-%m-%dT%H:%M:%SZ") | mktime) as $createdTimestamp | + ($mergedAt | if . == null then null else sub("\\..*Z$"; "Z") | + strptime("%Y-%m-%dT%H:%M:%SZ") | mktime end) as $mergedTimestamp | + if $mergedTimestamp == null then null else + (((($mergedTimestamp - $createdTimestamp) / 3600) * 100 | floor) / 100) end) + + relations: + repository: .head.repo.name +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_pull_request_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_pull_request_blueprint.mdx new file mode 100644 index 000000000..3fce83007 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_pull_request_blueprint.mdx @@ -0,0 +1,84 @@ +
+Pull request blueprint + +```json showLineNumbers +{ + "identifier": "githubPullRequest", + "title": "Pull Request", + "icon": "Github", + "schema": { + "properties": { + "creator": { + "title": "Creator", + "type": "string" + }, + "assignees": { + "title": "Assignees", + "type": "array" + }, + "reviewers": { + "title": "Reviewers", + "type": "array" + }, + "status": { + "title": "Status", + "type": "string", + "enum": ["merged", "open", "closed"], + "enumColors": { + "merged": "purple", + "open": "green", + "closed": "red" + } + }, + "closedAt": { + "title": "Closed At", + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "title": "Updated At", + "type": "string", + "format": "date-time" + }, + "mergedAt": { + "title": "Merged At", + "type": "string", + "format": "date-time" + }, + "createdAt": { + "title": "Created At", + "type": "string", + "format": "date-time" + }, + "link": { + "format": "url", + "type": "string" + }, + "leadTimeHours": { + "title": "Lead Time in hours", + "type": "number" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": { + "days_old": { + "title": "Days Old", + "icon": "DefaultProperty", + "calculation": "(now / 86400) - (.properties.createdAt | capture(\"(?\\\\d{4}-\\\\d{2}-\\\\d{2})\") | .date | strptime(\"%Y-%m-%d\") | mktime / 86400) | floor", + "type": "number" + } + }, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_repository_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_repository_blueprint.mdx new file mode 100644 index 000000000..f1d8fef28 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_repository_blueprint.mdx @@ -0,0 +1,34 @@ +
+Repository blueprint + +```json showLineNumbers +{ + "identifier": "githubRepository", + "title": "Repository", + "icon": "Microservice", + "schema": { + "properties": { + "readme": { + "title": "README", + "type": "string", + "format": "markdown" + }, + "url": { + "title": "Repository URL", + "type": "string", + "format": "url" + }, + "defaultBranch": { + "title": "Default branch", + "type": "string" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": {} +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_blueprint.mdx new file mode 100644 index 000000000..83930d0dd --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_blueprint.mdx @@ -0,0 +1,43 @@ +
+Branch blueprint + +```json showLineNumbers +{ + "identifier": "branch", + "title": "Branch", + "icon": "Microservice", + "schema": { + "properties": { + "is_protected": { + "title": "Is branch protected", + "type": "boolean", + "icon": "DefaultProperty" + }, + "commit_sha": { + "title": "Commit SHA", + "type": "string", + "icon": "DefaultProperty" + }, + "commit_url": { + "title": "Commit URL", + "type": "string", + "format": "url" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_protection_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_protection_blueprint.mdx new file mode 100644 index 000000000..7df0c270d --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_protection_blueprint.mdx @@ -0,0 +1,111 @@ +
+Branch blueprint + +```json showLineNumbers +{ + "identifier": "branch_protection", + "title": "Branch", + "icon": "Microservice", + "schema": { + "properties": { + "require_approval_count": { + "title": "Require approvals", + "type": "number", + "icon": "DefaultProperty", + "description": "The number of approvals required before merging a pull request" + }, + "is_protected": { + "title": "Is branch protected", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Indicates whether certain rules must be met before changes can be merged" + + }, + "require_code_owner_review": { + "title": "Require code owner review", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Requires review from code owners before a pull request can be merged" + + }, + "allow_deletions": { + "title": "Allow deletions", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Allows users with bypass permissions to delete matching references in the branch" + + }, + "allow_force_pushes": { + "title": "Allow force pushes", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Permits users with push access to force push changes to the branch" + + }, + "url": { + "title": "Branch url", + "type": "string", + "format": "url", + "description": "URL of the branch in the repository" + }, + "require_signed_commits": { + "title": "Require signed commits", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Ensures that commits pushed to the branch are signed" + }, + "require_linear_history": { + "title": "Require linear history", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Enforces a linear history in the branch by preventing merge commits" + }, + "restrict_creations": { + "title": "Restrict creations", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Restricts the creation of matching references in the branch, allowing only users with bypass permissions" + }, + "restrict_updates": { + "title": "Restrict updates", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Prevents updates to matching references in the branch, limiting changes to users with bypass permissions" + }, + "require_conversation_resolution": { + "title": "Require conversation resolution", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Ensures that all comments and conversations are resolved before merging a pull request" + }, + "lock_branch": { + "title": "Lock branch", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Locks the branch, preventing any changes from being made unless explicitly unlocked" + + }, + "block_force_pushes": { + "title": "Block force pushes", + "type": "boolean", + "icon": "DefaultProperty", + "description": "Prevent users with push access from force pushing to refs" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_last_contributor_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_last_contributor_blueprint.mdx new file mode 100644 index 000000000..5e9808a3c --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_last_contributor_blueprint.mdx @@ -0,0 +1,47 @@ +
+Repository blueprint + +```json showLineNumbers +{ + "identifier": "githubRepository", + "title": "Repository", + "icon": "Microservice", + "schema": { + "properties": { + "readme": { + "title": "README", + "type": "string", + "format": "markdown" + }, + "url": { + "title": "Repository URL", + "type": "string", + "format": "url" + }, + "defaultBranch": { + "title": "Default branch", + "type": "string" + }, + "last_contributor": { + "title": "Last contributor", + "icon": "TwoUsers", + "type": "string", + "format": "user" + }, + "last_push": { + "icon": "GitPullRequest", + "title": "Last push", + "description": "Last commit to the main branch", + "type": "string", + "format": "date-time" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": {} +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_port_app_config.mdx new file mode 100644 index 000000000..5e4c7d78c --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_port_app_config.mdx @@ -0,0 +1,35 @@ +
+Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: 'true' + port: + entity: + mappings: + identifier: .name + title: .name + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: branch + selector: + query: 'true' + port: + entity: + mappings: + identifier: .repository.name + "_" + .branch.name + title: .repository.name + " " + .branch.name + blueprint: '"branch"' + properties: + is_protected: .branch.protected + commit_sha: .branch.commit.sha + commit_url: .branch.commit.url + relations: + repository: .repository.name +``` +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_protection_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_protection_port_app_config.mdx new file mode 100644 index 000000000..fde68df5a --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_protection_port_app_config.mdx @@ -0,0 +1,48 @@ +
+Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: 'true' + port: + entity: + mappings: + identifier: .name + title: .name + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: branch + selector: + query: '.repository.default_branch == .branch.name' + port: + entity: + mappings: + identifier: .repository.name + "_" + .branch.name + title: .repository.name + " " + .branch.name + blueprint: '"branch_protection"' + properties: + is_protected: .branch.protected + url: .branch._links.html + require_approval_count: >- + .branch.protectionRules.required_pull_request_reviews.required_approving_review_count + require_code_owner_review: >- + .branch.protectionRules.required_pull_request_reviews.require_code_owner_reviews + allow_force_pushes: .branch.protectionRules.allow_force_pushes.enabled + allow_deletions: .branch.protectionRules.allow_deletions.enabled + require_signed_commits: .branch.protectionRules.required_signatures.enabled + require_linear_history: .branch.protectionRules.required_linear_history.enabled + restrict_creations: .branch.protectionRules.block_creations.enabled + restrict_updates: .branch.protectionRules.restrict_updates.enabled + require_conversation_resolution: >- + .branch.protectionRules.required_conversation_resolution.enabled + lock_branch: .branch.protectionRules.lock_branch.enabled + block_force_pushes: .branch.protectionRules.allow_force_pushes.enabled == false + relations: + repository: .repository.name +``` +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_last_contributor_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_last_contributor_port_app_config.mdx new file mode 100644 index 000000000..389d28694 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_last_contributor_port_app_config.mdx @@ -0,0 +1,31 @@ +
+Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: 'true' + port: + entity: + mappings: + identifier: .name + title: .name + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: branch + selector: + query: '.repository.default_branch == .branch.name' + port: + entity: + mappings: + identifier: .repository.name + blueprint: '"githubRepository"' + properties: + last_contributor: .branch.commit.commit.author.email + last_push: .branch.commit.commit.committer.date +``` +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployment_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployment_blueprint.mdx new file mode 100644 index 000000000..de1a2263e --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployment_blueprint.mdx @@ -0,0 +1,58 @@ +
+Deployment blueprint + +```json showLineNumbers +{ + "identifier": "deployment", + "title": "Deployment", + "icon": "Deployment", + "schema": { + "properties": { + "description": { + "title": "Description", + "type": "string" + }, + "ref": { + "title": "Ref", + "type": "string" + }, + "sha": { + "title": "Sha", + "type": "string" + }, + "transientEnvironment": { + "title": "Transient Running Service", + "type": "boolean" + }, + "productionEnvironment": { + "title": "Production Running Service", + "type": "boolean" + }, + "createdAt": { + "title": "Created At", + "type": "string", + "format": "date-time" + }, + "url": { + "title": "URL", + "type": "string", + "icon": "Link", + "format": "url" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": { + "runningService": { + "title": "Running Service", + "target": "githubRepoEnvironment", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployments_and_environments_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployments_and_environments_port_app_config.mdx new file mode 100644 index 000000000..1707950ad --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployments_and_environments_port_app_config.mdx @@ -0,0 +1,59 @@ +
+ + Port port-app-config.yml + +```yaml +createMissingRelatedEntities: true +resources: + - kind: repository + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".name" # The Entity identifier will be the repository name. + title: ".name" + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: environment + selector: + query: "true" + port: + entity: + mappings: + identifier: .repo + '-' + .name + title: .name + blueprint: '"githubRepoEnvironment"' + properties: + url: .html_url + customBranchesPolicies: .custom_branches_policies + protectedBranches: .protected_branches + createdAt: .created_at + updatedAt: .updated_at + relations: + repository: .repo + - kind: deployment + selector: + query: "true" + port: + entity: + mappings: + identifier: .repo + '-' + (.id|tostring) + title: .task + '-' + .environment + blueprint: '"deployment"' + properties: + description: .description + ref: .ref + sha: .sha + productionEnvironment: .production_environment + transientEnvironment: .transient_environment + createdAt: .created_at + url: .url + relations: + environment: .repo + '-' + .environment +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_environment_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_environment_blueprint.mdx new file mode 100644 index 000000000..acaf7cae2 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_environment_blueprint.mdx @@ -0,0 +1,51 @@ +
+Running Service blueprint + +```json showLineNumbers +{ + "identifier": "githubRepoEnvironment", + "title": "Running Service", + "icon": "Environment", + "schema": { + "properties": { + "url": { + "icon": "DefaultProperty", + "title": "URL", + "type": "string", + "format": "url" + }, + "createdAt": { + "title": "Created At", + "type": "string", + "format": "date-time", + "icon": "DefaultProperty" + }, + "updatedAt": { + "title": "Updated At", + "type": "string", + "format": "date-time" + }, + "protectedBranches": { + "title": "Protected Branches", + "type": "boolean" + }, + "customBranchPolicies": { + "title": "Custom Branch Policies", + "type": "boolean" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": { + "repository": { + "target": "githubRepository", + "required": true, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_example_package_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_example_package_blueprint.mdx new file mode 100644 index 000000000..ef024ed57 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_example_package_blueprint.mdx @@ -0,0 +1,34 @@ +
+Package blueprint + +```json showLineNumbers +{ + "identifier": "package", + "title": "Package", + "icon": "Package", + "schema": { + "properties": { + "package": { + "icon": "DefaultProperty", + "type": "string", + "title": "Package" + }, + "version": { + "icon": "DefaultProperty", + "type": "string", + "title": "Version" + } + }, + "required": [ + "package", + "version" + ] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": {} +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx new file mode 100644 index 000000000..903672525 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx @@ -0,0 +1,29 @@ +
+ +Port config YAML + +```yaml showLineNumbers +resources: + - kind: file + selector: + query: 'true' + files: + - path: '**/package.json' + - repos: + - stale + port: + itemsToParse: .file.content.dependencies | to_entries + entity: + mappings: + identifier: >- + .item.key + "_" + if (.item.value | startswith("^")) then + .item.value[1:] else . end + title: .item.key + "@" + .item.value + blueprint: '"package"' + properties: + package: .item.key + version: .item.value + relations: {} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_git_exporter_example_issue_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_git_exporter_example_issue_blueprint.mdx new file mode 100644 index 000000000..e75582246 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_git_exporter_example_issue_blueprint.mdx @@ -0,0 +1,76 @@ +
+Issue blueprint + +```json showLineNumbers +{ + "identifier": "githubIssue", + "title": "Issue", + "icon": "Github", + "schema": { + "properties": { + "creator": { + "title": "Creator", + "type": "string" + }, + "assignees": { + "title": "Assignees", + "type": "array" + }, + "labels": { + "title": "Labels", + "type": "array" + }, + "status": { + "title": "Status", + "type": "string", + "enum": ["open", "closed"], + "enumColors": { + "open": "green", + "closed": "purple" + } + }, + "createdAt": { + "title": "Created At", + "type": "string", + "format": "date-time" + }, + "closedAt": { + "title": "Closed At", + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "title": "Updated At", + "type": "string", + "format": "date-time" + }, + "description": { + "title": "Description", + "type": "string", + "format": "markdown" + }, + "issueNumber": { + "title": "Issue Number", + "type": "number" + }, + "link": { + "title": "Link", + "type": "string", + "format": "url" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": { + "repository": { + "target": "githubRepository", + "required": true, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_github_exporter_example_issue_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_github_exporter_example_issue_port_app_config.mdx new file mode 100644 index 000000000..10a5c6ee7 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_github_exporter_example_issue_port_app_config.mdx @@ -0,0 +1,44 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".name" # The Entity identifier will be the repository name. + title: ".name" + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: issue + selector: + query: ".pull_request == null" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".repo + (.id|tostring)" + title: ".title" + blueprint: '"githubIssue"' + properties: + creator: ".user.login" + assignees: "[.assignees[].login]" + labels: "[.labels[].name]" + status: ".state" + createdAt: ".created_at" + closedAt: ".closed_at" + updatedAt: ".updated_at" + description: ".body" + issueNumber: ".number" + link: ".html_url" + relations: + repository: ".repo" +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-monorepo/_github_exporter_example_monorepo_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-monorepo/_github_exporter_example_monorepo_port_app_config.mdx new file mode 100644 index 000000000..5f80bdf1a --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-monorepo/_github_exporter_example_monorepo_port_app_config.mdx @@ -0,0 +1,26 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: folder + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + folders: # Specify the repositories and folders to include under this relative path. + - path: apps/* # Relative path to the folders within the repositories. + repos: # List of repositories to include folders from. + - backend-service + - frontend-service + port: + entity: + mappings: + identifier: ".folder.name" + title: ".folder.name" + blueprint: '"githubRepository"' + properties: + url: .repo.html_url + "/tree/" + .repo.default_branch + "/" + .folder.path + readme: file://README.md +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_export_example_repository_with_admins_relation_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_export_example_repository_with_admins_relation_blueprint.mdx new file mode 100644 index 000000000..f9afb4ac0 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_export_example_repository_with_admins_relation_blueprint.mdx @@ -0,0 +1,38 @@ +
+Repository blueprint + +```json showLineNumbers +{ + "identifier": "githubRepository", + "title": "Repository", + "icon": "Microservice", + "schema": { + "properties": { + "readme": { + "title": "README", + "type": "string", + "format": "markdown" + }, + "url": { + "title": "Repository URL", + "type": "string", + "format": "url" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": { + "admins": { + "title": "Admins", + "target": "githubUser", + "required": false, + "many": true + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_admins_users_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_admins_users_port_app_config.mdx new file mode 100644 index 000000000..7252c91c9 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_admins_users_port_app_config.mdx @@ -0,0 +1,48 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +createMissingRelatedEntities: true +resources: + - kind: repository + selector: + query: "true" + collaborators: true + port: + entity: + mappings: + identifier: .name + title: .name + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + relations: + admins: "[.collaborators[] | select(.is_admin == true) | .login]" + - kind: user + selector: + query: "true" + port: + entity: + mappings: + identifier: .login + title: .login + blueprint: '"githubUser"' + relations: + user: .email + - kind: user + selector: + query: "true" + port: + entity: + mappings: + identifier: .email + title: .email + blueprint: '"user"' + relations: + user: .email +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_github_users_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_github_users_blueprint.mdx new file mode 100644 index 000000000..a1e80f8e9 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_github_users_blueprint.mdx @@ -0,0 +1,32 @@ +
+Github Users blueprint + +```json showLineNumbers +{ + "identifier": "githubUser", + "title": "Github User", + "icon": "Microservice", + "schema": { + "properties": { + "email": { + "title": "Email", + "type": "string" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": { + "user": { + "title": "User", + "target": "user", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_users_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_users_blueprint.mdx new file mode 100644 index 000000000..d2b5bc65b --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_users_blueprint.mdx @@ -0,0 +1,25 @@ +
+Users blueprint + +```json showLineNumbers +{ + "identifier": "user", + "title": "user", + "icon": "Microservice", + "schema": { + "properties": { + "email":{ + "title":"Email", + "type": "string" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": {} +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_codeScan_alert_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_codeScan_alert_blueprint.mdx new file mode 100644 index 000000000..70b7aded0 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_codeScan_alert_blueprint.mdx @@ -0,0 +1,48 @@ +
+Code scan Alert blueprint + +```json showLineNumbers +{ + "identifier": "code_scan_alerts", + "title": "Code Scan Alerts", + "icon": "Microservice", + "schema": { + "properties": { + "description": { + "title": "Alert description", + "type": "string" + }, + "severity": { + "title": "Alert severity", + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "title": "Alert tags", + "type": "array" + }, + "url": { + "title": "alert URL", + "type": "string", + "format": "url" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": true + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_dependabot_alert_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_dependabot_alert_blueprint.mdx new file mode 100644 index 000000000..2ef4aadde --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_dependabot_alert_blueprint.mdx @@ -0,0 +1,102 @@ +
+Dependabot Alert blueprint + +```json showLineNumbers +{ + "identifier": "githubDependabotAlert", + "title": "Dependabot Alert", + "icon": "Github", + "schema": { + "properties": { + "severity": { + "title": "Severity", + "type": "string", + "enum": ["low", "medium", "high", "critical"], + "enumColors": { + "low": "yellow", + "medium": "orange", + "high": "red", + "critical": "red" + }, + "icon": "DefaultProperty" + }, + "state": { + "title": "State", + "type": "string", + "enum": ["auto_dismissed", "dismissed", "fixed", "open"], + "enumColors": { + "auto_dismissed": "green", + "dismissed": "green", + "fixed": "green", + "open": "red" + }, + "icon": "DefaultProperty" + }, + "packageName": { + "icon": "DefaultProperty", + "title": "Package Name", + "type": "string" + }, + "packageEcosystem": { + "title": "Package Ecosystem", + "type": "string" + }, + "manifestPath": { + "title": "Manifest Path", + "type": "string" + }, + "scope": { + "title": "Scope", + "type": "string" + }, + "ghsaID": { + "title": "GHSA ID", + "type": "string" + }, + "cveID": { + "title": "CVE ID", + "type": "string" + }, + "url": { + "title": "URL", + "type": "string", + "format": "url" + }, + "references": { + "icon": "Vulnerability", + "title": "References", + "type": "array", + "items": { + "type": "string", + "format": "url" + } + }, + "alertCreatedAt": { + "icon": "DefaultProperty", + "type": "string", + "title": "Alert Created At", + "format": "date-time" + }, + "alertUpdatedAt": { + "icon": "DefaultProperty", + "type": "string", + "title": "Alert Updated At", + "format": "date-time" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": true, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_repo_dependabot_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_repo_dependabot_port_app_config.mdx new file mode 100644 index 000000000..2de699dfe --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_repo_dependabot_port_app_config.mdx @@ -0,0 +1,63 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: "true" + port: + entity: + mappings: + identifier: .name + title: .name + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: dependabot-alert + selector: + query: "true" + port: + entity: + mappings: + identifier: .repo.name + "-" + (.number | tostring) + title: .number | tostring + blueprint: '"githubDependabotAlert"' + properties: + state: .state + severity: .security_advisory.severity + packageName: .dependency.package.name + packageEcosystem: .dependency.package.ecosystem + manifestPath: .dependency.manifest_path + scope: .dependency.scope + ghsaID: .security_advisory.ghsa_id + cveID: .security_advisory.cve_id + url: .html_url + references: "[.security_advisory.references[].url]" + alertCreatedAt: .created_at + alertUpdatedAt: .updated_at + relations: + repository: .repo.name + - kind: code-scanning-alerts + selector: + query: "true" + port: + entity: + mappings: + identifier: .repo + "-" + (.number | tostring) + title: .rule.name + blueprint: '"code_scan_alerts"' + properties: + state: .state + severity: .rule.severity + tags: .rule.tags + description: .rule.description + url: .html_url + relations: + repository: .repo +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_custom_properties_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_custom_properties_port_app_config.mdx new file mode 100644 index 000000000..3f974fd13 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_custom_properties_port_app_config.mdx @@ -0,0 +1,27 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + // highlight-next-line + customProperties: true + port: + entity: + mappings: + identifier: ".name" # The Entity identifier will be the repository name. + title: ".name" + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + // highlight-next-line + custom_properties: .customProperties + +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_repository_with_custom_properties_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_repository_with_custom_properties_blueprint.mdx new file mode 100644 index 000000000..47965784b --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_repository_with_custom_properties_blueprint.mdx @@ -0,0 +1,41 @@ +
+Repository blueprint + +```json showLineNumbers +{ + "identifier": "githubRepository", + "title": "Repository", + "icon": "Microservice", + "schema": { + "properties": { + "readme": { + "title": "README", + "type": "string", + "format": "markdown" + }, + "url": { + "title": "Repository URL", + "type": "string", + "format": "url" + }, + "defaultBranch": { + "title": "Default branch", + "type": "string" + }, + "custom_properties": { + "items": { + "type": "object" + }, + "type": "array", + "title": "Custom Properties" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": {} +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_folder_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_folder_blueprint.mdx new file mode 100644 index 000000000..1b90290bb --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_folder_blueprint.mdx @@ -0,0 +1,37 @@ +
+Folder blueprint + +```json showLineNumbers +{ + "identifier": "githubFolder", + "title": "Folder", + "icon": "Github", + "schema": { + "properties": { + "readme": { + "title": "README", + "type": "string", + "format": "markdown" + }, + "url": { + "title": "Folder URL", + "type": "string", + "format": "url" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_pull_request_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_pull_request_blueprint.mdx new file mode 100644 index 000000000..bfd2343fa --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_pull_request_blueprint.mdx @@ -0,0 +1,68 @@ +
+Pull request blueprint + +```json showLineNumbers +{ + "identifier": "githubPullRequest", + "title": "Pull Request", + "icon": "Github", + "schema": { + "properties": { + "creator": { + "title": "Creator", + "type": "string" + }, + "assignees": { + "title": "Assignees", + "type": "array" + }, + "reviewers": { + "title": "Reviewers", + "type": "array" + }, + "status": { + "title": "Status", + "type": "string", + "enum": ["merged", "open", "closed"], + "enumColors": { + "merged": "purple", + "open": "green", + "closed": "red" + } + }, + "closedAt": { + "title": "Closed At", + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "title": "Updated At", + "type": "string", + "format": "date-time" + }, + "mergedAt": { + "title": "Merged At", + "type": "string", + "format": "date-time" + }, + "link": { + "format": "url", + "type": "string" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_repo_folders_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_repo_folders_port_app_config.mdx new file mode 100644 index 000000000..7fdc379b5 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_repo_folders_port_app_config.mdx @@ -0,0 +1,64 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: "true" + port: + entity: + mappings: + identifier: .name + title: .name + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: pull-request + selector: + query: "true" + port: + entity: + mappings: + identifier: .head.repo.name + (.id|tostring) + title: .title + blueprint: '"githubPullRequest"' + properties: + creator: .user.login + assignees: "[.assignees[].login]" + reviewers: "[.requested_reviewers[].login]" + status: .status + closedAt: .closed_at + updatedAt: .updated_at + mergedAt: .merged_at + prNumber: .id + link: .html_url + relations: + repository: .head.repo.name + - kind: folder + selector: + query: "true" + folders: + - path: "*" # Using "*" will ingest the folders from the root of each of repository as entities + repos: # Add any repositories you want to map folders from to the following list + - backend-service + - frontend-service + port: + entity: + mappings: + identifier: .folder.name + title: .folder.name + blueprint: '"githubFolder"' + properties: + url: >- + .repo.html_url + "/tree/" + .repo.default_branch + "/" + + .folder.path + readme: file://README.md + relations: + repository: .repo.name +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_blueprint.mdx new file mode 100644 index 000000000..e9853a153 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_blueprint.mdx @@ -0,0 +1,48 @@ +
+Release blueprint + +```json showLineNumbers +{ + "identifier": "release", + "title": "Release", + "icon": "Github", + "schema": { + "properties": { + "release_creation_time": { + "icon": "DefaultProperty", + "type": "string", + "title": "Release creation time", + "format": "date-time" + }, + "author": { + "type": "string", + "title": "Author" + }, + "description": { + "type": "string", + "title": "Description" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": false + }, + "tag": { + "title": "Tag", + "target": "tag", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_tag_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_tag_port_app_config.mdx new file mode 100644 index 000000000..086177841 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_tag_port_app_config.mdx @@ -0,0 +1,51 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".name" # The Entity identifier will be the repository name. + title: ".name" + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: release + selector: + query: 'true' + port: + entity: + mappings: + identifier: .release.name + title: .release.name + blueprint: '"release"' + properties: + author: .release.author.login + description: .release.body + release_creation_time: .release.created_at + relations: + tag: .release.tag_name + repository: .repo.name + - kind: tag + selector: + query: 'true' + port: + entity: + mappings: + identifier: .tag.name + title: .tag.name + blueprint: '"tag"' + properties: + commit_sha: .commit.sha + relations: + repository: .repo.name +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_tag_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_tag_blueprint.mdx new file mode 100644 index 000000000..6fa36c650 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_tag_blueprint.mdx @@ -0,0 +1,34 @@ +
+Tag blueprint + +```json showLineNumbers + +{ + "identifier": "tag", + "title": "Tag", + "icon": "Github", + "schema": { + "properties": { + "commit_sha": { + "icon": "DefaultProperty", + "type": "string", + "title": "Commit sha" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_repository_with_teams_relation_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_repository_with_teams_relation_blueprint.mdx new file mode 100644 index 000000000..bc086d42a --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_repository_with_teams_relation_blueprint.mdx @@ -0,0 +1,42 @@ +
+Repository blueprint + +```json showLineNumbers +{ + "identifier": "githubRepository", + "title": "Repository", + "icon": "Microservice", + "schema": { + "properties": { + "readme": { + "title": "README", + "type": "string", + "format": "markdown" + }, + "url": { + "title": "Repository URL", + "type": "string", + "format": "url" + }, + "defaultBranch": { + "title": "Default Branch", + "type": "string" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "aggregationProperties": {}, + "relations": { + "githubTeams": { + "title": "GitHub Teams", + "target": "githubTeam", + "required": false, + "many": true + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_team_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_team_blueprint.mdx new file mode 100644 index 000000000..e0842f0f9 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_team_blueprint.mdx @@ -0,0 +1,42 @@ +
+Team blueprint + +```json showLineNumbers +{ + "identifier": "githubTeam", + "title": "GitHub Team", + "icon": "Github", + "schema": { + "properties": { + "slug": { + "title": "Slug", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "link": { + "title": "Link", + "icon": "Link", + "type": "string", + "format": "url" + }, + "permission": { + "title": "Permission", + "type": "string" + }, + "notification_setting": { + "title": "Notification Setting", + "type": "string" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": {} +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_exporter_example_repository_with_teams_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_exporter_example_repository_with_teams_port_app_config.mdx new file mode 100644 index 000000000..3ebdfc0cc --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_exporter_example_repository_with_teams_port_app_config.mdx @@ -0,0 +1,42 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +createMissingRelatedEntities: true +resources: + - kind: team + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".id | tostring" + title: .name + blueprint: '"githubTeam"' + properties: + name: .name + slug: .slug + description: .description + link: .html_url + permission: .permission + notification_setting: .notification_setting + - kind: repository + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + teams: true # Boolean flag to indicate whether to include the repository teams. + port: + entity: + mappings: + identifier: .name + title: .name + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + relations: + githubTeams: "[.teams[].id | tostring]" +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_blueprint.mdx new file mode 100644 index 000000000..48ab1fdbd --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_blueprint.mdx @@ -0,0 +1,66 @@ +
+Workflow blueprint + +```json showLineNumbers +{ + "identifier": "githubWorkflow", + "title": "Workflow", + "icon": "Github", + "schema": { + "properties": { + "path": { + "title": "Path", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string", + "enum": [ + "active", + "deleted", + "disabled_fork", + "disabled_inactivity", + "disabled_manually" + ], + "enumColors": { + "active": "green", + "deleted": "red" + } + }, + "createdAt": { + "title": "Created At", + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "title": "Updated At", + "type": "string", + "format": "date-time" + }, + "deletedAt": { + "title": "Deleted At", + "type": "string", + "format": "date-time" + }, + "link": { + "title": "Link", + "type": "string", + "format": "url" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": { + "repository": { + "title": "Repository", + "target": "githubRepository", + "required": false, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_run_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_run_blueprint.mdx new file mode 100644 index 000000000..6fa8a1560 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_run_blueprint.mdx @@ -0,0 +1,114 @@ +
+Workflow run blueprint + +```json showLineNumbers +{ + "identifier": "githubWorkflowRun", + "title": "Workflow Run", + "icon": "Github", + "schema": { + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "triggeringActor": { + "title": "Triggering Actor", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string", + "enum": [ + "completed", + "action_required", + "cancelled", + "startup_failure", + "failure", + "neutral", + "skipped", + "stale", + "success", + "timed_out", + "in_progress", + "queued", + "requested", + "waiting" + ], + "enumColors": { + "queued": "yellow", + "in_progress": "yellow", + "success": "green", + "failure": "red" + } + }, + "conclusion": { + "title": "Conclusion", + "type": "string", + "enum": [ + "completed", + "action_required", + "cancelled", + "startup_failure", + "failure", + "neutral", + "skipped", + "stale", + "success", + "timed_out", + "in_progress", + "queued", + "requested", + "waiting" + ], + "enumColors": { + "queued": "yellow", + "in_progress": "yellow", + "success": "green", + "failure": "red" + } + }, + "createdAt": { + "title": "Created At", + "type": "string", + "format": "date-time" + }, + "runStartedAt": { + "title": "Run Started At", + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "title": "Updated At", + "type": "string", + "format": "date-time" + }, + "runNumber": { + "title": "Run Number", + "type": "number" + }, + "runAttempt": { + "title": "Run Attempts", + "type": "number" + }, + "link": { + "title": "Link", + "type": "string", + "format": "url" + } + }, + "required": [] + }, + "mirrorProperties": {}, + "calculationProperties": {}, + "relations": { + "workflow": { + "target": "githubWorkflow", + "required": true, + "many": false + } + } +} +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_github_exporter_example_wf_wfr_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_github_exporter_example_wf_wfr_port_app_config.mdx new file mode 100644 index 000000000..2b29cdb86 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_github_exporter_example_wf_wfr_port_app_config.mdx @@ -0,0 +1,62 @@ +
+ + Port port-app-config.yml + +```yaml showLineNumbers +resources: + - kind: repository + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".name" # The Entity identifier will be the repository name. + title: ".name" + blueprint: '"githubRepository"' + properties: + readme: file://README.md + url: .html_url + defaultBranch: .default_branch + - kind: workflow + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".repo + (.id|tostring)" + title: ".name" + blueprint: '"githubWorkflow"' + properties: + path: ".path" + status: ".state" + createdAt: ".created_at" + updatedAt: ".updated_at" + link: ".html_url" + relations: + repository: ".repo" + - kind: workflow-run + selector: + query: ".status != 'completed'" # JQ boolean query. If evaluated to false - skip syncing the object. + port: + entity: + mappings: + identifier: ".repository.name + (.id|tostring)" + title: ".display_title" + blueprint: '"githubWorkflowRun"' + properties: + name: ".name" + triggeringActor: ".triggering_actor.login" + status: ".status" + conclusion: ".conclusion" + createdAt: ".created_at" + runStartedAt: ".run_started_at" + updatedAt: ".updated_at" + deletedAt: ".deleted_at" + runNumber: ".run_number" + runAttempt: ".run_attempt" + link: ".html_url" + relations: + workflow: ".repository.name + (.workflow_id|tostring)" +``` + +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md new file mode 100644 index 000000000..a603b5b90 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md @@ -0,0 +1,340 @@ +--- +sidebar_position: 1 +--- + +import RepositoryBlueprint from './\_github_exporter_example_repository_blueprint.mdx' +import PRBlueprint from './\_github_exporter_example_pull_request_blueprint.mdx' +import PortAppConfig from './\_github_exporter_example_port_app_config.mdx' +import GitHubResources from '../\_github_exporter_supported_resources.mdx' + +import WorkflowBlueprint from './example-workflow-workflowrun/\_git_exporter_example_workflow_blueprint.mdx' +import WorkflowRunBlueprint from './example-workflow-workflowrun/\_git_exporter_example_workflow_run_blueprint.mdx' +import PortWfWfrAppConfig from './example-workflow-workflowrun/\_github_exporter_example_wf_wfr_port_app_config.mdx' + +import BranchProtectionBlueprint from './example-branch/\_git_exporter_example_branch_protection_blueprint.mdx' +import PortBranchProtectionAppConfig from './example-branch/\_github_exporter_example_branch_protection_port_app_config.mdx' +import BranchBlueprint from './example-branch/\_git_exporter_example_branch_blueprint.mdx' +import PortBrAppConfig from './example-branch/\_github_exporter_example_branch_port_app_config.mdx' +import LastContributorAppConfig from './example-branch/\_github_exporter_example_last_contributor_port_app_config.mdx' +import LastContributorBlueprint from './example-branch/\_git_exporter_example_last_contributor_blueprint.mdx' + +import PortMonoRepoAppConfig from './example-monorepo/\_github_exporter_example_monorepo_port_app_config.mdx' + +import IssueBlueprint from './example-issue/\_git_exporter_example_issue_blueprint.mdx' +import PortIssueAppConfig from './example-issue/\_github_exporter_example_issue_port_app_config.mdx' + +import PRFolderBlueprint from './example-repository-folders/\_github_exporter_example_pull_request_blueprint.mdx' +import FolderBlueprint from './example-repository-folders/\_github_exporter_example_folder_blueprint.mdx' +import PortFolderMappingAppConfig from './example-repository-folders/\_github_exporter_example_repo_folders_port_app_config.mdx' + +import TeamBlueprint from './example-repository-teams/\_github_export_example_team_blueprint.mdx' +import RepositoryTeamBlueprint from './example-repository-teams/\_github_export_example_repository_with_teams_relation_blueprint.mdx' +import PortRepositoryTeamMappingAppConfig from './example-repository-teams/\_github_exporter_example_repository_with_teams_port_app_config.mdx' + +import DependabotAlertBlueprint from './example-repository-alerts/\_github_exporter_example_dependabot_alert_blueprint.mdx' +import CodeScanAlertBlueprint from './example-repository-alerts/\_github_exporter_example_codeScan_alert_blueprint.mdx' + +import PortRepositoryDependabotAlertMappingAppConfig from './example-repository-alerts/\_github_exporter_example_repo_dependabot_port_app_config.mdx' + +import RepoEnvironmentBlueprint from './example-deployments-environments/\_github_exporter_example_environment_blueprint.mdx' +import DeploymentBlueprint from './example-deployments-environments/\_github_exporter_example_deployment_blueprint.mdx' +import PortRepoDeploymentAndEnvironmentAppConfig from './example-deployments-environments/\_github_exporter_example_deployments_and_environments_port_app_config.mdx' + +import UsersBlueprint from './example-repository-admins/\_github_exporter_example_users_blueprint.mdx' +import GithubUsersBlueprint from './example-repository-admins/\_github_exporter_example_github_users_blueprint.mdx' +import RepositoryAdminBlueprint from './example-repository-admins/\_github_export_example_repository_with_admins_relation_blueprint.mdx' +import RepositoryAdminAppConfig from './example-repository-admins/\_github_exporter_example_admins_users_port_app_config.mdx' + +import TagBlueprint from './example-repository-release-tag/\_github_exporter_example_tag_blueprint.mdx' +import ReleaseBlueprint from './example-repository-release-tag/\_github_exporter_example_release_blueprint.mdx' +import RepositoryTagReleaseAppConfig from './example-repository-release-tag/\_github_exporter_example_release_tag_port_app_config.mdx' +import RepositoryCustomPropertiesAppConfig from './example-repository-custom-properties/\_github_exporter_example_custom_properties_port_app_config.mdx' +import RepositoryCustomPropertiesBlueprint from './example-repository-custom-properties/\_github_exporter_example_repository_with_custom_properties_blueprint.mdx' + +import PackageBlueprint from './example-file-kind/\_example_package_blueprint.mdx' +import PackageAppConfig from './example-file-kind/\_package_json_app_config.mdx' + + +# Resource mapping examples + +:::warning General permissions limitation with gitHub cloud app +When using the GitHub Cloud app with Port, certain fields and data points may not be accessible due to the lack of `write` API permissions. These limitations affect advanced repository settings, security features (such as code scanning and secret scanning status), and other GitHub objects that require elevated permissions to retrieve data. + +If you need to ingest these fields, consider one of the following approaches: +- Use our [self-hosted](/build-your-software-catalog/sync-data-to-catalog/git/github/self-hosted-installation) GitHub app which gives you options to enable appropriate `write` permissions. + +- Implement a GitHub workflow to manually gather and send the required data to Port. + +Refer to specific sections below where these limitations might apply. +::: + +## Map repositories and pull requests + +In the following example you will ingest your GitHub repositories, their README.md file contents and pull requests to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + +:::tip learn more + +- Refer to the [setup](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) section to learn more about the `port-app-config.yml` setup process. +- We leverage [JQ JSON processor](https://stedolan.github.io/jq/manual/) to map and transform GitHub objects to Port Entities. +- Click [Here](https://docs.github.com/en/rest/repos/repos#get-a-repository) for the GitHub repository object structure. +- Click [Here](https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request) for the GitHub pull request object structure. + +::: + +After creating the blueprints and committing the `port-app-config.yml` file to your `.github-private` repository (for global configuration), or to any specific repositories (for per-repo configuration), you will see new entities in Port matching your repositories alongside their README.md file contents and pull requests. (Remember that the `port-app-config.yml` file has to be in the **default branch** of the repository to take effect). + +## Map files and file contents + +The following example demonstrates ingestion of dependencies from a `package.json` file in your repository into Port: + + + + +The example will parse the `package.json` file in your repository and extract the dependencies into Port entities. +For more information about ingesting files and file contents, click [here](/build-your-software-catalog/sync-data-to-catalog/git/github/#ingest-files-from-your-repositories). + +## Map repositories, workflows and workflow runs + +In the following example you will ingest your GitHub repositories, their workflows and workflow runs to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + + + +:::tip learn more + +- Refer to the [setup](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) section to learn more about the `port-app-config.yml` setup process. +- We leverage [JQ JSON processor](https://stedolan.github.io/jq/manual/) to map and transform GitHub objects to Port Entities. +- Click [Here](https://docs.github.com/en/rest/repos/repos#get-a-repository) for the GitHub repository object structure. +- Click [Here](https://docs.github.com/en/rest/actions/workflows#get-a-workflow) for the GitHub workflow object structure. +- Click [Here](https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run) for the GitHub workflow run object structure. + +::: + +After creating the blueprints and committing the `port-app-config.yml` file to your `.github-private` repository (for global configuration), or to any specific repositories (for per-repo configuration), you will see new entities in Port matching your repositories alongside their workflows and workflow runs. (Remember that the `port-app-config.yml` file has to be in the **default branch** of the repository to take effect). + +## Map repositories and issues + +In the following example you will ingest your GitHub repositories and their issues to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + +:::tip learn more + +- Refer to the [setup](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) section to learn more about the `port-app-config.yml` setup process. +- We leverage [JQ JSON processor](https://stedolan.github.io/jq/manual/) to map and transform GitHub objects to Port Entities. +- Click [Here](https://docs.github.com/en/rest/repos/repos#get-a-repository) for the GitHub repository object structure. +- Click [Here](https://docs.github.com/en/rest/issues/issues#get-an-issue) for the GitHub issue object structure. + +::: + +After creating the blueprints and committing the `port-app-config.yml` file to your `.github-private` repository (for global configuration), or to any specific repositories (for per-repo configuration), you will see new entities in Port matching your repositories alongside their issues. (Remember that the `port-app-config.yml` file has to be in the **default branch** of the repository to take effect). + +## Map repositories and monorepos + +In the following example you will ingest your GitHub repositories and their folders to Port. By following this example you can map your different services, packages and libraries from your monorepo into separate entities in Port. you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + +To retrieve the root folders of your monorepo, you can use this following syntax in your `port-app-config.yml`: + +```yaml +- kind: folder + selector: + query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. + folders: # Specify the repositories and folders to include under this relative path. + - path: "*" # Relative path to the folders within the repositories. + repos: # List of repositories to include folders from. + - backend-service + - frontend-service +``` + + +:::tip learn more + +- Refer to the [setup](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) section to learn more about the `port-app-config.yml` setup process. +- We leverage [JQ JSON processor](https://stedolan.github.io/jq/manual/) to map and transform GitHub objects to Port Entities. +- Click [Here](https://docs.github.com/en/rest/repos/repos#get-a-repository) for the GitHub repository object structure. +- Click [Here](https://docs.github.com/en/rest/git/trees#get-a-tree) for the GitHub folder object structure. + +::: + +## Map repositories, repository folders and pull requests + +In the following example you will ingest your GitHub repositories, the repository's root folders and the repository pull requests to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + + + +## Map repositories and teams + +In the following example you will ingest your GitHub repositories and their teams to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + +:::note team mapping requirement +Teams are GitHub organization level resources, therefore you will need to specify the mapping of the teams in a [global integration configuration](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) (Through Port's UI or through the `port-app-config.yml` file in the `.github-private` repository). +::: + + + + + + + +To retrieve the teams of your repositories, you will need to add the `teams` property to the `selector` in the repository resource kind in your `port-app-config.yml`: + +```yaml +- kind: repository + selector: + query: 'true' # JQ boolean query. If evaluated to false - skip syncing the object. + // highlight-next-line + teams: true # Boolean flag to indicate whether to include the repository teams. +``` + + + +## Map repositories, deployments and environments + +In the following example you will ingest your GitHub repositories, their deployments and environments to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + + + +## Map repositories, Dependabot Alerts, and Code scan alerts + +The following example shows how to ingest your GitHub repositories and their alerts (Dependabot and Code scan alerts) into Port. You can use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + + + +:::info supported alerts +For Code scan alerts, only open alerts on the default branch are supported. +::: + +- `allow_squash_merge` +- Advanced security status (e.g., whether code scanning or secret scanning is enabled) + +If you need to ingest these fields, consider using a self-hosted GitHub app with the appropriate permissions or creating a GitHub workflow to manually gather and ingest this data into Port. + +:::tip self-hosted gitHub app option +For users who need access to the full range of repository fields, including enabling WRITE permissions, we recommend setting up a self-hosted GitHub app. This allows full customization of permissions, ensuring all necessary data can be ingested into Port. +Refer to our [Self-Hosted Installation Guide](https://docs.port.io/build-your-software-catalog/sync-data-to-catalog/git/github/self-hosted-installation/) for detailed instructions. + +Alternatively, you can create a GitHub workflow that gathers the required data and sends it to Port, allowing you to work around the limitations of the Cloud app. +::: + +## Map repositories and branches + +In the following example you will ingest your GitHub repositories and their branches to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + +## Map repositories and last contributor + +In the following example you will ingest your GitHub repositories and their last contributor to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + +:::info supported last contributor +The last contributor is the author of the last commit in the default branch of the repository +::: + +## Map repositories and branch protection rules + +In the following example you will ingest your GitHub repositories and their main branch protection rules to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + +:::info supported branch protection rules +Currently only default branch protection rules are supported +::: + +## Map repositories, repository admins and users + +In the following example you will ingest your GitHub repositories, their admins and related users to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + + + +:::info supported GitHub user types +As Github has strict privacy policies, the GitHub API will only return emails in the following cases: +1. The user has a public email address +2. Your organization is working with a GitHub Enterprise Cloud plan, and the user has an SAML SSO identity configured inside the GitHub organization. + +In other cases, the GitHub API will return a `null` value for the user's email. +::: + + +## Map repositories, repository releases and tags + +In the following example you will ingest your GitHub repositories, their releases and tags to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: + + + + + + + + + +## Map repositories and repository custom properties + +The following example shows how to ingest your GitHub repositories and their custom properties to Port. +You can use the following blueprint definitions and `port-app-config.yml`: + + + + +## Map supported resources + +The examples above show specific use cases, but Port's GitHub app supports the ingestion of many other GitHub objects. +To adapt the examples above, use the GitHub API reference to learn about the available fields for the different supported objects: + + + +When adding the ingestion of other resources, remember to add an entry to the `resources` array and change the value provided to the `kind` key accordingly. diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md new file mode 100644 index 000000000..43b50e740 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -0,0 +1,539 @@ +import Tabs from "@theme/Tabs" +import TabItem from "@theme/TabItem" +import GitHubResources from './\_github_exporter_supported_resources.mdx' + +# GitHub + +Port's GitHub integration allows you to model GitHub resources in your software catalog and ingest data into them. + + +## Overview + +This integration allows you to: + + +- Map and organize your desired GitHub resources and their metadata in Port (see supported resources below). +- Watch for GitHub object changes (create/update/delete) in real-time, and automatically apply the changes to your software catalog. +- Manage Port entities using GitOps. +- Trigger GitHub workflows directly from Port. + + +### Supported resources + +The resources that can be ingested from GitHub into Port are listed below. +It is possible to reference any field that appears in the API responses linked below in the mapping configuration. + + + + +## Setup + +To install Port's GitHub app, follow these steps: + +1. Go to the [GitHub App page](https://github.com/apps/getport-io). + +2. Click on the `Configure` button. + +3. Choose the organization in which to install the app. + +4. Within the selected organization, choose the repositories in which to install the app. + + +5. Click on the `Install` button. + +6. Once the installation has finished, you will be redirected to Port. + + +## Configuration + +:::info Closed pull requests default behavior +By default, the **Port GitHub App** does not fetch closed pull requests. +To enable this behavior, use the [closedPullRequests parameter](https://docs.port.io/build-your-software-catalog/sync-data-to-catalog/git/github/advanced/?parameter=closedPullRequests#using-advanced-configurations) in your configuration. +::: + +Port integrations use a [YAML mapping block](/build-your-software-catalog/customize-integrations/configure-mapping#configuration-structure) to ingest data from the third-party api into Port. + +The mapping makes use of the [JQ JSON processor](https://stedolan.github.io/jq/manual/) to select, modify, concatenate, transform and perform other operations on existing fields and values from the integration API. + +To ingest GitHub objects, use one of the following methods: + + + + + +To manage your GitHub integration configuration using Port: + +1. Go to the [data sources](https://app.getport.io/settings/data-sources) page of your portal. +2. Under `Exporters`, click on your desired GitHub organization. +3. A window will open containing the default YAML configuration of your GitHub integration. +4. Here you can modify the configuration to suit your needs, by adding/removing entries. +5. When finished, click `resync` to apply any changes. + +Using this method applies the configuration to all repositories that the GitHub app has permissions to. + +When configuring the integration **using Port**, the YAML configuration is global, allowing you to specify mappings for multiple Port blueprints. + + + + + +To manage your GitHub integration configuration using a config file in GitHub: + +1. Go to the [data sources](https://app.getport.io/settings/data-sources) page of your portal. +2. Under `Exporters`, click on your desired GitHub organization. +3. A window will open containing the default YAML configuration of your GitHub integration. +4. Scroll all the way down, and turn on the `Manage this integration using the "port-app-config.yml" file` toggle. + +This will clear the configuration in Port's UI. + +When configuring the integration **using GitHub**, you can choose either a global or granular configuration: + +- **Global configuration:** create a `.github-private` repository in your organization and add the `port-app-config.yml` file to the repository. + - Using this method applies the configuration to all repositories that the GitHub app has permissions to (unless it is overridden by a granular `port-app-config.yml` in a repository). +- **Granular configuration:** add the `port-app-config.yml` file to the `.github` directory of your desired repository. + - Using this method applies the configuration only to the repository where the `port-app-config.yml` file exists. + +When using global configuration **using GitHub**, the configuration specified in the `port-app-config.yml` file will only be applied if the file is in the **default branch** of the repository (usually `main`). + + + + + +:::info Important +When **using Port's UI**, the specified configuration will override any `port-app-config.yml` file in your GitHub repository/ies. +::: + +## Capabilities + +### Ingesting Git objects + +By using Port's GitHub app, you can automatically ingest GitHub resources into Port based on real-time events. + +The app allows you to ingest a variety of objects resources provided by the GitHub API, including repositories, pull requests, workflows and more. It also allows you to perform "extract, transform, load (ETL)" on data from the GitHub API into the desired software catalog data model. + +The GitHub app uses a YAML configuration file to describe the ETL process to load data into the developer portal. The approach reflects a golden middle between an overly opinionated Git visualization that might not work for everyone and a too-broad approach that could introduce unneeded complexity into the developer portal. + +After installing the app, Port will automatically create a `repository` blueprint in your catalog (representing a GitHub repository), along with a default YAML configuration file that defines where the data fetched from Github's API should go in the blueprint. + +### Ingest files from your repositories + +Port allows you to fetch `JSON` and `YAML` files from your repositories, and create entities from them in your software catalog. +This is done using the `file` kind in your Github mapping configuration. + +For example, say you want to manage your `package.json` files in Port. One option is to create a `manifest` blueprint, with each of its entities representing a `package.json` file. + +The following configuration fetches all `package.json` files from "MyRepo" and "MyOtherRepo", and creates an entity for each of them, based on the `manifest` blueprint: + +```yaml showLineNumbers +resources: + - kind: file + selector: + query: 'true' + files: + # Note that glob patterns are supported, so you can use wildcards to match multiple files + - path: '**/package.json' + # The `repos` key can be used to filter the repositories from which the files will be fetched + repos: + - "MyRepo" + - "MyOtherRepo" + port: + entity: + mappings: + identifier: .file.path + title: .file.name + blueprint: '"manifest"' + properties: + project_name: .file.content.name + project_version: .file.content.version + license: .file.content.license +``` + +:::tip Test your mapping +After adding the `file` kind to your mapping configuration, click on the `Resync` button. When you open the mapping configuration again, you will see real examples of files fetched from your GitHub organization. + +This will help you see what data is available to use in your `jq` expressions. +Click on the `Test mapping` button to test your mapping against the example data. + +In any case, the structure of the available data looks like this: +
+Available data example (click to expand) + +```json showLineNumbers +{ + "repo": { + "id": 454741906, + "node_id": "R_kgDOGxrPkg", + "name": "dtgatest", + "full_name": "hadar-co/dtgatest", + "private": false, + "owner": { + "login": "hadar-co", + "id": 96784606, + "node_id": "U_kgDOBcTQ3g", + "avatar_url": "https://avatars.githubusercontent.com/u/96784606?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/hadar-co", + "html_url": "https://github.com/hadar-co", + "followers_url": "https://api.github.com/users/hadar-co/followers", + "following_url": "https://api.github.com/users/hadar-co/following{/other_user}", + "gists_url": "https://api.github.com/users/hadar-co/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hadar-co/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hadar-co/subscriptions", + "organizations_url": "https://api.github.com/users/hadar-co/orgs", + "repos_url": "https://api.github.com/users/hadar-co/repos", + "events_url": "https://api.github.com/users/hadar-co/events{/privacy}", + "received_events_url": "https://api.github.com/users/hadar-co/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/hadar-co/dtgatest", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/hadar-co/dtgatest", + "forks_url": "https://api.github.com/repos/hadar-co/dtgatest/forks", + "keys_url": "https://api.github.com/repos/hadar-co/dtgatest/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hadar-co/dtgatest/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hadar-co/dtgatest/teams", + "hooks_url": "https://api.github.com/repos/hadar-co/dtgatest/hooks", + "issue_events_url": "https://api.github.com/repos/hadar-co/dtgatest/issues/events{/number}", + "events_url": "https://api.github.com/repos/hadar-co/dtgatest/events", + "assignees_url": "https://api.github.com/repos/hadar-co/dtgatest/assignees{/user}", + "branches_url": "https://api.github.com/repos/hadar-co/dtgatest/branches{/branch}", + "tags_url": "https://api.github.com/repos/hadar-co/dtgatest/tags", + "blobs_url": "https://api.github.com/repos/hadar-co/dtgatest/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hadar-co/dtgatest/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hadar-co/dtgatest/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hadar-co/dtgatest/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hadar-co/dtgatest/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hadar-co/dtgatest/languages", + "stargazers_url": "https://api.github.com/repos/hadar-co/dtgatest/stargazers", + "contributors_url": "https://api.github.com/repos/hadar-co/dtgatest/contributors", + "subscribers_url": "https://api.github.com/repos/hadar-co/dtgatest/subscribers", + "subscription_url": "https://api.github.com/repos/hadar-co/dtgatest/subscription", + "commits_url": "https://api.github.com/repos/hadar-co/dtgatest/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hadar-co/dtgatest/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hadar-co/dtgatest/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hadar-co/dtgatest/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hadar-co/dtgatest/contents/{+path}", + "compare_url": "https://api.github.com/repos/hadar-co/dtgatest/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hadar-co/dtgatest/merges", + "archive_url": "https://api.github.com/repos/hadar-co/dtgatest/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hadar-co/dtgatest/downloads", + "issues_url": "https://api.github.com/repos/hadar-co/dtgatest/issues{/number}", + "pulls_url": "https://api.github.com/repos/hadar-co/dtgatest/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hadar-co/dtgatest/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hadar-co/dtgatest/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hadar-co/dtgatest/labels{/name}", + "releases_url": "https://api.github.com/repos/hadar-co/dtgatest/releases{/id}", + "deployments_url": "https://api.github.com/repos/hadar-co/dtgatest/deployments", + "created_at": "2022-02-02T11:08:23Z", + "updated_at": "2024-07-08T07:23:58Z", + "pushed_at": "2024-07-08T07:23:54Z", + "git_url": "git://github.com/hadar-co/dtgatest.git", + "ssh_url": "git@github.com:hadar-co/dtgatest.git", + "clone_url": "https://github.com/hadar-co/dtgatest.git", + "svn_url": "https://github.com/hadar-co/dtgatest", + "homepage": null, + "size": 346, + "stargazers_count": 0, + "watchers_count": 0, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 3, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [], + "visibility": "public", + "forks": 0, + "open_issues": 3, + "watchers": 0, + "default_branch": "main", + "permissions": { + "admin": false, + "maintain": false, + "push": false, + "triage": false, + "pull": false + } + }, + "file": { + "path": "testfiles/package.json", + "mode": "100644", + "type": "blob", + "sha": "a1e9e0624f68b3f7b69e182187c5e424c2df1f9b", + "size": 1817, + "url": "https://api.github.com/repos/hadar-co/dtgatest/git/blobs/a1e9e0624f68b3f7b69e182187c5e424c2df1f9b", + "content": { + "name": "port-docs", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start --port 4000", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc", + "prepare": "husky install" + }, + "dependencies": { + "@docsly/react": "^1.9.1", + "@docusaurus/core": "^3.4.0", + "@docusaurus/plugin-client-redirects": "^3.4.0", + "@docusaurus/plugin-google-tag-manager": "^3.4.0", + "@docusaurus/plugin-ideal-image": "^3.4.0", + "@docusaurus/preset-classic": "^3.4.0", + "@docusaurus/theme-live-codeblock": "^3.4.0", + "@easyops-cn/docusaurus-search-local": "^0.44.2", + "@mdx-js/react": "^3.0.1", + "@port-labs/docusaurus-plugin-openapi-docs": "^0.0.5", + "@port-labs/docusaurus-theme-openapi-docs": "^0.0.5", + "@stackql/docusaurus-plugin-hubspot": "^1.0.1", + "clsx": "^2.1.1", + "docusaurus-plugin-hotjar": "^0.0.2", + "docusaurus-plugin-image-zoom": "^2.0.0", + "prettier": "^3.3.2", + "prism-react-renderer": "^2.3.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-tooltip": "^5.27.1" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "^3.4.0", + "@docusaurus/tsconfig": "^3.4.0", + "@docusaurus/types": "^3.4.0", + "husky": "^9.0.11", + "pretty-quick": "^4.0.0", + "typescript": "~5.5.3" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } + }, + "fileExtension": "json", + "name": "package.json" + } +} +``` +
+::: + +#### Create multiple entities from a single file + +In some cases, we would like to parse a single JSON/YAML file and create multiple entities from it. +For this purpose, we can use the `itemsToParse` key in our mapping configuration. + +For example, say you want to track/manage a project's dependencies in Port. One option is to create a `package` blueprint, with each of its entities representing a dependency from a `package.json` file. + +The following configuration fetches a `package.json` file from a specific repository, and creates an entity for each of the dependencies in the file, based on the `package` blueprint: + +```yaml showLineNumbers +resources: + - kind: file + selector: + query: 'true' + files: + - path: '**/package.json' + # Note that in this case we are fetching from a specific repository + repos: + - "MyRepo" + port: + itemsToParse: .file.content.dependencies | to_entries + entity: + mappings: + # Since identifier cannot contain special characters, we are using jq to remove them + identifier: >- + .item.key + "_" + if (.item.value | startswith("^")) then + .item.value[1:] else .item.value end + title: .item.key + "@" + .item.value + blueprint: '"package"' + properties: + package: .item.key + version: .item.value + relations: {} +``` + +The `itemsToParse` key is used to specify the path to the array of items you want to parse from the file. In this case, we are parsing the `dependencies` array from the `package.json` file. +Once the array is parsed, we can use the `item` key to refer to each item in the array. + +#### Multi-document YAML files + +For multi-document YAML files (a single file containing multiple YAML documents separated by `---`), `.file.content` will not resolve to an object, but to an array of objects. + +You can use one of these methods to ingest multi-document YAML files: + +1. Use the `itemsToParse` key to create multiple entities from such a file (see example above). +2. Map the result to an `array` property. + +:::tip Mixed YAML types +If you have both single-document and multi-document YAML files in your repositories, you can use the `itemsToParse` key like this to handle both cases: + +```yaml +itemsToParse: .file.content | if type== "object" then [.] else . end +``` +::: + +#### Dry-run for file changes + +To prevent unwanted changes to the ingested file, you can enable `GitHub checks` to perform a validation on ingested files. +When `validationCheck: true` is enabled in the `kind: file` mapping, Port's Github app will perform a schema validation on these files before they are processed. + +To enable file validation, add the `validationCheck` flag to your file kind mapping: + +```yaml showLineNumbers +resources: + - kind: file + selector: + query: .repo.name == "port" + files: + - path: data-model/domains/*.yaml + validationCheck: true + port: + entity: + mappings: + // the rest of your mapping configuration +``` + +When a PR modifies a matching file, you will see a new check in your PR with the validation results. + +Example for a successful validation: + + +

+ +Example for a failed validation: + + +#### Ingest raw file content + +If you need to ingest the raw content of a file without parsing it, you can use the `skipParsing` key in your file selector. +This is useful when you want to store the file content as a string or YAML property. + +When `skipParsing` is set to `true`, the file content will be kept in its original string format instead of being parsed into a JSON/YAML object. + +Here's an example that ingests the raw content of a `values.yaml` file into the `content` property of a `file` entity: + +```yaml +resources: + - kind: file + selector: + query: 'true' + files: + - path: values.yaml + skipParsing: true + port: + entity: + mappings: + identifier: >- + .repo.name + "-values" + blueprint: '"file"' + properties: + content: .file.content +``` + +#### Limitations + +- Currently only files up to 512KB in size are supported. +- Only JSON and YAML formats are automatically parsed. + Other file formats can be ingested as raw files, however, some special characters in the file (such as `\n`) may be processed and not preserved. +- GLOB patterns are supported for file pattern matching, but wildcards at the end (e.g., `**/*`) are not allowed, in order to prevent matching all files indiscriminately. +- Currently only the default branch of the repository is supported. + +## Permissions + +Port's GitHub integration requires the following permissions: + +- Repository permissions: + + - **Actions:** Read and Write (for executing self-service action using GitHub workflow). + - **Administration:** Readonly (for exporting repository teams) + - **Checks:** Read and Write (for validating `port.yml`). + - **Contents:** Readonly. + - **Metadata:** Readonly. + - **Issues:** Readonly. + - **Pull requests:** Read and write. + - **Dependabot alerts:** Readonly. + - **Deployments:** Readonly. + - **Environments:** Readonly. + - **Code scanning alerts:** Readonly. + +- Organization permissions: + + - **Members:** Readonly (for exporting organization teams). + - **Administration:** Readonly (for exporting organization users). + +- Repository events (required to receive changes via webhook from GitHub and apply the `port-app-config.yml` configuration on them): + - Issues + - Pull requests + - Push + - Workflow run + - Team + - Dependabot Alerts + - Deployment + - Branch protection rule + - Code scanning alert + - Member + - Membership + - Release + +:::info Default permissions +You will be prompted to confirm the above listed permissions when first installing the App. + +Permissions can be given to selected repositories in your organization, or to all repositories. +You can reconfigure the app at any time, giving it access to new repositories, or removing access. + +::: + +## Examples + +Refer to the [examples](./examples/resource-mapping-examples.md) page for practical configurations and their corresponding blueprint definitions. + +## Relevant Guides + +For relevant guides and examples, see the [guides section](https://docs.port.io/guides?tags=GitHub). + +## GitOps + +Port's GitHub app also provides GitOps capabilities, refer to the [GitOps](./gitops/gitops.md) page to learn more. + +## Advanced + +Refer to the [advanced](./advanced.md) page for advanced use cases and examples. + +## Self-hosted installation + +Port's GitHub app also supports a self-hosted installation, refer to the [self-hosted installation](./self-hosted-installation.md) page to learn more. + +## Additional resources + +- [Connect GitHub PR with Jira issue](/guides/all/connect-github-pr-with-jira-issue) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/_category_.json b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/_category_.json new file mode 100644 index 000000000..35f80e71b --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/_category_.json @@ -0,0 +1,4 @@ +{ + "label": "GitOps", + "position": 3 +} diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md new file mode 100644 index 000000000..7438d9f18 --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md @@ -0,0 +1,173 @@ +--- +sidebar_position: 3 +--- + +import Tabs from "@theme/Tabs" +import TabItem from "@theme/TabItem" +import PortYmlStructure from '../../\_port_yml_gitops_structure_template.md' +import BasicFileProperties from '../../\_basic_file_properties_template.md' +import RelativeFileProperties from '../../\_relative_file_properties_template.md' +import GitOpsPushEvent from '../../\_git_gitops_push_events_explanation.mdx' +import PortYmlNullProperties from '../../\_port_yml_null_properties.md' +import PortYmlIngestionPattern from '../../\_port_yml_ingestion_pattern_template.md' + + +# GitOps + +Port's GitHub integration makes it possible to manage Port entities with a GitOps approach, making your code repositories the source of truth for the various infrastructure assets you want to manage. + +Some common use cases include: + +- Use GitHub as the source-of-truth for your **microservices**, **packages**, **libraries** and other software catalog assets. +- Allow developers to keep the catalog up-to-date, by making updates to files in their Git repositories. +- Create a standardized way to document software catalog assets in your organization. + +Port offers two ways to manage entities using GitOps: + +1. Using a dedicated `port.yml` file in your repository. +2. Using the GitHub integration mapping in your portal. + +## Option 1: Use a `port.yml` file + +This approach requires adding a `port.yml` file to the **default branch** (usually `main`) of your repository. + +Note that the `port.yml` file is not the same as the [`port-app-config.yml` file](/build-your-software-catalog/sync-data-to-catalog/git/github/#port-app-configyml-file) used to configure the GitHub integration, and does not replace it. + +The `port.yml` file can specify one or more Port entities that will be ingested to Port, and any change made to the `port.yml` file will also be reflected inside Port. + +:::tip Github app +To manage entities using GitOps and the `port.yml` file, Port's [Github app](/build-your-software-catalog/sync-data-to-catalog/git/github/#setup) must be installed, as it listens to `push` events sent from Github. + +This means that if the `port.yml` file exists in the repository before installing the app, it will not be picked up automatically. You will need to make some update to the `port.yml` file and push it to the repository in order for the Git app to properly track and ingest the entity information. +::: + +The `port.yml` file is how you specify your Port entities that are managed using GitOps and whose data is ingested from your Git repositories. + +Here are examples for valid `port.yml` files: + + + + + +```yaml showLineNumbers +identifier: myEntity +title: My Entity +blueprint: myBlueprint +properties: + myStringProp: myValue + myNumberProp: 5 + myUrlProp: https://example.com +relations: + mySingleRelation: myTargetEntity + myManyRelation: + - myTargetEntity1 + - myTargetEntity2 +``` + + + + + +```yaml showLineNumbers +- identifier: myEntity1 + title: My Entity1 + blueprint: myFirstBlueprint + properties: + myStringProp: myValue + myNumberProp: 5 + myUrlProp: https://example.com + relations: + mySingleRelation: myTargetEntity + myManyRelation: + - myTargetEntity1 + - myTargetEntity2 +- identifier: myEntity + title: My Entity2 + blueprint: mySecondBlueprint + properties: + myStringProp: myValue + myNumberProp: 5 + myUrlProp: https://example.com +``` + + + + + +Since both of the valid `port.yml` formats follow the same structure, the following section will explain the format based on the single entity example. + +### `port.yml` structure + + + + + +### Ingesting repository file contents + + + +#### Using relative paths + + + +## Option 2: Use the integration mapping + +Every integration in Port has a dedicated [mapping configuration](/build-your-software-catalog/customize-integrations/configure-mapping) that allows you to specify which resources to ingest from the integration into Port. + +In the case of the GitHub integration, one of the supported resources is the `file` resource, which allows you to ingest file contents from a repository into your portal. + +To use this approach, you will need to edit your GitHub integration mapping and add a `file` block that specifies which files to ingest. +To edit a mapping configuration: + +1. Go to the [data sources page](https://app.getport.io/settings/data-sources) of your portal. +2. Under `Exporters`, find the GitHub data source and click on it. +3. Scroll down to the `Mapping` section and add a `file` block to the `resources` array. + +For example, say you want to ingest a `package.json` file form your repository. You can add the following to your GitHub integration mapping: + +```yaml +resources: + ... + - kind: file + selector: + query: 'true' + files: + - path: package.json + port: + entity: + mappings: + identifier: .file.name + blueprint: '"file"' + properties: + content: .file.content +``` + +The `selector.files.path` key also supports glob patterns, so you can ingest multiple files by matching against a pattern and create an entity in Port for each one, for example: + +```yaml +- kind: file + selector: + query: 'true' + files: + - path: 'resources/*.yml' +``` + +### Advantages + +- **Resync support**: Since this approach uses the integration mapping, a resync of the integration will update the entities in Port with the latest file contents. + +- **Data manipulation**: Since this approach uses the integration mapping, `jq` is supported and can be used to transform the file contents before ingestion. + +## Examples + +Check out the [example repository](https://github.com/port-labs/github-app-setup-example) for a microservice blueprint and a matching `port.yml` file which specifies a microservice entity. + +## Capabilities + +### Port.yml ingestion pattern + + + +## Advanced + +Refer to the [advanced](../advanced.md) page for advanced use cases and configurations. diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md new file mode 100644 index 000000000..21b2822cc --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -0,0 +1,406 @@ +--- +sidebar_position: 5 +--- + +import Tabs from "@theme/Tabs" +import TabItem from "@theme/TabItem" +import Prerequisites from "../../templates/_ocean_helm_prerequisites_block.mdx" +import HelmParameters from "../../templates/_ocean-advanced-parameters-helm.mdx" +import DockerParameters from "./_github_docker_parameters.mdx" +import AdvancedConfig from '../../../../generalTemplates/_ocean_advanced_configuration_note.md' +import PortApiRegionTip from "/docs/generalTemplates/_port_region_parameter_explanation_template.md" +import OceanSaasInstallation from "/docs/build-your-software-catalog/sync-data-to-catalog/templates/_ocean_saas_installation.mdx" +import OceanRealtimeInstallation from "/docs/build-your-software-catalog/sync-data-to-catalog/templates/_ocean_realtime_installation.mdx" +import { OceanSaasLiveEventsDescription, OceanSaasLiveEventsTriggersManual, liveEvents } from "/src/components/ocean-saas-specifics/live-events.jsx"; + +# Installation + +This page details how to install Port's Github integration (powered by the Ocean framework). + +This page outlines the following steps: + +- How to [create](#create-an-access-token) an access token to give the integration permissions to query your GitLab instance. +- How to [configure](#configure-the-integration) and customize the integration before deploying it. +- How to [deploy](#deploy-the-integration) the integration in the configuration that fits your use case. + +## Prerequisites + +- A Github account with permissions to create access tokens. +- If you choose the real time & always on installation method, you will need a kubernetes cluster on which to install the integration. +- Your Port user role is set to `Admin`. + +## Setup + +### Configure access token + +To allow Port to fetch data from your GitLab instance, you need to create an access token. Port supports two types of tokens for authentication: personal access tokens and group access tokens. + +#### Personal access token (PAT) + +A Personal Access Token (PAT) is suitable if you're the only one managing the integration and don't need frequent credential rotation. +To create a personal access token see the GitLab [personal access token guide](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html). + +- The token must belong to a user with access to the relevant GitLab resources (e.g., projects, groups). + +#### Group access token + +A Group Access Token is recommended when multiple team members manage the integration or when it's set up at the group level. +To create a group access token, see the GitLab [group access token guide](https://docs.gitlab.com/ee/user/group/access_tokens.html). + +- Create the token in a group that has access to the relevant projects. +- Set an appropriate expiration date and store it securely. + +#### Service account token + +A service account token is recommended where credentials must remain stable and unaffected by changes in human user membership. + +To set up the account and generate a personal access token, see the GitLab [service account guide](https://docs.gitlab.com/ee/user/profile/service_accounts/). + +- Add the service account to the relevant projects or groups with sufficient permissions (e.g., Developer or Maintainer). + + +:::info Required scopes +The following scopes are required based on your usage. +- To enable **real-time updates using webhooks**, the token must include the `api` scope (required for managing webhooks). +- If you're **not using realtime updates**, the token needs `read_api` and `read_repository` scopes. +::: + +### Configure Realtime webhook events + +:::tip +The `baseUrl` parameter is used specifically to enable the real-time functionality of the integration. + +If it is not provided, the integration will continue to function correctly. In such a configuration, to retrieve the latest information from the target system, the [`scheduledResyncInterval`](https://ocean.getport.io/develop-an-integration/integration-configuration/#scheduledresyncinterval---run-scheduled-resync) parameter has to be set, or a manual resync will need to be triggered through Port's UI. +::: + + +## Deploy the integration + +Choose one of the following installation methods: + + + + + + + + + + + +Using this installation option means that the integration will be able to update Port in real time using webhooks. + +

Prerequisites

+ + + +For details about the available parameters for the installation, see the table below. + + + + + + + + + + + +To install the integration using ArgoCD: + +1. Create a `values.yaml` file in `argocd/my-ocean-gitlab-integration` in your git repository with the content: + +:::note +Remember to replace the placeholders for `GITLAB_TOKEN` and your GitLab URL. +::: +```yaml showLineNumbers +initializePortResources: true +scheduledResyncInterval: 120 +integration: + identifier: my-ocean-gitlab-integration + type: gitlab-v2 + eventListener: + type: POLLING + config: + // highlight-next-line + gitlabUrl: https://gitlab.com # Or your self-hosted GitLab URL + secrets: + // highlight-next-line + gitlabToken: GITLAB_TOKEN +``` +
+2. Install the `my-ocean-gitlab-integration` ArgoCD Application by creating the following `my-ocean-gitlab-integration.yaml` manifest: +:::note +Remember to replace the placeholders for `YOUR_PORT_CLIENT_ID` `YOUR_PORT_CLIENT_SECRET` and `YOUR_GIT_REPO_URL`. + +Multiple sources ArgoCD documentation can be found [here](https://argo-cd.readthedocs.io/en/stable/user-guide/multiple_sources/#helm-value-files-from-external-git-repository). +::: + +
+ ArgoCD Application + +```yaml showLineNumbers +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: my-ocean-gitlab-integration + namespace: argocd +spec: + destination: + namespace: my-ocean-gitlab-integration + server: https://kubernetes.default.svc + project: default + sources: + - repoURL: 'https://port-labs.github.io/helm-charts/' + chart: port-ocean + targetRevision: 0.1.14 + helm: + valueFiles: + - $values/argocd/my-ocean-gitlab-integration/values.yaml + // highlight-start + parameters: + - name: port.clientId + value: YOUR_PORT_CLIENT_ID + - name: port.clientSecret + value: YOUR_PORT_CLIENT_SECRET + - name: port.baseUrl + value: https://api.getport.io + - repoURL: YOUR_GIT_REPO_URL + // highlight-end + targetRevision: main + ref: values + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true +``` + + +
+
+ +1. Apply your application manifest with `kubectl`: +```bash +kubectl apply -f my-ocean-gitlab-integration.yaml +``` +
+ +
+ +This table summarizes the available parameters for the installation. + +| Parameter | Description | Required | +|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|----------| +| `port.clientId` | Your port client id | ✅ | +| `port.clientSecret` | Your port client secret | ✅ | +| `port.baseUrl` | Your Port API URL - `https://api.getport.io` for EU, `https://api.us.getport.io` for US | ✅ | +| `integration.identifier` | Change the identifier to describe your integration | ✅ | +| `integration.type` | The integration type | ✅ | +| `integration.eventListener.type` | The event listener type | ✅ | +| `integration.config.gitlabUrl` | The GitLab instance URL | ✅ | +| `integration.secrets.gitlabToken`| The GitLab access token | ✅ | +| `scheduledResyncInterval` | The number of minutes between each resync | ❌ | +| `initializePortResources` | Default true, When set to true the integration will create default blueprints and the port App config Mapping | ❌ | +| `sendRawDataExamples` | Enable sending raw data examples from the third party API to port for testing and managing the integration mapping. Default is true | ❌ | +| `baseUrl` | The base url of the GitLab integration instance, used for real-time updates. | ❌ | + +
+ + + +
+ + + +This workflow/pipeline will run the GitLab integration once and then exit, this is useful for **scheduled** ingestion of data. + +:::warning Real-time updates +If you want the integration to update Port in real time using webhooks you should use the [Real-time (self-hosted)](?installation-methods=real-time-self-hosted#setup) installation option. +::: + + + +Make sure to configure the following [Github Secrets](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions): + + + +
+ +Here is an example for `gitlab-integration.yml` workflow file: + +```yaml showLineNumbers +name: GitLab Exporter Workflow +on: + workflow_dispatch: + schedule: + - cron: '0 */1 * * *' # Determines the scheduled interval for this workflow. This example runs every hour. +jobs: + run-integration: + runs-on: ubuntu-latest + timeout-minutes: 30 # Set a time limit for the job + steps: + - uses: port-labs/ocean-sail@v1 + with: + type: 'gitlab-v2' + port_client_id: ${{ secrets.OCEAN__PORT__CLIENT_ID }} + port_client_secret: ${{ secrets.OCEAN__PORT__CLIENT_SECRET }} + port_base_url: https://api.getport.io + config: | + gitlabUrl: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITLAB_URL }} + gitlabToken: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN }} +``` + +
+ + + +:::tip +Your Jenkins agent should be able to run docker commands. +::: + + +Make sure to configure the following [Jenkins Credentials](https://www.jenkins.io/doc/book/using/using-credentials/) +of `Secret Text` type: + + + +
+ +Here is an example for `Jenkinsfile` groovy pipeline file: + +```text showLineNumbers +pipeline { + agent any + stages { + stage('Run GitLab Integration') { + steps { + script { + withCredentials([ + string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITLAB_URL', variable: 'OCEAN__INTEGRATION__CONFIG__GITLAB_URL'), + string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN', variable: 'OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN'), + string(credentialsId: 'OCEAN__PORT__CLIENT_ID', variable: 'OCEAN__PORT__CLIENT_ID'), + string(credentialsId: 'OCEAN__PORT__CLIENT_SECRET', variable: 'OCEAN__PORT__CLIENT_SECRET'), + ]) { + sh(''' + #Set Docker image and run the container + integration_type="gitlab-v2" + version="latest" + image_name="ghcr.io/port-labs/port-ocean-${integration_type}:${version}" + docker run -i --rm --platform=linux/amd64 \ + -e OCEAN__EVENT_LISTENER='{"type":"ONCE"}' \ + -e OCEAN__INITIALIZE_PORT_RESOURCES=true \ + -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ + -e OCEAN__INTEGRATION__CONFIG__GITLAB_URL=$OCEAN__INTEGRATION__CONFIG__GITLAB_URL \ + -e OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN \ + -e OCEAN__PORT__CLIENT_ID=$OCEAN__PORT__CLIENT_ID \ + -e OCEAN__PORT__CLIENT_SECRET=$OCEAN__PORT__CLIENT_SECRET \ + -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ + $image_name + exit $? + ''') + } + } + } + } + } +} +``` + +
+ + + +Make sure to configure the following [Azure DevOps pipeline variables](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables): + + + +
+ +Here is an example for `gitlab-integration.yml` pipeline file: + +```yaml showLineNumbers +trigger: +- main +pool: + vmImage: "ubuntu-latest" +variables: + - group: port-ocean-credentials +steps: +- script: | + # Set Docker image and run the container + integration_type="gitlab-v2" + version="latest" + image_name="ghcr.io/port-labs/port-ocean-$integration_type:$version" + + docker run -i --rm --platform=linux/amd64 \ + -e OCEAN__EVENT_LISTENER='{"type":"ONCE"}' \ + -e OCEAN__INITIALIZE_PORT_RESOURCES=true \ + -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ + -e OCEAN__INTEGRATION__CONFIG__GITLAB_URL=$(OCEAN__INTEGRATION__CONFIG__GITLAB_URL) \ + -e OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN=$(OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN) \ + -e OCEAN__PORT__CLIENT_ID=$(OCEAN__PORT__CLIENT_ID) \ + -e OCEAN__PORT__CLIENT_SECRET=$(OCEAN__PORT__CLIENT_SECRET) \ + -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ + $image_name + exit $? + displayName: 'Ingest Data into Port' +``` + +
+ + +Make sure to [configure the following GitLab variables](https://docs.gitlab.com/ee/ci/variables/#for-a-project): + + + +
+ +Here is an example for `.gitlab-ci.yml` pipeline file: + +```yaml showLineNumbers +default: + image: docker:24.0.5 + services: + - docker:24.0.5-dind + before_script: + - docker info + +variables: + INTEGRATION_TYPE: gitlab-v2 + VERSION: latest +stages: + - ingest +ingest_data: + stage: ingest + variables: + IMAGE_NAME: ghcr.io/port-labs/port-ocean-$INTEGRATION_TYPE:$VERSION + script: + - | + docker run -i --rm --platform=linux/amd64 \ + -e OCEAN__EVENT_LISTENER='{"type":"ONCE"}' \ + -e OCEAN__INITIALIZE_PORT_RESOURCES=true \ + -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ + -e OCEAN__INTEGRATION__CONFIG__GITLAB_URL=$OCEAN__INTEGRATION__CONFIG__GITLAB_URL \ + -e OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN \ + -e OCEAN__PORT__CLIENT_ID=$OCEAN__PORT__CLIENT_ID \ + -e OCEAN__PORT__CLIENT_SECRET=$OCEAN__PORT__CLIENT_SECRET \ + -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ + $IMAGE_NAME + rules: # Run only when changes are made to the main branch + - if: '$CI_COMMIT_BRANCH == "main"' + schedule: # Run according to a schedule + - cron: '0 */3 * * *' # Run every 3 hours +``` + +
+
+ + + + + +
+ +
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md new file mode 100644 index 000000000..6bf9d4b5f --- /dev/null +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -0,0 +1,160 @@ +--- +sidebar_position: 6 +--- + +import FindCredentials from "/docs/build-your-software-catalog/custom-integration/api/\_template_docs/\_find_credentials.mdx" + +# Self Hosted Installation + +:::note Prerequisites + +- A registered organization in Port; +- Your Port user role is set to `Admin`. + +::: + +In organizations that have a self-hosted GitHub installation there is no access to our official public app, therefore there are some extra steps you need to take to install the GitHub app: + +1. [Register](#register-ports-github-app) Port's GitHub app in your GitHub organization; +2. [Deploy](#deployment) Port's GitHub app Docker image inside your VPC; +3. [Install](#installing-ports-github-application) Port's GitHub app in your GitHub organization and on select repositories. + +## Register Port's GitHub App + +1. Navigate to your organization inside your self-hosted GitHub and click on Settings: + +![Org view](../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) + +2. Inside the settings view, click on Developer Settings -> and then select GitHub Apps: + +![Settings view](../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) + +3. Click on "New GitHub App": + +![New GitHub App](../../../../../static/img/integrations/github-app/SelfHostedNewGitHubApp.png) + +4. Insert the following properties: + +- **GitHub App name:** port.io +- **Homepage URL:** https://getport.io +- **Setup URL:** https://app.getport.io +- **Repository Permissions:** + - Actions: Read and Write (for executing self-service action using GitHub workflow) + - Checks: Read and Write (for validating `Port.yml`) + - Contents: Readonly (for reading port configuration files and repository files) + - Metadata: Readonly + - Issues: Readonly + - Pull Request: Read and Write + - Dependabot alerts: Readonly + - Administration: Readonly (for syncing github teams) +- **Organization Permissions:** + - Members: Readonly (for syncing github teams) + - Webhooks: Read and Write (to allow the integration create webhooks) +- **Repository Events** (required to receive webhook changes from GitHub): + - Issues + - Pull Request + - Push + - Workflow Run + - Team + - Dependabot alerts + +Then select "Create GitHub App" + +5. Go to the settings of the created GitHub App and generate a private key and save the downloaded file: + +![Generate Private key](../../../../../static/img/integrations/github-app/SelfHosetdGeneratePrivayKey.png) + +Keep the file, you will need it for the deployment step. + +## Deployment + +:::note Prerequisites + +You will need your Port `CLIENT_ID` and `CLIENT_SECRET`. + + + +::: + +In order to make use of [Self-Service Actions using GitHub Workflow](../../../../actions-and-automations/setup-backend/github-workflow/github-workflow.md), please contact us at support@getport.io. + +## Docker + +To use our GitHub app you will need to deploy our official GitHub app docker image on your VPC. + +It can be deployed on any platform that allows deploying images as containers such as: K8S, ECS, AWS App Runner, etc. + +You can pull the Docker image by running: + +```bash showLineNumbers +docker pull ghcr.io/port-labs/port-self-hosted-github-app:0.16.0 +``` + +Run the following command to start the app: + +```bash showLineNumbers +docker run \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID= \ + -e OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET="test" \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_HOST= + -e OCEAN__BASE_URL=https://test.com \ + -e OCEAN__PORT__BASE_URL=https://api.getport.io \ + -e OCEAN__PORT__CLIENT_ID= \ + -e OCEAN__PORT__CLIENT_SECRET= \ + -e OCEAN__INTEGRATION__IDENTIFIER=github-ocean + -e OCEAN__EVENT_LISTENER__TYPE=POLLING \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION= \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY= \ + -p 8000: \ + ghcr.io/port-labs/port-self-hosted-github-app:0.16.0 +``` + +| Env variable | Description | +|----------------------|-------------------------------------------------------------------------------------| +| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | Application ID, you can find it in the edit GitHub App page | +| `OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET` | Will be used to create webhook | +| `OCEAN__INTEGRATION__IDENTIFIER` | Your organization's self-hosted GitHub hostname | +| `OCEAN__BASE_URL` | Integration base url, will be used to register webhook. +| `OCEAN__PORT__BASE_URL` | Port's API Base URL | +| `OCEAN__PORT__CLIENT_ID` | Port client id for interacting with the API | +| `OCEAN__PORT__CLIENT_SECRET` | Port client secret for interacting with the API | +| `OCEAN__INTEGRATION__IDENTIFIER` | Identifier for the integration | +| `OCEAN__EVENT_LISTENER__TYPE` | How Ocean will retrieve config changes from Port | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | Github organization the app was installed in | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded private key. You can use a tool like https://www.base64encode.org/ | + +## Health check route + +A health check is a route that is used to check the health of a repository. It is a means to ensure that the service is running properly and can perform its intended function. + +Our GitHub App image exposes a health check route at `https://host:port/health` to monitor its status. + +## Installing Port's GitHub application + +After you have the app registered in your organization and the Docker is up and running, you can install the app and select the repositories to integrate it with: + +1. First, navigate to your organization inside your self-hosted GitHub and click on Settings: + +![Org view](../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) + +2. Inside the settings view, click on Developer Settings -> and then select GitHub Apps: + +![Settings view](../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) + +3. Click `edit` on the GitHub app created at the step before: + +![GitHub app installation page](../../../../../static/img/integrations/github-app/SelfHostedEditGitHubApp.png) + +4. Go to Install App -> and select the installation button on your wanted organization; + +5. Choose the repositories you want the app to be installed for: + +![GitHub app installation chooses repositories](../../../../../static/img/integrations/github-app/SelfHostedInstallationRepoSelection.png) + +## Limitations + +As this is a self-hosted version, there are some limitations due to security considerations and the fact that we don't have access to your GitHub instance + +- The configuration must be included as part of the repository, and cannot be configured via Port's UI/API. Refer to the [GitHub Configuration](https://docs.port.io/build-your-software-catalog/sync-data-to-catalog/git/github/?method=github#configuration) for more details. + +- To use self-service actions, you will need [Kafka Credentials](/actions-and-automations/setup-backend/webhook/kafka/kafka.md) configured for your organization; diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_category_.json b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_category_.json deleted file mode 100644 index d5df8a75d..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Github V2", - "position": 1 -} diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_github_exporter_supported_resources.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_github_exporter_supported_resources.mdx deleted file mode 100644 index 3af8b2e56..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/_github_exporter_supported_resources.mdx +++ /dev/null @@ -1,17 +0,0 @@ -- [`repository`](https://docs.github.com/en/rest/repos/repos#get-a-repository) -{/* - [`pull-request`](https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request) */} -{/* - [`environment`](https://docs.github.com/en/rest/deployments/environments#get-an-environment) */} -{/* - [`deployment`](https://docs.github.com/en/rest/deployments/deployments#get-a-deployment) */} -{/* - [`workflow`](https://docs.github.com/en/rest/actions/workflows#get-a-workflow) */} -{/* - [`workflow-run`](https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run) */} -{/* - [`issue`](https://docs.github.com/en/rest/issues/issues#get-an-issue) */} -{/* - [`folder`](https://docs.github.com/en/rest/git/trees#get-a-tree) */} -{/* - [`file`](/build-your-software-catalog/sync-data-to-catalog/git/github/#ingest-files-from-your-repositories) */} -{/* - [`user`](https://docs.github.com/en/rest/users/users#get-a-user) */} -{/* - [`team`](https://docs.github.com/en/rest/teams/teams#get-a-team-by-name) */} -{/* - [`dependabot-alert`](https://docs.github.com/en/rest/dependabot/alerts#list-dependabot-alerts-for-a-repository) */} -{/* - [`branches`](https://docs.github.com/en/rest/branches/branches#get-a-branch) */} -{/* - [`code-scanning`](https://docs.github.com/en/rest/code-scanning/code-scanning#list-code-scanning-alerts-for-a-repository) */} -{/* - [`releases`](https://docs.github.com/en/rest/releases/releases#list-releases) */} -{/*- [`tags`](https://docs.github.com/en/rest/repos/repos#list-repository-tags) */} - diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/github-v2.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/github-v2.md deleted file mode 100644 index 1f5d3a06c..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/github-v2.md +++ /dev/null @@ -1,18 +0,0 @@ -import GitHubResources from './\_github_exporter_supported_resources.mdx' - -# Github V2 - -Port's GitHub integration allows you to model GitHub resources in your software catalog and ingest data into them. - -## Overview - -This integration allows you to: - -- Map and organize your desired GitHub resources and their metadata in Port (see supported resources below). -- Watch for GitHub object changes (create/update/delete) in real-time, and automatically apply the changes to your software catalog. -- Manage Port entities using GitOps. -- Trigger GitHub workflows directly from Port. - -## Supported Resources - - diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/installation.md deleted file mode 100644 index cd3b9a391..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-v2/installation.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -sidebar_position: 1 ---- From afdba409d740022b14c0617ed7bf997d4d9f8c10 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 11:10:16 +0100 Subject: [PATCH 03/42] Add updated example for file --- .../_package_json_app_config.mdx | 15 +++++++-------- ..._gitlab_integration_example_package_config.mdx | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx index 903672525..2a6df4b33 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx @@ -3,27 +3,26 @@ Port config YAML ```yaml showLineNumbers -resources: - - kind: file + - kind: file selector: query: 'true' files: - - path: '**/package.json' - - repos: - - stale + - path: package.json + repos: + - repo: vscode + branch: main port: - itemsToParse: .file.content.dependencies | to_entries + itemsToParse: .content.dependencies | to_entries entity: mappings: identifier: >- .item.key + "_" + if (.item.value | startswith("^")) then - .item.value[1:] else . end + .item.value[1:] else .item.value end title: .item.key + "@" + .item.value blueprint: '"package"' properties: package: .item.key version: .item.value - relations: {} ``` diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/gitlab-v2/example-files/_gitlab_integration_example_package_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/gitlab-v2/example-files/_gitlab_integration_example_package_config.mdx index d682c90fe..23de0403f 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/gitlab-v2/example-files/_gitlab_integration_example_package_config.mdx +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/gitlab-v2/example-files/_gitlab_integration_example_package_config.mdx @@ -20,4 +20,4 @@ resources: properties: package: .item.key version: .item.value -``` \ No newline at end of file +``` From 4cf3344dc5f56501e9b59ca72f0490ad48d9c3fe Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 15:10:14 +0100 Subject: [PATCH 04/42] Remove unnecessary examples for now --- .../git/github-ocean/advanced.md | 123 --------- ..._git_exporter_example_branch_blueprint.mdx | 43 --- ...er_example_branch_protection_blueprint.mdx | 111 -------- ...ter_example_last_contributor_blueprint.mdx | 47 ---- ...xporter_example_branch_port_app_config.mdx | 35 --- ...mple_branch_protection_port_app_config.mdx | 48 ---- ...ample_last_contributor_port_app_config.mdx | 31 --- ..._exporter_example_deployment_blueprint.mdx | 58 ---- ...ments_and_environments_port_app_config.mdx | 59 ----- ...exporter_example_environment_blueprint.mdx | 51 ---- .../_git_exporter_example_issue_blueprint.mdx | 76 ------ ...exporter_example_issue_port_app_config.mdx | 44 --- ...orter_example_monorepo_port_app_config.mdx | 26 -- ...orter_example_codeScan_alert_blueprint.mdx | 48 ---- ...ter_example_dependabot_alert_blueprint.mdx | 102 ------- ...xample_repo_dependabot_port_app_config.mdx | 63 ----- ...mple_custom_properties_port_app_config.mdx | 27 -- ...itory_with_custom_properties_blueprint.mdx | 41 --- ...thub_exporter_example_folder_blueprint.mdx | 37 --- ...xporter_example_pull_request_blueprint.mdx | 68 ----- ...r_example_repo_folders_port_app_config.mdx | 64 ----- ...hub_exporter_example_release_blueprint.mdx | 48 ---- ...er_example_release_tag_port_app_config.mdx | 51 ---- ..._github_exporter_example_tag_blueprint.mdx | 34 --- ...pository_with_teams_relation_blueprint.mdx | 42 --- .../_github_export_example_team_blueprint.mdx | 42 --- ..._repository_with_teams_port_app_config.mdx | 42 --- ...it_exporter_example_workflow_blueprint.mdx | 66 ----- ...xporter_example_workflow_run_blueprint.mdx | 114 -------- ...xporter_example_wf_wfr_port_app_config.mdx | 62 ----- .../examples/resource-mapping-examples.md | 250 +----------------- .../git/github-ocean/github-ocean.md | 20 +- .../git/github-ocean/installation.md | 8 +- 33 files changed, 15 insertions(+), 1966 deletions(-) delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/advanced.md delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_protection_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_last_contributor_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_protection_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_last_contributor_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployment_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployments_and_environments_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_environment_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_git_exporter_example_issue_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_github_exporter_example_issue_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-monorepo/_github_exporter_example_monorepo_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_codeScan_alert_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_dependabot_alert_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_repo_dependabot_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_custom_properties_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_repository_with_custom_properties_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_folder_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_pull_request_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_repo_folders_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_tag_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_tag_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_repository_with_teams_relation_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_team_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_exporter_example_repository_with_teams_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_run_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_github_exporter_example_wf_wfr_port_app_config.mdx diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/advanced.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/advanced.md deleted file mode 100644 index b27cbbb43..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/advanced.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -sidebar_position: 4 ---- - -import Tabs from "@theme/Tabs" -import TabItem from "@theme/TabItem" -import DeleteDependents from '../../../../generalTemplates/\_delete_dependents_git_explanation_template.md' - -# Advanced - -The GitHub integration supports additional flags to provide additional configuration, making it easier to configure its behavior to your liking. - -To use the advanced configuration and additional flags, add them as a root key to your [`port-app-config.yml`](./github.md#port-app-configyml-file) file, for example to add the -`createMissingRelatedEntities` flag: - -```yaml showLineNumbers -# highlight-next-line -createMissingRelatedEntities: false -resources: - - kind: pull-request - selector: - query: "true" - port: - entity: - mappings: - ... mappings configuration -``` - -## Using advanced configurations - -The following advanced configuration parameters are available and can be added to the [`port-app-config.yml`](./github.md#port-app-configyml-file) file: - - - - - -The `specPath` parameter specifies a list of [globPatterns](https://www.malikbrowne.com/blog/a-beginners-guide-glob-patterns) that Port's GitHub app will search for `port.yml` files in. - -- Default value: `**/port.yml` -- Use case: - - If you want the app to scan a different file than `port.yml` (for example, change configure the app to scan files named `my-port-config.yml` using the pattern `**/my-port-config.yml`); - - If you want the app to ignore `port.yml` files in certain paths. - - - - - - - -- Default: `false` (disabled) -- Use case: Deletion of dependent Port entities. Must be enabled, if you want to delete a target entity (and its source entities) in a required relation. - - - - - -The `enableMergeEntity` parameter specifies whether to use the [create/update](/build-your-software-catalog/custom-integration/api?operation=create-update#usage) or [create/override](/build-your-software-catalog/custom-integration/api?operation=create-override#usage) strategy when creating entities listed in a `port.yml` file. - -- Default value: `true` (use create/update) -- Use case: use `false` if you want GitHub to be the source-of-truth for catalog entities. Use `true` if you want to use GitHub as the source for some properties of entities in the catalog, and use other sources to for properties which are subject to change automatically. - - - - - -The `createMissingRelatedEntities` parameter is used to enable the creation of missing related Port entities automatically in cases where the target related entity does not exist in the software catalog yet. - -- Default value: `true` to allow the GitHub app to create barebones related entities, in case those related entities do not exist in the software catalog. -- Use case: use `false` if you do not want this default behavior (do not create missing related entities). - - - - - -The `enrichEntitiesWithGitopsMetadata` parameter is used to enable the enrichment of Port entities that are managed by GitOps with additional metadata. - -When the parameter is active, ingesting entities listed in a `port.yml` file to Port will include additional information such as the spec file path (for example: `port.yml`, `/path/to/port.yml`, etc.), the latest commit information and more. - -The additional information is reported as a JSON object property in your GitOps managed entities. In order to view the information, your respective [blueprint](/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/setup-blueprint.md) needs to include an [object property](/build-your-software-catalog/customize-integrations/configure-data-model/setup-blueprint/properties/object.md) to store the metadata. The default identifier this parameter sends data to is `gitopsMetadata`. - -- Default value: `true` (enrich entities with GitOps metadata) -- Use case: use `true` if you want the GitHub app to enrich the Port entities managed by GitOps with additional JSON metadata. - - Use the `gitopsMetadataProperty` to change the identifier of the `object` property, according to your blueprint schema definition (default property identifier: `gitopsMetadata`). - -**Configuration example** - -```yaml showLineNumbers -enrichEntitiesWithGitopsMetadata: true -gitopsMetadataProperty: myGitopsMetadata # the GitOps metadata will be sent to the "myGitopsMetadata" property of the blueprint's entities -``` - - - - - -Use the `closedPullRequests` parameter to enable the fetching of closed pull requests on re-sync. - -- Default value: `false` (do not fetch closed pull requests). -- Use case: Useful for analyzing closed pull request history, such as DORA metrics. - - -Port will fetch the last 100 updated closed pull requests or those from the past 60 days, whichever comes first. - - -**Configuration example** - -```yaml showLineNumbers -integrationConfig: - resources: - - kind: pull-request - selector: - query: "true" -# highlight-next-line - closedPullRequests: true - port: - entity: - mappings: - ... mappings configuration -``` - - - - diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_blueprint.mdx deleted file mode 100644 index 83930d0dd..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_blueprint.mdx +++ /dev/null @@ -1,43 +0,0 @@ -
-Branch blueprint - -```json showLineNumbers -{ - "identifier": "branch", - "title": "Branch", - "icon": "Microservice", - "schema": { - "properties": { - "is_protected": { - "title": "Is branch protected", - "type": "boolean", - "icon": "DefaultProperty" - }, - "commit_sha": { - "title": "Commit SHA", - "type": "string", - "icon": "DefaultProperty" - }, - "commit_url": { - "title": "Commit URL", - "type": "string", - "format": "url" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_protection_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_protection_blueprint.mdx deleted file mode 100644 index 7df0c270d..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_branch_protection_blueprint.mdx +++ /dev/null @@ -1,111 +0,0 @@ -
-Branch blueprint - -```json showLineNumbers -{ - "identifier": "branch_protection", - "title": "Branch", - "icon": "Microservice", - "schema": { - "properties": { - "require_approval_count": { - "title": "Require approvals", - "type": "number", - "icon": "DefaultProperty", - "description": "The number of approvals required before merging a pull request" - }, - "is_protected": { - "title": "Is branch protected", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Indicates whether certain rules must be met before changes can be merged" - - }, - "require_code_owner_review": { - "title": "Require code owner review", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Requires review from code owners before a pull request can be merged" - - }, - "allow_deletions": { - "title": "Allow deletions", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Allows users with bypass permissions to delete matching references in the branch" - - }, - "allow_force_pushes": { - "title": "Allow force pushes", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Permits users with push access to force push changes to the branch" - - }, - "url": { - "title": "Branch url", - "type": "string", - "format": "url", - "description": "URL of the branch in the repository" - }, - "require_signed_commits": { - "title": "Require signed commits", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Ensures that commits pushed to the branch are signed" - }, - "require_linear_history": { - "title": "Require linear history", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Enforces a linear history in the branch by preventing merge commits" - }, - "restrict_creations": { - "title": "Restrict creations", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Restricts the creation of matching references in the branch, allowing only users with bypass permissions" - }, - "restrict_updates": { - "title": "Restrict updates", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Prevents updates to matching references in the branch, limiting changes to users with bypass permissions" - }, - "require_conversation_resolution": { - "title": "Require conversation resolution", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Ensures that all comments and conversations are resolved before merging a pull request" - }, - "lock_branch": { - "title": "Lock branch", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Locks the branch, preventing any changes from being made unless explicitly unlocked" - - }, - "block_force_pushes": { - "title": "Block force pushes", - "type": "boolean", - "icon": "DefaultProperty", - "description": "Prevent users with push access from force pushing to refs" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_last_contributor_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_last_contributor_blueprint.mdx deleted file mode 100644 index 5e9808a3c..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_git_exporter_example_last_contributor_blueprint.mdx +++ /dev/null @@ -1,47 +0,0 @@ -
-Repository blueprint - -```json showLineNumbers -{ - "identifier": "githubRepository", - "title": "Repository", - "icon": "Microservice", - "schema": { - "properties": { - "readme": { - "title": "README", - "type": "string", - "format": "markdown" - }, - "url": { - "title": "Repository URL", - "type": "string", - "format": "url" - }, - "defaultBranch": { - "title": "Default branch", - "type": "string" - }, - "last_contributor": { - "title": "Last contributor", - "icon": "TwoUsers", - "type": "string", - "format": "user" - }, - "last_push": { - "icon": "GitPullRequest", - "title": "Last push", - "description": "Last commit to the main branch", - "type": "string", - "format": "date-time" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": {} -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_port_app_config.mdx deleted file mode 100644 index 5e4c7d78c..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_port_app_config.mdx +++ /dev/null @@ -1,35 +0,0 @@ -
-Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: 'true' - port: - entity: - mappings: - identifier: .name - title: .name - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: branch - selector: - query: 'true' - port: - entity: - mappings: - identifier: .repository.name + "_" + .branch.name - title: .repository.name + " " + .branch.name - blueprint: '"branch"' - properties: - is_protected: .branch.protected - commit_sha: .branch.commit.sha - commit_url: .branch.commit.url - relations: - repository: .repository.name -``` -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_protection_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_protection_port_app_config.mdx deleted file mode 100644 index fde68df5a..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_branch_protection_port_app_config.mdx +++ /dev/null @@ -1,48 +0,0 @@ -
-Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: 'true' - port: - entity: - mappings: - identifier: .name - title: .name - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: branch - selector: - query: '.repository.default_branch == .branch.name' - port: - entity: - mappings: - identifier: .repository.name + "_" + .branch.name - title: .repository.name + " " + .branch.name - blueprint: '"branch_protection"' - properties: - is_protected: .branch.protected - url: .branch._links.html - require_approval_count: >- - .branch.protectionRules.required_pull_request_reviews.required_approving_review_count - require_code_owner_review: >- - .branch.protectionRules.required_pull_request_reviews.require_code_owner_reviews - allow_force_pushes: .branch.protectionRules.allow_force_pushes.enabled - allow_deletions: .branch.protectionRules.allow_deletions.enabled - require_signed_commits: .branch.protectionRules.required_signatures.enabled - require_linear_history: .branch.protectionRules.required_linear_history.enabled - restrict_creations: .branch.protectionRules.block_creations.enabled - restrict_updates: .branch.protectionRules.restrict_updates.enabled - require_conversation_resolution: >- - .branch.protectionRules.required_conversation_resolution.enabled - lock_branch: .branch.protectionRules.lock_branch.enabled - block_force_pushes: .branch.protectionRules.allow_force_pushes.enabled == false - relations: - repository: .repository.name -``` -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_last_contributor_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_last_contributor_port_app_config.mdx deleted file mode 100644 index 389d28694..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-branch/_github_exporter_example_last_contributor_port_app_config.mdx +++ /dev/null @@ -1,31 +0,0 @@ -
-Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: 'true' - port: - entity: - mappings: - identifier: .name - title: .name - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: branch - selector: - query: '.repository.default_branch == .branch.name' - port: - entity: - mappings: - identifier: .repository.name - blueprint: '"githubRepository"' - properties: - last_contributor: .branch.commit.commit.author.email - last_push: .branch.commit.commit.committer.date -``` -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployment_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployment_blueprint.mdx deleted file mode 100644 index de1a2263e..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployment_blueprint.mdx +++ /dev/null @@ -1,58 +0,0 @@ -
-Deployment blueprint - -```json showLineNumbers -{ - "identifier": "deployment", - "title": "Deployment", - "icon": "Deployment", - "schema": { - "properties": { - "description": { - "title": "Description", - "type": "string" - }, - "ref": { - "title": "Ref", - "type": "string" - }, - "sha": { - "title": "Sha", - "type": "string" - }, - "transientEnvironment": { - "title": "Transient Running Service", - "type": "boolean" - }, - "productionEnvironment": { - "title": "Production Running Service", - "type": "boolean" - }, - "createdAt": { - "title": "Created At", - "type": "string", - "format": "date-time" - }, - "url": { - "title": "URL", - "type": "string", - "icon": "Link", - "format": "url" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": { - "runningService": { - "title": "Running Service", - "target": "githubRepoEnvironment", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployments_and_environments_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployments_and_environments_port_app_config.mdx deleted file mode 100644 index 1707950ad..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_deployments_and_environments_port_app_config.mdx +++ /dev/null @@ -1,59 +0,0 @@ -
- - Port port-app-config.yml - -```yaml -createMissingRelatedEntities: true -resources: - - kind: repository - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - port: - entity: - mappings: - identifier: ".name" # The Entity identifier will be the repository name. - title: ".name" - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: environment - selector: - query: "true" - port: - entity: - mappings: - identifier: .repo + '-' + .name - title: .name - blueprint: '"githubRepoEnvironment"' - properties: - url: .html_url - customBranchesPolicies: .custom_branches_policies - protectedBranches: .protected_branches - createdAt: .created_at - updatedAt: .updated_at - relations: - repository: .repo - - kind: deployment - selector: - query: "true" - port: - entity: - mappings: - identifier: .repo + '-' + (.id|tostring) - title: .task + '-' + .environment - blueprint: '"deployment"' - properties: - description: .description - ref: .ref - sha: .sha - productionEnvironment: .production_environment - transientEnvironment: .transient_environment - createdAt: .created_at - url: .url - relations: - environment: .repo + '-' + .environment -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_environment_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_environment_blueprint.mdx deleted file mode 100644 index acaf7cae2..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-deployments-environments/_github_exporter_example_environment_blueprint.mdx +++ /dev/null @@ -1,51 +0,0 @@ -
-Running Service blueprint - -```json showLineNumbers -{ - "identifier": "githubRepoEnvironment", - "title": "Running Service", - "icon": "Environment", - "schema": { - "properties": { - "url": { - "icon": "DefaultProperty", - "title": "URL", - "type": "string", - "format": "url" - }, - "createdAt": { - "title": "Created At", - "type": "string", - "format": "date-time", - "icon": "DefaultProperty" - }, - "updatedAt": { - "title": "Updated At", - "type": "string", - "format": "date-time" - }, - "protectedBranches": { - "title": "Protected Branches", - "type": "boolean" - }, - "customBranchPolicies": { - "title": "Custom Branch Policies", - "type": "boolean" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": { - "repository": { - "target": "githubRepository", - "required": true, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_git_exporter_example_issue_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_git_exporter_example_issue_blueprint.mdx deleted file mode 100644 index e75582246..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_git_exporter_example_issue_blueprint.mdx +++ /dev/null @@ -1,76 +0,0 @@ -
-Issue blueprint - -```json showLineNumbers -{ - "identifier": "githubIssue", - "title": "Issue", - "icon": "Github", - "schema": { - "properties": { - "creator": { - "title": "Creator", - "type": "string" - }, - "assignees": { - "title": "Assignees", - "type": "array" - }, - "labels": { - "title": "Labels", - "type": "array" - }, - "status": { - "title": "Status", - "type": "string", - "enum": ["open", "closed"], - "enumColors": { - "open": "green", - "closed": "purple" - } - }, - "createdAt": { - "title": "Created At", - "type": "string", - "format": "date-time" - }, - "closedAt": { - "title": "Closed At", - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "title": "Updated At", - "type": "string", - "format": "date-time" - }, - "description": { - "title": "Description", - "type": "string", - "format": "markdown" - }, - "issueNumber": { - "title": "Issue Number", - "type": "number" - }, - "link": { - "title": "Link", - "type": "string", - "format": "url" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": { - "repository": { - "target": "githubRepository", - "required": true, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_github_exporter_example_issue_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_github_exporter_example_issue_port_app_config.mdx deleted file mode 100644 index 10a5c6ee7..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-issue/_github_exporter_example_issue_port_app_config.mdx +++ /dev/null @@ -1,44 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - port: - entity: - mappings: - identifier: ".name" # The Entity identifier will be the repository name. - title: ".name" - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: issue - selector: - query: ".pull_request == null" # JQ boolean query. If evaluated to false - skip syncing the object. - port: - entity: - mappings: - identifier: ".repo + (.id|tostring)" - title: ".title" - blueprint: '"githubIssue"' - properties: - creator: ".user.login" - assignees: "[.assignees[].login]" - labels: "[.labels[].name]" - status: ".state" - createdAt: ".created_at" - closedAt: ".closed_at" - updatedAt: ".updated_at" - description: ".body" - issueNumber: ".number" - link: ".html_url" - relations: - repository: ".repo" -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-monorepo/_github_exporter_example_monorepo_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-monorepo/_github_exporter_example_monorepo_port_app_config.mdx deleted file mode 100644 index 5f80bdf1a..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-monorepo/_github_exporter_example_monorepo_port_app_config.mdx +++ /dev/null @@ -1,26 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: folder - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - folders: # Specify the repositories and folders to include under this relative path. - - path: apps/* # Relative path to the folders within the repositories. - repos: # List of repositories to include folders from. - - backend-service - - frontend-service - port: - entity: - mappings: - identifier: ".folder.name" - title: ".folder.name" - blueprint: '"githubRepository"' - properties: - url: .repo.html_url + "/tree/" + .repo.default_branch + "/" + .folder.path - readme: file://README.md -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_codeScan_alert_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_codeScan_alert_blueprint.mdx deleted file mode 100644 index 70b7aded0..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_codeScan_alert_blueprint.mdx +++ /dev/null @@ -1,48 +0,0 @@ -
-Code scan Alert blueprint - -```json showLineNumbers -{ - "identifier": "code_scan_alerts", - "title": "Code Scan Alerts", - "icon": "Microservice", - "schema": { - "properties": { - "description": { - "title": "Alert description", - "type": "string" - }, - "severity": { - "title": "Alert severity", - "type": "string" - }, - "tags": { - "items": { - "type": "string" - }, - "title": "Alert tags", - "type": "array" - }, - "url": { - "title": "alert URL", - "type": "string", - "format": "url" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": false, - "many": true - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_dependabot_alert_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_dependabot_alert_blueprint.mdx deleted file mode 100644 index 2ef4aadde..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_dependabot_alert_blueprint.mdx +++ /dev/null @@ -1,102 +0,0 @@ -
-Dependabot Alert blueprint - -```json showLineNumbers -{ - "identifier": "githubDependabotAlert", - "title": "Dependabot Alert", - "icon": "Github", - "schema": { - "properties": { - "severity": { - "title": "Severity", - "type": "string", - "enum": ["low", "medium", "high", "critical"], - "enumColors": { - "low": "yellow", - "medium": "orange", - "high": "red", - "critical": "red" - }, - "icon": "DefaultProperty" - }, - "state": { - "title": "State", - "type": "string", - "enum": ["auto_dismissed", "dismissed", "fixed", "open"], - "enumColors": { - "auto_dismissed": "green", - "dismissed": "green", - "fixed": "green", - "open": "red" - }, - "icon": "DefaultProperty" - }, - "packageName": { - "icon": "DefaultProperty", - "title": "Package Name", - "type": "string" - }, - "packageEcosystem": { - "title": "Package Ecosystem", - "type": "string" - }, - "manifestPath": { - "title": "Manifest Path", - "type": "string" - }, - "scope": { - "title": "Scope", - "type": "string" - }, - "ghsaID": { - "title": "GHSA ID", - "type": "string" - }, - "cveID": { - "title": "CVE ID", - "type": "string" - }, - "url": { - "title": "URL", - "type": "string", - "format": "url" - }, - "references": { - "icon": "Vulnerability", - "title": "References", - "type": "array", - "items": { - "type": "string", - "format": "url" - } - }, - "alertCreatedAt": { - "icon": "DefaultProperty", - "type": "string", - "title": "Alert Created At", - "format": "date-time" - }, - "alertUpdatedAt": { - "icon": "DefaultProperty", - "type": "string", - "title": "Alert Updated At", - "format": "date-time" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": true, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_repo_dependabot_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_repo_dependabot_port_app_config.mdx deleted file mode 100644 index 2de699dfe..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-alerts/_github_exporter_example_repo_dependabot_port_app_config.mdx +++ /dev/null @@ -1,63 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: "true" - port: - entity: - mappings: - identifier: .name - title: .name - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: dependabot-alert - selector: - query: "true" - port: - entity: - mappings: - identifier: .repo.name + "-" + (.number | tostring) - title: .number | tostring - blueprint: '"githubDependabotAlert"' - properties: - state: .state - severity: .security_advisory.severity - packageName: .dependency.package.name - packageEcosystem: .dependency.package.ecosystem - manifestPath: .dependency.manifest_path - scope: .dependency.scope - ghsaID: .security_advisory.ghsa_id - cveID: .security_advisory.cve_id - url: .html_url - references: "[.security_advisory.references[].url]" - alertCreatedAt: .created_at - alertUpdatedAt: .updated_at - relations: - repository: .repo.name - - kind: code-scanning-alerts - selector: - query: "true" - port: - entity: - mappings: - identifier: .repo + "-" + (.number | tostring) - title: .rule.name - blueprint: '"code_scan_alerts"' - properties: - state: .state - severity: .rule.severity - tags: .rule.tags - description: .rule.description - url: .html_url - relations: - repository: .repo -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_custom_properties_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_custom_properties_port_app_config.mdx deleted file mode 100644 index 3f974fd13..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_custom_properties_port_app_config.mdx +++ /dev/null @@ -1,27 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - // highlight-next-line - customProperties: true - port: - entity: - mappings: - identifier: ".name" # The Entity identifier will be the repository name. - title: ".name" - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - // highlight-next-line - custom_properties: .customProperties - -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_repository_with_custom_properties_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_repository_with_custom_properties_blueprint.mdx deleted file mode 100644 index 47965784b..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-custom-properties/_github_exporter_example_repository_with_custom_properties_blueprint.mdx +++ /dev/null @@ -1,41 +0,0 @@ -
-Repository blueprint - -```json showLineNumbers -{ - "identifier": "githubRepository", - "title": "Repository", - "icon": "Microservice", - "schema": { - "properties": { - "readme": { - "title": "README", - "type": "string", - "format": "markdown" - }, - "url": { - "title": "Repository URL", - "type": "string", - "format": "url" - }, - "defaultBranch": { - "title": "Default branch", - "type": "string" - }, - "custom_properties": { - "items": { - "type": "object" - }, - "type": "array", - "title": "Custom Properties" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": {} -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_folder_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_folder_blueprint.mdx deleted file mode 100644 index 1b90290bb..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_folder_blueprint.mdx +++ /dev/null @@ -1,37 +0,0 @@ -
-Folder blueprint - -```json showLineNumbers -{ - "identifier": "githubFolder", - "title": "Folder", - "icon": "Github", - "schema": { - "properties": { - "readme": { - "title": "README", - "type": "string", - "format": "markdown" - }, - "url": { - "title": "Folder URL", - "type": "string", - "format": "url" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_pull_request_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_pull_request_blueprint.mdx deleted file mode 100644 index bfd2343fa..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_pull_request_blueprint.mdx +++ /dev/null @@ -1,68 +0,0 @@ -
-Pull request blueprint - -```json showLineNumbers -{ - "identifier": "githubPullRequest", - "title": "Pull Request", - "icon": "Github", - "schema": { - "properties": { - "creator": { - "title": "Creator", - "type": "string" - }, - "assignees": { - "title": "Assignees", - "type": "array" - }, - "reviewers": { - "title": "Reviewers", - "type": "array" - }, - "status": { - "title": "Status", - "type": "string", - "enum": ["merged", "open", "closed"], - "enumColors": { - "merged": "purple", - "open": "green", - "closed": "red" - } - }, - "closedAt": { - "title": "Closed At", - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "title": "Updated At", - "type": "string", - "format": "date-time" - }, - "mergedAt": { - "title": "Merged At", - "type": "string", - "format": "date-time" - }, - "link": { - "format": "url", - "type": "string" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_repo_folders_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_repo_folders_port_app_config.mdx deleted file mode 100644 index 7fdc379b5..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-folders/_github_exporter_example_repo_folders_port_app_config.mdx +++ /dev/null @@ -1,64 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: "true" - port: - entity: - mappings: - identifier: .name - title: .name - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: pull-request - selector: - query: "true" - port: - entity: - mappings: - identifier: .head.repo.name + (.id|tostring) - title: .title - blueprint: '"githubPullRequest"' - properties: - creator: .user.login - assignees: "[.assignees[].login]" - reviewers: "[.requested_reviewers[].login]" - status: .status - closedAt: .closed_at - updatedAt: .updated_at - mergedAt: .merged_at - prNumber: .id - link: .html_url - relations: - repository: .head.repo.name - - kind: folder - selector: - query: "true" - folders: - - path: "*" # Using "*" will ingest the folders from the root of each of repository as entities - repos: # Add any repositories you want to map folders from to the following list - - backend-service - - frontend-service - port: - entity: - mappings: - identifier: .folder.name - title: .folder.name - blueprint: '"githubFolder"' - properties: - url: >- - .repo.html_url + "/tree/" + .repo.default_branch + "/" + - .folder.path - readme: file://README.md - relations: - repository: .repo.name -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_blueprint.mdx deleted file mode 100644 index e9853a153..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_blueprint.mdx +++ /dev/null @@ -1,48 +0,0 @@ -
-Release blueprint - -```json showLineNumbers -{ - "identifier": "release", - "title": "Release", - "icon": "Github", - "schema": { - "properties": { - "release_creation_time": { - "icon": "DefaultProperty", - "type": "string", - "title": "Release creation time", - "format": "date-time" - }, - "author": { - "type": "string", - "title": "Author" - }, - "description": { - "type": "string", - "title": "Description" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": false, - "many": false - }, - "tag": { - "title": "Tag", - "target": "tag", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_tag_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_tag_port_app_config.mdx deleted file mode 100644 index 086177841..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_release_tag_port_app_config.mdx +++ /dev/null @@ -1,51 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - port: - entity: - mappings: - identifier: ".name" # The Entity identifier will be the repository name. - title: ".name" - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: release - selector: - query: 'true' - port: - entity: - mappings: - identifier: .release.name - title: .release.name - blueprint: '"release"' - properties: - author: .release.author.login - description: .release.body - release_creation_time: .release.created_at - relations: - tag: .release.tag_name - repository: .repo.name - - kind: tag - selector: - query: 'true' - port: - entity: - mappings: - identifier: .tag.name - title: .tag.name - blueprint: '"tag"' - properties: - commit_sha: .commit.sha - relations: - repository: .repo.name -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_tag_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_tag_blueprint.mdx deleted file mode 100644 index 6fa36c650..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-release-tag/_github_exporter_example_tag_blueprint.mdx +++ /dev/null @@ -1,34 +0,0 @@ -
-Tag blueprint - -```json showLineNumbers - -{ - "identifier": "tag", - "title": "Tag", - "icon": "Github", - "schema": { - "properties": { - "commit_sha": { - "icon": "DefaultProperty", - "type": "string", - "title": "Commit sha" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_repository_with_teams_relation_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_repository_with_teams_relation_blueprint.mdx deleted file mode 100644 index bc086d42a..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_repository_with_teams_relation_blueprint.mdx +++ /dev/null @@ -1,42 +0,0 @@ -
-Repository blueprint - -```json showLineNumbers -{ - "identifier": "githubRepository", - "title": "Repository", - "icon": "Microservice", - "schema": { - "properties": { - "readme": { - "title": "README", - "type": "string", - "format": "markdown" - }, - "url": { - "title": "Repository URL", - "type": "string", - "format": "url" - }, - "defaultBranch": { - "title": "Default Branch", - "type": "string" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": { - "githubTeams": { - "title": "GitHub Teams", - "target": "githubTeam", - "required": false, - "many": true - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_team_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_team_blueprint.mdx deleted file mode 100644 index e0842f0f9..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_export_example_team_blueprint.mdx +++ /dev/null @@ -1,42 +0,0 @@ -
-Team blueprint - -```json showLineNumbers -{ - "identifier": "githubTeam", - "title": "GitHub Team", - "icon": "Github", - "schema": { - "properties": { - "slug": { - "title": "Slug", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "link": { - "title": "Link", - "icon": "Link", - "type": "string", - "format": "url" - }, - "permission": { - "title": "Permission", - "type": "string" - }, - "notification_setting": { - "title": "Notification Setting", - "type": "string" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": {} -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_exporter_example_repository_with_teams_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_exporter_example_repository_with_teams_port_app_config.mdx deleted file mode 100644 index 3ebdfc0cc..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-teams/_github_exporter_example_repository_with_teams_port_app_config.mdx +++ /dev/null @@ -1,42 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -createMissingRelatedEntities: true -resources: - - kind: team - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - port: - entity: - mappings: - identifier: ".id | tostring" - title: .name - blueprint: '"githubTeam"' - properties: - name: .name - slug: .slug - description: .description - link: .html_url - permission: .permission - notification_setting: .notification_setting - - kind: repository - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - teams: true # Boolean flag to indicate whether to include the repository teams. - port: - entity: - mappings: - identifier: .name - title: .name - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - relations: - githubTeams: "[.teams[].id | tostring]" -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_blueprint.mdx deleted file mode 100644 index 48ab1fdbd..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_blueprint.mdx +++ /dev/null @@ -1,66 +0,0 @@ -
-Workflow blueprint - -```json showLineNumbers -{ - "identifier": "githubWorkflow", - "title": "Workflow", - "icon": "Github", - "schema": { - "properties": { - "path": { - "title": "Path", - "type": "string" - }, - "status": { - "title": "Status", - "type": "string", - "enum": [ - "active", - "deleted", - "disabled_fork", - "disabled_inactivity", - "disabled_manually" - ], - "enumColors": { - "active": "green", - "deleted": "red" - } - }, - "createdAt": { - "title": "Created At", - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "title": "Updated At", - "type": "string", - "format": "date-time" - }, - "deletedAt": { - "title": "Deleted At", - "type": "string", - "format": "date-time" - }, - "link": { - "title": "Link", - "type": "string", - "format": "url" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": { - "repository": { - "title": "Repository", - "target": "githubRepository", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_run_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_run_blueprint.mdx deleted file mode 100644 index 6fa8a1560..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_git_exporter_example_workflow_run_blueprint.mdx +++ /dev/null @@ -1,114 +0,0 @@ -
-Workflow run blueprint - -```json showLineNumbers -{ - "identifier": "githubWorkflowRun", - "title": "Workflow Run", - "icon": "Github", - "schema": { - "properties": { - "name": { - "title": "Name", - "type": "string" - }, - "triggeringActor": { - "title": "Triggering Actor", - "type": "string" - }, - "status": { - "title": "Status", - "type": "string", - "enum": [ - "completed", - "action_required", - "cancelled", - "startup_failure", - "failure", - "neutral", - "skipped", - "stale", - "success", - "timed_out", - "in_progress", - "queued", - "requested", - "waiting" - ], - "enumColors": { - "queued": "yellow", - "in_progress": "yellow", - "success": "green", - "failure": "red" - } - }, - "conclusion": { - "title": "Conclusion", - "type": "string", - "enum": [ - "completed", - "action_required", - "cancelled", - "startup_failure", - "failure", - "neutral", - "skipped", - "stale", - "success", - "timed_out", - "in_progress", - "queued", - "requested", - "waiting" - ], - "enumColors": { - "queued": "yellow", - "in_progress": "yellow", - "success": "green", - "failure": "red" - } - }, - "createdAt": { - "title": "Created At", - "type": "string", - "format": "date-time" - }, - "runStartedAt": { - "title": "Run Started At", - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "title": "Updated At", - "type": "string", - "format": "date-time" - }, - "runNumber": { - "title": "Run Number", - "type": "number" - }, - "runAttempt": { - "title": "Run Attempts", - "type": "number" - }, - "link": { - "title": "Link", - "type": "string", - "format": "url" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "relations": { - "workflow": { - "target": "githubWorkflow", - "required": true, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_github_exporter_example_wf_wfr_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_github_exporter_example_wf_wfr_port_app_config.mdx deleted file mode 100644 index 2b29cdb86..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-workflow-workflowrun/_github_exporter_example_wf_wfr_port_app_config.mdx +++ /dev/null @@ -1,62 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -resources: - - kind: repository - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - port: - entity: - mappings: - identifier: ".name" # The Entity identifier will be the repository name. - title: ".name" - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - - kind: workflow - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - port: - entity: - mappings: - identifier: ".repo + (.id|tostring)" - title: ".name" - blueprint: '"githubWorkflow"' - properties: - path: ".path" - status: ".state" - createdAt: ".created_at" - updatedAt: ".updated_at" - link: ".html_url" - relations: - repository: ".repo" - - kind: workflow-run - selector: - query: ".status != 'completed'" # JQ boolean query. If evaluated to false - skip syncing the object. - port: - entity: - mappings: - identifier: ".repository.name + (.id|tostring)" - title: ".display_title" - blueprint: '"githubWorkflowRun"' - properties: - name: ".name" - triggeringActor: ".triggering_actor.login" - status: ".status" - conclusion: ".conclusion" - createdAt: ".created_at" - runStartedAt: ".run_started_at" - updatedAt: ".updated_at" - deletedAt: ".deleted_at" - runNumber: ".run_number" - runAttempt: ".run_attempt" - link: ".html_url" - relations: - workflow: ".repository.name + (.workflow_id|tostring)" -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md index a603b5b90..ae0ca03ba 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md @@ -7,50 +7,11 @@ import PRBlueprint from './\_github_exporter_example_pull_request_blueprint.mdx' import PortAppConfig from './\_github_exporter_example_port_app_config.mdx' import GitHubResources from '../\_github_exporter_supported_resources.mdx' -import WorkflowBlueprint from './example-workflow-workflowrun/\_git_exporter_example_workflow_blueprint.mdx' -import WorkflowRunBlueprint from './example-workflow-workflowrun/\_git_exporter_example_workflow_run_blueprint.mdx' -import PortWfWfrAppConfig from './example-workflow-workflowrun/\_github_exporter_example_wf_wfr_port_app_config.mdx' - -import BranchProtectionBlueprint from './example-branch/\_git_exporter_example_branch_protection_blueprint.mdx' -import PortBranchProtectionAppConfig from './example-branch/\_github_exporter_example_branch_protection_port_app_config.mdx' -import BranchBlueprint from './example-branch/\_git_exporter_example_branch_blueprint.mdx' -import PortBrAppConfig from './example-branch/\_github_exporter_example_branch_port_app_config.mdx' -import LastContributorAppConfig from './example-branch/\_github_exporter_example_last_contributor_port_app_config.mdx' -import LastContributorBlueprint from './example-branch/\_git_exporter_example_last_contributor_blueprint.mdx' - -import PortMonoRepoAppConfig from './example-monorepo/\_github_exporter_example_monorepo_port_app_config.mdx' - -import IssueBlueprint from './example-issue/\_git_exporter_example_issue_blueprint.mdx' -import PortIssueAppConfig from './example-issue/\_github_exporter_example_issue_port_app_config.mdx' - -import PRFolderBlueprint from './example-repository-folders/\_github_exporter_example_pull_request_blueprint.mdx' -import FolderBlueprint from './example-repository-folders/\_github_exporter_example_folder_blueprint.mdx' -import PortFolderMappingAppConfig from './example-repository-folders/\_github_exporter_example_repo_folders_port_app_config.mdx' - -import TeamBlueprint from './example-repository-teams/\_github_export_example_team_blueprint.mdx' -import RepositoryTeamBlueprint from './example-repository-teams/\_github_export_example_repository_with_teams_relation_blueprint.mdx' -import PortRepositoryTeamMappingAppConfig from './example-repository-teams/\_github_exporter_example_repository_with_teams_port_app_config.mdx' - -import DependabotAlertBlueprint from './example-repository-alerts/\_github_exporter_example_dependabot_alert_blueprint.mdx' -import CodeScanAlertBlueprint from './example-repository-alerts/\_github_exporter_example_codeScan_alert_blueprint.mdx' - -import PortRepositoryDependabotAlertMappingAppConfig from './example-repository-alerts/\_github_exporter_example_repo_dependabot_port_app_config.mdx' - -import RepoEnvironmentBlueprint from './example-deployments-environments/\_github_exporter_example_environment_blueprint.mdx' -import DeploymentBlueprint from './example-deployments-environments/\_github_exporter_example_deployment_blueprint.mdx' -import PortRepoDeploymentAndEnvironmentAppConfig from './example-deployments-environments/\_github_exporter_example_deployments_and_environments_port_app_config.mdx' - import UsersBlueprint from './example-repository-admins/\_github_exporter_example_users_blueprint.mdx' import GithubUsersBlueprint from './example-repository-admins/\_github_exporter_example_github_users_blueprint.mdx' import RepositoryAdminBlueprint from './example-repository-admins/\_github_export_example_repository_with_admins_relation_blueprint.mdx' import RepositoryAdminAppConfig from './example-repository-admins/\_github_exporter_example_admins_users_port_app_config.mdx' -import TagBlueprint from './example-repository-release-tag/\_github_exporter_example_tag_blueprint.mdx' -import ReleaseBlueprint from './example-repository-release-tag/\_github_exporter_example_release_blueprint.mdx' -import RepositoryTagReleaseAppConfig from './example-repository-release-tag/\_github_exporter_example_release_tag_port_app_config.mdx' -import RepositoryCustomPropertiesAppConfig from './example-repository-custom-properties/\_github_exporter_example_custom_properties_port_app_config.mdx' -import RepositoryCustomPropertiesBlueprint from './example-repository-custom-properties/\_github_exporter_example_repository_with_custom_properties_blueprint.mdx' - import PackageBlueprint from './example-file-kind/\_example_package_blueprint.mdx' import PackageAppConfig from './example-file-kind/\_package_json_app_config.mdx' @@ -97,197 +58,7 @@ The following example demonstrates ingestion of dependencies from a `package.jso The example will parse the `package.json` file in your repository and extract the dependencies into Port entities. -For more information about ingesting files and file contents, click [here](/build-your-software-catalog/sync-data-to-catalog/git/github/#ingest-files-from-your-repositories). - -## Map repositories, workflows and workflow runs - -In the following example you will ingest your GitHub repositories, their workflows and workflow runs to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - - - -:::tip learn more - -- Refer to the [setup](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) section to learn more about the `port-app-config.yml` setup process. -- We leverage [JQ JSON processor](https://stedolan.github.io/jq/manual/) to map and transform GitHub objects to Port Entities. -- Click [Here](https://docs.github.com/en/rest/repos/repos#get-a-repository) for the GitHub repository object structure. -- Click [Here](https://docs.github.com/en/rest/actions/workflows#get-a-workflow) for the GitHub workflow object structure. -- Click [Here](https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run) for the GitHub workflow run object structure. - -::: - -After creating the blueprints and committing the `port-app-config.yml` file to your `.github-private` repository (for global configuration), or to any specific repositories (for per-repo configuration), you will see new entities in Port matching your repositories alongside their workflows and workflow runs. (Remember that the `port-app-config.yml` file has to be in the **default branch** of the repository to take effect). - -## Map repositories and issues - -In the following example you will ingest your GitHub repositories and their issues to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - -:::tip learn more - -- Refer to the [setup](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) section to learn more about the `port-app-config.yml` setup process. -- We leverage [JQ JSON processor](https://stedolan.github.io/jq/manual/) to map and transform GitHub objects to Port Entities. -- Click [Here](https://docs.github.com/en/rest/repos/repos#get-a-repository) for the GitHub repository object structure. -- Click [Here](https://docs.github.com/en/rest/issues/issues#get-an-issue) for the GitHub issue object structure. - -::: - -After creating the blueprints and committing the `port-app-config.yml` file to your `.github-private` repository (for global configuration), or to any specific repositories (for per-repo configuration), you will see new entities in Port matching your repositories alongside their issues. (Remember that the `port-app-config.yml` file has to be in the **default branch** of the repository to take effect). - -## Map repositories and monorepos - -In the following example you will ingest your GitHub repositories and their folders to Port. By following this example you can map your different services, packages and libraries from your monorepo into separate entities in Port. you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - -To retrieve the root folders of your monorepo, you can use this following syntax in your `port-app-config.yml`: - -```yaml -- kind: folder - selector: - query: "true" # JQ boolean query. If evaluated to false - skip syncing the object. - folders: # Specify the repositories and folders to include under this relative path. - - path: "*" # Relative path to the folders within the repositories. - repos: # List of repositories to include folders from. - - backend-service - - frontend-service -``` - - -:::tip learn more - -- Refer to the [setup](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) section to learn more about the `port-app-config.yml` setup process. -- We leverage [JQ JSON processor](https://stedolan.github.io/jq/manual/) to map and transform GitHub objects to Port Entities. -- Click [Here](https://docs.github.com/en/rest/repos/repos#get-a-repository) for the GitHub repository object structure. -- Click [Here](https://docs.github.com/en/rest/git/trees#get-a-tree) for the GitHub folder object structure. - -::: - -## Map repositories, repository folders and pull requests - -In the following example you will ingest your GitHub repositories, the repository's root folders and the repository pull requests to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - - - -## Map repositories and teams - -In the following example you will ingest your GitHub repositories and their teams to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - -:::note team mapping requirement -Teams are GitHub organization level resources, therefore you will need to specify the mapping of the teams in a [global integration configuration](/build-your-software-catalog/sync-data-to-catalog/git/github/github.md#setup) (Through Port's UI or through the `port-app-config.yml` file in the `.github-private` repository). -::: - - - - - - - -To retrieve the teams of your repositories, you will need to add the `teams` property to the `selector` in the repository resource kind in your `port-app-config.yml`: - -```yaml -- kind: repository - selector: - query: 'true' # JQ boolean query. If evaluated to false - skip syncing the object. - // highlight-next-line - teams: true # Boolean flag to indicate whether to include the repository teams. -``` - - - -## Map repositories, deployments and environments - -In the following example you will ingest your GitHub repositories, their deployments and environments to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - - - -## Map repositories, Dependabot Alerts, and Code scan alerts - -The following example shows how to ingest your GitHub repositories and their alerts (Dependabot and Code scan alerts) into Port. You can use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - - - -:::info supported alerts -For Code scan alerts, only open alerts on the default branch are supported. -::: - -- `allow_squash_merge` -- Advanced security status (e.g., whether code scanning or secret scanning is enabled) - -If you need to ingest these fields, consider using a self-hosted GitHub app with the appropriate permissions or creating a GitHub workflow to manually gather and ingest this data into Port. - -:::tip self-hosted gitHub app option -For users who need access to the full range of repository fields, including enabling WRITE permissions, we recommend setting up a self-hosted GitHub app. This allows full customization of permissions, ensuring all necessary data can be ingested into Port. -Refer to our [Self-Hosted Installation Guide](https://docs.port.io/build-your-software-catalog/sync-data-to-catalog/git/github/self-hosted-installation/) for detailed instructions. - -Alternatively, you can create a GitHub workflow that gathers the required data and sends it to Port, allowing you to work around the limitations of the Cloud app. -::: - -## Map repositories and branches - -In the following example you will ingest your GitHub repositories and their branches to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - -## Map repositories and last contributor - -In the following example you will ingest your GitHub repositories and their last contributor to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - -:::info supported last contributor -The last contributor is the author of the last commit in the default branch of the repository -::: - -## Map repositories and branch protection rules - -In the following example you will ingest your GitHub repositories and their main branch protection rules to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - -:::info supported branch protection rules -Currently only default branch protection rules are supported -::: +For more information about ingesting files and file contents, click [here](/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/#ingest-files-from-your-repositories). ## Map repositories, repository admins and users @@ -310,25 +81,6 @@ In other cases, the GitHub API will return a `null` value for the user's email. ::: -## Map repositories, repository releases and tags - -In the following example you will ingest your GitHub repositories, their releases and tags to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - - - -## Map repositories and repository custom properties - -The following example shows how to ingest your GitHub repositories and their custom properties to Port. -You can use the following blueprint definitions and `port-app-config.yml`: - - - ## Map supported resources diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 43b50e740..98a0f375f 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -130,22 +130,24 @@ resources: selector: query: 'true' files: - # Note that glob patterns are supported, so you can use wildcards to match multiple files + # Note that glob patterns are supported, so you can use wildcards to match multiple files - path: '**/package.json' - # The `repos` key can be used to filter the repositories from which the files will be fetched + # The `repos` key can be used to filter the repositories and branch where files should be fetched repos: - - "MyRepo" - - "MyOtherRepo" + - repo: MyRepo + branch: main + - repo: MyOtherRepo + branch: main port: entity: mappings: - identifier: .file.path - title: .file.name + identifier: .path + title: .name blueprint: '"manifest"' properties: - project_name: .file.content.name - project_version: .file.content.version - license: .file.content.license + project_name: .content.name + project_version: .content.version + license: .content.license ``` :::tip Test your mapping diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index 21b2822cc..f332a3658 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -26,23 +26,21 @@ This page outlines the following steps: ## Prerequisites - A Github account with permissions to create access tokens. -- If you choose the real time & always on installation method, you will need a kubernetes cluster on which to install the integration. - Your Port user role is set to `Admin`. ## Setup ### Configure access token -To allow Port to fetch data from your GitLab instance, you need to create an access token. Port supports two types of tokens for authentication: personal access tokens and group access tokens. +To allow Port to fetch data from your Github Organization, you need to create an access token. Port supports two types of tokens for authentication: personal access tokens and Github app installation tokens. #### Personal access token (PAT) A Personal Access Token (PAT) is suitable if you're the only one managing the integration and don't need frequent credential rotation. -To create a personal access token see the GitLab [personal access token guide](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html). +To create a personal access token see the Github [managing your personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). -- The token must belong to a user with access to the relevant GitLab resources (e.g., projects, groups). +- The token must belong to a user with access to the relevant Github resources (e.g., repositories, teams). -#### Group access token A Group Access Token is recommended when multiple team members manage the integration or when it's set up at the group level. To create a group access token, see the GitLab [group access token guide](https://docs.gitlab.com/ee/user/group/access_tokens.html). From f8260d43207e72da0512cc16e4db8f4044f9f2df Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 15:38:21 +0100 Subject: [PATCH 05/42] Replace Github app references --- .../examples/resource-mapping-examples.md | 2 +- .../git/github-ocean/github-ocean.md | 10 +++------- .../git/github-ocean/gitops/gitops.md | 10 +++------- .../git/github-ocean/installation.md | 1 - .../git/github-ocean/self-hosted-installation.md | 16 ++++++++-------- 5 files changed, 15 insertions(+), 24 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md index ae0ca03ba..53d599029 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md @@ -84,7 +84,7 @@ In other cases, the GitHub API will return a `null` value for the user's email. ## Map supported resources -The examples above show specific use cases, but Port's GitHub app supports the ingestion of many other GitHub objects. +The examples above show specific use cases, but Port's GitHub integration supports the ingestion of many other GitHub objects. To adapt the examples above, use the GitHub API reference to learn about the available fields for the different supported objects: diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 98a0f375f..13c0611de 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -89,7 +89,7 @@ This will clear the configuration in Port's UI. When configuring the integration **using GitHub**, you can choose either a global or granular configuration: - **Global configuration:** create a `.github-private` repository in your organization and add the `port-app-config.yml` file to the repository. - - Using this method applies the configuration to all repositories that the GitHub app has permissions to (unless it is overridden by a granular `port-app-config.yml` in a repository). + - Using this method applies the configuration to all repositories that the GitHub integration has permissions to (unless it is overridden by a granular `port-app-config.yml` in a repository). - **Granular configuration:** add the `port-app-config.yml` file to the `.github` directory of your desired repository. - Using this method applies the configuration only to the repository where the `port-app-config.yml` file exists. @@ -509,10 +509,10 @@ Port's GitHub integration requires the following permissions: - Release :::info Default permissions -You will be prompted to confirm the above listed permissions when first installing the App. +You will be prompted to confirm the above listed permissions when first installing the integration. Permissions can be given to selected repositories in your organization, or to all repositories. -You can reconfigure the app at any time, giving it access to new repositories, or removing access. +You can reconfigure the integration at any time, giving it access to new repositories, or removing access. ::: @@ -528,10 +528,6 @@ For relevant guides and examples, see the [guides section](https://docs.port.io/ Port's GitHub app also provides GitOps capabilities, refer to the [GitOps](./gitops/gitops.md) page to learn more. -## Advanced - -Refer to the [advanced](./advanced.md) page for advanced use cases and examples. - ## Self-hosted installation Port's GitHub app also supports a self-hosted installation, refer to the [self-hosted installation](./self-hosted-installation.md) page to learn more. diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md index 7438d9f18..1874b18c7 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md @@ -35,10 +35,10 @@ Note that the `port.yml` file is not the same as the [`port-app-config.yml` file The `port.yml` file can specify one or more Port entities that will be ingested to Port, and any change made to the `port.yml` file will also be reflected inside Port. -:::tip Github app -To manage entities using GitOps and the `port.yml` file, Port's [Github app](/build-your-software-catalog/sync-data-to-catalog/git/github/#setup) must be installed, as it listens to `push` events sent from Github. +:::tip GitHub integration +To manage entities using GitOps and the `port.yml` file, Port's [GitHub integration](/build-your-software-catalog/sync-data-to-catalog/git/github/#setup) must be installed, as it listens to `push` events sent from Github. -This means that if the `port.yml` file exists in the repository before installing the app, it will not be picked up automatically. You will need to make some update to the `port.yml` file and push it to the repository in order for the Git app to properly track and ingest the entity information. +This means that if the `port.yml` file exists in the repository before installing the integration, it will not be picked up automatically. You will need to make some update to the `port.yml` file and push it to the repository in order for the Git integration to properly track and ingest the entity information. ::: The `port.yml` file is how you specify your Port entities that are managed using GitOps and whose data is ingested from your Git repositories. @@ -167,7 +167,3 @@ Check out the [example repository](https://github.com/port-labs/github-app-setup ### Port.yml ingestion pattern - -## Advanced - -Refer to the [advanced](../advanced.md) page for advanced use cases and configurations. diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index f332a3658..e84b43e3b 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -38,7 +38,6 @@ To allow Port to fetch data from your Github Organization, you need to create an A Personal Access Token (PAT) is suitable if you're the only one managing the integration and don't need frequent credential rotation. To create a personal access token see the Github [managing your personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). - - The token must belong to a user with access to the relevant Github resources (e.g., repositories, teams). diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index 6bf9d4b5f..1a9d95c3b 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -111,7 +111,7 @@ docker run \ | Env variable | Description | |----------------------|-------------------------------------------------------------------------------------| -| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | Application ID, you can find it in the edit GitHub App page | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID` | Application ID, you can find it in the edit GitHub Integration page | | `OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET` | Will be used to create webhook | | `OCEAN__INTEGRATION__IDENTIFIER` | Your organization's self-hosted GitHub hostname | | `OCEAN__BASE_URL` | Integration base url, will be used to register webhook. @@ -129,27 +129,27 @@ A health check is a route that is used to check the health of a repository. It i Our GitHub App image exposes a health check route at `https://host:port/health` to monitor its status. -## Installing Port's GitHub application +## Installing Port's GitHub integration -After you have the app registered in your organization and the Docker is up and running, you can install the app and select the repositories to integrate it with: +After you have the integration registered in your organization and the Docker is up and running, you can install the integration and select the repositories to integrate it with: 1. First, navigate to your organization inside your self-hosted GitHub and click on Settings: ![Org view](../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) -2. Inside the settings view, click on Developer Settings -> and then select GitHub Apps: +2. Inside the settings view, click on Developer Settings -> and then select GitHub Integrations: ![Settings view](../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) -3. Click `edit` on the GitHub app created at the step before: +3. Click `edit` on the GitHub integration created at the step before: -![GitHub app installation page](../../../../../static/img/integrations/github-app/SelfHostedEditGitHubApp.png) +![GitHub integration installation page](../../../../../static/img/integrations/github-app/SelfHostedEditGitHubApp.png) 4. Go to Install App -> and select the installation button on your wanted organization; -5. Choose the repositories you want the app to be installed for: +5. Choose the repositories you want the integration to be installed for: -![GitHub app installation chooses repositories](../../../../../static/img/integrations/github-app/SelfHostedInstallationRepoSelection.png) +![GitHub integration installation chooses repositories](../../../../../static/img/integrations/github-app/SelfHostedInstallationRepoSelection.png) ## Limitations From 7644f0d27b74e84a4a67303b29275a5c9279aafd Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 16:09:27 +0100 Subject: [PATCH 06/42] Replace gitlab references in docs --- .../git/github-ocean/installation.md | 192 ++++++++---------- 1 file changed, 90 insertions(+), 102 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index e84b43e3b..a3b346827 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -4,22 +4,22 @@ sidebar_position: 5 import Tabs from "@theme/Tabs" import TabItem from "@theme/TabItem" -import Prerequisites from "../../templates/_ocean_helm_prerequisites_block.mdx" -import HelmParameters from "../../templates/_ocean-advanced-parameters-helm.mdx" -import DockerParameters from "./_github_docker_parameters.mdx" -import AdvancedConfig from '../../../../generalTemplates/_ocean_advanced_configuration_note.md' -import PortApiRegionTip from "/docs/generalTemplates/_port_region_parameter_explanation_template.md" -import OceanSaasInstallation from "/docs/build-your-software-catalog/sync-data-to-catalog/templates/_ocean_saas_installation.mdx" -import OceanRealtimeInstallation from "/docs/build-your-software-catalog/sync-data-to-catalog/templates/_ocean_realtime_installation.mdx" +import Prerequisites from "../../templates/\_ocean_helm_prerequisites_block.mdx" +import HelmParameters from "../../templates/\_ocean-advanced-parameters-helm.mdx" +import DockerParameters from "./\_github_docker_parameters.mdx" +import AdvancedConfig from '../../../../generalTemplates/\_ocean_advanced_configuration_note.md' +import PortApiRegionTip from "/docs/generalTemplates/\_port_region_parameter_explanation_template.md" +import OceanSaasInstallation from "/docs/build-your-software-catalog/sync-data-to-catalog/templates/\_ocean_saas_installation.mdx" +import OceanRealtimeInstallation from "/docs/build-your-software-catalog/sync-data-to-catalog/templates/\_ocean_realtime_installation.mdx" import { OceanSaasLiveEventsDescription, OceanSaasLiveEventsTriggersManual, liveEvents } from "/src/components/ocean-saas-specifics/live-events.jsx"; # Installation This page details how to install Port's Github integration (powered by the Ocean framework). - + This page outlines the following steps: -- How to [create](#create-an-access-token) an access token to give the integration permissions to query your GitLab instance. +- How to [create](#create-an-access-token) an access token to give the integration permissions to query your Github instance. - How to [configure](#configure-the-integration) and customize the integration before deploying it. - How to [deploy](#deploy-the-integration) the integration in the configuration that fits your use case. @@ -38,29 +38,12 @@ To allow Port to fetch data from your Github Organization, you need to create an A Personal Access Token (PAT) is suitable if you're the only one managing the integration and don't need frequent credential rotation. To create a personal access token see the Github [managing your personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). -- The token must belong to a user with access to the relevant Github resources (e.g., repositories, teams). - - -A Group Access Token is recommended when multiple team members manage the integration or when it's set up at the group level. -To create a group access token, see the GitLab [group access token guide](https://docs.gitlab.com/ee/user/group/access_tokens.html). - -- Create the token in a group that has access to the relevant projects. -- Set an appropriate expiration date and store it securely. - -#### Service account token -A service account token is recommended where credentials must remain stable and unaffected by changes in human user membership. - -To set up the account and generate a personal access token, see the GitLab [service account guide](https://docs.gitlab.com/ee/user/profile/service_accounts/). +- The token must belong to a user with access to the relevant Github resources (e.g., repositories, teams). -- Add the service account to the relevant projects or groups with sufficient permissions (e.g., Developer or Maintainer). +#### Self-hosted Github app - -:::info Required scopes -The following scopes are required based on your usage. -- To enable **real-time updates using webhooks**, the token must include the `api` scope (required for managing webhooks). -- If you're **not using realtime updates**, the token needs `read_api` and `read_repository` scopes. -::: +Refer to our [self-hosted installation guide](./self-hosted-installation.md) ### Configure Realtime webhook events @@ -70,7 +53,6 @@ The `baseUrl` parameter is used specifically to enable the real-time functionali If it is not provided, the integration will continue to function correctly. In such a configuration, to retrieve the latest information from the target system, the [`scheduledResyncInterval`](https://ocean.getport.io/develop-an-integration/integration-configuration/#scheduledresyncinterval---run-scheduled-resync) parameter has to be set, or a manual resync will need to be triggered through Port's UI. ::: - ## Deploy the integration Choose one of the following installation methods: @@ -79,7 +61,7 @@ Choose one of the following installation methods: - + @@ -96,7 +78,7 @@ For details about the available parameters for the installation, see the table b - + @@ -105,28 +87,30 @@ For details about the available parameters for the installation, see the table b To install the integration using ArgoCD: -1. Create a `values.yaml` file in `argocd/my-ocean-gitlab-integration` in your git repository with the content: +1. Create a `values.yaml` file in `argocd/my-ocean-Github-integration` in your git repository with the content: :::note -Remember to replace the placeholders for `GITLAB_TOKEN` and your GitLab URL. +Remember to replace the placeholders for `Github_TOKEN` and your Github URL. ::: + ```yaml showLineNumbers initializePortResources: true scheduledResyncInterval: 120 integration: - identifier: my-ocean-gitlab-integration - type: gitlab-v2 + identifier: my-ocean-Github-integration + type: Github-Ocean eventListener: type: POLLING config: // highlight-next-line - gitlabUrl: https://gitlab.com # Or your self-hosted GitLab URL + githubHost: https://api.github.com # Or your self-hosted Github URL secrets: // highlight-next-line - gitlabToken: GITLAB_TOKEN + githubToken: GITHUB_TOKEN ``` +
-2. Install the `my-ocean-gitlab-integration` ArgoCD Application by creating the following `my-ocean-gitlab-integration.yaml` manifest: +2. Install the `my-ocean-Github-integration` ArgoCD Application by creating the following `my-ocean-gitlab-integration.yaml` manifest: :::note Remember to replace the placeholders for `YOUR_PORT_CLIENT_ID` `YOUR_PORT_CLIENT_SECRET` and `YOUR_GIT_REPO_URL`. @@ -140,11 +124,11 @@ Multiple sources ArgoCD documentation can be found [here](https://argo-cd.readth apiVersion: argoproj.io/v1alpha1 kind: Application metadata: - name: my-ocean-gitlab-integration + name: my-ocean-Github-integration namespace: argocd spec: destination: - namespace: my-ocean-gitlab-integration + namespace: my-ocean-Github-integration server: https://kubernetes.default.svc project: default sources: @@ -153,7 +137,7 @@ spec: targetRevision: 0.1.14 helm: valueFiles: - - $values/argocd/my-ocean-gitlab-integration/values.yaml + - $values/argocd/my-ocean-Github-integration/values.yaml // highlight-start parameters: - name: port.clientId @@ -179,29 +163,32 @@ spec:
1. Apply your application manifest with `kubectl`: + ```bash -kubectl apply -f my-ocean-gitlab-integration.yaml +kubectl apply -f my-ocean-Github-integration.yaml ``` +
This table summarizes the available parameters for the installation. -| Parameter | Description | Required | -|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|----------| -| `port.clientId` | Your port client id | ✅ | -| `port.clientSecret` | Your port client secret | ✅ | -| `port.baseUrl` | Your Port API URL - `https://api.getport.io` for EU, `https://api.us.getport.io` for US | ✅ | -| `integration.identifier` | Change the identifier to describe your integration | ✅ | -| `integration.type` | The integration type | ✅ | -| `integration.eventListener.type` | The event listener type | ✅ | -| `integration.config.gitlabUrl` | The GitLab instance URL | ✅ | -| `integration.secrets.gitlabToken`| The GitLab access token | ✅ | -| `scheduledResyncInterval` | The number of minutes between each resync | ❌ | -| `initializePortResources` | Default true, When set to true the integration will create default blueprints and the port App config Mapping | ❌ | -| `sendRawDataExamples` | Enable sending raw data examples from the third party API to port for testing and managing the integration mapping. Default is true | ❌ | -| `baseUrl` | The base url of the GitLab integration instance, used for real-time updates. | ❌ | +| Parameter | Description | Required | +| ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------- | +| `port.clientId` | Your port client id | ✅ | +| `port.clientSecret` | Your port client secret | ✅ | +| `port.baseUrl` | Your Port API URL - `https://api.getport.io` for EU, `https://api.us.getport.io` for US | ✅ | +| `integration.identifier` | Change the identifier to describe your integration | ✅ | +| `integration.type` | The integration type | ✅ | +| `integration.eventListener.type` | The event listener type | ✅ | +| `integration.config.GithubHost` | The GitHub instance URL | ✅ | +| `integration.secrets.GithubToken` | The GitHub access token | ✅ | +| `integration.secrets.GithubOrganization` | The GitHub access token | ✅ | +| `scheduledResyncInterval` | The number of minutes between each resync | ❌ | +| `initializePortResources` | Default true, When set to true the integration will create default blueprints and the port App config Mapping | ❌ | +| `sendRawDataExamples` | Enable sending raw data examples from the third party API to port for testing and managing the integration mapping. Default is true | ❌ | +| `baseUrl` | The base url of the Github integration instance, used for real-time updates. | ❌ |
@@ -211,13 +198,13 @@ This table summarizes the available parameters for the installation. -This workflow/pipeline will run the GitLab integration once and then exit, this is useful for **scheduled** ingestion of data. +This workflow/pipeline will run the Github integration once and then exit, this is useful for **scheduled** ingestion of data. :::warning Real-time updates If you want the integration to update Port in real time using webhooks you should use the [Real-time (self-hosted)](?installation-methods=real-time-self-hosted#setup) installation option. ::: - - + + Make sure to configure the following [Github Secrets](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions): @@ -225,14 +212,14 @@ Make sure to configure the following [Github Secrets](https://docs.github.com/en
-Here is an example for `gitlab-integration.yml` workflow file: +Here is an example for `Github-integration.yml` workflow file: ```yaml showLineNumbers -name: GitLab Exporter Workflow +name: Github Exporter Workflow on: workflow_dispatch: schedule: - - cron: '0 */1 * * *' # Determines the scheduled interval for this workflow. This example runs every hour. + - cron: "0 */1 * * *" # Determines the scheduled interval for this workflow. This example runs every hour. jobs: run-integration: runs-on: ubuntu-latest @@ -240,24 +227,23 @@ jobs: steps: - uses: port-labs/ocean-sail@v1 with: - type: 'gitlab-v2' + type: "Github-Ocean" port_client_id: ${{ secrets.OCEAN__PORT__CLIENT_ID }} port_client_secret: ${{ secrets.OCEAN__PORT__CLIENT_SECRET }} port_base_url: https://api.getport.io config: | - gitlabUrl: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITLAB_URL }} - gitlabToken: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN }} + GithubHost: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_HOST }} + GithubToken: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN }} + GithubOrganization: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION }} ```
- :::tip Your Jenkins agent should be able to run docker commands. ::: - Make sure to configure the following [Jenkins Credentials](https://www.jenkins.io/doc/book/using/using-credentials/) of `Secret Text` type: @@ -271,26 +257,26 @@ Here is an example for `Jenkinsfile` groovy pipeline file: pipeline { agent any stages { - stage('Run GitLab Integration') { + stage('Run Github Integration') { steps { script { withCredentials([ - string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITLAB_URL', variable: 'OCEAN__INTEGRATION__CONFIG__GITLAB_URL'), - string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN', variable: 'OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN'), + string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__Github_URL', variable: 'OCEAN__INTEGRATION__CONFIG__GITLAB_URL'), + string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__Github_TOKEN', variable: 'OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN'), string(credentialsId: 'OCEAN__PORT__CLIENT_ID', variable: 'OCEAN__PORT__CLIENT_ID'), string(credentialsId: 'OCEAN__PORT__CLIENT_SECRET', variable: 'OCEAN__PORT__CLIENT_SECRET'), ]) { sh(''' #Set Docker image and run the container - integration_type="gitlab-v2" + integration_type="Github-v2" version="latest" image_name="ghcr.io/port-labs/port-ocean-${integration_type}:${version}" docker run -i --rm --platform=linux/amd64 \ -e OCEAN__EVENT_LISTENER='{"type":"ONCE"}' \ -e OCEAN__INITIALIZE_PORT_RESOURCES=true \ -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ - -e OCEAN__INTEGRATION__CONFIG__GITLAB_URL=$OCEAN__INTEGRATION__CONFIG__GITLAB_URL \ - -e OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN \ + -e OCEAN__INTEGRATION__CONFIG__Github_URL=$OCEAN__INTEGRATION__CONFIG__GITLAB_URL \ + -e OCEAN__INTEGRATION__CONFIG__Github_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN \ -e OCEAN__PORT__CLIENT_ID=$OCEAN__PORT__CLIENT_ID \ -e OCEAN__PORT__CLIENT_SECRET=$OCEAN__PORT__CLIENT_SECRET \ -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ @@ -315,46 +301,47 @@ Make sure to configure the following [Azure DevOps pipeline variables](https://l
-Here is an example for `gitlab-integration.yml` pipeline file: +Here is an example for `Github-integration.yml` pipeline file: ```yaml showLineNumbers trigger: -- main + - main pool: vmImage: "ubuntu-latest" variables: - group: port-ocean-credentials steps: -- script: | - # Set Docker image and run the container - integration_type="gitlab-v2" - version="latest" - image_name="ghcr.io/port-labs/port-ocean-$integration_type:$version" - - docker run -i --rm --platform=linux/amd64 \ - -e OCEAN__EVENT_LISTENER='{"type":"ONCE"}' \ - -e OCEAN__INITIALIZE_PORT_RESOURCES=true \ - -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ - -e OCEAN__INTEGRATION__CONFIG__GITLAB_URL=$(OCEAN__INTEGRATION__CONFIG__GITLAB_URL) \ - -e OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN=$(OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN) \ - -e OCEAN__PORT__CLIENT_ID=$(OCEAN__PORT__CLIENT_ID) \ - -e OCEAN__PORT__CLIENT_SECRET=$(OCEAN__PORT__CLIENT_SECRET) \ - -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ - $image_name - exit $? - displayName: 'Ingest Data into Port' + - script: | + # Set Docker image and run the container + integration_type="Github-Ocean" + version="latest" + image_name="ghcr.io/port-labs/port-ocean-$integration_type:$version" + + docker run -i --rm --platform=linux/amd64 \ + -e OCEAN__EVENT_LISTENER='{"type":"ONCE"}' \ + -e OCEAN__INITIALIZE_PORT_RESOURCES=true \ + -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_HOST=$(OCEAN__INTEGRATION__CONFIG__GITHUB_HOST) \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN=$(OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN) \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION=$(OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION) \ + -e OCEAN__PORT__CLIENT_ID=$(OCEAN__PORT__CLIENT_ID) \ + -e OCEAN__PORT__CLIENT_SECRET=$(OCEAN__PORT__CLIENT_SECRET) \ + -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ + $image_name + exit $? + displayName: "Ingest Data into Port" ```
- + -Make sure to [configure the following GitLab variables](https://docs.gitlab.com/ee/ci/variables/#for-a-project): +Make sure to [configure the following Github variables](https://docs.gitlab.com/ee/ci/variables/#for-a-project):
-Here is an example for `.gitlab-ci.yml` pipeline file: +Here is an example for `.Github-ci.yml` pipeline file: ```yaml showLineNumbers default: @@ -363,9 +350,9 @@ default: - docker:24.0.5-dind before_script: - docker info - + variables: - INTEGRATION_TYPE: gitlab-v2 + INTEGRATION_TYPE: Github-v2 VERSION: latest stages: - ingest @@ -379,8 +366,9 @@ ingest_data: -e OCEAN__EVENT_LISTENER='{"type":"ONCE"}' \ -e OCEAN__INITIALIZE_PORT_RESOURCES=true \ -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ - -e OCEAN__INTEGRATION__CONFIG__GITLAB_URL=$OCEAN__INTEGRATION__CONFIG__GITLAB_URL \ - -e OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_URL=$OCEAN__INTEGRATION__CONFIG__GITHUB_URL \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION=$OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION \ -e OCEAN__PORT__CLIENT_ID=$OCEAN__PORT__CLIENT_ID \ -e OCEAN__PORT__CLIENT_SECRET=$OCEAN__PORT__CLIENT_SECRET \ -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ @@ -388,7 +376,7 @@ ingest_data: rules: # Run only when changes are made to the main branch - if: '$CI_COMMIT_BRANCH == "main"' schedule: # Run according to a schedule - - cron: '0 */3 * * *' # Run every 3 hours + - cron: "0 */3 * * *" # Run every 3 hours ```
From bec998dab398ff69fe521cea76fda28222f7fbfc Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 20:02:44 +0100 Subject: [PATCH 07/42] Update docker image examples --- .../git/github-ocean/_github_docker_parameters.mdx | 9 +++++---- .../_github_exporter_example_port_app_config.mdx | 2 +- .../git/github-ocean/self-hosted-installation.md | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx index 0743141c5..88445d13e 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx @@ -1,10 +1,11 @@ | Parameter | Description | Example | Required | | --------- | ----------- | ------- | -------- | -| `OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN` | The GitLab access token used to authenticate with your GitLab instance | | ✅ | -| `OCEAN__INTEGRATION__CONFIG__GITLAB_URL` | The URL of your GitLab instance (e.g., https://gitlab.com or your self-hosted URL) | | ✅ | -| `OCEAN__BASE_URL` | The URL of your GitLab integration instance, used for real-time updates | | ❌ | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN` | The GitLab access token used to authenticate with your GitLab instance | | ❌ | +| `OCEAN__INTEGRATION__CONFIG__GTIHUB_HOST` | The URL of your GitLab instance (e.g., https://gitlab.com or your self-hosted URL) | | ❌ | +| `OCEAN__INTEGRATION__CONFIG__GTIHUB_ORGANIZATION` | The URL of your GitLab instance (e.g., https://gitlab.com or your self-hosted URL) | | ✅ | +| `OCEAN__BASE_URL` | The URL of your GitHub integration instance, used for real-time updates | | ❌ | | `OCEAN__PORT__CLIENT_ID` | Your Port client ([How to get the credentials](https://docs.port.io/build-your-software-catalog/custom-integration/api/#find-your-port-credentials)) id | | ✅ | | `OCEAN__PORT__CLIENT_SECRET` | Your Port client ([How to get the credentials](https://docs.port.io/build-your-software-catalog/custom-integration/api/#find-your-port-credentials)) secret | | ✅ | | `OCEAN__PORT__BASE_URL` | Your Port API URL - `https://api.getport.io` for EU, `https://api.us.getport.io` for US | | ✅ | | `OCEAN__INITIALIZE_PORT_RESOURCES` | Default true, When set to true the integration will create default blueprints and the port App config Mapping. Read more about [initializePortResources](https://ocean.getport.io/develop-an-integration/integration-configuration/#initializeportresources---initialize-port-resources) | | ❌ | -| `OCEAN__INTEGRATION__IDENTIFIER` | The identifier of the integration that will be installed | | ❌ | \ No newline at end of file +| `OCEAN__INTEGRATION__IDENTIFIER` | The identifier of the integration that will be installed | | ❌ | diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_port_app_config.mdx index ed0d62c2a..1daf46084 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_port_app_config.mdx +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/_github_exporter_example_port_app_config.mdx @@ -46,7 +46,7 @@ resources: (((($mergedTimestamp - $createdTimestamp) / 3600) * 100 | floor) / 100) end) relations: - repository: .head.repo.name + repository: .__repository ``` diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index 1a9d95c3b..c2060338a 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -80,14 +80,14 @@ In order to make use of [Self-Service Actions using GitHub Workflow](../../../.. ## Docker -To use our GitHub app you will need to deploy our official GitHub app docker image on your VPC. +To use our GitHub app you will need to deploy our official integration Docker image, replacing Github personal access token with an App ID and App private key.. It can be deployed on any platform that allows deploying images as containers such as: K8S, ECS, AWS App Runner, etc. You can pull the Docker image by running: ```bash showLineNumbers -docker pull ghcr.io/port-labs/port-self-hosted-github-app:0.16.0 +docker pull ghcr.io/port-labs/port-ocean-github-ocean:0.4.0-dev ``` Run the following command to start the app: @@ -106,7 +106,7 @@ docker run \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION= \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY= \ -p 8000: \ - ghcr.io/port-labs/port-self-hosted-github-app:0.16.0 + ghcr.io/port-labs/port-ocean-github-ocean:0.4.0-dev ``` | Env variable | Description | From 18eb3115aaad2df31c3423fc8ea1362ef18bea68 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 20:46:30 +0100 Subject: [PATCH 08/42] Continue updating file references --- .../git/github-ocean/github-ocean.md | 26 +++++-------------- .../git/github-ocean/installation.md | 2 +- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 13c0611de..2b0f683ad 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -28,20 +28,7 @@ It is possible to reference any field that appears in the API responses linked b ## Setup -To install Port's GitHub app, follow these steps: - -1. Go to the [GitHub App page](https://github.com/apps/getport-io). - -2. Click on the `Configure` button. - -3. Choose the organization in which to install the app. - -4. Within the selected organization, choose the repositories in which to install the app. - - -5. Click on the `Install` button. - -6. Once the installation has finished, you will be redirected to Port. +To install Port's GitHub integration, see [our dedicated installation guides](./installation.md). ## Configuration @@ -368,9 +355,10 @@ resources: - path: '**/package.json' # Note that in this case we are fetching from a specific repository repos: - - "MyRepo" + - repo: MyRepo + branch: main port: - itemsToParse: .file.content.dependencies | to_entries + itemsToParse: .content.dependencies | to_entries entity: mappings: # Since identifier cannot contain special characters, we are using jq to remove them @@ -390,7 +378,7 @@ Once the array is parsed, we can use the `item` key to refer to each item in the #### Multi-document YAML files -For multi-document YAML files (a single file containing multiple YAML documents separated by `---`), `.file.content` will not resolve to an object, but to an array of objects. +For multi-document YAML files (a single file containing multiple YAML documents separated by `---`), `.content` will not resolve to an object, but to an array of objects. You can use one of these methods to ingest multi-document YAML files: @@ -401,7 +389,7 @@ You can use one of these methods to ingest multi-document YAML files: If you have both single-document and multi-document YAML files in your repositories, you can use the `itemsToParse` key like this to handle both cases: ```yaml -itemsToParse: .file.content | if type== "object" then [.] else . end +itemsToParse: .content | if type== "object" then [.] else . end ``` ::: @@ -460,7 +448,7 @@ resources: .repo.name + "-values" blueprint: '"file"' properties: - content: .file.content + content: .content ``` #### Limitations diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index a3b346827..8374e9bfc 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -37,7 +37,7 @@ To allow Port to fetch data from your Github Organization, you need to create an #### Personal access token (PAT) A Personal Access Token (PAT) is suitable if you're the only one managing the integration and don't need frequent credential rotation. -To create a personal access token see the Github [managing your personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). +To create a personal access token see Github's [managing your personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). - The token must belong to a user with access to the relevant Github resources (e.g., repositories, teams). From 6b328b869623d3e3d3b037c9339cd6f56828ee73 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 21:10:23 +0100 Subject: [PATCH 09/42] Rename examples --- .../examples/{resource-mapping-examples.md => examples.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/{resource-mapping-examples.md => examples.md} (100%) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/examples.md similarity index 100% rename from docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md rename to docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/examples.md From 120c3ee8345da0e7cd1b6c0095cc218ee21a6707 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Tue, 1 Jul 2025 21:23:32 +0100 Subject: [PATCH 10/42] Update port exposure --- .../git/github-ocean/self-hosted-installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index c2060338a..4e746b3b7 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -105,7 +105,7 @@ docker run \ -e OCEAN__EVENT_LISTENER__TYPE=POLLING \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION= \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY= \ - -p 8000: \ + -p 8000:8000 \ ghcr.io/port-labs/port-ocean-github-ocean:0.4.0-dev ``` From 7103fe2d51d525431921ee952b354315d1b86768 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 10:45:39 +0100 Subject: [PATCH 11/42] revert: examples name --- .../examples/{examples.md => resource-mapping-examples.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/{examples.md => resource-mapping-examples.md} (100%) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/examples.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md similarity index 100% rename from docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/examples.md rename to docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md From 1661758a719b212fc0ef22e698ff75218a1bdc81 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 11:17:47 +0100 Subject: [PATCH 12/42] Enable live event support in installation method --- .../git/github-ocean/installation.md | 4 ++-- src/components/ocean-saas-specifics/live-events.jsx | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index 8374e9bfc..481d8ba5e 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -19,7 +19,7 @@ This page details how to install Port's Github integration (powered by the Ocean This page outlines the following steps: -- How to [create](#create-an-access-token) an access token to give the integration permissions to query your Github instance. +- How to [create](#create-an-access-token) an access token to give the integration permissions to query your Github organization. - How to [configure](#configure-the-integration) and customize the integration before deploying it. - How to [deploy](#deploy-the-integration) the integration in the configuration that fits your use case. @@ -61,7 +61,7 @@ Choose one of the following installation methods: - + diff --git a/src/components/ocean-saas-specifics/live-events.jsx b/src/components/ocean-saas-specifics/live-events.jsx index af6e5a506..22c07e36f 100644 --- a/src/components/ocean-saas-specifics/live-events.jsx +++ b/src/components/ocean-saas-specifics/live-events.jsx @@ -167,6 +167,17 @@ export const liveEvents = { \n- git.pullrequest.created \ \n- git.pullrequest.updated \ \n- git.push', + GithubOcean: + ' **Repository:** \ + \n - created \ + \n - edited \ + \n - renamed \ + \n - transferred \ + \n - unarchived \ + \n - publicized \ + \n - privatized', + + }; export const OceanSaasLiveEventsTriggersOAuth = ({ id, isOAuth = false }) => { From 52912bc5cdaba9987902b94acf0cdbaf963b3ee0 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 11:24:43 +0100 Subject: [PATCH 13/42] Add monitored pr events --- .../ocean-saas-specifics/live-events.jsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/components/ocean-saas-specifics/live-events.jsx b/src/components/ocean-saas-specifics/live-events.jsx index 22c07e36f..82f9480d3 100644 --- a/src/components/ocean-saas-specifics/live-events.jsx +++ b/src/components/ocean-saas-specifics/live-events.jsx @@ -175,8 +175,18 @@ export const liveEvents = { \n - transferred \ \n - unarchived \ \n - publicized \ - \n - privatized', - + \n - privatized \ + \n - archived \ + \n - deleted \ + \n\n **pull_request:** \ + \n - opened \ + \n - edited \ + \n - ready_for_review \ + \n - reopened \ + \n - synchronize \ + \n - unassigned \ + \n - review_request_removed \ + \n - closed ' }; From aa46d92fcd8800d596ac35b787fe7f3a9003c0e8 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 12:16:01 +0100 Subject: [PATCH 14/42] Add more supported live events --- .../ocean-saas-specifics/live-events.jsx | 68 +++++++++++++++---- 1 file changed, 53 insertions(+), 15 deletions(-) diff --git a/src/components/ocean-saas-specifics/live-events.jsx b/src/components/ocean-saas-specifics/live-events.jsx index 82f9480d3..5fc9ebd28 100644 --- a/src/components/ocean-saas-specifics/live-events.jsx +++ b/src/components/ocean-saas-specifics/live-events.jsx @@ -186,23 +186,61 @@ export const liveEvents = { \n - synchronize \ \n - unassigned \ \n - review_request_removed \ - \n - closed ' - -}; + \n - closed \ + \n\n **issues:** \ + \n - assigned \ + \n - closed \ + \n - demilestoned \ + \n - edited \ + \n - labeled \ + \n - locked \ + \n - milestoned \ + \n - opened \ + \n - pinned \ + \n - reopened \ + \n - transferred \ + \n - typed \ + \n - unassigned \ + \n - unlabeled \ + \n - unlocked \ + \n - unpinned \ + \n - untyped \ + \n - deleted \ + \n\n **release:** \ + \n - created \ + \n - edited \ + \n - deleted \ + \n\n **push:** \ + \n\n **team:** \ + \n - created \ + \n - edited \ + \n - deleted \ + \n\n **membership:** \ + \n - added \ + \n - removed \ + \n\n **organization:** \ + \n - member_added \ + \n - member_removed \ + \n\n **workflow_run:** \ + \n - in_progress \ + \n - requested \ + \n - completed ' + + }; -export const OceanSaasLiveEventsTriggersOAuth = ({ id, isOAuth = false }) => { - return ( - - {liveEvents[id + "_OAuth"]} - - ); -}; + export const OceanSaasLiveEventsTriggersOAuth = ({ id, isOAuth = false }) => { + return ( + + {liveEvents[id + "_OAuth"]} + + ); + }; -export const OceanSaasLiveEventsTriggersManual = ({ id, isOAuth = false }) => { - return ( - - {liveEvents[id]} - + export const OceanSaasLiveEventsTriggersManual = ({ id, isOAuth = false }) => { + return ( + + {liveEvents[id]} + ); }; From 01393272e868173e58e76dbaf987d2b7503a549f Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 12:18:43 +0100 Subject: [PATCH 15/42] Modify organization param --- .../sync-data-to-catalog/git/github-ocean/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index 481d8ba5e..50650508d 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -182,9 +182,9 @@ This table summarizes the available parameters for the installation. | `integration.identifier` | Change the identifier to describe your integration | ✅ | | `integration.type` | The integration type | ✅ | | `integration.eventListener.type` | The event listener type | ✅ | +| `integration.config.GithubOrganization` | The GitHub access token | ✅ | | `integration.config.GithubHost` | The GitHub instance URL | ✅ | | `integration.secrets.GithubToken` | The GitHub access token | ✅ | -| `integration.secrets.GithubOrganization` | The GitHub access token | ✅ | | `scheduledResyncInterval` | The number of minutes between each resync | ❌ | | `initializePortResources` | Default true, When set to true the integration will create default blueprints and the port App config Mapping | ❌ | | `sendRawDataExamples` | Enable sending raw data examples from the third party API to port for testing and managing the integration mapping. Default is true | ❌ | From d0f61e48039e62739793fdfe16d31bcabcd81efd Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 12:22:19 +0100 Subject: [PATCH 16/42] Add code scanning to list of app required permissions --- .../git/github-ocean/self-hosted-installation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index 4e746b3b7..def7f0a36 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -46,6 +46,7 @@ In organizations that have a self-hosted GitHub installation there is no access - Issues: Readonly - Pull Request: Read and Write - Dependabot alerts: Readonly + - code scanning alerts: Readonly - Administration: Readonly (for syncing github teams) - **Organization Permissions:** - Members: Readonly (for syncing github teams) From c141d5d3f72106bfb074b3c7cdc674147f79197f Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 13:15:27 +0100 Subject: [PATCH 17/42] Clean up document --- .../git/github-ocean/github-ocean.md | 17 ++--- .../git/github-ocean/gitops/gitops.md | 6 +- .../git/github-ocean/installation.md | 65 ++++++++++--------- .../github-ocean/self-hosted-installation.md | 48 +++++++------- 4 files changed, 66 insertions(+), 70 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 2b0f683ad..7b026723f 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -4,13 +4,12 @@ import GitHubResources from './\_github_exporter_supported_resources.mdx' # GitHub -Port's GitHub integration allows you to model GitHub resources in your software catalog and ingest data into them. +You can use Port's GitHub integration to ingest and model your GitHub resources in Port's software catalog. 🐙 ## Overview -This integration allows you to: - +Here's what you can do with the GitHub integration: - Map and organize your desired GitHub resources and their metadata in Port (see supported resources below). - Watch for GitHub object changes (create/update/delete) in real-time, and automatically apply the changes to your software catalog. @@ -94,13 +93,11 @@ When **using Port's UI**, the specified configuration will override any `port-ap ### Ingesting Git objects -By using Port's GitHub app, you can automatically ingest GitHub resources into Port based on real-time events. +Using Port's GitHub integration, you can automatically ingest GitHub resources into Port based on real-time events. The app allows you to ingest a variety of objects resources provided by the GitHub API, including repositories, pull requests, workflows and more. It also allows you to perform "extract, transform, load (ETL)" on data from the GitHub API into the desired software catalog data model. -The GitHub app uses a YAML configuration file to describe the ETL process to load data into the developer portal. The approach reflects a golden middle between an overly opinionated Git visualization that might not work for everyone and a too-broad approach that could introduce unneeded complexity into the developer portal. - -After installing the app, Port will automatically create a `repository` blueprint in your catalog (representing a GitHub repository), along with a default YAML configuration file that defines where the data fetched from Github's API should go in the blueprint. +The GitHub integration uses a YAML configuration file to describe the ETL process to load data into the developer portal. This approach provides a flexible and powerful way to model your Git data without being overly opinionated or complex. ### Ingest files from your repositories @@ -414,8 +411,6 @@ resources: // the rest of your mapping configuration ``` -When a PR modifies a matching file, you will see a new check in your PR with the validation results. - Example for a successful validation: @@ -514,11 +509,11 @@ For relevant guides and examples, see the [guides section](https://docs.port.io/ ## GitOps -Port's GitHub app also provides GitOps capabilities, refer to the [GitOps](./gitops/gitops.md) page to learn more. +Port's GitHub integration also provides GitOps capabilities, refer to the [GitOps](./gitops/gitops.md) page to learn more. ## Self-hosted installation -Port's GitHub app also supports a self-hosted installation, refer to the [self-hosted installation](./self-hosted-installation.md) page to learn more. +Port's GitHub integration also supports a self-hosted installation, refer to the [self-hosted installation](./self-hosted-installation.md) page to learn more. ## Additional resources diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md index 1874b18c7..a36105057 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/gitops/gitops.md @@ -14,7 +14,7 @@ import PortYmlIngestionPattern from '../../\_port_yml_ingestion_pattern_template # GitOps -Port's GitHub integration makes it possible to manage Port entities with a GitOps approach, making your code repositories the source of truth for the various infrastructure assets you want to manage. +Port's GitHub integration allows you to manage Port entities with a GitOps approach, making your code repositories the source of truth for your infrastructure assets. Some common use cases include: @@ -24,7 +24,7 @@ Some common use cases include: Port offers two ways to manage entities using GitOps: -1. Using a dedicated `port.yml` file in your repository. +1. Using a dedicated `port.yml` file in your repository. 2. Using the GitHub integration mapping in your portal. ## Option 1: Use a `port.yml` file @@ -33,7 +33,7 @@ This approach requires adding a `port.yml` file to the **default branch** (usual Note that the `port.yml` file is not the same as the [`port-app-config.yml` file](/build-your-software-catalog/sync-data-to-catalog/git/github/#port-app-configyml-file) used to configure the GitHub integration, and does not replace it. -The `port.yml` file can specify one or more Port entities that will be ingested to Port, and any change made to the `port.yml` file will also be reflected inside Port. +The `port.yml` file can specify one or more Port entities that will be ingested to Port. Any change made to the `port.yml` file will also be reflected inside Port. :::tip GitHub integration To manage entities using GitOps and the `port.yml` file, Port's [GitHub integration](/build-your-software-catalog/sync-data-to-catalog/git/github/#setup) must be installed, as it listens to `push` events sent from Github. diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index 50650508d..5f43a333a 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -15,7 +15,7 @@ import { OceanSaasLiveEventsDescription, OceanSaasLiveEventsTriggersManual, live # Installation -This page details how to install Port's Github integration (powered by the Ocean framework). +This page details how to install Port's GitHub integration (powered by the Ocean framework). This page outlines the following steps: @@ -25,14 +25,14 @@ This page outlines the following steps: ## Prerequisites -- A Github account with permissions to create access tokens. +- A GitHub account with permissions to create access tokens. - Your Port user role is set to `Admin`. ## Setup ### Configure access token -To allow Port to fetch data from your Github Organization, you need to create an access token. Port supports two types of tokens for authentication: personal access tokens and Github app installation tokens. +To allow Port to fetch data from your GitHub Organization, you need to create an access token. Port supports two types of tokens for authentication: personal access tokens and GitHub app installation tokens. #### Personal access token (PAT) @@ -55,7 +55,7 @@ If it is not provided, the integration will continue to function correctly. In s ## Deploy the integration -Choose one of the following installation methods: +Choose the installation method that best suits your needs: @@ -90,7 +90,7 @@ To install the integration using ArgoCD: 1. Create a `values.yaml` file in `argocd/my-ocean-Github-integration` in your git repository with the content: :::note -Remember to replace the placeholders for `Github_TOKEN` and your Github URL. +Remember to replace the placeholders for `GITHUB_TOKEN` and your GitHub URL. ::: ```yaml showLineNumbers @@ -103,14 +103,14 @@ integration: type: POLLING config: // highlight-next-line - githubHost: https://api.github.com # Or your self-hosted Github URL + githubHost: https://api.github.com # Or your self-hosted GitHub URL secrets: // highlight-next-line githubToken: GITHUB_TOKEN ```
-2. Install the `my-ocean-Github-integration` ArgoCD Application by creating the following `my-ocean-gitlab-integration.yaml` manifest: +2. Install the `my-ocean-Github-integration` ArgoCD Application by creating the following `my-ocean-github-integration.yaml` manifest: :::note Remember to replace the placeholders for `YOUR_PORT_CLIENT_ID` `YOUR_PORT_CLIENT_SECRET` and `YOUR_GIT_REPO_URL`. @@ -174,21 +174,21 @@ kubectl apply -f my-ocean-Github-integration.yaml This table summarizes the available parameters for the installation. -| Parameter | Description | Required | -| ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------- | -| `port.clientId` | Your port client id | ✅ | -| `port.clientSecret` | Your port client secret | ✅ | -| `port.baseUrl` | Your Port API URL - `https://api.getport.io` for EU, `https://api.us.getport.io` for US | ✅ | -| `integration.identifier` | Change the identifier to describe your integration | ✅ | -| `integration.type` | The integration type | ✅ | -| `integration.eventListener.type` | The event listener type | ✅ | -| `integration.config.GithubOrganization` | The GitHub access token | ✅ | -| `integration.config.GithubHost` | The GitHub instance URL | ✅ | -| `integration.secrets.GithubToken` | The GitHub access token | ✅ | -| `scheduledResyncInterval` | The number of minutes between each resync | ❌ | -| `initializePortResources` | Default true, When set to true the integration will create default blueprints and the port App config Mapping | ❌ | -| `sendRawDataExamples` | Enable sending raw data examples from the third party API to port for testing and managing the integration mapping. Default is true | ❌ | -| `baseUrl` | The base url of the Github integration instance, used for real-time updates. | ❌ | +| Parameter | Description | Required | +| --- | --- | --- | +| `port.clientId` | Your Port client ID. | ✅ | +| `port.clientSecret` | Your Port client secret. | ✅ | +| `port.baseUrl` | Your Port API URL (`https://api.getport.io` for EU, `https://api.us.getport.io` for US). | ✅ | +| `integration.identifier` | A unique identifier for your integration. | ✅ | +| `integration.type` | The integration type. | ✅ | +| `integration.eventListener.type` | The event listener type. | ✅ | +| `integration.config.GithubOrganization` | The GitHub organization to sync data from. | ✅ | +| `integration.config.GithubHost` | The GitHub instance URL. | ✅ | +| `integration.secrets.GithubToken` | The GitHub access token. | ✅ | +| `scheduledResyncInterval` | The number of minutes between each resync. | ❌ | +| `initializePortResources` | When `true`, the integration will create default blueprints and port-app-config.yml mapping. | ❌ | +| `sendRawDataExamples` | When `true`, sends raw data examples from the third-party API to Port for testing and managing the integration mapping. | ❌ | +| `baseUrl` | The base URL of the GitHub integration instance, used for real-time updates. | ❌ |
@@ -198,7 +198,7 @@ This table summarizes the available parameters for the installation. -This workflow/pipeline will run the Github integration once and then exit, this is useful for **scheduled** ingestion of data. +This workflow/pipeline will run the GitHub integration once and then exit. This is useful for **scheduled** ingestion of data. :::warning Real-time updates If you want the integration to update Port in real time using webhooks you should use the [Real-time (self-hosted)](?installation-methods=real-time-self-hosted#setup) installation option. @@ -212,7 +212,7 @@ Make sure to configure the following [Github Secrets](https://docs.github.com/en
-Here is an example for `Github-integration.yml` workflow file: +Here is an example for a `github-integration.yml` workflow file: ```yaml showLineNumbers name: Github Exporter Workflow @@ -251,7 +251,7 @@ of `Secret Text` type:
-Here is an example for `Jenkinsfile` groovy pipeline file: +Here is an example for a `Jenkinsfile` groovy pipeline file: ```text showLineNumbers pipeline { @@ -261,8 +261,8 @@ pipeline { steps { script { withCredentials([ - string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__Github_URL', variable: 'OCEAN__INTEGRATION__CONFIG__GITLAB_URL'), - string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__Github_TOKEN', variable: 'OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN'), + string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITHUB_URL', variable: 'OCEAN__INTEGRATION__CONFIG__GITHUB_URL'), + string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN', variable: 'OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN'), string(credentialsId: 'OCEAN__PORT__CLIENT_ID', variable: 'OCEAN__PORT__CLIENT_ID'), string(credentialsId: 'OCEAN__PORT__CLIENT_SECRET', variable: 'OCEAN__PORT__CLIENT_SECRET'), ]) { @@ -275,8 +275,8 @@ pipeline { -e OCEAN__EVENT_LISTENER='{"type":"ONCE"}' \ -e OCEAN__INITIALIZE_PORT_RESOURCES=true \ -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ - -e OCEAN__INTEGRATION__CONFIG__Github_URL=$OCEAN__INTEGRATION__CONFIG__GITLAB_URL \ - -e OCEAN__INTEGRATION__CONFIG__Github_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITLAB_TOKEN \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_URL=$OCEAN__INTEGRATION__CONFIG__GITHUB_URL \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN \ -e OCEAN__PORT__CLIENT_ID=$OCEAN__PORT__CLIENT_ID \ -e OCEAN__PORT__CLIENT_SECRET=$OCEAN__PORT__CLIENT_SECRET \ -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ @@ -291,6 +291,7 @@ pipeline { } ``` +
@@ -301,7 +302,7 @@ Make sure to configure the following [Azure DevOps pipeline variables](https://l
-Here is an example for `Github-integration.yml` pipeline file: +Here is an example for a `github-integration.yml` pipeline file: ```yaml showLineNumbers trigger: @@ -335,13 +336,13 @@ steps:
-Make sure to [configure the following Github variables](https://docs.gitlab.com/ee/ci/variables/#for-a-project): +Make sure to [configure the following GitLab variables](https://docs.gitlab.com/ee/ci/variables/#for-a-project):
-Here is an example for `.Github-ci.yml` pipeline file: +Here is an example for a `.gitlab-ci.yml` pipeline file: ```yaml showLineNumbers default: diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index def7f0a36..8f5162bb3 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -13,19 +13,19 @@ import FindCredentials from "/docs/build-your-software-catalog/custom-integratio ::: -In organizations that have a self-hosted GitHub installation there is no access to our official public app, therefore there are some extra steps you need to take to install the GitHub app: +In organizations that have a self-hosted GitHub installation there is no access to our official public app, therefore there are some extra steps you need to take to install the GitHub integration: -1. [Register](#register-ports-github-app) Port's GitHub app in your GitHub organization; -2. [Deploy](#deployment) Port's GitHub app Docker image inside your VPC; -3. [Install](#installing-ports-github-application) Port's GitHub app in your GitHub organization and on select repositories. +1. [Register](#register-ports-github-integration) Port's GitHub integration in your GitHub organization; +2. [Deploy](#deployment) Port's GitHub integration Docker image inside your VPC; +3. [Install](#installing-ports-github-integration) Port's GitHub integration in your GitHub organization and on select repositories. -## Register Port's GitHub App +## Register Port's GitHub integration 1. Navigate to your organization inside your self-hosted GitHub and click on Settings: ![Org view](../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) -2. Inside the settings view, click on Developer Settings -> and then select GitHub Apps: +2. Inside the settings view, click on **Developer Settings** -> and then select **GitHub Apps**: ![Settings view](../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) @@ -61,7 +61,7 @@ In organizations that have a self-hosted GitHub installation there is no access Then select "Create GitHub App" -5. Go to the settings of the created GitHub App and generate a private key and save the downloaded file: +5. Go to the settings of the created GitHub app and generate a private key. Save the downloaded file: ![Generate Private key](../../../../../static/img/integrations/github-app/SelfHosetdGeneratePrivayKey.png) @@ -81,7 +81,7 @@ In order to make use of [Self-Service Actions using GitHub Workflow](../../../.. ## Docker -To use our GitHub app you will need to deploy our official integration Docker image, replacing Github personal access token with an App ID and App private key.. +To use our GitHub integration, you will need to deploy our official integration Docker image, replacing the GitHub personal access token with an App ID and App private key. It can be deployed on any platform that allows deploying images as containers such as: K8S, ECS, AWS App Runner, etc. @@ -95,10 +95,10 @@ Run the following command to start the app: ```bash showLineNumbers docker run \ - -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID= \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID= \ -e OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET="test" \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_HOST= - -e OCEAN__BASE_URL=https://test.com \ + -e OCEAN__BASE_URL=https://test.com \ -e OCEAN__PORT__BASE_URL=https://api.getport.io \ -e OCEAN__PORT__CLIENT_ID= \ -e OCEAN__PORT__CLIENT_SECRET= \ @@ -110,25 +110,25 @@ docker run \ ghcr.io/port-labs/port-ocean-github-ocean:0.4.0-dev ``` -| Env variable | Description | -|----------------------|-------------------------------------------------------------------------------------| -| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID` | Application ID, you can find it in the edit GitHub Integration page | -| `OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET` | Will be used to create webhook | -| `OCEAN__INTEGRATION__IDENTIFIER` | Your organization's self-hosted GitHub hostname | -| `OCEAN__BASE_URL` | Integration base url, will be used to register webhook. -| `OCEAN__PORT__BASE_URL` | Port's API Base URL | -| `OCEAN__PORT__CLIENT_ID` | Port client id for interacting with the API | -| `OCEAN__PORT__CLIENT_SECRET` | Port client secret for interacting with the API | -| `OCEAN__INTEGRATION__IDENTIFIER` | Identifier for the integration | -| `OCEAN__EVENT_LISTENER__TYPE` | How Ocean will retrieve config changes from Port | -| `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | Github organization the app was installed in | -| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded private key. You can use a tool like https://www.base64encode.org/ | +| Env variable | Description | +| ---------------------------------------------------- | ----------------------------------------------------------------------------------- | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID` | Application ID. You can find it in the edit GitHub Integration page. | +| `OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET` | Will be used to create webhook | +| `OCEAN__INTEGRATION__IDENTIFIER` | Your organization's self-hosted GitHub hostname | +| `OCEAN__BASE_URL` | Integration base url, will be used to register webhook. | +| `OCEAN__PORT__BASE_URL` | Port's API Base URL | +| `OCEAN__PORT__CLIENT_ID` | Port client id for interacting with the API | +| `OCEAN__PORT__CLIENT_SECRET` | Port client secret for interacting with the API | +| `OCEAN__INTEGRATION__IDENTIFIER` | Identifier for the integration | +| `OCEAN__EVENT_LISTENER__TYPE` | How Ocean will retrieve config changes from Port. | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | The GitHub organization the integration was installed in. | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded private key. You can use a tool like https://www.base64encode.org/ | ## Health check route A health check is a route that is used to check the health of a repository. It is a means to ensure that the service is running properly and can perform its intended function. -Our GitHub App image exposes a health check route at `https://host:port/health` to monitor its status. +Our GitHub integration image exposes a health check route at `https://host:port/health` to monitor its status. ## Installing Port's GitHub integration From 4a2c338c81cc718f3eacbf933afae07ef81a0bce Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 13:27:10 +0100 Subject: [PATCH 18/42] Update branch mapping details --- .../examples/example-file-kind/_package_json_app_config.mdx | 2 +- .../sync-data-to-catalog/git/github-ocean/github-ocean.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx index 2a6df4b33..0497fc781 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-file-kind/_package_json_app_config.mdx @@ -9,7 +9,7 @@ files: - path: package.json repos: - - repo: vscode + - name: vscode branch: main port: itemsToParse: .content.dependencies | to_entries diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 7b026723f..cf0770d5b 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -118,9 +118,9 @@ resources: - path: '**/package.json' # The `repos` key can be used to filter the repositories and branch where files should be fetched repos: - - repo: MyRepo + - name: MyRepo branch: main - - repo: MyOtherRepo + - name: MyOtherRepo branch: main port: entity: @@ -352,7 +352,7 @@ resources: - path: '**/package.json' # Note that in this case we are fetching from a specific repository repos: - - repo: MyRepo + - name: MyRepo branch: main port: itemsToParse: .content.dependencies | to_entries From 1c5d38849fb66eecacaae96394ee8021e53f722e Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 13:29:04 +0100 Subject: [PATCH 19/42] Update image name in the self-hosted-installation guide --- .../git/github-ocean/self-hosted-installation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index 8f5162bb3..71b3e42f4 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -88,7 +88,7 @@ It can be deployed on any platform that allows deploying images as containers su You can pull the Docker image by running: ```bash showLineNumbers -docker pull ghcr.io/port-labs/port-ocean-github-ocean:0.4.0-dev +docker pull ghcr.io/port-labs/port-ocean-github-ocean:0.5.0-dev ``` Run the following command to start the app: @@ -107,7 +107,7 @@ docker run \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION= \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY= \ -p 8000:8000 \ - ghcr.io/port-labs/port-ocean-github-ocean:0.4.0-dev + ghcr.io/port-labs/port-ocean-github-ocean:0.5.0-dev ``` | Env variable | Description | From a5c9d195e1c1034481dfe230e6feed2762586176 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 13:47:45 +0100 Subject: [PATCH 20/42] Update example file --- .../git/github-ocean/github-ocean.md | 568 +++++++++++++----- 1 file changed, 428 insertions(+), 140 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index cf0770d5b..4dcabe54b 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -146,85 +146,156 @@ In any case, the structure of the available data looks like this: ```json showLineNumbers { - "repo": { - "id": 454741906, - "node_id": "R_kgDOGxrPkg", - "name": "dtgatest", - "full_name": "hadar-co/dtgatest", + "content": { + "name": "code-oss-dev-build", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@azure/core-auth": "^1.9.0", + "@azure/cosmos": "^3", + "@azure/identity": "^4.2.1", + "@azure/msal-node": "^2.16.1", + "@azure/storage-blob": "^12.25.0", + "@electron/get": "^2.0.0", + "@types/ansi-colors": "^3.2.0", + "@types/byline": "^4.2.32", + "@types/debounce": "^1.0.0", + "@types/debug": "^4.1.5", + "@types/fancy-log": "^1.3.0", + "@types/fs-extra": "^9.0.12", + "@types/glob": "^7.1.1", + "@types/gulp": "^4.0.17", + "@types/gulp-filter": "^3.0.32", + "@types/gulp-gzip": "^0.0.31", + "@types/gulp-json-editor": "^2.2.31", + "@types/gulp-rename": "^0.0.33", + "@types/gulp-sort": "^2.0.4", + "@types/gulp-sourcemaps": "^0.0.32", + "@types/jws": "^3.2.10", + "@types/mime": "0.0.29", + "@types/minimatch": "^3.0.3", + "@types/minimist": "^1.2.1", + "@types/mocha": "^9.1.1", + "@types/node": "22.x", + "@types/pump": "^1.0.1", + "@types/rimraf": "^2.0.4", + "@types/through": "^0.0.29", + "@types/through2": "^2.0.36", + "@types/workerpool": "^6.4.0", + "@types/xml2js": "0.0.33", + "@vscode/iconv-lite-umd": "0.7.0", + "@vscode/ripgrep": "^1.15.13", + "@vscode/vsce": "2.20.1", + "byline": "^5.0.0", + "debug": "^4.3.2", + "electron-osx-sign": "^0.4.16", + "esbuild": "0.25.5", + "extract-zip": "^2.0.1", + "gulp-merge-json": "^2.1.1", + "gulp-sort": "^2.0.0", + "jsonc-parser": "^2.3.0", + "jws": "^4.0.0", + "mime": "^1.4.1", + "source-map": "0.6.1", + "ternary-stream": "^3.0.0", + "through2": "^4.0.2", + "tree-sitter": "^0.22.4", + "vscode-universal-bundler": "^0.1.3", + "workerpool": "^6.4.0", + "yauzl": "^2.10.0", + "zx": "8.5.0" + }, + "type": "commonjs", + "scripts": { + "compile": "../node_modules/.bin/tsc -p tsconfig.build.json", + "watch": "../node_modules/.bin/tsc -p tsconfig.build.json --watch", + "npmCheckJs": "../node_modules/.bin/tsc --noEmit" + }, + "optionalDependencies": { + "tree-sitter-typescript": "^0.23.2", + "vscode-gulp-watch": "^5.0.3" + } + }, + "repository": { + "id": 1006465568, + "node_id": "R_kgDOO_1yIA", + "name": "vscode", + "full_name": "port-gh-app-dev/vscode", "private": false, "owner": { - "login": "hadar-co", - "id": 96784606, - "node_id": "U_kgDOBcTQ3g", - "avatar_url": "https://avatars.githubusercontent.com/u/96784606?v=4", + "login": "port-gh-app-dev", + "id": 216844958, + "node_id": "O_kgDODOzKng", + "avatar_url": "https://avatars.githubusercontent.com/u/216844958?v=4", "gravatar_id": "", - "url": "https://api.github.com/users/hadar-co", - "html_url": "https://github.com/hadar-co", - "followers_url": "https://api.github.com/users/hadar-co/followers", - "following_url": "https://api.github.com/users/hadar-co/following{/other_user}", - "gists_url": "https://api.github.com/users/hadar-co/gists{/gist_id}", - "starred_url": "https://api.github.com/users/hadar-co/starred{/owner}{/repo}", - "subscriptions_url": "https://api.github.com/users/hadar-co/subscriptions", - "organizations_url": "https://api.github.com/users/hadar-co/orgs", - "repos_url": "https://api.github.com/users/hadar-co/repos", - "events_url": "https://api.github.com/users/hadar-co/events{/privacy}", - "received_events_url": "https://api.github.com/users/hadar-co/received_events", - "type": "User", + "url": "https://api.github.com/users/port-gh-app-dev", + "html_url": "https://github.com/port-gh-app-dev", + "followers_url": "https://api.github.com/users/port-gh-app-dev/followers", + "following_url": "https://api.github.com/users/port-gh-app-dev/following{/other_user}", + "gists_url": "https://api.github.com/users/port-gh-app-dev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/port-gh-app-dev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/port-gh-app-dev/subscriptions", + "organizations_url": "https://api.github.com/users/port-gh-app-dev/orgs", + "repos_url": "https://api.github.com/users/port-gh-app-dev/repos", + "events_url": "https://api.github.com/users/port-gh-app-dev/events{/privacy}", + "received_events_url": "https://api.github.com/users/port-gh-app-dev/received_events", + "type": "Organization", + "user_view_type": "public", "site_admin": false }, - "html_url": "https://github.com/hadar-co/dtgatest", - "description": null, - "fork": false, - "url": "https://api.github.com/repos/hadar-co/dtgatest", - "forks_url": "https://api.github.com/repos/hadar-co/dtgatest/forks", - "keys_url": "https://api.github.com/repos/hadar-co/dtgatest/keys{/key_id}", - "collaborators_url": "https://api.github.com/repos/hadar-co/dtgatest/collaborators{/collaborator}", - "teams_url": "https://api.github.com/repos/hadar-co/dtgatest/teams", - "hooks_url": "https://api.github.com/repos/hadar-co/dtgatest/hooks", - "issue_events_url": "https://api.github.com/repos/hadar-co/dtgatest/issues/events{/number}", - "events_url": "https://api.github.com/repos/hadar-co/dtgatest/events", - "assignees_url": "https://api.github.com/repos/hadar-co/dtgatest/assignees{/user}", - "branches_url": "https://api.github.com/repos/hadar-co/dtgatest/branches{/branch}", - "tags_url": "https://api.github.com/repos/hadar-co/dtgatest/tags", - "blobs_url": "https://api.github.com/repos/hadar-co/dtgatest/git/blobs{/sha}", - "git_tags_url": "https://api.github.com/repos/hadar-co/dtgatest/git/tags{/sha}", - "git_refs_url": "https://api.github.com/repos/hadar-co/dtgatest/git/refs{/sha}", - "trees_url": "https://api.github.com/repos/hadar-co/dtgatest/git/trees{/sha}", - "statuses_url": "https://api.github.com/repos/hadar-co/dtgatest/statuses/{sha}", - "languages_url": "https://api.github.com/repos/hadar-co/dtgatest/languages", - "stargazers_url": "https://api.github.com/repos/hadar-co/dtgatest/stargazers", - "contributors_url": "https://api.github.com/repos/hadar-co/dtgatest/contributors", - "subscribers_url": "https://api.github.com/repos/hadar-co/dtgatest/subscribers", - "subscription_url": "https://api.github.com/repos/hadar-co/dtgatest/subscription", - "commits_url": "https://api.github.com/repos/hadar-co/dtgatest/commits{/sha}", - "git_commits_url": "https://api.github.com/repos/hadar-co/dtgatest/git/commits{/sha}", - "comments_url": "https://api.github.com/repos/hadar-co/dtgatest/comments{/number}", - "issue_comment_url": "https://api.github.com/repos/hadar-co/dtgatest/issues/comments{/number}", - "contents_url": "https://api.github.com/repos/hadar-co/dtgatest/contents/{+path}", - "compare_url": "https://api.github.com/repos/hadar-co/dtgatest/compare/{base}...{head}", - "merges_url": "https://api.github.com/repos/hadar-co/dtgatest/merges", - "archive_url": "https://api.github.com/repos/hadar-co/dtgatest/{archive_format}{/ref}", - "downloads_url": "https://api.github.com/repos/hadar-co/dtgatest/downloads", - "issues_url": "https://api.github.com/repos/hadar-co/dtgatest/issues{/number}", - "pulls_url": "https://api.github.com/repos/hadar-co/dtgatest/pulls{/number}", - "milestones_url": "https://api.github.com/repos/hadar-co/dtgatest/milestones{/number}", - "notifications_url": "https://api.github.com/repos/hadar-co/dtgatest/notifications{?since,all,participating}", - "labels_url": "https://api.github.com/repos/hadar-co/dtgatest/labels{/name}", - "releases_url": "https://api.github.com/repos/hadar-co/dtgatest/releases{/id}", - "deployments_url": "https://api.github.com/repos/hadar-co/dtgatest/deployments", - "created_at": "2022-02-02T11:08:23Z", - "updated_at": "2024-07-08T07:23:58Z", - "pushed_at": "2024-07-08T07:23:54Z", - "git_url": "git://github.com/hadar-co/dtgatest.git", - "ssh_url": "git@github.com:hadar-co/dtgatest.git", - "clone_url": "https://github.com/hadar-co/dtgatest.git", - "svn_url": "https://github.com/hadar-co/dtgatest", - "homepage": null, - "size": 346, + "html_url": "https://github.com/port-gh-app-dev/vscode", + "description": "Visual Studio Code", + "fork": true, + "url": "https://api.github.com/repos/port-gh-app-dev/vscode", + "forks_url": "https://api.github.com/repos/port-gh-app-dev/vscode/forks", + "keys_url": "https://api.github.com/repos/port-gh-app-dev/vscode/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/port-gh-app-dev/vscode/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/port-gh-app-dev/vscode/teams", + "hooks_url": "https://api.github.com/repos/port-gh-app-dev/vscode/hooks", + "issue_events_url": "https://api.github.com/repos/port-gh-app-dev/vscode/issues/events{/number}", + "events_url": "https://api.github.com/repos/port-gh-app-dev/vscode/events", + "assignees_url": "https://api.github.com/repos/port-gh-app-dev/vscode/assignees{/user}", + "branches_url": "https://api.github.com/repos/port-gh-app-dev/vscode/branches{/branch}", + "tags_url": "https://api.github.com/repos/port-gh-app-dev/vscode/tags", + "blobs_url": "https://api.github.com/repos/port-gh-app-dev/vscode/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/port-gh-app-dev/vscode/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/port-gh-app-dev/vscode/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/port-gh-app-dev/vscode/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/port-gh-app-dev/vscode/statuses/{sha}", + "languages_url": "https://api.github.com/repos/port-gh-app-dev/vscode/languages", + "stargazers_url": "https://api.github.com/repos/port-gh-app-dev/vscode/stargazers", + "contributors_url": "https://api.github.com/repos/port-gh-app-dev/vscode/contributors", + "subscribers_url": "https://api.github.com/repos/port-gh-app-dev/vscode/subscribers", + "subscription_url": "https://api.github.com/repos/port-gh-app-dev/vscode/subscription", + "commits_url": "https://api.github.com/repos/port-gh-app-dev/vscode/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/port-gh-app-dev/vscode/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/port-gh-app-dev/vscode/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/port-gh-app-dev/vscode/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/port-gh-app-dev/vscode/contents/{+path}", + "compare_url": "https://api.github.com/repos/port-gh-app-dev/vscode/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/port-gh-app-dev/vscode/merges", + "archive_url": "https://api.github.com/repos/port-gh-app-dev/vscode/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/port-gh-app-dev/vscode/downloads", + "issues_url": "https://api.github.com/repos/port-gh-app-dev/vscode/issues{/number}", + "pulls_url": "https://api.github.com/repos/port-gh-app-dev/vscode/pulls{/number}", + "milestones_url": "https://api.github.com/repos/port-gh-app-dev/vscode/milestones{/number}", + "notifications_url": "https://api.github.com/repos/port-gh-app-dev/vscode/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/port-gh-app-dev/vscode/labels{/name}", + "releases_url": "https://api.github.com/repos/port-gh-app-dev/vscode/releases{/id}", + "deployments_url": "https://api.github.com/repos/port-gh-app-dev/vscode/deployments", + "created_at": "2025-06-22T10:36:32Z", + "updated_at": "2025-07-01T12:24:24Z", + "pushed_at": "2025-07-01T12:24:14Z", + "git_url": "git://github.com/port-gh-app-dev/vscode.git", + "ssh_url": "git@github.com:port-gh-app-dev/vscode.git", + "clone_url": "https://github.com/port-gh-app-dev/vscode.git", + "svn_url": "https://github.com/port-gh-app-dev/vscode", + "homepage": "https://code.visualstudio.com", + "size": 957812, "stargazers_count": 0, "watchers_count": 0, - "language": "JavaScript", - "has_issues": true, + "language": "TypeScript", + "has_issues": false, "has_projects": true, "has_downloads": true, "has_wiki": true, @@ -234,7 +305,7 @@ In any case, the structure of the available data looks like this: "mirror_url": null, "archived": false, "disabled": false, - "open_issues_count": 3, + "open_issues_count": 0, "license": { "key": "mit", "name": "MIT License", @@ -248,7 +319,7 @@ In any case, the structure of the available data looks like this: "topics": [], "visibility": "public", "forks": 0, - "open_issues": 3, + "open_issues": 0, "watchers": 0, "default_branch": "main", "permissions": { @@ -257,77 +328,294 @@ In any case, the structure of the available data looks like this: "push": false, "triage": false, "pull": false - } - }, - "file": { - "path": "testfiles/package.json", - "mode": "100644", - "type": "blob", - "sha": "a1e9e0624f68b3f7b69e182187c5e424c2df1f9b", - "size": 1817, - "url": "https://api.github.com/repos/hadar-co/dtgatest/git/blobs/a1e9e0624f68b3f7b69e182187c5e424c2df1f9b", - "content": { - "name": "port-docs", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start --port 4000", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc", - "prepare": "husky install" + }, + "temp_clone_token": "", + "allow_squash_merge": true, + "allow_merge_commit": true, + "allow_rebase_merge": true, + "allow_auto_merge": false, + "delete_branch_on_merge": false, + "allow_update_branch": false, + "use_squash_pr_title_as_default": false, + "squash_merge_commit_message": "COMMIT_MESSAGES", + "squash_merge_commit_title": "COMMIT_OR_PR_TITLE", + "merge_commit_message": "PR_TITLE", + "merge_commit_title": "MERGE_MESSAGE", + "custom_properties": {}, + "organization": { + "login": "port-gh-app-dev", + "id": 216844958, + "node_id": "O_kgDODOzKng", + "avatar_url": "https://avatars.githubusercontent.com/u/216844958?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/port-gh-app-dev", + "html_url": "https://github.com/port-gh-app-dev", + "followers_url": "https://api.github.com/users/port-gh-app-dev/followers", + "following_url": "https://api.github.com/users/port-gh-app-dev/following{/other_user}", + "gists_url": "https://api.github.com/users/port-gh-app-dev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/port-gh-app-dev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/port-gh-app-dev/subscriptions", + "organizations_url": "https://api.github.com/users/port-gh-app-dev/orgs", + "repos_url": "https://api.github.com/users/port-gh-app-dev/repos", + "events_url": "https://api.github.com/users/port-gh-app-dev/events{/privacy}", + "received_events_url": "https://api.github.com/users/port-gh-app-dev/received_events", + "type": "Organization", + "user_view_type": "public", + "site_admin": false + }, + "parent": { + "id": 41881900, + "node_id": "MDEwOlJlcG9zaXRvcnk0MTg4MTkwMA==", + "name": "vscode", + "full_name": "microsoft/vscode", + "private": false, + "owner": { + "login": "microsoft", + "id": 6154722, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/6154722?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/microsoft", + "html_url": "https://github.com/microsoft", + "followers_url": "https://api.github.com/users/microsoft/followers", + "following_url": "https://api.github.com/users/microsoft/following{/other_user}", + "gists_url": "https://api.github.com/users/microsoft/gists{/gist_id}", + "starred_url": "https://api.github.com/users/microsoft/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/microsoft/subscriptions", + "organizations_url": "https://api.github.com/users/microsoft/orgs", + "repos_url": "https://api.github.com/users/microsoft/repos", + "events_url": "https://api.github.com/users/microsoft/events{/privacy}", + "received_events_url": "https://api.github.com/users/microsoft/received_events", + "type": "Organization", + "user_view_type": "public", + "site_admin": false + }, + "html_url": "https://github.com/microsoft/vscode", + "description": "Visual Studio Code", + "fork": false, + "url": "https://api.github.com/repos/microsoft/vscode", + "forks_url": "https://api.github.com/repos/microsoft/vscode/forks", + "keys_url": "https://api.github.com/repos/microsoft/vscode/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/microsoft/vscode/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/microsoft/vscode/teams", + "hooks_url": "https://api.github.com/repos/microsoft/vscode/hooks", + "issue_events_url": "https://api.github.com/repos/microsoft/vscode/issues/events{/number}", + "events_url": "https://api.github.com/repos/microsoft/vscode/events", + "assignees_url": "https://api.github.com/repos/microsoft/vscode/assignees{/user}", + "branches_url": "https://api.github.com/repos/microsoft/vscode/branches{/branch}", + "tags_url": "https://api.github.com/repos/microsoft/vscode/tags", + "blobs_url": "https://api.github.com/repos/microsoft/vscode/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/microsoft/vscode/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/microsoft/vscode/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/microsoft/vscode/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/microsoft/vscode/statuses/{sha}", + "languages_url": "https://api.github.com/repos/microsoft/vscode/languages", + "stargazers_url": "https://api.github.com/repos/microsoft/vscode/stargazers", + "contributors_url": "https://api.github.com/repos/microsoft/vscode/contributors", + "subscribers_url": "https://api.github.com/repos/microsoft/vscode/subscribers", + "subscription_url": "https://api.github.com/repos/microsoft/vscode/subscription", + "commits_url": "https://api.github.com/repos/microsoft/vscode/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/microsoft/vscode/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/microsoft/vscode/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/microsoft/vscode/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/microsoft/vscode/contents/{+path}", + "compare_url": "https://api.github.com/repos/microsoft/vscode/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/microsoft/vscode/merges", + "archive_url": "https://api.github.com/repos/microsoft/vscode/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/microsoft/vscode/downloads", + "issues_url": "https://api.github.com/repos/microsoft/vscode/issues{/number}", + "pulls_url": "https://api.github.com/repos/microsoft/vscode/pulls{/number}", + "milestones_url": "https://api.github.com/repos/microsoft/vscode/milestones{/number}", + "notifications_url": "https://api.github.com/repos/microsoft/vscode/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/microsoft/vscode/labels{/name}", + "releases_url": "https://api.github.com/repos/microsoft/vscode/releases{/id}", + "deployments_url": "https://api.github.com/repos/microsoft/vscode/deployments", + "created_at": "2015-09-03T20:23:38Z", + "updated_at": "2025-07-01T15:41:46Z", + "pushed_at": "2025-07-01T16:26:22Z", + "git_url": "git://github.com/microsoft/vscode.git", + "ssh_url": "git@github.com:microsoft/vscode.git", + "clone_url": "https://github.com/microsoft/vscode.git", + "svn_url": "https://github.com/microsoft/vscode", + "homepage": "https://code.visualstudio.com", + "size": 1030538, + "stargazers_count": 174062, + "watchers_count": 174062, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 33404, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 11291, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" }, - "dependencies": { - "@docsly/react": "^1.9.1", - "@docusaurus/core": "^3.4.0", - "@docusaurus/plugin-client-redirects": "^3.4.0", - "@docusaurus/plugin-google-tag-manager": "^3.4.0", - "@docusaurus/plugin-ideal-image": "^3.4.0", - "@docusaurus/preset-classic": "^3.4.0", - "@docusaurus/theme-live-codeblock": "^3.4.0", - "@easyops-cn/docusaurus-search-local": "^0.44.2", - "@mdx-js/react": "^3.0.1", - "@port-labs/docusaurus-plugin-openapi-docs": "^0.0.5", - "@port-labs/docusaurus-theme-openapi-docs": "^0.0.5", - "@stackql/docusaurus-plugin-hubspot": "^1.0.1", - "clsx": "^2.1.1", - "docusaurus-plugin-hotjar": "^0.0.2", - "docusaurus-plugin-image-zoom": "^2.0.0", - "prettier": "^3.3.2", - "prism-react-renderer": "^2.3.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-tooltip": "^5.27.1" + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "editor", + "electron", + "microsoft", + "typescript", + "visual-studio-code" + ], + "visibility": "public", + "forks": 33404, + "open_issues": 11291, + "watchers": 174062, + "default_branch": "main" + }, + "source": { + "id": 41881900, + "node_id": "MDEwOlJlcG9zaXRvcnk0MTg4MTkwMA==", + "name": "vscode", + "full_name": "microsoft/vscode", + "private": false, + "owner": { + "login": "microsoft", + "id": 6154722, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=", + "avatar_url": "https://avatars.githubusercontent.com/u/6154722?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/microsoft", + "html_url": "https://github.com/microsoft", + "followers_url": "https://api.github.com/users/microsoft/followers", + "following_url": "https://api.github.com/users/microsoft/following{/other_user}", + "gists_url": "https://api.github.com/users/microsoft/gists{/gist_id}", + "starred_url": "https://api.github.com/users/microsoft/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/microsoft/subscriptions", + "organizations_url": "https://api.github.com/users/microsoft/orgs", + "repos_url": "https://api.github.com/users/microsoft/repos", + "events_url": "https://api.github.com/users/microsoft/events{/privacy}", + "received_events_url": "https://api.github.com/users/microsoft/received_events", + "type": "Organization", + "user_view_type": "public", + "site_admin": false }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.4.0", - "@docusaurus/tsconfig": "^3.4.0", - "@docusaurus/types": "^3.4.0", - "husky": "^9.0.11", - "pretty-quick": "^4.0.0", - "typescript": "~5.5.3" + "html_url": "https://github.com/microsoft/vscode", + "description": "Visual Studio Code", + "fork": false, + "url": "https://api.github.com/repos/microsoft/vscode", + "forks_url": "https://api.github.com/repos/microsoft/vscode/forks", + "keys_url": "https://api.github.com/repos/microsoft/vscode/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/microsoft/vscode/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/microsoft/vscode/teams", + "hooks_url": "https://api.github.com/repos/microsoft/vscode/hooks", + "issue_events_url": "https://api.github.com/repos/microsoft/vscode/issues/events{/number}", + "events_url": "https://api.github.com/repos/microsoft/vscode/events", + "assignees_url": "https://api.github.com/repos/microsoft/vscode/assignees{/user}", + "branches_url": "https://api.github.com/repos/microsoft/vscode/branches{/branch}", + "tags_url": "https://api.github.com/repos/microsoft/vscode/tags", + "blobs_url": "https://api.github.com/repos/microsoft/vscode/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/microsoft/vscode/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/microsoft/vscode/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/microsoft/vscode/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/microsoft/vscode/statuses/{sha}", + "languages_url": "https://api.github.com/repos/microsoft/vscode/languages", + "stargazers_url": "https://api.github.com/repos/microsoft/vscode/stargazers", + "contributors_url": "https://api.github.com/repos/microsoft/vscode/contributors", + "subscribers_url": "https://api.github.com/repos/microsoft/vscode/subscribers", + "subscription_url": "https://api.github.com/repos/microsoft/vscode/subscription", + "commits_url": "https://api.github.com/repos/microsoft/vscode/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/microsoft/vscode/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/microsoft/vscode/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/microsoft/vscode/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/microsoft/vscode/contents/{+path}", + "compare_url": "https://api.github.com/repos/microsoft/vscode/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/microsoft/vscode/merges", + "archive_url": "https://api.github.com/repos/microsoft/vscode/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/microsoft/vscode/downloads", + "issues_url": "https://api.github.com/repos/microsoft/vscode/issues{/number}", + "pulls_url": "https://api.github.com/repos/microsoft/vscode/pulls{/number}", + "milestones_url": "https://api.github.com/repos/microsoft/vscode/milestones{/number}", + "notifications_url": "https://api.github.com/repos/microsoft/vscode/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/microsoft/vscode/labels{/name}", + "releases_url": "https://api.github.com/repos/microsoft/vscode/releases{/id}", + "deployments_url": "https://api.github.com/repos/microsoft/vscode/deployments", + "created_at": "2015-09-03T20:23:38Z", + "updated_at": "2025-07-01T15:41:46Z", + "pushed_at": "2025-07-01T16:26:22Z", + "git_url": "git://github.com/microsoft/vscode.git", + "ssh_url": "git@github.com:microsoft/vscode.git", + "clone_url": "https://github.com/microsoft/vscode.git", + "svn_url": "https://github.com/microsoft/vscode", + "homepage": "https://code.visualstudio.com", + "size": 1030538, + "stargazers_count": 174062, + "watchers_count": 174062, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "has_discussions": false, + "forks_count": 33404, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 11291, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "web_commit_signoff_required": false, + "topics": [ + "editor", + "electron", + "microsoft", + "typescript", + "visual-studio-code" + ], + "visibility": "public", + "forks": 33404, + "open_issues": 11291, + "watchers": 174062, + "default_branch": "main" + }, + "security_and_analysis": { + "secret_scanning": { + "status": "disabled" }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] + "secret_scanning_push_protection": { + "status": "disabled" + }, + "dependabot_security_updates": { + "status": "disabled" + }, + "secret_scanning_non_provider_patterns": { + "status": "disabled" + }, + "secret_scanning_validity_checks": { + "status": "disabled" } }, - "fileExtension": "json", - "name": "package.json" + "network_count": 33404, + "subscribers_count": 1 + }, + "branch": "main", + "path": "build/package.json", + "name": "package.json", + "metadata": { + "url": "https://api.github.com/repos/port-gh-app-dev/vscode/contents/build/package.json?ref=main", + "path": "build/package.json", + "size": 2106 } } ``` From e3db76075118fbf65f194ed0579b94fe801a03d0 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 13:58:58 +0100 Subject: [PATCH 21/42] Correct docker run command --- .../git/github-ocean/self-hosted-installation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index 71b3e42f4..0ab80ab8a 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -97,12 +97,12 @@ Run the following command to start the app: docker run \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID= \ -e OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET="test" \ - -e OCEAN__INTEGRATION__CONFIG__GITHUB_HOST= + -e OCEAN__INTEGRATION__CONFIG__GITHUB_HOST= \ -e OCEAN__BASE_URL=https://test.com \ -e OCEAN__PORT__BASE_URL=https://api.getport.io \ -e OCEAN__PORT__CLIENT_ID= \ -e OCEAN__PORT__CLIENT_SECRET= \ - -e OCEAN__INTEGRATION__IDENTIFIER=github-ocean + -e OCEAN__INTEGRATION__IDENTIFIER=github-ocean \ -e OCEAN__EVENT_LISTENER__TYPE=POLLING \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION= \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY= \ From 5a21ea99580896bfc58ce2519e9bcbf6b44ac4fd Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 14:00:46 +0100 Subject: [PATCH 22/42] small corrections --- .../git/github-ocean/self-hosted-installation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index 0ab80ab8a..bcf59afda 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -112,7 +112,7 @@ docker run \ | Env variable | Description | | ---------------------------------------------------- | ----------------------------------------------------------------------------------- | -| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID` | Application ID. You can find it in the edit GitHub Integration page. | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID` | Application ID. You can find it in the edit GitHub app page. | | `OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET` | Will be used to create webhook | | `OCEAN__INTEGRATION__IDENTIFIER` | Your organization's self-hosted GitHub hostname | | `OCEAN__BASE_URL` | Integration base url, will be used to register webhook. | @@ -122,7 +122,7 @@ docker run \ | `OCEAN__INTEGRATION__IDENTIFIER` | Identifier for the integration | | `OCEAN__EVENT_LISTENER__TYPE` | How Ocean will retrieve config changes from Port. | | `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | The GitHub organization the integration was installed in. | -| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded private key. You can use a tool like https://www.base64encode.org/ | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded Github app private key. You can use a tool like https://www.base64encode.org/ | ## Health check route From 069590b0f3ed59136ff22ad1826e1434b32f3bd0 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 14:05:58 +0100 Subject: [PATCH 23/42] Correct link to Github documentation --- .../git/github-ocean/self-hosted-installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index bcf59afda..6d93b0094 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -156,6 +156,6 @@ After you have the integration registered in your organization and the Docker is As this is a self-hosted version, there are some limitations due to security considerations and the fact that we don't have access to your GitHub instance -- The configuration must be included as part of the repository, and cannot be configured via Port's UI/API. Refer to the [GitHub Configuration](https://docs.port.io/build-your-software-catalog/sync-data-to-catalog/git/github/?method=github#configuration) for more details. +- The configuration must be included as part of the repository, and cannot be configured via Port's UI/API. Refer to the [GitHub Configuration](../github-ocean#configuration) for more details. - To use self-service actions, you will need [Kafka Credentials](/actions-and-automations/setup-backend/webhook/kafka/kafka.md) configured for your organization; From b25be571520b8ac2f026ab71ecf5dec80ff4152c Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 14:14:05 +0100 Subject: [PATCH 24/42] Update docker parameters --- .../git/github-ocean/_github_docker_parameters.mdx | 6 +++--- .../sync-data-to-catalog/git/github-ocean/installation.md | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx index 88445d13e..56dc95b52 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_docker_parameters.mdx @@ -1,8 +1,8 @@ | Parameter | Description | Example | Required | | --------- | ----------- | ------- | -------- | -| `OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN` | The GitLab access token used to authenticate with your GitLab instance | | ❌ | -| `OCEAN__INTEGRATION__CONFIG__GTIHUB_HOST` | The URL of your GitLab instance (e.g., https://gitlab.com or your self-hosted URL) | | ❌ | -| `OCEAN__INTEGRATION__CONFIG__GTIHUB_ORGANIZATION` | The URL of your GitLab instance (e.g., https://gitlab.com or your self-hosted URL) | | ✅ | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN` | The Github access token used to authenticate with your Github Organization | | ✅ | +| `OCEAN__INTEGRATION__CONFIG__GTIHUB_HOST` | The URL of your Github organization (will default to https://api.github.com, pass your self-hosted URL) | | ❌ | +| `OCEAN__INTEGRATION__CONFIG__GTIHUB_ORGANIZATION` | The name of your Github organization | | ✅ | | `OCEAN__BASE_URL` | The URL of your GitHub integration instance, used for real-time updates | | ❌ | | `OCEAN__PORT__CLIENT_ID` | Your Port client ([How to get the credentials](https://docs.port.io/build-your-software-catalog/custom-integration/api/#find-your-port-credentials)) id | | ✅ | | `OCEAN__PORT__CLIENT_SECRET` | Your Port client ([How to get the credentials](https://docs.port.io/build-your-software-catalog/custom-integration/api/#find-your-port-credentials)) secret | | ✅ | diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index 5f43a333a..cbee00658 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -97,13 +97,14 @@ Remember to replace the placeholders for `GITHUB_TOKEN` and your GitHub URL. initializePortResources: true scheduledResyncInterval: 120 integration: - identifier: my-ocean-Github-integration + identifier: my-ocean-github-integration type: Github-Ocean eventListener: type: POLLING config: // highlight-next-line githubHost: https://api.github.com # Or your self-hosted GitHub URL + GithubOrganization: secrets: // highlight-next-line githubToken: GITHUB_TOKEN From 358386d049baa5b32b3dfe6441965856502b17b6 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 16:14:54 +0100 Subject: [PATCH 25/42] correct naming convention for integration in argocd --- .../git/github-ocean/installation.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index cbee00658..5e5895179 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -98,20 +98,20 @@ initializePortResources: true scheduledResyncInterval: 120 integration: identifier: my-ocean-github-integration - type: Github-Ocean + type: github-ocean eventListener: type: POLLING config: // highlight-next-line githubHost: https://api.github.com # Or your self-hosted GitHub URL - GithubOrganization: + githubOrganization: secrets: // highlight-next-line githubToken: GITHUB_TOKEN ```
-2. Install the `my-ocean-Github-integration` ArgoCD Application by creating the following `my-ocean-github-integration.yaml` manifest: +2. Install the `my-ocean-github-integration` ArgoCD Application by creating the following `my-ocean-github-integration.yaml` manifest: :::note Remember to replace the placeholders for `YOUR_PORT_CLIENT_ID` `YOUR_PORT_CLIENT_SECRET` and `YOUR_GIT_REPO_URL`. @@ -125,20 +125,20 @@ Multiple sources ArgoCD documentation can be found [here](https://argo-cd.readth apiVersion: argoproj.io/v1alpha1 kind: Application metadata: - name: my-ocean-Github-integration + name: my-ocean-github-integration namespace: argocd spec: destination: - namespace: my-ocean-Github-integration + namespace: my-ocean-github-integration server: https://kubernetes.default.svc project: default sources: - repoURL: 'https://port-labs.github.io/helm-charts/' chart: port-ocean - targetRevision: 0.1.14 + targetRevision: 0.8.5 helm: valueFiles: - - $values/argocd/my-ocean-Github-integration/values.yaml + - $values/argocd/my-ocean-github-integration/values.yaml // highlight-start parameters: - name: port.clientId @@ -166,7 +166,7 @@ spec: 1. Apply your application manifest with `kubectl`: ```bash -kubectl apply -f my-ocean-Github-integration.yaml +kubectl apply -f my-ocean-github-integration.yaml ```
From c464ad550a4c874e04f5544b7153fca27c9ce8df Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 16:18:56 +0100 Subject: [PATCH 26/42] Case correction --- .../git/github-ocean/installation.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index 5e5895179..d19bb8043 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -183,9 +183,9 @@ This table summarizes the available parameters for the installation. | `integration.identifier` | A unique identifier for your integration. | ✅ | | `integration.type` | The integration type. | ✅ | | `integration.eventListener.type` | The event listener type. | ✅ | -| `integration.config.GithubOrganization` | The GitHub organization to sync data from. | ✅ | -| `integration.config.GithubHost` | The GitHub instance URL. | ✅ | -| `integration.secrets.GithubToken` | The GitHub access token. | ✅ | +| `integration.config.githubOrganization` | The GitHub organization to sync data from. | ✅ | +| `integration.config.githubHost` | The GitHub instance URL. | ✅ | +| `integration.secrets.githubToken` | The GitHub access token. | ✅ | | `scheduledResyncInterval` | The number of minutes between each resync. | ❌ | | `initializePortResources` | When `true`, the integration will create default blueprints and port-app-config.yml mapping. | ❌ | | `sendRawDataExamples` | When `true`, sends raw data examples from the third-party API to Port for testing and managing the integration mapping. | ❌ | @@ -233,9 +233,9 @@ jobs: port_client_secret: ${{ secrets.OCEAN__PORT__CLIENT_SECRET }} port_base_url: https://api.getport.io config: | - GithubHost: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_HOST }} - GithubToken: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN }} - GithubOrganization: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION }} + githubHost: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_HOST }} + githubToken: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN }} + githubOrganization: ${{ secrets.OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION }} ```
@@ -263,6 +263,7 @@ pipeline { script { withCredentials([ string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITHUB_URL', variable: 'OCEAN__INTEGRATION__CONFIG__GITHUB_URL'), + string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION', variable: 'OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION'), string(credentialsId: 'OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN', variable: 'OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN'), string(credentialsId: 'OCEAN__PORT__CLIENT_ID', variable: 'OCEAN__PORT__CLIENT_ID'), string(credentialsId: 'OCEAN__PORT__CLIENT_SECRET', variable: 'OCEAN__PORT__CLIENT_SECRET'), @@ -278,6 +279,7 @@ pipeline { -e OCEAN__SEND_RAW_DATA_EXAMPLES=true \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_URL=$OCEAN__INTEGRATION__CONFIG__GITHUB_URL \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN=$OCEAN__INTEGRATION__CONFIG__GITHUB_TOKEN \ + -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION=$OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION \ -e OCEAN__PORT__CLIENT_ID=$OCEAN__PORT__CLIENT_ID \ -e OCEAN__PORT__CLIENT_SECRET=$OCEAN__PORT__CLIENT_SECRET \ -e OCEAN__PORT__BASE_URL='https://api.getport.io' \ From 1d28ecc41bb9c1cf54daa22fcde46001c9002f6c Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 18:50:46 +0100 Subject: [PATCH 27/42] Trim down documentation to only documented examples --- .../git/github-ocean/_category_.json | 2 +- .../_github_exporter_supported_resources.mdx | 13 ---- ...ository_with_admins_relation_blueprint.mdx | 38 ---------- ...r_example_admins_users_port_app_config.mdx | 48 ------------- ...xporter_example_github_users_blueprint.mdx | 32 --------- ...ithub_exporter_example_users_blueprint.mdx | 25 ------- .../examples/resource-mapping-examples.md | 25 ------- .../git/github-ocean/github-ocean.md | 70 ++----------------- .../github-ocean/self-hosted-installation.md | 17 ----- .../ocean-saas-specifics/live-events.jsx | 39 +---------- 10 files changed, 6 insertions(+), 303 deletions(-) delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_export_example_repository_with_admins_relation_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_admins_users_port_app_config.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_github_users_blueprint.mdx delete mode 100644 docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_users_blueprint.mdx diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_category_.json b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_category_.json index 8dfd91e52..03c598e64 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_category_.json +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_category_.json @@ -1,4 +1,4 @@ { - "label": "GitHub Ocean", + "label": "GitHub Self-Hosted (Beta)", "position": 1 } diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_exporter_supported_resources.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_exporter_supported_resources.mdx index a6982fa7a..a88e7eb1c 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_exporter_supported_resources.mdx +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/_github_exporter_supported_resources.mdx @@ -1,17 +1,4 @@ - [`repository`](https://docs.github.com/en/rest/repos/repos#get-a-repository) - [`pull-request`](https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request) -- [`environment`](https://docs.github.com/en/rest/deployments/environments#get-an-environment) -- [`deployment`](https://docs.github.com/en/rest/deployments/deployments#get-a-deployment) -- [`workflow`](https://docs.github.com/en/rest/actions/workflows#get-a-workflow) -- [`workflow-run`](https://docs.github.com/en/rest/actions/workflow-runs#get-a-workflow-run) -- [`issue`](https://docs.github.com/en/rest/issues/issues#get-an-issue) -- [`folder`](https://docs.github.com/en/rest/git/trees#get-a-tree) - [`file`](/build-your-software-catalog/sync-data-to-catalog/git/github/#ingest-files-from-your-repositories) -- [`user`](https://docs.github.com/en/rest/users/users#get-a-user) -- [`team`](https://docs.github.com/en/rest/teams/teams#get-a-team-by-name) -- [`dependabot-alert`](https://docs.github.com/en/rest/dependabot/alerts#list-dependabot-alerts-for-a-repository) -- [`branches`](https://docs.github.com/en/rest/branches/branches#get-a-branch) -- [`code-scanning`](https://docs.github.com/en/rest/code-scanning/code-scanning#list-code-scanning-alerts-for-a-repository) -- [`releases`](https://docs.github.com/en/rest/releases/releases#list-releases) -- [`tags`](https://docs.github.com/en/rest/repos/repos#list-repository-tags) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_export_example_repository_with_admins_relation_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_export_example_repository_with_admins_relation_blueprint.mdx deleted file mode 100644 index f9afb4ac0..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_export_example_repository_with_admins_relation_blueprint.mdx +++ /dev/null @@ -1,38 +0,0 @@ -
-Repository blueprint - -```json showLineNumbers -{ - "identifier": "githubRepository", - "title": "Repository", - "icon": "Microservice", - "schema": { - "properties": { - "readme": { - "title": "README", - "type": "string", - "format": "markdown" - }, - "url": { - "title": "Repository URL", - "type": "string", - "format": "url" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": { - "admins": { - "title": "Admins", - "target": "githubUser", - "required": false, - "many": true - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_admins_users_port_app_config.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_admins_users_port_app_config.mdx deleted file mode 100644 index 7252c91c9..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_admins_users_port_app_config.mdx +++ /dev/null @@ -1,48 +0,0 @@ -
- - Port port-app-config.yml - -```yaml showLineNumbers -createMissingRelatedEntities: true -resources: - - kind: repository - selector: - query: "true" - collaborators: true - port: - entity: - mappings: - identifier: .name - title: .name - blueprint: '"githubRepository"' - properties: - readme: file://README.md - url: .html_url - defaultBranch: .default_branch - relations: - admins: "[.collaborators[] | select(.is_admin == true) | .login]" - - kind: user - selector: - query: "true" - port: - entity: - mappings: - identifier: .login - title: .login - blueprint: '"githubUser"' - relations: - user: .email - - kind: user - selector: - query: "true" - port: - entity: - mappings: - identifier: .email - title: .email - blueprint: '"user"' - relations: - user: .email -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_github_users_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_github_users_blueprint.mdx deleted file mode 100644 index a1e80f8e9..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_github_users_blueprint.mdx +++ /dev/null @@ -1,32 +0,0 @@ -
-Github Users blueprint - -```json showLineNumbers -{ - "identifier": "githubUser", - "title": "Github User", - "icon": "Microservice", - "schema": { - "properties": { - "email": { - "title": "Email", - "type": "string" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": { - "user": { - "title": "User", - "target": "user", - "required": false, - "many": false - } - } -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_users_blueprint.mdx b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_users_blueprint.mdx deleted file mode 100644 index d2b5bc65b..000000000 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/example-repository-admins/_github_exporter_example_users_blueprint.mdx +++ /dev/null @@ -1,25 +0,0 @@ -
-Users blueprint - -```json showLineNumbers -{ - "identifier": "user", - "title": "user", - "icon": "Microservice", - "schema": { - "properties": { - "email":{ - "title":"Email", - "type": "string" - } - }, - "required": [] - }, - "mirrorProperties": {}, - "calculationProperties": {}, - "aggregationProperties": {}, - "relations": {} -} -``` - -
diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md index 53d599029..03a42c448 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/examples/resource-mapping-examples.md @@ -7,11 +7,6 @@ import PRBlueprint from './\_github_exporter_example_pull_request_blueprint.mdx' import PortAppConfig from './\_github_exporter_example_port_app_config.mdx' import GitHubResources from '../\_github_exporter_supported_resources.mdx' -import UsersBlueprint from './example-repository-admins/\_github_exporter_example_users_blueprint.mdx' -import GithubUsersBlueprint from './example-repository-admins/\_github_exporter_example_github_users_blueprint.mdx' -import RepositoryAdminBlueprint from './example-repository-admins/\_github_export_example_repository_with_admins_relation_blueprint.mdx' -import RepositoryAdminAppConfig from './example-repository-admins/\_github_exporter_example_admins_users_port_app_config.mdx' - import PackageBlueprint from './example-file-kind/\_example_package_blueprint.mdx' import PackageAppConfig from './example-file-kind/\_package_json_app_config.mdx' @@ -60,26 +55,6 @@ The following example demonstrates ingestion of dependencies from a `package.jso The example will parse the `package.json` file in your repository and extract the dependencies into Port entities. For more information about ingesting files and file contents, click [here](/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/#ingest-files-from-your-repositories). -## Map repositories, repository admins and users - -In the following example you will ingest your GitHub repositories, their admins and related users to Port, you may use the following Port blueprint definitions and `port-app-config.yml`: - - - - - - - - - -:::info supported GitHub user types -As Github has strict privacy policies, the GitHub API will only return emails in the following cases: -1. The user has a public email address -2. Your organization is working with a GitHub Enterprise Cloud plan, and the user has an SAML SSO identity configured inside the GitHub organization. - -In other cases, the GitHub API will return a `null` value for the user's email. -::: - ## Map supported resources diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 4dcabe54b..310040704 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -2,7 +2,7 @@ import Tabs from "@theme/Tabs" import TabItem from "@theme/TabItem" import GitHubResources from './\_github_exporter_supported_resources.mdx' -# GitHub +# GitHub Self-Hosted (Beta) You can use Port's GitHub integration to ingest and model your GitHub resources in Port's software catalog. 🐙 @@ -32,11 +32,6 @@ To install Port's GitHub integration, see [our dedicated installation guides](./ ## Configuration -:::info Closed pull requests default behavior -By default, the **Port GitHub App** does not fetch closed pull requests. -To enable this behavior, use the [closedPullRequests parameter](https://docs.port.io/build-your-software-catalog/sync-data-to-catalog/git/github/advanced/?parameter=closedPullRequests#using-advanced-configurations) in your configuration. -::: - Port integrations use a [YAML mapping block](/build-your-software-catalog/customize-integrations/configure-mapping#configuration-structure) to ingest data from the third-party api into Port. The mapping makes use of the [JQ JSON processor](https://stedolan.github.io/jq/manual/) to select, modify, concatenate, transform and perform other operations on existing fields and values from the integration API. @@ -61,34 +56,8 @@ When configuring the integration **using Port**, the YAML configuration is globa
- - -To manage your GitHub integration configuration using a config file in GitHub: - -1. Go to the [data sources](https://app.getport.io/settings/data-sources) page of your portal. -2. Under `Exporters`, click on your desired GitHub organization. -3. A window will open containing the default YAML configuration of your GitHub integration. -4. Scroll all the way down, and turn on the `Manage this integration using the "port-app-config.yml" file` toggle. - -This will clear the configuration in Port's UI. - -When configuring the integration **using GitHub**, you can choose either a global or granular configuration: - -- **Global configuration:** create a `.github-private` repository in your organization and add the `port-app-config.yml` file to the repository. - - Using this method applies the configuration to all repositories that the GitHub integration has permissions to (unless it is overridden by a granular `port-app-config.yml` in a repository). -- **Granular configuration:** add the `port-app-config.yml` file to the `.github` directory of your desired repository. - - Using this method applies the configuration only to the repository where the `port-app-config.yml` file exists. - -When using global configuration **using GitHub**, the configuration specified in the `port-app-config.yml` file will only be applied if the file is in the **default branch** of the repository (usually `main`). - - -
-:::info Important -When **using Port's UI**, the specified configuration will override any `port-app-config.yml` file in your GitHub repository/ies. -::: - ## Capabilities ### Ingesting Git objects @@ -689,7 +658,7 @@ To enable file validation, add the `validationCheck` flag to your file kind mapp resources: - kind: file selector: - query: .repo.name == "port" + query: .repository.name == "port" files: - path: data-model/domains/*.yaml validationCheck: true @@ -749,41 +718,20 @@ Port's GitHub integration requires the following permissions: - Repository permissions: - **Actions:** Read and Write (for executing self-service action using GitHub workflow). - - **Administration:** Readonly (for exporting repository teams) - **Checks:** Read and Write (for validating `port.yml`). - **Contents:** Readonly. - **Metadata:** Readonly. - - **Issues:** Readonly. - **Pull requests:** Read and write. - - **Dependabot alerts:** Readonly. - - **Deployments:** Readonly. - - **Environments:** Readonly. - - **Code scanning alerts:** Readonly. - -- Organization permissions: - - - **Members:** Readonly (for exporting organization teams). - - **Administration:** Readonly (for exporting organization users). - Repository events (required to receive changes via webhook from GitHub and apply the `port-app-config.yml` configuration on them): - - Issues - Pull requests - Push - - Workflow run - - Team - - Dependabot Alerts - - Deployment - - Branch protection rule - - Code scanning alert - - Member - - Membership - - Release :::info Default permissions -You will be prompted to confirm the above listed permissions when first installing the integration. +You will be prompted to confirm the above listed permissions when creating a personal access token. Permissions can be given to selected repositories in your organization, or to all repositories. -You can reconfigure the integration at any time, giving it access to new repositories, or removing access. +You can reconfigure the permission at any time, giving it access to new repositories, or removing access. ::: @@ -791,18 +739,8 @@ You can reconfigure the integration at any time, giving it access to new reposit Refer to the [examples](./examples/resource-mapping-examples.md) page for practical configurations and their corresponding blueprint definitions. -## Relevant Guides - -For relevant guides and examples, see the [guides section](https://docs.port.io/guides?tags=GitHub). - -## GitOps - -Port's GitHub integration also provides GitOps capabilities, refer to the [GitOps](./gitops/gitops.md) page to learn more. ## Self-hosted installation Port's GitHub integration also supports a self-hosted installation, refer to the [self-hosted installation](./self-hosted-installation.md) page to learn more. -## Additional resources - -- [Connect GitHub PR with Jira issue](/guides/all/connect-github-pr-with-jira-issue) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md index 6d93b0094..728ff5da7 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md @@ -43,21 +43,12 @@ In organizations that have a self-hosted GitHub installation there is no access - Checks: Read and Write (for validating `Port.yml`) - Contents: Readonly (for reading port configuration files and repository files) - Metadata: Readonly - - Issues: Readonly - Pull Request: Read and Write - - Dependabot alerts: Readonly - - code scanning alerts: Readonly - - Administration: Readonly (for syncing github teams) - **Organization Permissions:** - - Members: Readonly (for syncing github teams) - Webhooks: Read and Write (to allow the integration create webhooks) - **Repository Events** (required to receive webhook changes from GitHub): - - Issues - Pull Request - Push - - Workflow Run - - Team - - Dependabot alerts Then select "Create GitHub App" @@ -151,11 +142,3 @@ After you have the integration registered in your organization and the Docker is 5. Choose the repositories you want the integration to be installed for: ![GitHub integration installation chooses repositories](../../../../../static/img/integrations/github-app/SelfHostedInstallationRepoSelection.png) - -## Limitations - -As this is a self-hosted version, there are some limitations due to security considerations and the fact that we don't have access to your GitHub instance - -- The configuration must be included as part of the repository, and cannot be configured via Port's UI/API. Refer to the [GitHub Configuration](../github-ocean#configuration) for more details. - -- To use self-service actions, you will need [Kafka Credentials](/actions-and-automations/setup-backend/webhook/kafka/kafka.md) configured for your organization; diff --git a/src/components/ocean-saas-specifics/live-events.jsx b/src/components/ocean-saas-specifics/live-events.jsx index 5fc9ebd28..3afefae59 100644 --- a/src/components/ocean-saas-specifics/live-events.jsx +++ b/src/components/ocean-saas-specifics/live-events.jsx @@ -187,44 +187,7 @@ export const liveEvents = { \n - unassigned \ \n - review_request_removed \ \n - closed \ - \n\n **issues:** \ - \n - assigned \ - \n - closed \ - \n - demilestoned \ - \n - edited \ - \n - labeled \ - \n - locked \ - \n - milestoned \ - \n - opened \ - \n - pinned \ - \n - reopened \ - \n - transferred \ - \n - typed \ - \n - unassigned \ - \n - unlabeled \ - \n - unlocked \ - \n - unpinned \ - \n - untyped \ - \n - deleted \ - \n\n **release:** \ - \n - created \ - \n - edited \ - \n - deleted \ - \n\n **push:** \ - \n\n **team:** \ - \n - created \ - \n - edited \ - \n - deleted \ - \n\n **membership:** \ - \n - added \ - \n - removed \ - \n\n **organization:** \ - \n - member_added \ - \n - member_removed \ - \n\n **workflow_run:** \ - \n - in_progress \ - \n - requested \ - \n - completed ' + \n\n **push:** ' }; From 949773945bed478cbdbe2a976d9d7aa9971a9b00 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 18:59:06 +0100 Subject: [PATCH 28/42] Update limitations --- .../sync-data-to-catalog/git/github-ocean/github-ocean.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 310040704..f4d12e846 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -705,11 +705,9 @@ resources: #### Limitations -- Currently only files up to 512KB in size are supported. +- Currently only files up to 1MB in size are supported. - Only JSON and YAML formats are automatically parsed. Other file formats can be ingested as raw files, however, some special characters in the file (such as `\n`) may be processed and not preserved. -- GLOB patterns are supported for file pattern matching, but wildcards at the end (e.g., `**/*`) are not allowed, in order to prevent matching all files indiscriminately. -- Currently only the default branch of the repository is supported. ## Permissions From dc68bd4529423eee51d68dc8b162d9a04c817e65 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 19:54:46 +0100 Subject: [PATCH 29/42] clarify app installation page --- ...f-hosted-installation.md => github-app.md} | 26 +++++------ .../git/github-ocean/installation.md | 45 +++++++++---------- 2 files changed, 35 insertions(+), 36 deletions(-) rename docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/{self-hosted-installation.md => github-app.md} (95%) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md similarity index 95% rename from docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md rename to docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md index 728ff5da7..bce248850 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/self-hosted-installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md @@ -4,7 +4,7 @@ sidebar_position: 6 import FindCredentials from "/docs/build-your-software-catalog/custom-integration/api/\_template_docs/\_find_credentials.mdx" -# Self Hosted Installation +# Github App Installation :::note Prerequisites @@ -101,18 +101,18 @@ docker run \ ghcr.io/port-labs/port-ocean-github-ocean:0.5.0-dev ``` -| Env variable | Description | -| ---------------------------------------------------- | ----------------------------------------------------------------------------------- | -| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID` | Application ID. You can find it in the edit GitHub app page. | -| `OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET` | Will be used to create webhook | -| `OCEAN__INTEGRATION__IDENTIFIER` | Your organization's self-hosted GitHub hostname | -| `OCEAN__BASE_URL` | Integration base url, will be used to register webhook. | -| `OCEAN__PORT__BASE_URL` | Port's API Base URL | -| `OCEAN__PORT__CLIENT_ID` | Port client id for interacting with the API | -| `OCEAN__PORT__CLIENT_SECRET` | Port client secret for interacting with the API | -| `OCEAN__INTEGRATION__IDENTIFIER` | Identifier for the integration | -| `OCEAN__EVENT_LISTENER__TYPE` | How Ocean will retrieve config changes from Port. | -| `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | The GitHub organization the integration was installed in. | +| Env variable | Description | +| ---------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_ID` | Application ID. You can find it in the edit GitHub app page. | +| `OCEAN__INTEGRATION__CONFIG__WEBHOOK_SECRET` | Will be used to create webhook | +| `OCEAN__INTEGRATION__IDENTIFIER` | Your organization's self-hosted GitHub hostname | +| `OCEAN__BASE_URL` | Integration base url, will be used to register webhook. | +| `OCEAN__PORT__BASE_URL` | Port's API Base URL | +| `OCEAN__PORT__CLIENT_ID` | Port client id for interacting with the API | +| `OCEAN__PORT__CLIENT_SECRET` | Port client secret for interacting with the API | +| `OCEAN__INTEGRATION__IDENTIFIER` | Identifier for the integration | +| `OCEAN__EVENT_LISTENER__TYPE` | How Ocean will retrieve config changes from Port. | +| `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | The GitHub organization the integration was installed in. | | `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded Github app private key. You can use a tool like https://www.base64encode.org/ | ## Health check route diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index d19bb8043..e9df02332 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -41,9 +41,9 @@ To create a personal access token see Github's [managing your personal access to - The token must belong to a user with access to the relevant Github resources (e.g., repositories, teams). -#### Self-hosted Github app +#### Github app -Refer to our [self-hosted installation guide](./self-hosted-installation.md) +Refer to our [Github app installation guide](./github-app.md) ### Configure Realtime webhook events @@ -78,7 +78,7 @@ For details about the available parameters for the installation, see the table b - + @@ -87,7 +87,7 @@ For details about the available parameters for the installation, see the table b To install the integration using ArgoCD: -1. Create a `values.yaml` file in `argocd/my-ocean-Github-integration` in your git repository with the content: +1. Create a `values.yaml` file in `argocd/my-ocean-github-integration` in your git repository with the content: :::note Remember to replace the placeholders for `GITHUB_TOKEN` and your GitHub URL. @@ -175,21 +175,21 @@ kubectl apply -f my-ocean-github-integration.yaml This table summarizes the available parameters for the installation. -| Parameter | Description | Required | -| --- | --- | --- | -| `port.clientId` | Your Port client ID. | ✅ | -| `port.clientSecret` | Your Port client secret. | ✅ | -| `port.baseUrl` | Your Port API URL (`https://api.getport.io` for EU, `https://api.us.getport.io` for US). | ✅ | -| `integration.identifier` | A unique identifier for your integration. | ✅ | -| `integration.type` | The integration type. | ✅ | -| `integration.eventListener.type` | The event listener type. | ✅ | -| `integration.config.githubOrganization` | The GitHub organization to sync data from. | ✅ | -| `integration.config.githubHost` | The GitHub instance URL. | ✅ | -| `integration.secrets.githubToken` | The GitHub access token. | ✅ | -| `scheduledResyncInterval` | The number of minutes between each resync. | ❌ | -| `initializePortResources` | When `true`, the integration will create default blueprints and port-app-config.yml mapping. | ❌ | -| `sendRawDataExamples` | When `true`, sends raw data examples from the third-party API to Port for testing and managing the integration mapping. | ❌ | -| `baseUrl` | The base URL of the GitHub integration instance, used for real-time updates. | ❌ | +| Parameter | Description | Required | +| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -------- | +| `port.clientId` | Your Port client ID. | ✅ | +| `port.clientSecret` | Your Port client secret. | ✅ | +| `port.baseUrl` | Your Port API URL (`https://api.getport.io` for EU, `https://api.us.getport.io` for US). | ✅ | +| `integration.identifier` | A unique identifier for your integration. | ✅ | +| `integration.type` | The integration type. | ✅ | +| `integration.eventListener.type` | The event listener type. | ✅ | +| `integration.config.githubOrganization` | The GitHub organization to sync data from. | ✅ | +| `integration.config.githubHost` | The GitHub instance URL. | ✅ | +| `integration.secrets.githubToken` | The GitHub access token. | ✅ | +| `scheduledResyncInterval` | The number of minutes between each resync. | ❌ | +| `initializePortResources` | When `true`, the integration will create default blueprints and port-app-config.yml mapping. | ❌ | +| `sendRawDataExamples` | When `true`, sends raw data examples from the third-party API to Port for testing and managing the integration mapping. | ❌ | +| `baseUrl` | The base URL of the GitHub integration instance, used for real-time updates. | ❌ |
@@ -228,7 +228,7 @@ jobs: steps: - uses: port-labs/ocean-sail@v1 with: - type: "Github-Ocean" + type: "github-ocean" port_client_id: ${{ secrets.OCEAN__PORT__CLIENT_ID }} port_client_secret: ${{ secrets.OCEAN__PORT__CLIENT_SECRET }} port_base_url: https://api.getport.io @@ -294,7 +294,6 @@ pipeline { } ``` -
@@ -317,7 +316,7 @@ variables: steps: - script: | # Set Docker image and run the container - integration_type="Github-Ocean" + integration_type="github-ocean" version="latest" image_name="ghcr.io/port-labs/port-ocean-$integration_type:$version" @@ -356,7 +355,7 @@ default: - docker info variables: - INTEGRATION_TYPE: Github-v2 + INTEGRATION_TYPE: github-ocean VERSION: latest stages: - ingest From b70e911a8253048db156ef5f265eca08794e3e0a Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 20:16:32 +0100 Subject: [PATCH 30/42] Fix broken link --- .../sync-data-to-catalog/git/github-ocean/github-ocean.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index f4d12e846..02821bc2b 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -738,7 +738,3 @@ You can reconfigure the permission at any time, giving it access to new reposito Refer to the [examples](./examples/resource-mapping-examples.md) page for practical configurations and their corresponding blueprint definitions. -## Self-hosted installation - -Port's GitHub integration also supports a self-hosted installation, refer to the [self-hosted installation](./self-hosted-installation.md) page to learn more. - From 2331752872d3bc416f28027ae0e6f94d2e44287e Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 20:24:50 +0100 Subject: [PATCH 31/42] Bump github integration version --- .../sync-data-to-catalog/git/github-ocean/github-app.md | 4 ++-- .../sync-data-to-catalog/git/github-ocean/installation.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md index bce248850..3e1ce6679 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md @@ -79,7 +79,7 @@ It can be deployed on any platform that allows deploying images as containers su You can pull the Docker image by running: ```bash showLineNumbers -docker pull ghcr.io/port-labs/port-ocean-github-ocean:0.5.0-dev +docker pull ghcr.io/port-labs/port-ocean-github-ocean:lastest ``` Run the following command to start the app: @@ -98,7 +98,7 @@ docker run \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION= \ -e OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY= \ -p 8000:8000 \ - ghcr.io/port-labs/port-ocean-github-ocean:0.5.0-dev + ghcr.io/port-labs/port-ocean-github-ocean:latest ``` | Env variable | Description | diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index e9df02332..dcf160f01 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -270,7 +270,7 @@ pipeline { ]) { sh(''' #Set Docker image and run the container - integration_type="Github-v2" + integration_type="github-ocean" version="latest" image_name="ghcr.io/port-labs/port-ocean-${integration_type}:${version}" docker run -i --rm --platform=linux/amd64 \ @@ -336,7 +336,7 @@ steps: ``` - + Make sure to [configure the following GitLab variables](https://docs.gitlab.com/ee/ci/variables/#for-a-project): From f3a2f3e7da29e8307b9241736d40f36bfdb5fbc6 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 20:27:40 +0100 Subject: [PATCH 32/42] fix: complete title with "installation" word --- .../sync-data-to-catalog/git/github-ocean/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index dcf160f01..b312f2592 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -41,7 +41,7 @@ To create a personal access token see Github's [managing your personal access to - The token must belong to a user with access to the relevant Github resources (e.g., repositories, teams). -#### Github app +#### Github app installation Refer to our [Github app installation guide](./github-app.md) From 9d709ae65d99935d20795afdfa50deaec1fe6981 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 20:29:06 +0100 Subject: [PATCH 33/42] Remove hosted by port installation method --- .../sync-data-to-catalog/git/github-ocean/installation.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md index b312f2592..862011929 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md @@ -59,11 +59,6 @@ Choose the installation method that best suits your needs: - - - - - From 8670c82f46f048cdfb7924e6223c06777c389760 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 20:30:28 +0100 Subject: [PATCH 34/42] Remove health check section --- .../sync-data-to-catalog/git/github-ocean/github-app.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md index 3e1ce6679..4e3bef921 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md @@ -79,7 +79,7 @@ It can be deployed on any platform that allows deploying images as containers su You can pull the Docker image by running: ```bash showLineNumbers -docker pull ghcr.io/port-labs/port-ocean-github-ocean:lastest +docker pull ghcr.io/port-labs/port-ocean-github-ocean:latest ``` Run the following command to start the app: @@ -115,11 +115,6 @@ docker run \ | `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | The GitHub organization the integration was installed in. | | `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded Github app private key. You can use a tool like https://www.base64encode.org/ | -## Health check route - -A health check is a route that is used to check the health of a repository. It is a means to ensure that the service is running properly and can perform its intended function. - -Our GitHub integration image exposes a health check route at `https://host:port/health` to monitor its status. ## Installing Port's GitHub integration From 3bffbb31bc842460c79d2d25ea6c73421b2eb83c Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 20:37:40 +0100 Subject: [PATCH 35/42] Remove validation check section --- .../git/github-ocean/github-ocean.md | 28 ------------------- 1 file changed, 28 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 02821bc2b..8c3e89dd4 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -647,34 +647,6 @@ itemsToParse: .content | if type== "object" then [.] else . end ``` ::: -#### Dry-run for file changes - -To prevent unwanted changes to the ingested file, you can enable `GitHub checks` to perform a validation on ingested files. -When `validationCheck: true` is enabled in the `kind: file` mapping, Port's Github app will perform a schema validation on these files before they are processed. - -To enable file validation, add the `validationCheck` flag to your file kind mapping: - -```yaml showLineNumbers -resources: - - kind: file - selector: - query: .repository.name == "port" - files: - - path: data-model/domains/*.yaml - validationCheck: true - port: - entity: - mappings: - // the rest of your mapping configuration -``` - -Example for a successful validation: - - -

- -Example for a failed validation: - #### Ingest raw file content From 32b84c35af442c4377c9bc545a6e47e8d44a69ce Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 20:43:19 +0100 Subject: [PATCH 36/42] Simplify to just "Github organization" rather than "self-hosted Github" --- .../sync-data-to-catalog/git/github-ocean/github-app.md | 4 ++-- .../sync-data-to-catalog/git/github-ocean/github-ocean.md | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md index 4e3bef921..3202951cb 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md @@ -21,7 +21,7 @@ In organizations that have a self-hosted GitHub installation there is no access ## Register Port's GitHub integration -1. Navigate to your organization inside your self-hosted GitHub and click on Settings: +1. Navigate to your Github organization and click on Settings: ![Org view](../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) @@ -120,7 +120,7 @@ docker run \ After you have the integration registered in your organization and the Docker is up and running, you can install the integration and select the repositories to integrate it with: -1. First, navigate to your organization inside your self-hosted GitHub and click on Settings: +1. First, navigate to your organization and click on Settings: ![Org view](../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 8c3e89dd4..2b8369b63 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -708,5 +708,3 @@ You can reconfigure the permission at any time, giving it access to new reposito ## Examples Refer to the [examples](./examples/resource-mapping-examples.md) page for practical configurations and their corresponding blueprint definitions. - - From fbd195a54d9fbe4c271e4c26afed833e978e2ab9 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 20:57:00 +0100 Subject: [PATCH 37/42] Move app installation to a subdirectory --- .../git/github-ocean/github-ocean.md | 2 +- .../{ => installation}/github-app.md | 23 +++++++++---------- .../{ => installation}/installation.md | 9 ++++---- 3 files changed, 16 insertions(+), 18 deletions(-) rename docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/{ => installation}/github-app.md (85%) rename docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/{ => installation}/installation.md (97%) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index 2b8369b63..bf1973721 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -27,7 +27,7 @@ It is possible to reference any field that appears in the API responses linked b ## Setup -To install Port's GitHub integration, see [our dedicated installation guides](./installation.md). +To install Port's GitHub integration, see [our dedicated installation guides](./installation). ## Configuration diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md similarity index 85% rename from docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md rename to docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md index 3202951cb..1a58021dd 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-app.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md @@ -1,10 +1,10 @@ --- -sidebar_position: 6 +sidebar_position: 2 --- import FindCredentials from "/docs/build-your-software-catalog/custom-integration/api/\_template_docs/\_find_credentials.mdx" -# Github App Installation +# Github App :::note Prerequisites @@ -23,15 +23,15 @@ In organizations that have a self-hosted GitHub installation there is no access 1. Navigate to your Github organization and click on Settings: -![Org view](../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) +![Org view](../../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) 2. Inside the settings view, click on **Developer Settings** -> and then select **GitHub Apps**: -![Settings view](../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) +![Settings view](../../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) 3. Click on "New GitHub App": -![New GitHub App](../../../../../static/img/integrations/github-app/SelfHostedNewGitHubApp.png) +![New GitHub App](../../../../../../static/img/integrations/github-app/SelfHostedNewGitHubApp.png) 4. Insert the following properties: @@ -54,7 +54,7 @@ Then select "Create GitHub App" 5. Go to the settings of the created GitHub app and generate a private key. Save the downloaded file: -![Generate Private key](../../../../../static/img/integrations/github-app/SelfHosetdGeneratePrivayKey.png) +![Generate Private key](../../../../../../static/img/integrations/github-app/SelfHosetdGeneratePrivayKey.png) Keep the file, you will need it for the deployment step. @@ -68,7 +68,7 @@ You will need your Port `CLIENT_ID` and `CLIENT_SECRET`. ::: -In order to make use of [Self-Service Actions using GitHub Workflow](../../../../actions-and-automations/setup-backend/github-workflow/github-workflow.md), please contact us at support@getport.io. +In order to make use of [Self-Service Actions using GitHub Workflow](../../../../../actions-and-automations/setup-backend/github-workflow/github-workflow.md), please contact us at support@getport.io. ## Docker @@ -115,25 +115,24 @@ docker run \ | `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | The GitHub organization the integration was installed in. | | `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded Github app private key. You can use a tool like https://www.base64encode.org/ | - ## Installing Port's GitHub integration After you have the integration registered in your organization and the Docker is up and running, you can install the integration and select the repositories to integrate it with: 1. First, navigate to your organization and click on Settings: -![Org view](../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) +![Org view](../../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) 2. Inside the settings view, click on Developer Settings -> and then select GitHub Integrations: -![Settings view](../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) +![Settings view](../../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) 3. Click `edit` on the GitHub integration created at the step before: -![GitHub integration installation page](../../../../../static/img/integrations/github-app/SelfHostedEditGitHubApp.png) +![GitHub integration installation page](../../../../../../static/img/integrations/github-app/SelfHostedEditGitHubApp.png) 4. Go to Install App -> and select the installation button on your wanted organization; 5. Choose the repositories you want the integration to be installed for: -![GitHub integration installation chooses repositories](../../../../../static/img/integrations/github-app/SelfHostedInstallationRepoSelection.png) +![GitHub integration installation chooses repositories](../../../../../../static/img/integrations/github-app/SelfHostedInstallationRepoSelection.png) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/installation.md similarity index 97% rename from docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md rename to docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/installation.md index 862011929..4f67f51a2 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/installation.md @@ -4,10 +4,10 @@ sidebar_position: 5 import Tabs from "@theme/Tabs" import TabItem from "@theme/TabItem" -import Prerequisites from "../../templates/\_ocean_helm_prerequisites_block.mdx" -import HelmParameters from "../../templates/\_ocean-advanced-parameters-helm.mdx" -import DockerParameters from "./\_github_docker_parameters.mdx" -import AdvancedConfig from '../../../../generalTemplates/\_ocean_advanced_configuration_note.md' +import Prerequisites from "../../../templates/\_ocean_helm_prerequisites_block.mdx" +import HelmParameters from "../../../templates/\_ocean-advanced-parameters-helm.mdx" +import DockerParameters from "../\_github_docker_parameters.mdx" +import AdvancedConfig from '../../../../../generalTemplates/\_ocean_advanced_configuration_note.md' import PortApiRegionTip from "/docs/generalTemplates/\_port_region_parameter_explanation_template.md" import OceanSaasInstallation from "/docs/build-your-software-catalog/sync-data-to-catalog/templates/\_ocean_saas_installation.mdx" import OceanRealtimeInstallation from "/docs/build-your-software-catalog/sync-data-to-catalog/templates/\_ocean_realtime_installation.mdx" @@ -59,7 +59,6 @@ Choose the installation method that best suits your needs: - Using this installation option means that the integration will be able to update Port in real time using webhooks. From e2986b594c8a446c4e324d236ac9cd3be2e0ca59 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 21:03:15 +0100 Subject: [PATCH 38/42] Fix repository name example --- .../sync-data-to-catalog/git/github-ocean/github-ocean.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md index bf1973721..24241cfd2 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/github-ocean.md @@ -669,7 +669,7 @@ resources: entity: mappings: identifier: >- - .repo.name + "-values" + .repository.name + "-values" blueprint: '"file"' properties: content: .content From 8620c10a33a43241d06b720fcb5da27c07daa0ac Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 21:18:55 +0100 Subject: [PATCH 39/42] Remove setup url from app setup step --- .../git/github-ocean/installation/github-app.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md index 1a58021dd..5c74f2ce3 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md @@ -37,7 +37,6 @@ In organizations that have a self-hosted GitHub installation there is no access - **GitHub App name:** port.io - **Homepage URL:** https://getport.io -- **Setup URL:** https://app.getport.io - **Repository Permissions:** - Actions: Read and Write (for executing self-service action using GitHub workflow) - Checks: Read and Write (for validating `Port.yml`) From 3e0024f8f29d0ff73b376243efbbc4a50d3c0ab8 Mon Sep 17 00:00:00 2001 From: Melody Daniel Date: Wed, 2 Jul 2025 23:19:07 +0100 Subject: [PATCH 40/42] Add markings to two images in docs --- .../github-ocean/installation/github-app.md | 52 +++++++++--------- .../integrations/github-ocean/AuditLog.png | Bin 0 -> 63920 bytes .../github-ocean/GitHubAppChooseRepos.png | Bin 0 -> 60057 bytes .../github-ocean/GitHubAppInstallPage.png | Bin 0 -> 20884 bytes .../GitHubInstallationSuccess.png | Bin 0 -> 11695 bytes .../SelfHosetdGeneratePrivayKey.png | Bin 0 -> 35881 bytes .../github-ocean/SelfHostedEditGitHubApp.png | Bin 0 -> 27907 bytes .../SelfHostedInstallationRepoSelection.png | Bin 0 -> 57106 bytes .../github-ocean/SelfHostedNewGitHubApp.png | Bin 0 -> 10069 bytes .../SelfHostedOrganizaionView.png | Bin 0 -> 115143 bytes .../SelfHostedOrganizationSettings.png | Bin 0 -> 163935 bytes 11 files changed, 26 insertions(+), 26 deletions(-) create mode 100644 static/img/integrations/github-ocean/AuditLog.png create mode 100644 static/img/integrations/github-ocean/GitHubAppChooseRepos.png create mode 100644 static/img/integrations/github-ocean/GitHubAppInstallPage.png create mode 100644 static/img/integrations/github-ocean/GitHubInstallationSuccess.png create mode 100644 static/img/integrations/github-ocean/SelfHosetdGeneratePrivayKey.png create mode 100644 static/img/integrations/github-ocean/SelfHostedEditGitHubApp.png create mode 100644 static/img/integrations/github-ocean/SelfHostedInstallationRepoSelection.png create mode 100644 static/img/integrations/github-ocean/SelfHostedNewGitHubApp.png create mode 100644 static/img/integrations/github-ocean/SelfHostedOrganizaionView.png create mode 100644 static/img/integrations/github-ocean/SelfHostedOrganizationSettings.png diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md index 5c74f2ce3..f1aa21dc5 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/github-app.md @@ -23,15 +23,15 @@ In organizations that have a self-hosted GitHub installation there is no access 1. Navigate to your Github organization and click on Settings: -![Org view](../../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) +![Org view](../../../../../../static/img/integrations/github-ocean/SelfHostedOrganizaionView.png) 2. Inside the settings view, click on **Developer Settings** -> and then select **GitHub Apps**: -![Settings view](../../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) +![Settings view](../../../../../../static/img/integrations/github-ocean/SelfHostedOrganizationSettings.png) 3. Click on "New GitHub App": -![New GitHub App](../../../../../../static/img/integrations/github-app/SelfHostedNewGitHubApp.png) +![New GitHub App](../../../../../../static/img/integrations/github-ocean/SelfHostedNewGitHubApp.png) 4. Insert the following properties: @@ -69,9 +69,31 @@ You will need your Port `CLIENT_ID` and `CLIENT_SECRET`. In order to make use of [Self-Service Actions using GitHub Workflow](../../../../../actions-and-automations/setup-backend/github-workflow/github-workflow.md), please contact us at support@getport.io. +## Installing Port's GitHub integration + +After you have the app registered in your organization, you can install it and select the repositories to integrate it with: + +1. First, navigate to your organization and click on Settings: + +![Org view](../../../../../../static/img/integrations/github-ocean/SelfHostedOrganizaionView.png) + +2. Inside the settings view, click on Developer Settings -> and then select GitHub Integrations: + +![Settings view](../../../../../../static/img/integrations/github-ocean/SelfHostedOrganizationSettings.png) + +3. Click `edit` on the GitHub integration created at the step before: + +![GitHub integration installation page](../../../../../../static/img/integrations/github-ocean/SelfHostedEditGitHubApp.png) + +4. Go to Install App -> and select the installation button on your wanted organization; + +5. Choose the repositories you want the integration to be installed for: + +![GitHub integration installation chooses repositories](../../../../../../static/img/integrations/github-ocean/SelfHostedInstallationRepoSelection.png) + ## Docker -To use our GitHub integration, you will need to deploy our official integration Docker image, replacing the GitHub personal access token with an App ID and App private key. +To use our GitHub integration as an app, you will need to deploy our official integration Docker image - providing an app id and an app private key. It can be deployed on any platform that allows deploying images as containers such as: K8S, ECS, AWS App Runner, etc. @@ -113,25 +135,3 @@ docker run \ | `OCEAN__EVENT_LISTENER__TYPE` | How Ocean will retrieve config changes from Port. | | `OCEAN__INTEGRATION__CONFIG__GITHUB_ORGANIZATION` | The GitHub organization the integration was installed in. | | `OCEAN__INTEGRATION__CONFIG__GITHUB_APP_PRIVATE_KEY` | A base64 encoded Github app private key. You can use a tool like https://www.base64encode.org/ | - -## Installing Port's GitHub integration - -After you have the integration registered in your organization and the Docker is up and running, you can install the integration and select the repositories to integrate it with: - -1. First, navigate to your organization and click on Settings: - -![Org view](../../../../../../static/img/integrations/github-app/SelfHostedOrganizaionView.png) - -2. Inside the settings view, click on Developer Settings -> and then select GitHub Integrations: - -![Settings view](../../../../../../static/img/integrations/github-app/SelfHostedOrganizationSettings.png) - -3. Click `edit` on the GitHub integration created at the step before: - -![GitHub integration installation page](../../../../../../static/img/integrations/github-app/SelfHostedEditGitHubApp.png) - -4. Go to Install App -> and select the installation button on your wanted organization; - -5. Choose the repositories you want the integration to be installed for: - -![GitHub integration installation chooses repositories](../../../../../../static/img/integrations/github-app/SelfHostedInstallationRepoSelection.png) diff --git a/static/img/integrations/github-ocean/AuditLog.png b/static/img/integrations/github-ocean/AuditLog.png new file mode 100644 index 0000000000000000000000000000000000000000..fa6b13c96d2df3983598d3da908f1199fc15c90c GIT binary patch literal 63920 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 Omxh|IYLT+lqyGUjOy>>& literal 0 HcmV?d00001 diff --git a/static/img/integrations/github-ocean/GitHubAppChooseRepos.png b/static/img/integrations/github-ocean/GitHubAppChooseRepos.png new file mode 100644 index 0000000000000000000000000000000000000000..f10d42fb05abd0d27d6296016453d810b341a7a0 GIT binary patch literal 60057 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 literal 0 HcmV?d00001 diff --git a/static/img/integrations/github-ocean/GitHubAppInstallPage.png b/static/img/integrations/github-ocean/GitHubAppInstallPage.png new file mode 100644 index 0000000000000000000000000000000000000000..b3a0aeb0e1eb0f029ff416b371847f5d66a52740 GIT binary patch literal 20884 zcmeFZWmH^C*DeZ8BaOSe6I_A?OK^e{JXr9c!3pjJw;;iT1^3|YuEE_Uxcgb`oxR`p zeB<1IXN-G)+-5O)tyMKkXVrYBRDV&FmqbA%M1+EZLXnmdQ-*>9p+P}GqanZnZ@Px) zgrT6osOF-giWZ`hqBfQ`b}F_8hQ^Y{*2Z?`hRTv}prCle!&P<6h*hzLlItoNsfYb0 zb8}-*A792*St^hD&+R-KS6VGF#adRqj_Uipm}*YTxqhE*&LD*S8olkuO6RC-@$(L*Q2+Rnd5kn{W{LdhS*w*rh$cx;0rY~!*o=o>k6eXd97XxOB zc>5{WjG-QJx+-+M!LRRnA=4kOA)T)*Q^?maJF217@zcaFMkv>P!5RqaTk7*rxE*3{!iV@WL*B zH3&Ujbz{LHxRk}bvJ3smxXv7MLItJM&=_Eccp}tksOr{8yyK8xz%$m$m^YbZioWdU z;@Bq8-+d@{U(K$Ug6Qa}oPxZCMhdmE_JX9W!FemZzXt}XP+&Byjbr?;dNZYsu-#U8vD>cmM5?-ObB zcm0jSrjI2SMUH0fuC1Syhe)_%mbsH-mU;ba<@a(s!_6a9&AX3}z56?3Y;SU(sE$Vq z+K!QveJVy_Mq~Uks4sisDeaBU z>c%Erp{bP9c|sdQcbs2$KbjgPu2hY5$)xk3&y38BSoD9Lw$|nMuvQOkkWfo+n6lq> zpf)A^$n4NNH<@ZT^3<-kJzb`^&7+0<2=58wwLh;`^KzeSPz}+e-bTAq@=Q?PNGOL{ z)zY9c>$~PlwObI`0F+0aO9O%_oc8_3RiAK-Mc-8n8Lij)(uUCLuzk8+`ln^@UY!*d zJ3TwSPh|G#k{>5skGL!jOS8%mx6Bii7Si8n%`gkl8wCiqceES5RoKA^^oJO*esZX^BpfH&`&V{D%e$9qrr>PqV;AKFS0 z%;=rj0Jpd4deae9kx;J7rLqfM=Z9qw?=QcOHgyHUkwUWl3vCx`nkA?i_a@z^yNAyn zXE2k?P_-FPFi$itNL_|g1HcC1Vyq!;A}0s+0=P$jf`!I}f&uQJfj=l{LMYh3?xCP$ zpo#vySB9qllLrI^6=V(t{*y-w_y#_AN>ETRo=_lHH%B1rjH4u0VN`86vg`CnNaECeYv1w{HG>s`#;?R zI>`E*!phFV#`=FEGj=ime;|8K`J3#oe*ImYz;j{z8p_7@HkOXh%@X3~;^gFE<>liN z_^YD-E$u(e{F_emzv$SxIoWx5fdSxQ|3mrTssEEw!Oq+m7^1&w{3ri^zx$v0|5K5w zwYh^3$DbKj&-3|T^ZPgR{Ph;#9w9^l)_*xs2yy4FSU(h$2$Zzg>vt~D2dVJ-#9gzG%dt#_ zGZjqQKR+FHd$V)vTQ211CVr4HgKn2Z^7r?5h!GKrX-z;UkMci8gJgn1;IiGOT4&kv z@J}60tCV%p70ioI9wyF*m-2MG^8CAVoY&T-rluyQp7v&G9(hHjwW4?}qtQ^1sJ}0f zIB>=HupTpN5zwDYA3;&zIOyL;bS&tQphR1Cj(;eix?sFu{>{#gk>L^y!J~@(r$m65 z=l>S54=#I`i4i8b4;Kx3{oAGy!Hc{0LTxH?0nmuFH<-g4s!J4(i=$8qgbFQ*A%gEO z6Y$L)Gz~*aM8^fCOi9m1&%{JSDowr!Q548_L#p&7kZaw(nnp)#JJj*gOUG_B@OWtlqJ|$ui5+YP zAM}40Pw!7B^Aw|1NGpPPtl?mkm{a~lCP)TLk!OPGNijpxdFXu1ATHv5@-}R_aFSg2 z_jJN>j}Ld^$x3h5i#5uX4{tg=NHGj#G31j3)V}!R#_-TVWBy10n4u{c-v^BOw)K^m zfjH1|$$pZS+dAawFH!kBTYH`T4W9OqsHTJCYaN)Y!3e0v*&i$_29utfjisIHD31Xm zweWj|QDHUzq3&T@IDWshiB^11(V3m>VY_AH(CzT+_;}fuuT^g*Q6ki($=jY=y8zWF z2oa-1@0(*=4TGE}z#k>VTpm!-NY9oXymIPgu34hBX}S10<)aoHXC;LzkcD8hUGw7J zQQ}wPR~jE`I&^H*Hb}Jd(h1|u`q2@t<#C)fs$>0*uXId80;@`%{L5dJST9Im{BPuI zK2{1*M~#EcT%~rm3|A*2ymjo&0~zketF?J<=JiP9*s~;abX2KS&2Gbz>?W9N`nyqx z^!*e?{TYdWvnx{u0&AY@6|j~~B!`J&M3}+vSM}+{QHh*<1ZhMcR(?{fd!ZG zzF}O4#(;uQM*&j@T0NVh*1v1Zu;tYwbvw5KuVX@mO2-aQbC$yTx=4A0G39`H8e?v~ zGiC8X5XFfUyp`HI{gJb!kLik#6%R(Hg~l|q1EsLdZUno+UheSSisY-x4MBpg799$L&lR{FkGgqB_zr7rp%;xz^9xAN0 z|CPUi=2TjUI#ByJU!aXDipFWwiby`KaEcNlyvZVhMR&Z}^Ci*M?^=}F^ucNom+fLI zn|XZ7B3y`!Sg|602)03ea0Z5ym}Usj4Kh%vr2N9sddoL&>o$n+UQ$s{)ovwzHBuAF@D$JkPQb?Adq*<@q} zWM0CXf@s3fJgp5EMZU{QfXXpeQi5h&*tsEG-rk(tN61r!dO?iVPd5q-#DpT_v~BnB zYz|?3_#iuiWKDE#+(=-bkrVfh56Yz+aF=eywEfI`uv`^8F>KZOg=%9+J#VH^fZMk< zX*-40-ehEqxYoTA13xJa{DD?vKyQEs(bDXS+tOgoBurI)#De8=JSQfvhLJi;Gv7TqH=V42r^|$#hvoxQ3l8fwPV??njM7QI z+p00(V<;Ukyoh_#Y5*_U;u@%zzMi0WpvmktQzhHa$Oyw8(*`p&ya3PK$ha1h`JM>| zl1&8cZ4MSnQ*@c&-_(NhN8dYA9hN%%KCk_f+)y%H#xnE#&{(@hrm$vd zI!zDOPk00a{aBmAfEisvN=(;#a}QP(bI+d9ti$$p&xho+ODOe6A{cd$&mkI&(ngv6 z^0}qfx@skS5REbKrC&nV5k$hde4*$kx~@lZc=@9x%`yRg<-E1+ZH(k$WK-}D8m5yz z6DY~`t8baHT+mbLXlySD-%sa|oevtGLVndq!QKGOs+&OuY7e zB`tkmln52V=;wUjH7HY|)Cbs?zh`Lyhh}7|c$Q z1psm|I5)(sKQ!aKF8KcEHuB<0A#WwJ!xr&JAPTJR?jDfBc zAjc+9MXmI7>1&whDB+?s=n<>H&c3qpvD4Ngw&^I6A~yseyOHHY<=P3|ijxAb+0k6F zcFpzjcLMwKLey3n#8O_i8npBFISRvZniQgVresy3ONrGVW$bfsunuAo46H4{SP+T> zySCDGVj@@o3`#A)nz|{IPYeBW=2>nRIxIQb&L`pj&ErR&!ohTP)5hlRhP303+XKJB zxN8hi~8Fj#&$la-P7nYKv3ksXo^0p^j*TuP1V1Z*i8 zqWO4SW07#Ju0En!tM#~Df|=hfAob89Scdj);3LY!(z}i!VriXx$jjqY&U?Fgjq6|e zyg%%Mm{XvF;q%~~0+|;S2ZKhTg2O(f)5?J0FXi1b-VH~=R*PbCA%{kB17LGJmq9bS z6Qiu6O&iowWu1E6=NE+f8hS^xCIkjqR0KW4D`=Vc;ALh;rde{aTO7kV~>#Uvl~zbor4!_>`m5ZPpHdsri{f z{rYlst&M@M1yIijC4tfZbf5SQ{01@;@sf)x(-a!X4+CXxRaADT8962=AV8#S3Z7~6 zoWDhj5}j3+93Kg8jeyfX1gU1&%3ixSKXuN&)!>5&=pOf9U8GG%PN(XVccLLXF28|u}_ALUQICyHjSwuO!^9vAnH*EU}V2VFxwBKgO*UfgH)$bosX6TUy#nh`(kdMyyk7)TS3*l zUd%d*lDC^Y_BMXw=sUu>4gI~XT)<50A~{kUBFR-7dG@*3-nx2Wv}UI1+cnHg@@c(z z70sH2Qam`4dXyJ*9sB0FE-={XaA6i)$4&lLgLDDS-}fTf6%A-@Q%kwLnHSQ_Renna zE8Vb7YjLZeS>2bD8qN8Vjr*W<+!*Go$URzD=2V(AZV$>x=?;vp1l&7Hl~e zEE74#dD40K^(`C9*V!Pc4&`tGz6BAM z%rc@(XeC$`@33yfD(nm{^+mt)R;) zDQnR(bVJ)u@$ctb6yFg8kr9@?RFC%bW& zj!~`X9FBU}rpr%LF4H(52O88~&5ghBS1xm%qjw_IG&&V`aomn;XJQ&H-z9G6;-e># zP!$)$-Dhr&5VT)bQ_5TzGw(m^CS-tH+e&FAdhskfk3n|Wx)1@+gx)`}Pr z4y@KncoLx90to(slko{h39v|bT~ym}+nEy-Ls76yC{A6l{-Ar>!F95iW$#b5X?tiD zP)f>Z!S-cnpA4+9?82W-3G9IC7EC~Z6(wQ?ULfrkINjqcWqEsTHdi%A$)i$>3)c>v z^#UF7w#^g8WGM>}@p>JlNl}ENm=``U_GQzo4>L2+kti$CV5tlYV0jTjM@j?A0)ms= zG3-dLLb5>?^;U3B!c@I?R!JjUJp8rb>Uty&0ecxayK&f=j%X76Jk`vLPt6pSR6fW6 zuSEHT55MS1_jW#`FeL*Y6r3+FxSp+hRVLcKLkiX+{2e8ZvhRl&9K*eN+F%iD5u2A- zfR8)N#v=ngmA)cwLj)_jO9jYXglD;{Xh;ay3cQD3jy_%PzQWb@S|9ps$YTz!7UCs( z%{K-2Y8sk#;KgK4l2=nxY8*D*$kcea0rZqU>g7xIRxVo8TpDQ1V?Z}K9?wVz6Uw%_ zc2=X+%Wns8rZ@85Y{G35M*4T}t;i=@4Ifr`;O*5KjnS&`E2_qgn(tOu%(R zZRq|iHZ(kw0=5K2(EEZ}MLStZP&7iTd_;mUzFVCZ+4*^D&2l()+0rG^!RQcA+-zdqje<@quKMSzDjSCM6slXeyhYEvSVd~ z+b?43$=EZ4uL?2ru${}*3~5gW05H}uj`L3YQ{H%Ul4hF;6;xLS*%{du;f|5t-rh$7 zp%4CzSC{)kYRE_7GH{2&YNdWq;a}AwR4Akoc~FF5CFp+2wGoxL@iOQu!@#x zA&dVCR(>}7A#!1cCh~)QM=tT}Z3n`$(gdzY(^c{)8Pt?Ja9ee@P~EmWQDn*q0W)6I z0+`n_df}jBJcrVUP!!KIe`*z}1yzqJQCJ<0bV(S;;%k+$?&T&TpXZD%Np5cp6SDdb zyOk*Mac(@Mc-m)!OKhOg%a|~4*Yki2XoZdvoHtD^O?PS3jAnayJ#3C_4MhePWzhM0 z!c*Shm}sDN96u2U;^x4k&YD3&vJWrF2E9~h72-83x8?x#I0jI5^EWL+B>Z1;cK+Nfo z7cpU}r1bd)X473o*2Ew4W-dHQKfGD_{jicSt?QvFPbmD;L^*Jh{CHJz z!f1_eI|&kFq5!`*-=<;DW`HTAE{0E|MD-E|KtpQ)Y^2boPC|oBO0*7oARrjWI|m_L%CNJDz(JLU8ArE3JD&$n?ba~^{Xi|}$mcjYH%+^P?{y2u;zHcK`A4Wog z7vBUOl|^|}JP~@s-IRlIDi!?A4`4)l#VtXOG;cD&RDK7~+XDyREqr&fj#o#GRLhNf zgjkV!uR;1CZvE}XhW6C$6@xD`@t@deJpMNFtYzl+a_C_q(5(nzH}JP(U=nT#$gNAy z(Z$j!L^INpgEm@0vW;QHqJA(F6%IqFJ`U%APl1aWVCLM-fd%PSQF1da9w92?bFbGV zH9g9rufo{HU%f>&2sVJiRpaFyU|)1a)i=c!jmn4TYI?3y766Q2pgG-u4c6OyQGhd9 z(gXpn=X6CjqqFYJC&}}-bRMD_zR@?)R3+zE?+g+Xoz;1#2>ej7+hkU4Ybhr@DT-`3 z0EsFUsHRWA5#oLDdz9hZwrL*OWV7Nc$=}*5h`|9!xcy(Ux*?a`z1TtZ--mxRY_70D z<7MH!H_?||)h9m=1!IZ;(+@rB`WBN-F!KX2`xXIZpmq$5nTeI(U$%S69euQ6Ih zy`r()!GvBm@+vj2l1u5;yMuSjW5X9a6g_<%UUzPD86rB0bdy7f@RNM>#Ki2GBJU-% z91}F>MD)d_$YCL)r%}G)-IRGm(Ay7qKX8hWZ^IW0!+*88vIbgsu*D&9tTN6_J?;XBYP(XCV#F$JDuD&>XzHC0}k62@3@Q#%UQddp`*j8 zCL-F7c=C@Q*l=MNA0geil58s>NhDuhxCX$8i^_0uASFE`29EDZntgE;D~Je*q{n0_ z&ZOY`L?nX}D%5*IG|IKR8c&5l60aiZSWCS#Ja;Cq&&L#0ghk}GV31RI)rYonF5Xxv zIi??wycd^=mNg zc$G?;Z)NIk`x#{y#JmJgCMQliu@rWXJ1v<*ER4NL*?ikVU`_W_ci3QMN=`23S**kn zp5d0=GuK5p=`%=?`->=wfCHc@uZL^{PDGSzw_5wV53&A96Pe z7f3C1e=M5B4S0@Hg%vIj7A+91f@p}N^{K_=#=KV%vWR4vE*dD?QPx>~013hOT#;!* z**j`YWNb{q@|1AKPqwiN^&0yQ z?cwp}>{RT6ncktHmsh1lMR9^J;G8U%8IpNy;vI>&d-r}78h3?!t#H3VyeN$cIYm^5 z;sv!KKxILWH#IPc!&g$0HE0(W-n5uml~KD;`@91TsZlSOyX;JOq16#;v40j2 zf?>D8j2vOs$A}0h-Vtni+$C7PigfSM$_&NqhF5%b*>RzXIt-cFK0vQVz^nfbffQx4 zQMSLAsHO8b?i_k$J0`IPKvQ5ytEAdF%B6s<=Ox0-(kupslQ_uVZ^X124F8ZfyhztZ zMJg-Mw8s;jBES3vP5h9GrJ9j>ePeX{14gbcJ zw?1LAiFKWR@wqeuumAE3-9 z4ezDaUG8(yoMABP`;f>MST?6@4{xfZ{(-DhYw-vS{g}%*RtW8sKnN*MLYveMHDk07%NHf@iAgO$}?zU|(-_DUHfE zwyJ?nXTvS@b|J)F7>JjI!@qSb@t=JcyU)%(678>!ls>`Wh2cd$|1N}T4BkRcwheUL zp;w)m32#&adN%oh&eQ`SUurtuxJinf7L@rSGuJGbfl~tTGD+EkhWCGuH^vl^{^JrC zxd+t5&PW=2N@z@S;PMH3o_UO+K^eez@a$;+|1^=K#f@qD{Q zx`tE`Hg)4-`u%LDvqk;ybdM8b^D#b((#>zDt?f>75(a*-uY-*rA3V_daq!Yv zg9-}v2J_hQLg#CEEM@o|%w)M`0Vgjy{4=zNrmQ6Qk)>2TxEcsV+28aLe$>rvJl9ik zLI+Ng6Ncb~V}i(>cA_?vii2&l?(sriEN@s#Kc}32!)IS}zGR_-^s&Ns-^- zH#Tp&%b_dBdF{H<#h&WvdF&ISKiO1WrL2H+jJ%0}@*ED{z*MpJW++YQ=C1_0x8}Pg zB8^+e0%sfRc8{=l$=c!gd=j`Gjcm5_Q^i^X!DEI-8#`m;S(2=pHP+#S-`GXB1`}D_ zt`1N-{kAI@OJY19;PGh_7hF$h5(Y3NQO5b3s8v4>;d5+g^bHJfnzP}ptG7HBYw@A> z3AWr+Lo9mnX#Gh!&s_*OJsXKXZ77+%*}UhoAG{AP*5=`%ew$0-6ZR~_*yV;oxZ_2( zS#+u@`KFBQ&zxIWsU#v$`!E@~&@VfV7A?~T54yf=%f=LzHVw-zR2pdXvAgst@;!uc zZkpD3==C%9J0j>8B`uh($2t6_zdqlYKVPIWI>IBg>H-%y?WsR2hUq&Tcreo{&H zATs4%J!dkuA*n&Z_6hTh?DP2!MlG2d-~BQf83Kc;HuLsMo9JeDvNikW`)WH^^2gd( zc?@Jphn-OX0B!MeV*7?JHe5xKHhq3;Gm?TBj4+StgZ$wf8ymZq>dE~LBBB94nE&Yt0Ypq3igIzbB?EeSoO6>4kO;uR`BWtC#&qlh66kY8zN#0nfTG zW@HEh_uKNrtgIa?{tt57daF15fto1v-JE_$zD#FWpOx99^DoNSgDZBXXl!oeq9np?-%5`YE;M>0LaFj^!|! z+q;b(;invAGIr(Dv$GtXJIvWSLpO43mCv5{p?Yu?>3kmFPL@5lOJRK1mfSoU&$fn9 zJD<%OH?yoqT+x`^vNyfopH~^R|Y|Nn+EX6k57;{JYS6GCs;o-yyU8;gxxfX2rRp)vOisj(f} z++^e%gQ=XrGGx7sF*^oZZxh8X+?#UGsBj0<8SgF+ zVjV4}{X0D`mlX(3yhUW+r`)!=QA`uL*`2fd89zOG&?YY|#E%!M>+u<`b&Al1)#2*p z8$*|<wdTgwtXovQpe`>6&-0)wef;o{jx8`Jf`b@Gv4Gj61PM>I29_18O#H8!v)LOli;=fs;}$IJwE%}NpBZ=v(2!a zk*Pi(HlL1%jZ3{R>^=KzJ(j7wwV&2M-+b7OA-tKy^^QOxd-*XD;`sna%mVn#m1lCp zt8BIfq^Ydb)D+7mXH)AtdMgHR;128Qcftg| zLif76%=ik96;7UWR55_BvAYQgt~vdAP~L-*Vvo#t;X*WFF^Z)j;1%O3l3u6tj4+GBrxj!=c*y?6i8S2!g# zWD9+UrmuM;rmo(2eeX5sudv`0B_CX6eS@c`Vbgmu!0PJ@IcbUyEbxODUF*K1X5~?^ z)B4FZTQdHOJ$eBM!Gehui4^!8)hLi-V9!XoImCu3g$I}^cE@9iB*!rmIV}R;JFV8) z?fF-37^RMQt3q7%x@DivSZbxp&X2v0YMYi$^_q< zK&Ljk4!cG(!(5mUi-V77l^n&F>y1@b?4*NYf)x%(9ALjVE?sjMF+}2g#qp6&K5&@G zmqLvvc?CJQNR^cayeo>a0FsrXMW*nn#cCZ6wP`vjxFNTfCB6r^mIDN`$37MdizsH{ zak_W0CnyvsX$ibW5%ikq0v%(k}~jhnf>_^i9eK+a>|y$V=d)YQc4Sk%EbhY^Cl= zfCOQGq1vL=Mz9#s&kdb?@KCz!cW4g4vD3qRM<8O%!-9gsA!QkCU^r+Irw6R+(M!k%KjxmVfW1QeH6z}4CY*sq8Q{yPY_15KGgbY_R;eG8~#E5&rV6kX6#}!)QM^GAh4Ff{(QF zAIQECRaFvkS~rHrAFmUYHe2?48)sb!U7Hf{9!uFrgclt?Or#Ily#+U(e8U=fAGS77 za=9~GnNU9I5}U$yFXplfd$eB8&#FN;T|=GLV`*zQ?Is$cCruF@9m7FE>~nX}mY zFoqG~gM(Xy&bL-GsQ$Fx?v(z(lFPx1CF^}vk1}&OnOs|yrtw&m; ze47*P*F0FLoKw;D@@I=xnn~axv$-uZ!%!e=eA2CEYNXWY-gV^dDMS}yyJfpYtN`$K%pgb_l>*M&Zb%X5~wU{kUmEmF;85v*0UfnqKjf_M()Jb>PT@RxstJe9z3*kx>35CludV^^TNpU@d9p5cu zIh}dBv-j@v?ud+wm478_BLAR>>(xw;?zvgbBdxhBpLE(@X?GrFc!Bomt!CW^&6UsJ z1^JlmjdwoL^=_f;5ACO7>7*IedhJgY8?QwBZB{Da_WHoUQ{v{^ZKm&dw4?)G4m zPUFoKyD2pFkk4k6;_Cr$(qnADkyOsLi2%ThiQIaXA9Laoj!Ms*UHb{Jaw40X=lA>j zo%$MVnqR#7X>$eFvk{p)SnE7(Ex2(a`9!F?bWK9$-2Nq|xRkADe?VB1S8r=1l|WTX zg3{*}VbcA55i4wItO&l3Dq}O3f?;u0YU2a`YXUr#~_oAMJR~kM?-4x_4ACcM4X^mt*)X`M8rJshboP4y$4$#qbWW)7SHmEbQVRFIAC#=oBB_9j z=m!=WtAwcj(4Oi?JKWu|${P3b4g1*ax6_APeNF2IL9i7&Q%yl9rKoNd0uO`s*``O$ z%Brd~p%;CQODQW8W9*`l32ma0Dr3>53Ql?hl1EK6ubdCrZe#_XDD#VoxI~dj&hzmU zy!487860yU*xeUZ7J8I)=}x&T!FhXpoOywg>zV`k?JinJ^1B^m+z z*{`{+OV8SJOg39$93Wc9+H%XEblKL>-R_&$Hg`(MZdc@RH2e1PE}ag>HQi$=Kv_wN z;;7}}GdVJ;fKM9xiM#9ViR8s+*A<~N6NQAXbdL{fX|HxMXDgj++^-LlK`Qq;7O>my3>r-blkgsRagz+9&n{| zZeQ-7R}O#Go%0l`Ue&uhID#GjK)+9I9J&mf=2_#_q$=dT&CD>b^D!1KVnuj&ZD2FN zG>vPzv~Cr5;sgcX#UJ}81BbEaQ}MLX!)-OKoU}B2n};^u&uGyg)IPjW;R&ZCEeltr zqlt58r$j9&#o=+CSDP0JdT~H7K5RdFF?>tiP%?MoPBM>m)W!Z(Z&!j&P8d8PBT-{I zco*$2RAXVYV?~DDQE9c(?=EPfeG_o#8Jn5VqlwgUQ2eE*r*^x)^3v-R-!I5(?JPh$ zxa^4VJMCGvyX`qTjJjPNLX5oSvwm2WyZX-Ot%^pHv7|OQaZVd_ld^v-vRrJG-WvX9 z%^!VM?bl~DJN`Z>2ZnYd{> z3)PfIUzjz$rY$~iRDErR-(F)g{{i3mV2UK~Me}Xq9Ww74y?w;VNk_dyG)aH<4>@f< zRkF4uP@9Psya^UT{Fc{J9gbN}?s}f(ot@fM`e{sB zY(3Xadg)#jie2N}CwC7V_H*zR60pPzN!zmHe9S=>w_O#sOO_03NZqgro)flLxj`-B zPDm>0MV8wNm~-dXt91Pm2Pt^N$%dYi>yG$?{P(D~!U)}8^*jy0v|A&SYPyqT?Pi(r zWEZVAhbhu{^S=ol2T%EoOA1OjtZbtZzr;k47_Z*Xp5{0$HC;G+UAp4I9{SXi*#AB` zz4%$Y<=o_WlUK2EV6wSXXO8X&|ug!_F3 z4w1rI(_;CG&;u$Dr9r6E?cLQ;f+xR!xz)bOSyh9y#0$%!Ejq99Fv*j1}{o5m{ ztHUO+f&*O&uLSq*f}eAhpSS4t4@rzC#=kXL$R z_|#sh0M}iJMk-+TST@hwV-Ek*Y9H72>{lPHS(27oN&TS-!FO7HhxfWc^+l?v9;$4z z>9@^w4xLJpM4{5g#sQr%2|UYEk21wq%^q$!ZlyxqlgpCKNM(v~KYsYwnw3fl7ECcG5}6!ZFD8hqR~OJ)`DJq)Y@hP;$RILr0AQFQznFK@F$K4-*6 z7`>bUOlg+O^}mquW>AqxsJGZfCOsPUOX}dox_C;i<5!#CoE3}|Pslrd6B6uD{lQBj z_-KTqTnv^&c?&0dQpUCFXAtS(c2yuUM^fI1v^A`}dfu!RL0kyWuQym{UgXC{>eatX zOB4*Hp{c*=ePOnZYKqzkbmJX3l5>gz!HV}@e(AGS$jN%4P`6KT3EkY?N{#IiuxX**YJjQwGqhfT(e@Xej>6j*EOe6Agi`HEAO21NFkeSiDCU!w-a8k}ivf z70Oh^=x{2G{N*4IP!E~lVB^R%-ToH?h2S8^U0ifDmx`b56mwjck3qZC3W;Bvuoe~3 z1aR6{zn~ajpBwfxMwW>Zk|{Wnyn+ofM7JiPMQ-=k%br3`>@?79BRdG(Fg`0f006?T zaZzSe+tja+!O6T7RC`y`-J*p?HPX1v&aw5JAGI@sf<9%vW2j5~8dOY@8iC~gAt50L zn~9Mm{QT~XqVF0Uen5#Lr~U$=hr4*&R#~6X_ULHY#W_3H zjV8RtK=z43>dcY8PphVVUECh^lkGZlO@LVH`zk#kfC@F&tk#m`(p%Kjk4|R4d8%An;I+28RhnpOrP;(xRj|#G zX$Pt*Nri4DHX2vsA#XtK5)gaqrMNOn3OE-@0vt= zt}W~tRhfW2S!z~C%Y>hE14dm>H|Si~r62$nwgbtw*x{6fmQ%tmu?ijtE=*%8TgiAt ze*qIIFqeI|(^Ml@krhGkF-@7w>ztL4>^JVLqi)d44u0f|R!1eI zV3H5*8%ho{)sDy9RvwZXpDMIB5{)y<&Rh8%x@xSW3>}*X_eoFm2aqiA{b6W3JPQiZ zRwN={iAV6?Cf-`(obWRl=`r0ft-TE9yw5E&1;=}|8&EPYOfe@9mY1+@+`hbHKd(!!1R_M77i+0mOc=T(~S-;p>Fx(EWim1p`N#U&!Gbt7X{arE@avSv@y-av#d_Qk1H!GhFxrnKQe5+VC~f z2vy@?Eo!{_{ym}WHx%cwrEPqje20gjWuBJBV*wX=P&fr3s0?@5tq^>E6~+^tofP0? zCg1C)!3=H`ss#=^i>%pVl|t<8yRth3Qt5ntVKtAf%PuGg>!PRdtO}$wl&6X|nG2L( znZsYj%lmh3z1r42Mu`>X9w+#G5Ao69bhr>n69NvFvClauy40r&8WtoCU<6}twGktR zNoK)ZvFsMHvJTepzA1()LtKG*iy|b$@Ef&lqExMz>rKZnbF05Z90o3_g^V7rP5k-q zU)l*Tfw9n8`JXj{D88 zTr2%CU;3gU@mrlK+-V|Ii;e+SA=CIV0O=BKVRmx0@7YE7hw;(P;K5GO%SK$(n;ohA zV6-AHib5lSbjErE=V}wQ9vwQ*xCcXl&}XRJ?bB0_xi-mk1txQS6;(oGsG6>4g(H!xJ~BFO==qE71EES^@9))6=H@e-?ZoOMa$0}&w;vv% zGswGWxFj`+YOH=baP_!qyU5kIIT|rE0o z$e(A9cz~drTaZ!y&xvFdDv^^>Hfve&KhFej0jd4Jw*fdShR>7xulJP(aJiJrjfDI; zlq}Nm9K{<(r1Iz3^K&m;dS`M?y8s9Hb0abg0LublcX<9EQ^S9b9{`4m=WCP==oQL( z_q#vOQRM&u$Io5OPk&4i|2fq0|K>25VOUh$H@cfA%_{?&a_|VA#mDYH69xFKxu9G0 zviC+`^C`ND0RALH7Wv6FidT$pwSaR>ZGP~^&buu3=j(^h#+kn_2JzNBg(u)g4PurH zsY1PB*HKz5D}p_nau)HB1Rq z1=d=w?BW$E;ln8HjV14Yx!0n5g--G99>rpLj@^YD)NWxhytT|du;hJYA|or?Bh91j zc8+xv!Spg`?CD_vpZhjg!311^Jd0MWSxF-urRu8s4?_K#5tTQBJOCwD@?~YDxk?!i zY+@oGBE5q6F_xFfBs@x0pm7`2<8v=#<6@Vr?+6OP$hEWaltv_+N>_tFkbG9_;O_^! ztN|l(()hBVQv$kqK(UN2$%7Or&GlhBYy|x+)?xdSrzp4Mwx=VJ6$9e@jmMsI|8xuy z(#!pN#t=t~UGx?;Zo>wwAz|BPvra#hu{toAp?|0RM)i2PgjT2k->MpcB`7ynVF>4} zzNgGY1!#YHu$^FZG#~e$)N`hALAs4sQOyGeQkvu`gyebX=3HEX zHl}aHSsFqtig_sH=6!ZAltU$Q!e6P?MR8=e&@&S)Dn=^^ZMrhhwZA8SI7|L3@S2IY zwyuAtEID^4xgmlrwT!IXde7lN=6hw%7E8;79w(Ik1zS=+@hok{QuTgw+I*9=LqRP_ z_BOQ0OFq2k#8r{X4zh)k88{1hQRv{l^Mm3s!N>Ifk-V8%E-m_QxYX@6pHYmd<3`9* zixugD7j;olG}@-j7&r}}wK|(dE!$eph(5G-s+aJ6%1dX&4e61*q`Iu?2U)`04A)DK zk@}6Ss+4B~y4GiP>lR;yW#@cfdKT670=T*UvcBlT?ZgWsc76E7rE5=4@Wd`?Dzy+8 zxOi1xLFql6oRxrTevGg5a+)%diufV($rL-U&ht*&&Ttu@xYja<)?TnoayLnPdur`U zjv>U|zTh=Q=z9>x_Nw-4pFZG$B3zsTizSU`Lo~dqlS(z)yA57lsk=S_lo;jUn_gx( z?3*)Hf_pwdYmo>S8#k_?`pa)3rJ+KA6^GngD5-2f0V z*;`n>qm^yo6m+^IVYWI5wDXmKw_Dv=xel|gS624I%i88EQ2c_fL6AJD_> zG?QCwAK?coeEK}%MY>Syxjs2B8cXV&!#FfG&Nwj>d%FfP$+%9bs^QkEJxq3%%=J*4 z!DDsEs@APx{&E3`dsuP8#)J@nE!3=825*0&=gl}jRxan;`cF3rMXQ`Gg=OnPQw6sW z94MPcNNVuAssUdd)vam!2X7BVwxZb+ZcN=PN_N@!lbA+;pBC#$X!-Kuhqm!Y#mGzP zCIB6+OfsNd*^M$yp#sviuL>r#Qm9&`un{~ng8A8`E}{!^sq0j3H(Q9#=K?XVDA}^N z>0}}T#idR(^gh_TazCl11$6Kn3Y1=sF*zDuy{@PjUOSvpLW`bvCM)WVTH@RZ(8dqn zYPTbub6u3OJo_Z!?dD9HQ{ZlKD=Z6;1;+QEEG9%CwXz{tWcuRdx`f|s*Z|A`;m6i( zW*N6*y-2mM&ORv^xcLxG`b=6G^GRY98~fz;p0jT`17*uuC`N5rjd1{3&nFMtI;GU3 z$$w%#uCZ5G8!U3rLbKChh0|BKW@qdShe~Q($!~*5V9GAW*?hmNu) ziBpf-bqaAlErz!YLhLEP$f4(ua|H`81HOYJLb<=q2Vnc4STJZg&nw>cPUrA_B!ihB zcyh4<*nrH(waxIymgQZIT2}Ep9afqEeGy)X`!)kevCslQS|&Hl$S%uEODfUX@!!^O zjgfqaf9rknjEai=!XAOU;x?T{D$)|NJN4d+D43G_9-A@xUwtID1;QpAx!s4#n2I)^ zh4;-#l2U}MIVyG-I^j!ypO+)E&mvx`rJ>F2Y1py$=t4}jQD0EgbcDhPWS+-7*jv%> zjsJ_u;6f+Q##y?(DA8o;8PP=3$ zsXJa}V^a2!_)oQd?M~^&i$jR0DPmB~^W)lXt=4$Ons zhvm>2({DIQj84D7(2}{|^x?cW)%ONIzdzzmMQ$w6J&4TeAryL!&!gb}27Fpx#ENHB zj@J(K-1#XU!!v_f`9ajrD~0jenz58yHAN5cqmQVW{~`mGXDpxnKCsV%_HgP8mnoI_ zbmjbHU))MttOegs{LR@DOx{aM-=|tJT=Px2eQ@Rubo^Xr@#C!Y*!CY3Qz`cU`Erp> zgMi?8LyD2+>`(VfPsLVrS=o5m$a-EI+CQOE{gDRE00qMXA~5TeM6sWKafb{lXXk literal 0 HcmV?d00001 diff --git a/static/img/integrations/github-ocean/GitHubInstallationSuccess.png b/static/img/integrations/github-ocean/GitHubInstallationSuccess.png new file mode 100644 index 0000000000000000000000000000000000000000..d82b5d79983773b4092a2eddc9af5a1c1ab3e40b GIT binary patch literal 11695 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 literal 0 HcmV?d00001 diff --git a/static/img/integrations/github-ocean/SelfHosetdGeneratePrivayKey.png b/static/img/integrations/github-ocean/SelfHosetdGeneratePrivayKey.png new file mode 100644 index 0000000000000000000000000000000000000000..de371726c7b24a68402721f462df8e4fc45c723b GIT binary patch literal 35881 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 literal 0 HcmV?d00001 diff --git a/static/img/integrations/github-ocean/SelfHostedEditGitHubApp.png b/static/img/integrations/github-ocean/SelfHostedEditGitHubApp.png new file mode 100644 index 0000000000000000000000000000000000000000..60c901308edbdf6acefecfbaabf09802c5560022 GIT binary patch literal 27907 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 literal 0 HcmV?d00001 diff --git a/static/img/integrations/github-ocean/SelfHostedInstallationRepoSelection.png b/static/img/integrations/github-ocean/SelfHostedInstallationRepoSelection.png new file mode 100644 index 0000000000000000000000000000000000000000..ae62a56563e8479a16563eb758530a360e0fcbfe GIT binary patch literal 57106 zcmeEtby!qu`z|1jbSX#(g7hHWDcvcJ3P^W%sVLn@cb9YwDN1+400SbOQX>p;*0A^f z_II6g{yzVlAJ;X*nzi11-utkq`wpKFkkR@=}KK)4jN`$1J_e8-wh@W2UXOm_bPF7Y{-wX^5KAD3bNa{OG+*-H4xDP{D^B;`A6LQR2=EDYp0f<@1?MGfUi*WL1=E&eX&=`AqE`d*P%(Fl1Z8`ygZI`jT$8 zUd_5qgr6EZ=eWoy>i`=4o!m!c`ElsrG8NgSorhnsgAYSAW6HK?!}rT57IyaARh(-H z%qvcbhhHDyZGU|b+yx5j6tHZ2lx_E$=rgBEY|ral{^+sS5zV@Fk39H1Jdh%x&;k12 zVsC$%NZA}rweGiXYf#G`4R2Z-58@$F%;o0NsO~*vMN%Ke$XP>q#W;{T{ifGc@61$^ za6A}&92vcfL@zH@5Sf4V!@DP_-z0eCkxr4xF(t@igJfPm*2Be?Ae?{L7|NxNT-Gh= zg!<$`)GChvK1b-@Dp@lIb*RHQhDqqtW5P%&g7;x11h|tyZcpj^QEEfK#A5uy_#hFd zj*|GWP?Am_ojr6`N=E&KHoA@!?>K0jd0WJdboV{Al;}9p8Qv8NJttaG&*Ik?cDUSc z$euiu>p5NJ@p_tpvDHJlrrC@w_K?48Yi;jXw3#vh7oQ&KDZR}n>bIXc32B}^RCuXL zh*gWi{8BNNr2x-bb}?31o}cTJU+*d>&%+01pPhS9-@fHE8kQQy9!6Jwyh&Sx>`Lg0 zF%|mwn_r)1je#Cc1#5CtRA12>@;5kN8Rl>16XuoXedopY<(}Xbf8_2KTt{)nYIa-F zTtZ)RFcPgooBO=?19$zm7j7Hc3Kh-AtyR}!v_F}Ddj7cnf&3A>evXowqx6;j4>1uI z-8Tv;tTlo)wl%&rhBt{NFL~%%iF!VX{3QCx_*3jH_ix6U7y(61#?;s)g^2>UNgGY( z(rCBOXYbFllo|IDjQa`ApL&zFB>E-#eOQvdRo2M;qUFb=K=RmvegmoS!%6H(mSQ1= zR(r|k=_k9gHn`^~=a0`5P*l1VgDbnV^h(vM#&etu*P`e&CgkG^1x#P4)x7-O{8QzJ zBtu?&O?(WIob?CImPzJ9j>0zva9G-T z-oKML&2_f6wT4@zSoym>S$;oSR6G^2Ew@c|_Ed*d2V+KW=118^nWZ*(hJe?Mx6zi{CoOo^Z$J*S=Zo+EXtL*ax z&s^lVQ9+B`Y5eA@@|AK^>Qd?l?wAq30yNuHTNxYnnX*}%If~iY3A}MK+oS1@9MO{e zqV>XrsydaeiqRkrl{x8GC14d;#v$uRme3#l=80S!Tp!Qs&rr_IeUf~reDbdtuU=f) zp6#7yQ^Y>}f?kRad1!$9@u54eG;Ye{Sqd>OI*J!jsItP5i;=RCDv|4vbC3BcVCg04 zUsX<&ZB(+pXsU>+kf-UUuJHDxz8K*e_DEmm3LBvsLEGHekISl5kh)>MYu#~x5X z-a$M)Ha(2ME@1G5wr?Oj=|bhgk&5lfA3WbD)B=-Fq^afv8-)T~T|D9iW(08sD21L2 zAGsX9olIRD#vNwm&?9$DN#ZCr76S{lY&KK7-t>%2viBUs8s6C@EL<LEA(PjVnhB0euPjY zs1y`WoV4>%Cs(KC?bWUIZNsfJax}8i0|S(r;O<~U6!83_9S8WMD9NuU^&;DEIT-|4 zn%Vw%fAaqHtU!tXF;>kotFDF4S9)#k8XX%;Wn?Kcr&7Y1xoqQsXYm6JB zgXCFh;N;=S_(xtuuaMjb^zz7(O;MCTN+&TS7AD%FeD!3G%8{y5f7{e#2qU5%GL5T z1DHbsu`iMzr|4(P^ec`EF=!H6eByYwXAT-YBr*Ji^L-h|nB2is;2Bo(eu~tj_hiu% zp+%;KA!Q5kejgW6mmybi_Hbi2znYV`6F)B)HkD>U-l<#Juv5)p&BMuA3!fof(4PLN zfk_LBL0oN~dtvwBb&`KMiY}Fria}=0RWC(4?+;tCiYP-!Ms;QLqYnK+0^@Iat=?)C0P*-cVd61+u!!x5lt20|ZLr#SzXCY^L z6MsE)W7geg5W^iam&qwqv-j-4{LO>uuLW;PG{)zb6UV2$S+=!p>kLl^Oe+IKoeYlL zE+5Zur;o;uZe~*nr+7Lv%Petui5>Vk?uE?uk^clOwLfyMS=T%+WKFpNnOd1OWP*PN zY@F%Ll^0jNsOB~CY+V^YoDVqpxE_^2rAmd%pXtcA?9wu`BnUp;w;zLS9sOBp@k{ZC zU9}6sgpT@_0>_i4XKsREId^Y1dzxZgXrjbS&Qak7$EA}~@s-)y#TBJP_SMK)f*y8s6`5o}{)JFogr zbs==PgEtWW_ST%u)=qgi&WX_g8I{V(h6U*eFXzS?1*zT;DRxu!VvZO^C4g9&;E$Tf zLa5p&Vx$>kq?aHx+F$5M!b9W9WarhN0?6NMX|&@69UN?|o6@N?G^L-(NcxKJ*VWX( ztY{*k*j-H{W@h<1W@gZ`3G-~Eak{kqy*`;8PNbw_JH6beW3s9uNP!6hS$Ar@xBlqs zj|GA{$L>(8WvLU@2Os$ZKCiBYp29m76(knm8WRaQ%o+(5xIzX#6u<`w=|TKQBn;p` z5%77LgYwT)l*D`aluyAm-a&)ug4m$>#nzh!}bJJ5%7BX|R z=Xhi8_|}5M%ial51xdt92)MMjaC<}RWpC%;D&!?fcV9vXxJKLt(b3))akCYr(^FBW zm3DNopylJ>%|tC#3mO_V4PzFHt%xH#a9C5XjThlf#pn!_mbO^g>Wj z5X8v^;^JZlO0c_nJGi~^Vs~(*|ErOI+IeZ=YUX0?Iz@S;XtolUBS z7z_rR-0j-JY@6ub1ha?CFDqc@VWKaiVDI0K9StunEWGjX^zeM=@zdAOb89rySIuv9 zf5>$#!?!5MV(&smRtgCjl|bUJui!|6k~qSK93o8GAS9H(zgE#O$Gz$Q>qe|33hMUb z>Brh=|JFoCaa(!tU$x9*k&u1R-O+U<|7|`9DHHaeR)O{(Ka&W`lFXFU`KNoJIa-M= z(SN%Rl0e5I$gxznR44t<7?Dwd;o$$zZ~$Tdk97XO#EwMe!!n$E#d1;4DKSqEDMn-P zOs}k=zd*{OM<~y)&w%n}x$%s=L<-i%exL6EBlr&8NN(&6X7K#uBuZ2#$2T~V{NP^g zYE6TXMB(sQG5}8Qm?Wf0gppx%=kZTHFO%5t263dk<+w2I-Fll2|gS{lZr#sMbDdrg|JsUucN%8|vSUr0Ms3#I?_K-!-T- zXz-7ERcT;7l+51rBZ3^#=6!0nS+Q^dKk9^3cdFJ6XazK45kFsuXHdGXk$ipFg|@rxMUNw*z;c??r5Se$$RhLDSZq*DN;$FR~7X&h@plo@Il;~ zI5LHw7k;Nr$YxY)tnR#>6}!7uf^R3N+1*~FIX^fJQLm@Y=%v4JHyH;Y7;g+se^dhb zIEm^0X3*2?Hk~1|#yJyTgU$}$`Do!Yd5yK-bvI{qV+SKI93hmBk+u4DTNQ*A+-20z zsCL9y8WA*Q7^7hdv{EVYxvS0VtZj@Myzmr*#_9%su3~?QwJCNr@`BIrd&I>oRH+!Ep&n@eDQ@oLCl{)zjBJ_ zOEEfrU2ad7hd!C!XNk;G(7;?A?gK(F_CzS>luR_2!aiMNDM6QSG-&yU~y%G zOLo}AI6dh%{V(R1N5zkxKDKf`z6`;w_a`5t1ka zrlQ5JdtEcy24|X>ShK@ z1fTDamBbyQFyjMephOoL?bn(GF|SQkb|~Hwbmj4>>?rEi$;^k3iv^8n2h#!23nU3) zd7wwYjy&(e^yziSB9%f4PQ+rOg{6jtxS>_?L%lMoyuWuPlBQxk#`nF_2k(cMU$>pT zM$KdfrH*q?BLf|M0s(dX$S>%EB%-nYXqY!BNVdXv=5yQIFHSyX;E&Fj8wZtC+SDx` z;)=-p$w#Gnd2cWKA0eZhMebm;gdm}m5*5FL(c&GCw$mkV z4*A84K15OQp4g`Z)5y$OwJPP(W=@e-{COpHaUT4z7IHzs6LlOz-dx0`7&zR8y z27Rv_xM9Q*ywRJO^o9K~>}alUb2!sd{90i4m7pHC=$Gs)_Jf=(#4=T36Xa~!j7@T& zo*2=J2s|OppmE?gxr2(lVs^Ma1RvPAZjD9}7r-HM5%}gf2s=-EfWX-EVhI4^4HBHy zLXQOJG(($~U9`#~Mp~~)3)Hg3dKi^6e(jlv#H+?;xo0YTAe5jjM%8=wqPR7o7wFW^ zsbh#k7(&3mm7(3*HPM%8b<}zH#_Msfx)U|(USakR*8BA=C0b>i&>n~f0W&kDy(*Gx zTCOp}03RI+PnpKBvHtD=AD!q<@JHLEzel(e>Y~8FX4X|p0m#`QldE6FY6cg=ncc)a zR{|moD+@Jhl?Gd`>+_;2%r_sn!XDKOx6Dq`B4%`oP`l2UlBXz`iL3;8OvZXUcdp2r zBmBmeh8q(?TN^}4u0cSptpoUR+kAb7miOa(NeloTDxfn61CrroBO|)L6EF;R_emu^r z4QSVi1Yle6g;E*mVk1y~@Pk@&CPW3VO6cvTRKOc=waN=sY7G#mQag($kp*G<(K>4+x8prJA zN~M(1mZe`d_US=uzo68>=bGw+R9VuWQ4dW`A|!ONNz@84RU9Wo&g`3(g;*i+BT32L+tf%6A=VrVODWSpc`ic$ zhIR0;#iv0Mv^jAGKi(hKya`30ZBR;CC8eHvM(er&*En@DEhx1LM}#XUia`15*7RPw z*eH}A^bKN+ZW>pN>2?`WxC5VshQxRVm>x;Ls+00hB*rZuL@YWwCSd+0o~xq)DyQ9r z7IGMvDeSIzh8nF@8`K2*EgyLHkZ2^yr|<{Tbw=TK`B8ks{bifd zg?x)vJ>!@@+MS$1S@@!AlmL5X0&Bf9UBm|H|5u4;c-n5%(WsC{d#yD;fv18fKQ5}o z{jyQp<1?-Y?qjha_xsRDLKpLWj~h)s`9kYnRXS~?VyLW!SMqA#7urN)S@};x_XmWYj_OPk47B2Xy7& zQK60OK|*Fi%ms3ojPuj(j-R4-h?X(6Re{nj4jCT+tM-&28rgQPOoysatBCm1JaNov z03t5cWCVKWGT@R$3NFBY|3K>Jw}LWVmO6QwmwYTqxX`_`7en77n&)OZEJP8Wck-GSh4l!O>2$#?4l2*2k_n*iu5 zD;3I0M`D12++|`gf@DIGl%D>Q22IHV9PoP6lzXI6Q6*nh;9#lXossdSD8RM~_HwbQ zP54>IpAZ%-mIzsPT$;HjeFbp8E`b8 zZ+-`U#A2bW1s$iD29CU6{AEE!cY(U)y>Q1vfs8tdpipW{MM57jAv+#{pH8#pLMPabUp(%xhoH`_iIe24sT<|?kUMxw3v=Y^k6kC8UUZLjYb&hx0TcO_c z#E2=HQZWtS^c&G{-*%P+JeAtQ1w1y)XRiPaZ^`=g5ebEvbiAaJwF~X@=@#f~jQHiV z!ooQ3nxF~`6OncXAt{hpH2eLK%5aWV@^tv0VE`idlF*H3Hjbv=8)`c)%e*04HD zG{L|p589Qw?}({VPxyHjG;vKNsyfRBx>Xws(QYH%Un2zcUn1uOB{JvLN;LPqa(734 zUXv4TyV~t{o29KDif}Ql8>vay-v!cIGbC!E6 z7V7MO^=l}weXjV4)vq@j491`CS>O8MPkf|&@t0o70(!+|lMxEI)ufm*@8e>})#{w! zB%EUKrPG~CCF*3xb$KUh3MqWphaOCr3U%$cIl{(U0EEMw&tL}3vNZ^Q(6|a4`^F8?|%X4MLA3S8qW;K)iB44MP|U70}YLL|Mzor z2C%>h4o<&rZycc;lrVRN>5#Y?;2vbucxC{i$|@&-m72z~LY*sI^|VThzawo6kN73 zv|x+b&oe8?HDeK#zkpCg+E_MVXyyv>_yAY|H}?}Y%kw8CbC}|IJ~m%(1U!re_hLb4 z{hCGC{SVAw&nB-+M*7A0{u&@chn~o}06J8U`TluxGX@RqZVH^aBv){fcYoH$0U4Qlp#gPHS{~4O))r zqLx+oqqeQ9M%n6rtT{O3J>yy;MzBU*FK{J#?z!>H&v?RR2?hY1bSSyU<2SQb4u77L zNX$Axy#)KJ+D^*C&HHLJP-+w2JY&L#f0P~W$=}lGtNVN}VLw2^ztZD@V7kD7RwRTH z7*R2+I=-y8?YwJ`+`Lw3SV1e9U`pq(`Ku=x7<<`ak^Z4Q7lLzM6bSGDX+kX{t`hDN zY`_$}lyDsnZQ0JX=J=47aJZERW(FNP52w@H?;S3)##^sY!$+E+2GD>96-C*uha4Vf zB_O5~{#EpB?N4Dl?A~z3T)+d1)V@xHJkrewlJi5;>l-(=5T&mZyXZ^SaRA zO5M~>7$l30t1u_4So$fRbj<(pW5}sG9_p5b(g_O!Hct?f5{L&JKs0o zDWj$BY8*CFJJs7uOW}=r?y}r>3pxdn<_z49#c{4Tf9|C0u`24yEv5mJO3<$gw6VX> zZv&v#MB-_IQaE+K+++`ZH?{!OA7(7PK3w;kMMi>;i{*t6HML+&^OfskQP79jWrRO5 ziDolvJO3-KU`z2M;&&_RH)(KMJYj*;JavG<>-F9!&mr{Dnht+BYS{5MDo5)dO-jD~ z)MJA!3eh>Atu#;SD;_#dTx!Yt&_O;1;9s8%X23XgpoNh5%eE-LBC~mNI$A>yW91^0t$B&e=A9UWUgeHSJtIp#DAS$Dc6+@0n z1t%GisF$h3hDM}3yNe*RFFTH546L-q9d@arPIv7>ERG394I;4XPwEoX)V#3ZmTX@R z>Fy8gHy$gR6HW*&G(i0lYQnxx5{`tTK<*^np1W!^(SkE}E+Rs=FZZ$GAb{ixwa+}E zcS~!8uB`?nBJ^}y!_|2F{r)fV8f723I3R8VgyRiR)&|yZAplJ=K`6>8*JlsWQm?S8 zw~2Oz6bVDzf=2*`pR%#9mAP-4eftI7<@*(nFL~n`SA^PYxGp*09qm_ zc@Kz+VO#(Z71t|TOiq8N!_c#Fm6+TdZDeaErcAC4%e^U2HOjN;)nR+(c$*@=vPv7* z3h6W4+zAf_mNdJ2NwGZbQprn_SSJBsU>D5$KqU$<%u>fTR#c?5%0D0KHx!V5k$%44 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 U_#_GT`}5s1MOB50CuSl42V!ntxBvhE literal 0 HcmV?d00001 diff --git a/static/img/integrations/github-ocean/SelfHostedOrganizaionView.png b/static/img/integrations/github-ocean/SelfHostedOrganizaionView.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb8a75ea1a9184002ce773d38edb954821a88cb GIT binary patch literal 115143 zcmaf51zc2F7pGGML16(25lLz38l|L5Kw70FN4iTyRFLjgI)_FYMI;6ox=Ueb7^H^g zdxPuB?ze$IVVHUEzI)F-_r(AF53ki!|jPOz{$n94wzXS%U58 zQR6;-0(N#1XJ9}*=#Q@-^E7j_{PiR|$KRI)ERYNJ2^SA1H`m|Y=45I954WK{`ElF% zx_&%P3^kaDnx&hWjjpt%Eg)53Y7)XcJYwgM`M*zoP4vf|T8?H8Qea!)Mkk41+w%L( z7eD;#jpvVi`0J58!aR2_KJ&sy7j8wZK}6NT5_sHWln^C=dH&yfzh5uLg_7_EiT~Kn z^LK&$lpqk}`a?G)2zJ-ykZ5QiG12_zb_5FNbSSNx7xZdhU+>xI@nNp^ z9J8=sS{t--Hn?{W4IPUF^snFW@cqfVlN8+UM@Qdd@I%AEqyN`$AFvt1=tNh1TCo1> zN_s!gGs0vc`(*NlkA^bQm;ZAno21+U+x^bvarodX|2}6BntwVu-pyX>!Ck4Z|FJ$` zBx8( zw+J{$$eDo2Dz_N?=M3oYV;f+31XP%_kpJga%+@LJEbz z|5SzjYxKRVaWAp|Lt{{SKtQrY)Z_8)!GB)r2S$&>^EaBg(Jh z2o_Jm|J5tJ*TL*JczAe7uTb82yg z1_mca!woIttK{fd1j_WBoGJ=&tT%OxTuOIV#tf+ha=Fyi)dRItzm?3*&ztHtm=}el zamzQJZpg_Cd5vOug;4}aE≤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 Q>%iYp4TB>Yzn#7EUq7!$n*aa+ literal 0 HcmV?d00001 diff --git a/static/img/integrations/github-ocean/SelfHostedOrganizationSettings.png b/static/img/integrations/github-ocean/SelfHostedOrganizationSettings.png new file mode 100644 index 0000000000000000000000000000000000000000..3135d8f5f0870415493174729455bd232dedf052 GIT binary patch literal 163935 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 Date: Wed, 2 Jul 2025 23:25:18 +0100 Subject: [PATCH 41/42] Redo change to settings image --- .../SelfHostedOrganizationSettings.png | Bin 163935 -> 165120 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/img/integrations/github-ocean/SelfHostedOrganizationSettings.png b/static/img/integrations/github-ocean/SelfHostedOrganizationSettings.png index 3135d8f5f0870415493174729455bd232dedf052..9325771c387b711da3cf38992155dfeaece28b69 100644 GIT binary patch delta 86100 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ĕ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 CL*Fz2 delta 85317 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 z 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 Date: Thu, 3 Jul 2025 11:11:34 +0100 Subject: [PATCH 42/42] Update integration name in helm installation --- .../git/github-ocean/installation/installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/installation.md b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/installation.md index 4f67f51a2..a50281121 100644 --- a/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/installation.md +++ b/docs/build-your-software-catalog/sync-data-to-catalog/git/github-ocean/installation/installation.md @@ -72,7 +72,7 @@ For details about the available parameters for the installation, see the table b - +