Skip to content

[codex] Add portal management OpenAPI contracts#28

Merged
nobodyiam merged 1 commit into
mainfrom
codex/portal-user-openapi
May 25, 2026
Merged

[codex] Add portal management OpenAPI contracts#28
nobodyiam merged 1 commit into
mainfrom
codex/portal-user-openapi

Conversation

@nobodyiam
Copy link
Copy Markdown
Member

Summary

  • Add Portal Management and Portal User Management OpenAPI paths and OpenUserDTO for the remaining Apollo Portal migration surface.
  • Regenerate Java, Spring Boot 2, Python, TypeScript, and Rust artifacts from the updated v0.3.4 spec.
  • Preserve generated Java/Spring compatibility overloads for existing OpenAPI callers and keep generated Python HEAD-operation naming compatible.

Compatibility

  • Existing OpenAPI operations remain compatible with v0.3.3; the local compatibility check passed for 97 operations and 40 schemas.
  • The new contracts are additive and are intended for the matching Apollo Portal migration PR.

Tests

  • ./generate.sh
  • (cd java-client && mvn -q -DskipTests package)
  • (cd spring-boot2 && mvn -q -DskipTests package)
  • python3 -m compileall -q python/apollo_openapi python/test
  • typos
  • OpenAPI compatibility check against v0.3.3
  • Apollo Portal validation with local spec override: ./mvnw -Dapollo.openapi.spec.url=/Users/jason/git/mine/apollo-openapi/apollo-openapi.yaml clean test
  • Apollo Portal UI e2e per .github/workflows/portal-ui-e2e.yml: 19 passed

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 25, 2026

Important

Review skipped

Too many files!

This PR contains 293 files, which is 143 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 33ba94bb-1c6b-42ca-8a28-07376be166a7

📥 Commits

Reviewing files that changed from the base of the PR and between 05d9b3f and 6823047.

