add module categories - #122
Merged
Merged
Conversation
Ravion Module Publish PlanDry run only. No Ravion API mutations were made.
Diffsrvn-ecs-nlb n/a -> 1.1.1--- remote
+++ compiled
-description: Network Load Balanced ECS service for running TCP, UDP, or TLS workloads behind an ECS cluster Network Load Balancer.
+description: Network Load Balanced ECS service for exposing one to five TCP, UDP, or TLS ports through an ECS cluster Network Load Balancer.
name: ECS Network Service
type: rvn-ecs-nlbrvn-ecs-nlb 1.1.0 -> 1.1.1--- remote
+++ compiled
required: false
type: object
readme: |
- Network Load Balanced ECS service for running TCP, UDP, or TLS workloads behind an ECS cluster Network Load Balancer.
+ Network Load Balanced ECS service for exposing one to five TCP, UDP, or TLS ports through an ECS cluster Network Load Balancer.
## Overview
@@
The module is intentionally focused on Layer 4 services behind a Network Load Balancer. Use ECS Web Service for HTTP host and path routing through an Application Load Balancer.
- Terraform source: [ravionhq/modules/compute/ecs_service](https://github.com/ravionhq/modules/tree/rvn-ecs-nlb@1.1.0/compute/ecs_service)
+ Terraform source: [ravionhq/modules/compute/ecs_service](https://github.com/ravionhq/modules/tree/rvn-ecs-nlb@1.1.1/compute/ecs_service)
## Use cases
@@
base_path: compute/ecs_service
branch: main
execution_environment_id: << module.input.execution_environment_id >>
- ref: rvn-ecs-nlb@1.1.0
+ ref: rvn-ecs-nlb@1.1.1
repo: https://github.com/ravionhq/modules
stack_id: <<stack.id>>
terraform_variables:Module Category Changesdiff --git a/tools/ravion-modules/src/module-categories.ts b/tools/ravion-modules/src/module-categories.ts
new file mode 100644
index 0000000..eb0382c
--- /dev/null
+++ b/tools/ravion-modules/src/module-categories.ts
@@ -0,0 +1,125 @@
+export interface ModuleCategorySpec {
+ givenId: string;
+ name: string;
+ description: string;
+ sortOrder: number;
+ definitionTypes: readonly string[];
+ previousGivenIds?: readonly string[];
+}
+
+export const MODULE_CATEGORIES: readonly ModuleCategorySpec[] = [
+ {
+ givenId: "web-server",
+ name: "Web server",
+ description: "For websites, HTTP APIs, and services reached through a browser or web client.",
+ sortOrder: 10,
+ definitionTypes: ["rvn-ec2-service", "rvn-ecs-nlb", "rvn-ecs-web"],
+ },
+ {
+ givenId: "tcp-udp-server",
+ name: "TCP/UDP server",
+ description: "For Layer 4 workloads such as game servers, MQTT brokers, and custom TCP, UDP, or TLS protocols.",
+ sortOrder: 20,
+ definitionTypes: ["rvn-ecs-nlb"],
+ previousGivenIds: ["tcp-udp-service"],
+ },
+ {
+ givenId: "worker",
+ name: "Worker",
+ description: "For queue consumers, scheduled jobs, and background processes without public endpoints.",
+ sortOrder: 30,
+ definitionTypes: ["rvn-ec2-service", "rvn-ecs-worker"],
+ },
+ {
+ givenId: "function",
+ name: "Function",
+ description: "For webhook handlers, scheduled tasks, and event processing that run only when invoked.",
+ sortOrder: 40,
+ definitionTypes: ["rvn-lambda"],
+ },
+ {
+ givenId: "static-site",
+ name: "Static site",
+ description: "For frontend assets, documentation, and single-page apps that do not need an always-on server.",
+ sortOrder: 50,
+ definitionTypes: ["rvn-aws-static"],
+ },
+ {
+ givenId: "database",
+ name: "Database",
+ description: "For relational data such as PostgreSQL or MySQL, including connection pooling.",
+ sortOrder: 60,
+ definitionTypes: ["rvn-aurora", "rvn-rds", "rvn-rds-proxy"],
+ },
+ {
+ givenId: "cache",
+ name: "Cache",
+ description: "For Redis or Memcached workloads that need low-latency shared state.",
+ sortOrder: 70,
+ definitionTypes: ["rvn-elasticache"],
+ },
+ {
+ givenId: "storage",
+ name: "Storage",
+ description: "For uploads, backups, and shared files that need persistent object or file storage.",
+ sortOrder: 80,
+ definitionTypes: ["rvn-efs", "rvn-s3"],
+ },
+ {
+ givenId: "cluster",
+ name: "Cluster",
+ description: "For services that share container capacity, load balancers, and placement configuration.",
+ sortOrder: 90,
+ definitionTypes: ["rvn-ecs-cluster"],
+ },
+ {
+ givenId: "network",
+ name: "Network",
+ description: "For private subnets, internet access, service connectivity, and shared load balancers.",
+ sortOrder: 100,
+ definitionTypes: ["rvn-aws-alb", "rvn-aws-network"],
+ },
+ {
+ givenId: "domain",
+ name: "Domain",
+ description: "For custom domains, DNS records, and HTTPS certificates.",
+ sortOrder: 110,
+ definitionTypes: ["rvn-acm-certificate", "rvn-route53"],
+ },
+ {
+ givenId: "cdn",
+ name: "CDN",
+ description: "For serving images, JavaScript bundles, and downloads closer to users.",
+ sortOrder: 120,
+ definitionTypes: ["rvn-cloudfront"],
+ },
+ {
+ givenId: "security",
+ name: "Security",
+ description: "For service roles, deployment permissions, and least-privilege access.",
+ sortOrder: 130,
+ definitionTypes: ["rvn-aws-iam-policy", "rvn-aws-iam-role"],
+ },
+ {
+ givenId: "iac",
+ name: "IaC",
+ description: "For custom infrastructure that is not covered by a purpose-built module.",
+ sortOrder: 140,
+ definitionTypes: ["rvn-stack"],
+ },
+];
+
+const MODULE_CATEGORIES_BY_DEFINITION_TYPE = new Map<string, ModuleCategorySpec[]>();
+for (const category of MODULE_CATEGORIES) {
+ for (const definitionType of category.definitionTypes) {
+ const categories = MODULE_CATEGORIES_BY_DEFINITION_TYPE.get(definitionType) ?? [];
+ categories.push(category);
+ MODULE_CATEGORIES_BY_DEFINITION_TYPE.set(definitionType, categories);
+ }
+}
+
+export function getModuleCategoriesForDefinitionType(
+ definitionType: string,
+): readonly ModuleCategorySpec[] {
+ return MODULE_CATEGORIES_BY_DEFINITION_TYPE.get(definitionType) ?? [];
+} |
mabadir
approved these changes
Aug 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Greptile Summary
This PR introduces centrally defined module categories and integrates their creation, migration, global publication, and assignment into the module publishing workflow.
Confidence Score: 5/5
The PR appears safe to merge because no concrete changed-code failure remains after checking category synchronization, migration, and definition backfill paths.
The normal publish workflow processes all compiled definitions, and the new category operations consistently create or update categories before assigning their resolved IDs to module definitions.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart LR A[Compile module definitions] --> B[Resolve category specifications] B --> C[List remote categories] C --> D{Matching category exists?} D -- No --> E[Create category] E --> F[Publish category globally] D -- Yes --> G[Update metadata or scope if needed] F --> H[Resolve category IDs by definition type] G --> H H --> I[Create or patch module definitions] I --> J[Validate and publish module versions]Reviews (1): Last reviewed commit: "add module categories" | Re-trigger Greptile
Context used: