From 7c09f0d8cf14dd3494f73d8bab69a5b9add1701b Mon Sep 17 00:00:00 2001 From: Angel Marin Date: Tue, 19 May 2026 12:52:19 +0200 Subject: [PATCH] HYPERFLEET-1103 - feat:restructure TypeSpec sources into core, gcp Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/ci.yml | 8 +-- .github/workflows/release.yml | 4 +- aliases-core.tsp | 9 ---- aliases-gcp.tsp | 8 --- aliases.tsp | 1 - build-schema.sh | 46 ++++++----------- core/main.tsp | 50 +++++++++++++++++++ .../models}/cluster/example_cluster.tsp | 6 +-- .../models}/cluster/example_patch.tsp | 4 +- .../models}/cluster/example_post.tsp | 4 +- .../models}/cluster/model.tsp | 2 +- .../models}/nodepool/example_nodepool.tsp | 6 +-- .../models}/nodepool/example_patch.tsp | 4 +- .../models}/nodepool/example_post.tsp | 4 +- .../models}/nodepool/model.tsp | 2 +- .../services}/statuses-internal.tsp | 6 +-- main.tsp => gcp/main.tsp | 19 ++++--- .../models}/cluster/example_cluster.tsp | 6 +-- .../models}/cluster/example_patch.tsp | 4 +- .../models}/cluster/example_post.tsp | 4 +- {models-gcp => gcp/models}/cluster/model.tsp | 0 .../models}/nodepool/example_nodepool.tsp | 6 +-- .../models}/nodepool/example_patch.tsp | 4 +- .../models}/nodepool/example_post.tsp | 4 +- {models-gcp => gcp/models}/nodepool/model.tsp | 0 models/compatibility/README.md | 6 --- schemas/core/openapi.yaml | 2 +- schemas/core/swagger.yaml | 2 +- {models => shared/models}/clusters/model.tsp | 5 +- {models => shared/models}/common/model.tsp | 0 {models => shared/models}/nodepools/model.tsp | 5 +- .../statuses/example_adapter_status.tsp | 6 +-- {models => shared/models}/statuses/model.tsp | 0 {services => shared/services}/clusters.tsp | 2 +- {services => shared/services}/nodepools.tsp | 4 +- {services => shared/services}/statuses.tsp | 4 +- 36 files changed, 130 insertions(+), 117 deletions(-) delete mode 100644 aliases-core.tsp delete mode 100644 aliases-gcp.tsp delete mode 120000 aliases.tsp create mode 100644 core/main.tsp rename {models-core => core/models}/cluster/example_cluster.tsp (97%) rename {models-core => core/models}/cluster/example_patch.tsp (58%) rename {models-core => core/models}/cluster/example_post.tsp (70%) rename {models-core => core/models}/cluster/model.tsp (88%) rename {models-core => core/models}/nodepool/example_nodepool.tsp (97%) rename {models-core => core/models}/nodepool/example_patch.tsp (58%) rename {models-core => core/models}/nodepool/example_post.tsp (68%) rename {models-core => core/models}/nodepool/model.tsp (88%) rename {services => core/services}/statuses-internal.tsp (92%) rename main.tsp => gcp/main.tsp (64%) rename {models-gcp => gcp/models}/cluster/example_cluster.tsp (97%) rename {models-gcp => gcp/models}/cluster/example_patch.tsp (89%) rename {models-gcp => gcp/models}/cluster/example_post.tsp (90%) rename {models-gcp => gcp/models}/cluster/model.tsp (100%) rename {models-gcp => gcp/models}/nodepool/example_nodepool.tsp (97%) rename {models-gcp => gcp/models}/nodepool/example_patch.tsp (88%) rename {models-gcp => gcp/models}/nodepool/example_post.tsp (89%) rename {models-gcp => gcp/models}/nodepool/model.tsp (100%) delete mode 100644 models/compatibility/README.md rename {models => shared/models}/clusters/model.tsp (97%) rename {models => shared/models}/common/model.tsp (100%) rename {models => shared/models}/nodepools/model.tsp (97%) rename {models => shared/models}/statuses/example_adapter_status.tsp (97%) rename {models => shared/models}/statuses/model.tsp (100%) rename {services => shared/services}/clusters.tsp (99%) rename {services => shared/services}/nodepools.tsp (97%) rename {services => shared/services}/statuses.tsp (95%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f70281..ded40c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,9 +47,9 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - CURRENT=$(grep -oP '(?<=version: ")[^"]+' main.tsp) + CURRENT=$(grep -oP '(?<=version: ")[^"]+' core/main.tsp) if [ -z "$CURRENT" ]; then - echo "::error::Failed to extract version from main.tsp — check the @info decorator format" >&2 + echo "::error::Failed to extract version from core/main.tsp — check the @info decorator format" >&2 exit 1 fi LATEST=$(gh release list --limit 1 --json tagName --jq '.[0].tagName' 2>/dev/null | sed 's/^v//' || echo "") @@ -59,10 +59,10 @@ jobs: fi HIGHEST=$(printf '%s\n%s\n' "$CURRENT" "$LATEST" | sort -V | tail -1) if [ "$CURRENT" = "$LATEST" ]; then - echo "::error::Version '$CURRENT' matches latest release tag 'v$LATEST' — bump the version in main.tsp before merging." + echo "::error::Version '$CURRENT' matches latest release tag 'v$LATEST' — bump the version in core/main.tsp before merging." exit 1 elif [ "$HIGHEST" != "$CURRENT" ]; then - echo "::error::Version '$CURRENT' is lower than latest release 'v$LATEST' — version in main.tsp must be strictly greater." + echo "::error::Version '$CURRENT' is lower than latest release 'v$LATEST' — version in core/main.tsp must be strictly greater." exit 1 fi echo "Version bump OK: $LATEST → $CURRENT" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d1f9bb6..28c4e1a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,9 +28,9 @@ jobs: - name: Extract version id: version run: | - VERSION=$(grep -oP '(?<=version: ")[^"]+' main.tsp) + VERSION=$(grep -oP '(?<=version: ")[^"]+' core/main.tsp) if [ -z "$VERSION" ]; then - echo "::error::Failed to extract version from main.tsp — check the @info decorator format" >&2 + echo "::error::Failed to extract version from core/main.tsp — check the @info decorator format" >&2 exit 1 fi echo "version=$VERSION" >> "$GITHUB_OUTPUT" diff --git a/aliases-core.tsp b/aliases-core.tsp deleted file mode 100644 index e0943ba..0000000 --- a/aliases-core.tsp +++ /dev/null @@ -1,9 +0,0 @@ -import "./models-core/cluster/model.tsp"; -import "./models-core/cluster/example_cluster.tsp"; -import "./models-core/cluster/example_post.tsp"; -import "./models-core/cluster/example_patch.tsp"; -import "./models-core/nodepool/model.tsp"; -import "./models-core/nodepool/example_nodepool.tsp"; -import "./models-core/nodepool/example_post.tsp"; -import "./models-core/nodepool/example_patch.tsp"; -import "./services/statuses-internal.tsp"; \ No newline at end of file diff --git a/aliases-gcp.tsp b/aliases-gcp.tsp deleted file mode 100644 index 4965061..0000000 --- a/aliases-gcp.tsp +++ /dev/null @@ -1,8 +0,0 @@ -import "./models-gcp/cluster/model.tsp"; -import "./models-gcp/cluster/example_cluster.tsp"; -import "./models-gcp/cluster/example_post.tsp"; -import "./models-gcp/cluster/example_patch.tsp"; -import "./models-gcp/nodepool/model.tsp"; -import "./models-gcp/nodepool/example_nodepool.tsp"; -import "./models-gcp/nodepool/example_post.tsp"; -import "./models-gcp/nodepool/example_patch.tsp"; diff --git a/aliases.tsp b/aliases.tsp deleted file mode 120000 index efa1472..0000000 --- a/aliases.tsp +++ /dev/null @@ -1 +0,0 @@ -aliases-gcp.tsp \ No newline at end of file diff --git a/build-schema.sh b/build-schema.sh index 0126ffc..7b3eb0c 100755 --- a/build-schema.sh +++ b/build-schema.sh @@ -58,29 +58,20 @@ done SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" -# Define the aliases file for the provider -ALIASES_FILE="aliases-${PROVIDER}.tsp" - -# Check if the aliases file exists -if [ ! -f "$ALIASES_FILE" ]; then - echo -e "${RED}Error: Provider aliases file not found: ${ALIASES_FILE}${NC}" +# Resolve the provider entry point +PROVIDER_ENTRY="${PROVIDER}/main.tsp" +if [ ! -f "$PROVIDER_ENTRY" ]; then + echo -e "${RED}Error: Provider entry point not found: ${PROVIDER_ENTRY}${NC}" echo "" echo "Available providers:" - for file in aliases-*.tsp; do - if [ -f "$file" ]; then - provider_name=$(echo "$file" | sed 's/aliases-\(.*\)\.tsp/\1/') - echo " - $provider_name" + for dir in */; do + if [ -f "${dir}main.tsp" ]; then + echo " - ${dir%/}" fi done exit 1 fi -# Check if main.tsp exists -if [ ! -f "main.tsp" ]; then - echo -e "${RED}Error: main.tsp not found in current directory${NC}" - exit 1 -fi - # Check if tsp command is available if [ ! -x "${SCRIPT_DIR}/node_modules/.bin/tsp" ]; then echo -e "${RED}Error: tsp not found in node_modules. Run 'npm install' first.${NC}" @@ -105,24 +96,15 @@ else fi echo "" -# Step 1: Re-link aliases.tsp to the provider-specific aliases file -echo -e "${YELLOW}Step 1: Linking aliases.tsp to ${ALIASES_FILE}${NC}" -if [ -L "aliases.tsp" ] || [ -f "aliases.tsp" ]; then - rm -f aliases.tsp -fi -ln -sf "$ALIASES_FILE" aliases.tsp -echo -e "${GREEN}✓ Linked aliases.tsp → ${ALIASES_FILE}${NC}" -echo "" - -# Step 2: Create output directory for the provider +# Step 1: Create output directory for the provider OUTPUT_DIR="schemas/${PROVIDER}" -echo -e "${YELLOW}Step 2: Preparing output directory...${NC}" +echo -e "${YELLOW}Step 1: Preparing output directory...${NC}" mkdir -p "$OUTPUT_DIR" echo -e "${GREEN}✓ Created output directory: ${OUTPUT_DIR}${NC}" echo "" -# Step 3: Compile TypeSpec to generate OpenAPI schema -echo -e "${YELLOW}Step 3: Compiling TypeSpec...${NC}" +# Step 2: Compile TypeSpec to generate OpenAPI schema +echo -e "${YELLOW}Step 2: Compiling TypeSpec from ${PROVIDER_ENTRY}...${NC}" TEMP_OUTPUT_DIR="tsp-output-${PROVIDER}" # Cleanup function to remove temporary directory on exit @@ -133,7 +115,7 @@ cleanup() { } trap cleanup EXIT -if "$TSP" compile main.tsp --output-dir "$TEMP_OUTPUT_DIR"; then +if "$TSP" compile "$PROVIDER_ENTRY" --output-dir "$TEMP_OUTPUT_DIR"; then # Move the generated schema to the provider-specific directory if [ -f "${TEMP_OUTPUT_DIR}/schema/openapi.yaml" ]; then mv "${TEMP_OUTPUT_DIR}/schema/openapi.yaml" "${OUTPUT_DIR}/openapi.yaml" @@ -152,10 +134,10 @@ else exit 1 fi -# Step 4: Convert to OpenAPI 2.0 (Swagger) if requested +# Step 3: Convert to OpenAPI 2.0 (Swagger) if requested if [ "$GENERATE_SWAGGER" = true ]; then echo "" - echo -e "${YELLOW}Step 4: Converting to OpenAPI 2.0 (Swagger)...${NC}" + echo -e "${YELLOW}Step 3: Converting to OpenAPI 2.0 (Swagger)...${NC}" if npx api-spec-converter \ --from=openapi_3 \ diff --git a/core/main.tsp b/core/main.tsp new file mode 100644 index 0000000..b57bc3c --- /dev/null +++ b/core/main.tsp @@ -0,0 +1,50 @@ +import "@typespec/http"; +import "@typespec/openapi"; +import "@typespec/openapi3"; + +import "./models/cluster/model.tsp"; +import "./models/cluster/example_cluster.tsp"; +import "./models/cluster/example_post.tsp"; +import "./models/cluster/example_patch.tsp"; +import "./models/nodepool/model.tsp"; +import "./models/nodepool/example_nodepool.tsp"; +import "./models/nodepool/example_post.tsp"; +import "./models/nodepool/example_patch.tsp"; +import "./services/statuses-internal.tsp"; + +import "../shared/services/clusters.tsp"; +import "../shared/services/statuses.tsp"; +import "../shared/services/nodepools.tsp"; + +using Http; +using OpenAPI; + +/** + * HyperFleet API provides simple CRUD operations for managing cluster resources and their status history. + * + * **Architecture**: Simple CRUD only, no business logic, no event creation. + * Sentinel operator handles all orchestration logic. + * Adapters handle the specifics of managing spec + * + */ +@service(#{ title: "HyperFleet API" }) +@info(#{ + version: "1.0.15", + contact: #{ + name: "HyperFleet Team", + url: "https://github.com/openshift-hyperfleet", + }, + license: #{ + name: "Apache 2.0", + url: "https://www.apache.org/licenses/LICENSE-2.0", + }, +}) +@server("https://hyperfleet.redhat.com", "Production") +@route("/api/hyperfleet/v1") +namespace HyperFleet; + +// Override BearerAuth to use lowercase "bearer" as required by kin-openapi +model BearerAuth { + type: AuthType.http; + scheme: "bearer"; +} diff --git a/models-core/cluster/example_cluster.tsp b/core/models/cluster/example_cluster.tsp similarity index 97% rename from models-core/cluster/example_cluster.tsp rename to core/models/cluster/example_cluster.tsp index 8e2afb2..6de5db2 100644 --- a/models-core/cluster/example_cluster.tsp +++ b/core/models/cluster/example_cluster.tsp @@ -1,6 +1,6 @@ -import "../../aliases-core.tsp"; -import "../../models/clusters/model.tsp"; -import "../../models/common/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/clusters/model.tsp"; +import "../../../shared/models/common/model.tsp"; const exampleCluster: Cluster = #{ kind: "Cluster", diff --git a/models-core/cluster/example_patch.tsp b/core/models/cluster/example_patch.tsp similarity index 58% rename from models-core/cluster/example_patch.tsp rename to core/models/cluster/example_patch.tsp index 35330ba..3b49b21 100644 --- a/models-core/cluster/example_patch.tsp +++ b/core/models/cluster/example_patch.tsp @@ -1,5 +1,5 @@ -import "../../aliases-core.tsp"; -import "../../models/clusters/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/clusters/model.tsp"; const exampleClusterPatchRequest: ClusterPatchRequest = #{ spec: #{}, diff --git a/models-core/cluster/example_post.tsp b/core/models/cluster/example_post.tsp similarity index 70% rename from models-core/cluster/example_post.tsp rename to core/models/cluster/example_post.tsp index e13af29..54d7c43 100644 --- a/models-core/cluster/example_post.tsp +++ b/core/models/cluster/example_post.tsp @@ -1,5 +1,5 @@ -import "../../aliases-core.tsp"; -import "../../models/clusters/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/clusters/model.tsp"; const exampleClusterCreateRequest: ClusterCreateRequest = #{ kind: "Cluster", diff --git a/models-core/cluster/model.tsp b/core/models/cluster/model.tsp similarity index 88% rename from models-core/cluster/model.tsp rename to core/models/cluster/model.tsp index b852beb..a3b9ac0 100644 --- a/models-core/cluster/model.tsp +++ b/core/models/cluster/model.tsp @@ -3,4 +3,4 @@ * Accepts any properties as the spec is provider-agnostic. * This is represented as a simple object to allow flexibility. */ -model ClusterSpec {} \ No newline at end of file +model ClusterSpec {} diff --git a/models-core/nodepool/example_nodepool.tsp b/core/models/nodepool/example_nodepool.tsp similarity index 97% rename from models-core/nodepool/example_nodepool.tsp rename to core/models/nodepool/example_nodepool.tsp index 83c30f1..dd26944 100644 --- a/models-core/nodepool/example_nodepool.tsp +++ b/core/models/nodepool/example_nodepool.tsp @@ -1,6 +1,6 @@ -import "../../aliases-core.tsp"; -import "../../models/nodepools/model.tsp"; -import "../../models/common/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/nodepools/model.tsp"; +import "../../../shared/models/common/model.tsp"; const exampleNodePool: NodePool = #{ kind: "NodePool", diff --git a/models-core/nodepool/example_patch.tsp b/core/models/nodepool/example_patch.tsp similarity index 58% rename from models-core/nodepool/example_patch.tsp rename to core/models/nodepool/example_patch.tsp index 4f0f449..4705a6a 100644 --- a/models-core/nodepool/example_patch.tsp +++ b/core/models/nodepool/example_patch.tsp @@ -1,5 +1,5 @@ -import "../../aliases-core.tsp"; -import "../../models/nodepools/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/nodepools/model.tsp"; const exampleNodePoolPatchRequest: NodePoolPatchRequest = #{ spec: #{}, diff --git a/models-core/nodepool/example_post.tsp b/core/models/nodepool/example_post.tsp similarity index 68% rename from models-core/nodepool/example_post.tsp rename to core/models/nodepool/example_post.tsp index f6443b2..f079832 100644 --- a/models-core/nodepool/example_post.tsp +++ b/core/models/nodepool/example_post.tsp @@ -1,5 +1,5 @@ -import "../../aliases-core.tsp"; -import "../../models/nodepools/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/nodepools/model.tsp"; const exampleNodePoolCreateRequest: NodePoolCreateRequest = #{ name: "worker-pool-1", diff --git a/models-core/nodepool/model.tsp b/core/models/nodepool/model.tsp similarity index 88% rename from models-core/nodepool/model.tsp rename to core/models/nodepool/model.tsp index b0f89a3..5505ea0 100644 --- a/models-core/nodepool/model.tsp +++ b/core/models/nodepool/model.tsp @@ -3,4 +3,4 @@ * Accepts any properties as the spec is provider-agnostic. * This is represented as a simple object to allow flexibility. */ -model NodePoolSpec {} \ No newline at end of file +model NodePoolSpec {} diff --git a/services/statuses-internal.tsp b/core/services/statuses-internal.tsp similarity index 92% rename from services/statuses-internal.tsp rename to core/services/statuses-internal.tsp index 5f5b999..f8483f0 100644 --- a/services/statuses-internal.tsp +++ b/core/services/statuses-internal.tsp @@ -2,9 +2,9 @@ import "@typespec/http"; import "@typespec/openapi"; import "@typespec/openapi3"; -import "../models/statuses/model.tsp"; -import "../models/common/model.tsp"; -import "../models/nodepools/model.tsp"; +import "../../shared/models/statuses/model.tsp"; +import "../../shared/models/common/model.tsp"; +import "../../shared/models/nodepools/model.tsp"; using Http; using OpenAPI; diff --git a/main.tsp b/gcp/main.tsp similarity index 64% rename from main.tsp rename to gcp/main.tsp index 741967c..0c1aa3a 100644 --- a/main.tsp +++ b/gcp/main.tsp @@ -2,11 +2,18 @@ import "@typespec/http"; import "@typespec/openapi"; import "@typespec/openapi3"; -import "./services/clusters.tsp"; -import "./services/statuses.tsp"; -import "./services/nodepools.tsp"; -// Provider-specific security is imported via aliases.tsp -import "./aliases.tsp"; +import "./models/cluster/model.tsp"; +import "./models/cluster/example_cluster.tsp"; +import "./models/cluster/example_post.tsp"; +import "./models/cluster/example_patch.tsp"; +import "./models/nodepool/model.tsp"; +import "./models/nodepool/example_nodepool.tsp"; +import "./models/nodepool/example_post.tsp"; +import "./models/nodepool/example_patch.tsp"; + +import "../shared/services/clusters.tsp"; +import "../shared/services/statuses.tsp"; +import "../shared/services/nodepools.tsp"; using Http; using OpenAPI; @@ -21,7 +28,7 @@ using OpenAPI; */ @service(#{ title: "HyperFleet API" }) @info(#{ - version: "1.0.14", + version: "1.0.15", contact: #{ name: "HyperFleet Team", url: "https://github.com/openshift-hyperfleet", diff --git a/models-gcp/cluster/example_cluster.tsp b/gcp/models/cluster/example_cluster.tsp similarity index 97% rename from models-gcp/cluster/example_cluster.tsp rename to gcp/models/cluster/example_cluster.tsp index 603f58f..97d7bc2 100644 --- a/models-gcp/cluster/example_cluster.tsp +++ b/gcp/models/cluster/example_cluster.tsp @@ -1,6 +1,6 @@ -import "../../aliases-gcp.tsp"; -import "../../models/clusters/model.tsp"; -import "../../models/common/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/clusters/model.tsp"; +import "../../../shared/models/common/model.tsp"; const exampleCluster: Cluster = #{ kind: "Cluster", diff --git a/models-gcp/cluster/example_patch.tsp b/gcp/models/cluster/example_patch.tsp similarity index 89% rename from models-gcp/cluster/example_patch.tsp rename to gcp/models/cluster/example_patch.tsp index ff7a0e7..36e412d 100644 --- a/models-gcp/cluster/example_patch.tsp +++ b/gcp/models/cluster/example_patch.tsp @@ -1,5 +1,5 @@ -import "../../aliases-gcp.tsp"; -import "../../models/clusters/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/clusters/model.tsp"; const exampleClusterPatchRequest: ClusterPatchRequest = #{ spec: #{ diff --git a/models-gcp/cluster/example_post.tsp b/gcp/models/cluster/example_post.tsp similarity index 90% rename from models-gcp/cluster/example_post.tsp rename to gcp/models/cluster/example_post.tsp index b685235..e5d2ee2 100644 --- a/models-gcp/cluster/example_post.tsp +++ b/gcp/models/cluster/example_post.tsp @@ -1,5 +1,5 @@ -import "../../aliases-gcp.tsp"; -import "../../models/clusters/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/clusters/model.tsp"; const exampleClusterCreateRequest: ClusterCreateRequest = #{ kind: "Cluster", diff --git a/models-gcp/cluster/model.tsp b/gcp/models/cluster/model.tsp similarity index 100% rename from models-gcp/cluster/model.tsp rename to gcp/models/cluster/model.tsp diff --git a/models-gcp/nodepool/example_nodepool.tsp b/gcp/models/nodepool/example_nodepool.tsp similarity index 97% rename from models-gcp/nodepool/example_nodepool.tsp rename to gcp/models/nodepool/example_nodepool.tsp index ba6ce61..148b342 100644 --- a/models-gcp/nodepool/example_nodepool.tsp +++ b/gcp/models/nodepool/example_nodepool.tsp @@ -1,6 +1,6 @@ -import "../../aliases-gcp.tsp"; -import "../../models/nodepools/model.tsp"; -import "../../models/common/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/nodepools/model.tsp"; +import "../../../shared/models/common/model.tsp"; const exampleNodePool: NodePool = #{ kind: "NodePool", diff --git a/models-gcp/nodepool/example_patch.tsp b/gcp/models/nodepool/example_patch.tsp similarity index 88% rename from models-gcp/nodepool/example_patch.tsp rename to gcp/models/nodepool/example_patch.tsp index 85aa8df..d89b68e 100644 --- a/models-gcp/nodepool/example_patch.tsp +++ b/gcp/models/nodepool/example_patch.tsp @@ -1,5 +1,5 @@ -import "../../aliases-gcp.tsp"; -import "../../models/nodepools/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/nodepools/model.tsp"; const exampleNodePoolPatchRequest: NodePoolPatchRequest = #{ spec: #{ diff --git a/models-gcp/nodepool/example_post.tsp b/gcp/models/nodepool/example_post.tsp similarity index 89% rename from models-gcp/nodepool/example_post.tsp rename to gcp/models/nodepool/example_post.tsp index 88a91a1..56d72c3 100644 --- a/models-gcp/nodepool/example_post.tsp +++ b/gcp/models/nodepool/example_post.tsp @@ -1,5 +1,5 @@ -import "../../aliases-gcp.tsp"; -import "../../models/nodepools/model.tsp"; +import "./model.tsp"; +import "../../../shared/models/nodepools/model.tsp"; const exampleNodePoolCreateRequest: NodePoolCreateRequest = #{ name: "worker-pool-1", diff --git a/models-gcp/nodepool/model.tsp b/gcp/models/nodepool/model.tsp similarity index 100% rename from models-gcp/nodepool/model.tsp rename to gcp/models/nodepool/model.tsp diff --git a/models/compatibility/README.md b/models/compatibility/README.md deleted file mode 100644 index bee0135..0000000 --- a/models/compatibility/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Compatibility objects - -Objects in this folder are here to create an OpenAPI spec that is compatible with TRex conventions - -E.g. TRex presupones OAuth and bearer tokens, which we will not have in the MVP -But we introduce a fake endpoint with OAuth support for this \ No newline at end of file diff --git a/schemas/core/openapi.yaml b/schemas/core/openapi.yaml index c85003a..23f8dd0 100644 --- a/schemas/core/openapi.yaml +++ b/schemas/core/openapi.yaml @@ -15,9 +15,9 @@ info: Sentinel operator handles all orchestration logic. Adapters handle the specifics of managing spec tags: - - name: Clusters - name: Cluster statuses - name: NodePool statuses + - name: Clusters - name: NodePools paths: /api/hyperfleet/v1/clusters: diff --git a/schemas/core/swagger.yaml b/schemas/core/swagger.yaml index b1ee316..9e86aa4 100644 --- a/schemas/core/swagger.yaml +++ b/schemas/core/swagger.yaml @@ -1866,9 +1866,9 @@ securityDefinitions: name: Authorization type: apiKey tags: - - name: Clusters - name: Cluster statuses - name: NodePool statuses + - name: Clusters - name: NodePools x-components: parameters: diff --git a/models/clusters/model.tsp b/shared/models/clusters/model.tsp similarity index 97% rename from models/clusters/model.tsp rename to shared/models/clusters/model.tsp index 4fd3035..5f12558 100644 --- a/models/clusters/model.tsp +++ b/shared/models/clusters/model.tsp @@ -1,7 +1,6 @@ import "@typespec/openapi"; import "../common/model.tsp"; import "../statuses/model.tsp"; -import "../../aliases.tsp"; using OpenAPI; @@ -31,11 +30,11 @@ model ClusterStatus { /** * List of status conditions for the cluster. - * + * * **Mandatory conditions**: * - `type: "Reconciled"`: Whether the resource's desired state has been fully reconciled by all adapters at the current generation. * - `type: "LastKnownReconciled"`: Sticky cross-generation condition — stays True as long as all required adapters were reconciled at a common observed generation, even if a newer generation is being processed. - * + * * These conditions are present immediately upon resource creation. */ @minItems(2) diff --git a/models/common/model.tsp b/shared/models/common/model.tsp similarity index 100% rename from models/common/model.tsp rename to shared/models/common/model.tsp diff --git a/models/nodepools/model.tsp b/shared/models/nodepools/model.tsp similarity index 97% rename from models/nodepools/model.tsp rename to shared/models/nodepools/model.tsp index 59b10e1..4f5fc4f 100644 --- a/models/nodepools/model.tsp +++ b/shared/models/nodepools/model.tsp @@ -1,7 +1,6 @@ import "@typespec/openapi"; import "../common/model.tsp"; import "../statuses/model.tsp"; -import "../../aliases.tsp"; using OpenAPI; @@ -28,11 +27,11 @@ model NodePoolStatus { /** * List of status conditions for the nodepool. - * + * * **Mandatory conditions**: * - `type: "Reconciled"`: Whether the resource's desired state has been fully reconciled by all adapters at the current generation. * - `type: "LastKnownReconciled"`: Sticky cross-generation condition — stays True as long as all required adapters were reconciled at a common observed generation, even if a newer generation is being processed. - * + * * These conditions are present immediately upon resource creation. */ @minItems(2) diff --git a/models/statuses/example_adapter_status.tsp b/shared/models/statuses/example_adapter_status.tsp similarity index 97% rename from models/statuses/example_adapter_status.tsp rename to shared/models/statuses/example_adapter_status.tsp index e32ebf1..ae7b119 100644 --- a/models/statuses/example_adapter_status.tsp +++ b/shared/models/statuses/example_adapter_status.tsp @@ -1,5 +1,5 @@ -import "../../models/statuses/model.tsp"; -import "../../models/common/model.tsp"; +import "./model.tsp"; +import "../common/model.tsp"; // Example AdapterStatus for validator adapter const exampleAdapterStatus: AdapterStatus = (#{ @@ -144,4 +144,4 @@ const exampleAdapterStatusList: AdapterStatusList = (#{ last_report_time: "2021-01-01T10:01:30Z", }, ], -}); \ No newline at end of file +}); diff --git a/models/statuses/model.tsp b/shared/models/statuses/model.tsp similarity index 100% rename from models/statuses/model.tsp rename to shared/models/statuses/model.tsp diff --git a/services/clusters.tsp b/shared/services/clusters.tsp similarity index 99% rename from services/clusters.tsp rename to shared/services/clusters.tsp index be45d27..b82de9b 100644 --- a/services/clusters.tsp +++ b/shared/services/clusters.tsp @@ -31,7 +31,7 @@ interface Clusters { getClusterById( ...SearchParams, @path cluster_id: string, - ): Cluster + ): Cluster | Error | BadRequestResponse; diff --git a/services/nodepools.tsp b/shared/services/nodepools.tsp similarity index 97% rename from services/nodepools.tsp rename to shared/services/nodepools.tsp index ffe5640..ca24d7b 100644 --- a/services/nodepools.tsp +++ b/shared/services/nodepools.tsp @@ -20,7 +20,7 @@ interface NodePools { @get @summary("List all nodepools for cluster") @operationId("getNodePools") - getNodePools(...QueryParams): Body + getNodePools(...QueryParams): Body | Error | BadRequestResponse; @@ -36,7 +36,7 @@ interface NodePools { @path cluster_id: Identifier, ...QueryParams, - ): Body + ): Body | Error | BadRequestResponse; diff --git a/services/statuses.tsp b/shared/services/statuses.tsp similarity index 95% rename from services/statuses.tsp rename to shared/services/statuses.tsp index a97c0bc..e28557a 100644 --- a/services/statuses.tsp +++ b/shared/services/statuses.tsp @@ -27,7 +27,7 @@ interface ClusterStatuses{ */ @path cluster_id: string, ...QueryParams - ): Body + ): Body | NotFoundResponse | BadRequestResponse; @@ -51,7 +51,7 @@ interface NodePoolStatuses{ @path cluster_id: string, @path nodepool_id: string, ...QueryParams - ): Body + ): Body | Error | BadRequestResponse;