📒 Files selected for processing (293)
  • CHANGELOG.md
  • apollo-openapi.yaml
  • generate.sh
  • java-client/.openapi-generator/FILES
  • java-client/README.md
  • java-client/api/openapi.yaml
  • java-client/build.gradle
  • java-client/build.sbt
  • java-client/docs/AccessKeyManagementApi.md
  • java-client/docs/OpenUserDTO.md
  • java-client/docs/PortalManagementApi.md
  • java-client/docs/PortalUserManagementApi.md
  • java-client/pom.xml
  • java-client/src/main/java/org/openapitools/client/ApiClient.java
  • java-client/src/main/java/org/openapitools/client/Configuration.java
  • java-client/src/main/java/org/openapitools/client/JSON.java
  • java-client/src/main/java/org/openapitools/client/api/AccessKeyManagementApi.java
  • java-client/src/main/java/org/openapitools/client/api/PortalManagementApi.java
  • java-client/src/main/java/org/openapitools/client/api/PortalUserManagementApi.java
  • java-client/src/main/java/org/openapitools/client/model/OpenUserDTO.java
  • java-client/src/test/java/org/openapitools/client/api/PortalManagementApiTest.java
  • java-client/src/test/java/org/openapitools/client/api/PortalUserManagementApiTest.java
  • java-client/src/test/java/org/openapitools/client/model/OpenUserDTOTest.java
  • python/.openapi-generator/FILES
  • python/README.md
  • python/apollo_openapi/__init__.py
  • python/apollo_openapi/api_client.py
  • python/apollo_openapi/apis/path_to_api.py
  • python/apollo_openapi/apis/paths/openapi_v1_apollo_audit_logs.py
  • python/apollo_openapi/apis/paths/openapi_v1_apollo_audit_logs_by_name_or_type_or_operator.py
  • python/apollo_openapi/apis/paths/openapi_v1_apollo_audit_logs_data_influences_field.py
  • python/apollo_openapi/apis/paths/openapi_v1_apollo_audit_logs_op_name.py
  • python/apollo_openapi/apis/paths/openapi_v1_apollo_audit_properties.py
  • python/apollo_openapi/apis/paths/openapi_v1_apollo_audit_trace.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_import.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_commits.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_export.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_import.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_releases_histories.py
  • python/apollo_openapi/apis/paths/openapi_v1_apps_search_by_appid_or_name.py
  • python/apollo_openapi/apis/paths/openapi_v1_configs_export.py
  • python/apollo_openapi/apis/paths/openapi_v1_configs_import.py
  • python/apollo_openapi/apis/paths/openapi_v1_consumer_tokens_by_app_id.py
  • python/apollo_openapi/apis/paths/openapi_v1_consumers.py
  • python/apollo_openapi/apis/paths/openapi_v1_consumers_by_app_id.py
  • python/apollo_openapi/apis/paths/openapi_v1_consumers_token_assign_role.py
  • python/apollo_openapi/apis/paths/openapi_v1_favorites.py
  • python/apollo_openapi/apis/paths/openapi_v1_favorites_favorite_id.py
  • python/apollo_openapi/apis/paths/openapi_v1_global_search_item_info_by_key_or_value.py
  • python/apollo_openapi/apis/paths/openapi_v1_import.py
  • python/apollo_openapi/apis/paths/openapi_v1_page_settings.py
  • python/apollo_openapi/apis/paths/openapi_v1_server_envs_env_config_db_config.py
  • python/apollo_openapi/apis/paths/openapi_v1_server_envs_env_config_db_config_find_all_config.py
  • python/apollo_openapi/apis/paths/openapi_v1_server_portal_db_config.py
  • python/apollo_openapi/apis/paths/openapi_v1_server_portal_db_config_find_all_config.py
  • python/apollo_openapi/apis/paths/openapi_v1_system_info.py
  • python/apollo_openapi/apis/paths/openapi_v1_system_info_health.py
  • python/apollo_openapi/apis/paths/openapi_v1_user.py
  • python/apollo_openapi/apis/paths/openapi_v1_users.py
  • python/apollo_openapi/apis/paths/openapi_v1_users_enabled.py
  • python/apollo_openapi/apis/tag_to_api.py
  • python/apollo_openapi/apis/tags/__init__.py
  • python/apollo_openapi/apis/tags/portal_management_api.py
  • python/apollo_openapi/apis/tags/portal_user_management_api.py
  • python/apollo_openapi/configuration.py
  • python/apollo_openapi/model/open_user_dto.py
  • python/apollo_openapi/model/open_user_dto.pyi
  • python/apollo_openapi/models/__init__.py
  • python/apollo_openapi/paths/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs/get.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_by_name_or_type_or_operator/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_by_name_or_type_or_operator/get.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_by_name_or_type_or_operator/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_data_influences_field/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_data_influences_field/get.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_data_influences_field/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_op_name/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_op_name/get.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_logs_op_name/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_properties/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_properties/get.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_properties/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_trace/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_trace/get.py
  • python/apollo_openapi/paths/openapi_v1_apollo_audit_trace/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation/put.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_accesskeys_access_key_id_deactivation/put.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export/get.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export/head.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export/head.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_import/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_import/post.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_import/post.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_commits/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_commits/get.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_commits/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_export/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_export/get.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_export/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_import/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_import/post.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_import/post.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_releases_histories/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_releases_histories/get.py
  • python/apollo_openapi/paths/openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_releases_histories/get.pyi
  • python/apollo_openapi/paths/openapi_v1_apps_search_by_appid_or_name/__init__.py
  • python/apollo_openapi/paths/openapi_v1_apps_search_by_appid_or_name/get.py
  • python/apollo_openapi/paths/openapi_v1_apps_search_by_appid_or_name/get.pyi
  • python/apollo_openapi/paths/openapi_v1_configs_export/__init__.py
  • python/apollo_openapi/paths/openapi_v1_configs_export/get.py
  • python/apollo_openapi/paths/openapi_v1_configs_export/get.pyi
  • python/apollo_openapi/paths/openapi_v1_configs_import/__init__.py
  • python/apollo_openapi/paths/openapi_v1_configs_import/post.py
  • python/apollo_openapi/paths/openapi_v1_configs_import/post.pyi
  • python/apollo_openapi/paths/openapi_v1_consumer_tokens_by_app_id/__init__.py
  • python/apollo_openapi/paths/openapi_v1_consumer_tokens_by_app_id/get.py
  • python/apollo_openapi/paths/openapi_v1_consumer_tokens_by_app_id/get.pyi
  • python/apollo_openapi/paths/openapi_v1_consumers/__init__.py
  • python/apollo_openapi/paths/openapi_v1_consumers/get.py
  • python/apollo_openapi/paths/openapi_v1_consumers/get.pyi
  • python/apollo_openapi/paths/openapi_v1_consumers/post.py
  • python/apollo_openapi/paths/openapi_v1_consumers/post.pyi
  • python/apollo_openapi/paths/openapi_v1_consumers_by_app_id/__init__.py
  • python/apollo_openapi/paths/openapi_v1_consumers_by_app_id/delete.py
  • python/apollo_openapi/paths/openapi_v1_consumers_by_app_id/delete.pyi
  • python/apollo_openapi/paths/openapi_v1_consumers_token_assign_role/__init__.py
  • python/apollo_openapi/paths/openapi_v1_consumers_token_assign_role/post.py
  • python/apollo_openapi/paths/openapi_v1_consumers_token_assign_role/post.pyi
  • python/apollo_openapi/paths/openapi_v1_favorites/__init__.py
  • python/apollo_openapi/paths/openapi_v1_favorites/get.py
  • python/apollo_openapi/paths/openapi_v1_favorites/get.pyi
  • python/apollo_openapi/paths/openapi_v1_favorites/post.py
  • python/apollo_openapi/paths/openapi_v1_favorites/post.pyi
  • python/apollo_openapi/paths/openapi_v1_favorites_favorite_id/__init__.py
  • python/apollo_openapi/paths/openapi_v1_favorites_favorite_id/delete.py
  • python/apollo_openapi/paths/openapi_v1_favorites_favorite_id/delete.pyi
  • python/apollo_openapi/paths/openapi_v1_favorites_favorite_id/put.py
  • python/apollo_openapi/paths/openapi_v1_favorites_favorite_id/put.pyi
  • python/apollo_openapi/paths/openapi_v1_global_search_item_info_by_key_or_value/__init__.py
  • python/apollo_openapi/paths/openapi_v1_global_search_item_info_by_key_or_value/get.py
  • python/apollo_openapi/paths/openapi_v1_global_search_item_info_by_key_or_value/get.pyi
  • python/apollo_openapi/paths/openapi_v1_import/__init__.py
  • python/apollo_openapi/paths/openapi_v1_import/post.py
  • python/apollo_openapi/paths/openapi_v1_import/post.pyi
  • python/apollo_openapi/paths/openapi_v1_page_settings/__init__.py
  • python/apollo_openapi/paths/openapi_v1_page_settings/get.py
  • python/apollo_openapi/paths/openapi_v1_page_settings/get.pyi
  • python/apollo_openapi/paths/openapi_v1_server_envs_env_config_db_config/__init__.py
  • python/apollo_openapi/paths/openapi_v1_server_envs_env_config_db_config/delete.py
  • python/apollo_openapi/paths/openapi_v1_server_envs_env_config_db_config/delete.pyi
  • python/apollo_openapi/paths/openapi_v1_server_envs_env_config_db_config/post.py
  • python/apollo_openapi/paths/openapi_v1_server_envs_env_config_db_config/post.pyi
  • python/apollo_openapi/paths/openapi_v1_server_envs_env_config_db_config_find_all_config/__init__.py
  • python/apollo_openapi/paths/openapi_v1_server_envs_env_config_db_config_find_all_config/get.py
  • python/apollo_openapi/paths/openapi_v1_server_envs_env_config_db_config_find_all_config/get.pyi
  • python/apollo_openapi/paths/openapi_v1_server_portal_db_config/__init__.py
  • python/apollo_openapi/paths/openapi_v1_server_portal_db_config/delete.py
  • python/apollo_openapi/paths/openapi_v1_server_portal_db_config/delete.pyi
  • python/apollo_openapi/paths/openapi_v1_server_portal_db_config/post.py
  • python/apollo_openapi/paths/openapi_v1_server_portal_db_config/post.pyi
  • python/apollo_openapi/paths/openapi_v1_server_portal_db_config_find_all_config/__init__.py
  • python/apollo_openapi/paths/openapi_v1_server_portal_db_config_find_all_config/get.py
  • python/apollo_openapi/paths/openapi_v1_server_portal_db_config_find_all_config/get.pyi
  • python/apollo_openapi/paths/openapi_v1_system_info/__init__.py
  • python/apollo_openapi/paths/openapi_v1_system_info/get.py
  • python/apollo_openapi/paths/openapi_v1_system_info/get.pyi
  • python/apollo_openapi/paths/openapi_v1_system_info_health/__init__.py
  • python/apollo_openapi/paths/openapi_v1_system_info_health/get.py
  • python/apollo_openapi/paths/openapi_v1_system_info_health/get.pyi
  • python/apollo_openapi/paths/openapi_v1_user/__init__.py
  • python/apollo_openapi/paths/openapi_v1_user/get.py
  • python/apollo_openapi/paths/openapi_v1_user/get.pyi
  • python/apollo_openapi/paths/openapi_v1_users/__init__.py
  • python/apollo_openapi/paths/openapi_v1_users/get.py
  • python/apollo_openapi/paths/openapi_v1_users/get.pyi
  • python/apollo_openapi/paths/openapi_v1_users/post.py
  • python/apollo_openapi/paths/openapi_v1_users/post.pyi
  • python/apollo_openapi/paths/openapi_v1_users_enabled/__init__.py
  • python/apollo_openapi/paths/openapi_v1_users_enabled/put.py
  • python/apollo_openapi/paths/openapi_v1_users_enabled/put.pyi
  • python/docs/apis/tags/AccessKeyManagementApi.md
  • python/docs/apis/tags/PortalManagementApi.md
  • python/docs/apis/tags/PortalUserManagementApi.md
  • python/docs/models/OpenUserDTO.md
  • python/setup.py
  • python/test/test_models/test_open_user_dto.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_logs/__init__.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_logs/test_get.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_logs_by_name_or_type_or_operator/__init__.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_logs_by_name_or_type_or_operator/test_get.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_logs_data_influences_field/__init__.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_logs_data_influences_field/test_get.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_logs_op_name/__init__.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_logs_op_name/test_get.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_properties/__init__.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_properties/test_get.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_trace/__init__.py
  • python/test/test_paths/test_openapi_v1_apollo_audit_trace/test_get.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export/__init__.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export/test_get.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_export/test_head.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_import/__init__.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_import/test_post.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_commits/__init__.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_commits/test_get.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_export/__init__.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_export/test_get.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_import/__init__.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_items_import/test_post.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_releases_histories/__init__.py
  • python/test/test_paths/test_openapi_v1_apps_app_id_envs_env_clusters_cluster_name_namespaces_namespace_name_releases_histories/test_get.py
  • python/test/test_paths/test_openapi_v1_apps_search_by_appid_or_name/__init__.py
  • python/test/test_paths/test_openapi_v1_apps_search_by_appid_or_name/test_get.py
  • python/test/test_paths/test_openapi_v1_configs_export/__init__.py
  • python/test/test_paths/test_openapi_v1_configs_export/test_get.py
  • python/test/test_paths/test_openapi_v1_configs_import/__init__.py
  • python/test/test_paths/test_openapi_v1_configs_import/test_post.py
  • python/test/test_paths/test_openapi_v1_consumer_tokens_by_app_id/__init__.py
  • python/test/test_paths/test_openapi_v1_consumer_tokens_by_app_id/test_get.py
  • python/test/test_paths/test_openapi_v1_consumers/__init__.py
  • python/test/test_paths/test_openapi_v1_consumers/test_get.py
  • python/test/test_paths/test_openapi_v1_consumers/test_post.py
  • python/test/test_paths/test_openapi_v1_consumers_by_app_id/__init__.py
  • python/test/test_paths/test_openapi_v1_consumers_by_app_id/test_delete.py
  • python/test/test_paths/test_openapi_v1_consumers_token_assign_role/__init__.py
  • python/test/test_paths/test_openapi_v1_consumers_token_assign_role/test_post.py
  • python/test/test_paths/test_openapi_v1_favorites/__init__.py
  • python/test/test_paths/test_openapi_v1_favorites/test_get.py
  • python/test/test_paths/test_openapi_v1_favorites/test_post.py
  • python/test/test_paths/test_openapi_v1_favorites_favorite_id/__init__.py
  • python/test/test_paths/test_openapi_v1_favorites_favorite_id/test_delete.py
  • python/test/test_paths/test_openapi_v1_favorites_favorite_id/test_put.py
  • python/test/test_paths/test_openapi_v1_global_search_item_info_by_key_or_value/__init__.py
  • python/test/test_paths/test_openapi_v1_global_search_item_info_by_key_or_value/test_get.py
  • python/test/test_paths/test_openapi_v1_import/__init__.py
  • python/test/test_paths/test_openapi_v1_import/test_post.py
  • python/test/test_paths/test_openapi_v1_page_settings/__init__.py
  • python/test/test_paths/test_openapi_v1_page_settings/test_get.py
  • python/test/test_paths/test_openapi_v1_server_envs_env_config_db_config/__init__.py
  • python/test/test_paths/test_openapi_v1_server_envs_env_config_db_config/test_delete.py
  • python/test/test_paths/test_openapi_v1_server_envs_env_config_db_config/test_post.py
  • python/test/test_paths/test_openapi_v1_server_envs_env_config_db_config_find_all_config/__init__.py
  • python/test/test_paths/test_openapi_v1_server_envs_env_config_db_config_find_all_config/test_get.py
  • python/test/test_paths/test_openapi_v1_server_portal_db_config/__init__.py
  • python/test/test_paths/test_openapi_v1_server_portal_db_config/test_delete.py
  • python/test/test_paths/test_openapi_v1_server_portal_db_config/test_post.py
  • python/test/test_paths/test_openapi_v1_server_portal_db_config_find_all_config/__init__.py
  • python/test/test_paths/test_openapi_v1_server_portal_db_config_find_all_config/test_get.py
  • python/test/test_paths/test_openapi_v1_system_info/__init__.py
  • python/test/test_paths/test_openapi_v1_system_info/test_get.py
  • python/test/test_paths/test_openapi_v1_system_info_health/__init__.py
  • python/test/test_paths/test_openapi_v1_system_info_health/test_get.py
  • python/test/test_paths/test_openapi_v1_user/__init__.py
  • python/test/test_paths/test_openapi_v1_user/test_get.py
  • python/test/test_paths/test_openapi_v1_users/__init__.py
  • python/test/test_paths/test_openapi_v1_users/test_get.py
  • python/test/test_paths/test_openapi_v1_users/test_post.py
  • python/test/test_paths/test_openapi_v1_users_enabled/__init__.py
  • python/test/test_paths/test_openapi_v1_users_enabled/test_put.py
  • rust/.openapi-generator/FILES
  • rust/Cargo.toml
  • rust/README.md
  • rust/docs/OpenUserDto.md
  • rust/src/apis/configuration.rs
  • rust/src/models/mod.rs
  • rust/src/models/open_user_dto.rs
  • spring-boot2/.openapi-generator/FILES
  • spring-boot2/pom.xml
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/AccessKeyManagementApi.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/AccessKeyManagementApiDelegate.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/PortalManagementApi.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/PortalManagementApiController.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/PortalManagementApiDelegate.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/PortalUserManagementApi.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/PortalUserManagementApiController.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/PortalUserManagementApiDelegate.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/api/ReleaseManagementApiDelegate.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/config/SpringDocConfiguration.java
  • spring-boot2/src/main/java/com/apollo/openapi/server/model/OpenUserDTO.java
  • spring-boot2/src/main/resources/openapi.yaml
  • typescript/.openapi-generator/FILES
  • typescript/README.md
  • typescript/package.json
  • typescript/src/apis/PortalManagementApi.ts
  • typescript/src/apis/PortalUserManagementApi.ts
  • typescript/src/apis/index.ts
  • typescript/src/models/OpenUserDTO.ts
  • typescript/src/models/index.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/portal-user-openapi

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@nobodyiam nobodyiam marked this pull request as ready for review May 25, 2026 01:33
Copilot AI review requested due to automatic review settings May 25, 2026 01:33
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copy link
Copy Markdown
Member Author

Thanks for checking this PR.

The large diff is expected here because this is a spec-first OpenAPI update and the generated clients/servers are committed for Java, Spring Boot 2, Python, TypeScript, and Rust. The hand-authored part is primarily the OpenAPI contract plus generator compatibility adjustments; the rest is generated output.

I validated the generated artifacts and compatibility locally with:

  • ./generate.sh
  • (cd java-client && mvn -q -DskipTests package)
  • (cd spring-boot2 && mvn -q -DskipTests package)
  • python3 -m compileall -q python/apollo_openapi python/test
  • typos
  • OpenAPI compatibility check against v0.3.3 covering 97 existing operations and 40 schemas
  • Apollo Portal validation with the local spec override: ./mvnw -Dapollo.openapi.spec.url=/Users/jason/git/mine/apollo-openapi/apollo-openapi.yaml clean test
  • Apollo Portal UI e2e per .github/workflows/portal-ui-e2e.yml: 19 passed

Given the generated SDK size, I do not plan to split the generated language artifacts out of this contract PR.

@nobodyiam nobodyiam merged commit 5d1b1e5 into main May 25, 2026
4 checks passed
@nobodyiam nobodyiam deleted the codex/portal-user-openapi branch May 25, 2026 01:36
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6823047212

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apollo-openapi.yaml
Comment on lines +4853 to +4857
summary: 获取当前Portal用户(new added)
operationId: getCurrentUser
deprecated: false
description: GET /openapi/v1/user
tags:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Override token auth on portal-session operations

This operation is documented as "Portal用户登录态" but inherits the top-level ApiKeyAuth requirement because no per-operation security override is defined. That makes the contract self-contradictory (session-only semantics vs token-required auth) and drives generated clients/docs toward the wrong auth flow for these new Portal endpoints. Add an explicit operation-level security definition (for example security: [] or a cookie/session scheme) for the Portal session APIs so callers are not forced into Authorization-token auth.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants