From 5328d835cf04542e3bab9242fd6cb45d1e497e63 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Thu, 8 May 2025 02:41:19 +0000 Subject: [PATCH 1/9] chore: commit progress on various README files --- CODE_OF_CONDUCT.md | 3 +++ CONTRIBUTING.md | 2 ++ README.md | 49 ++++++++++++++++++++++++++++++++++++- SECURITY.md | 3 +++ image.png | Bin 0 -> 53832 bytes images/coder-agent-bar.png | Bin 0 -> 53832 bytes 6 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 SECURITY.md create mode 100644 image.png create mode 100644 images/coder-agent-bar.png diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..81bd2b7 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,3 @@ +# Code of Conduct + +[Please see our code of conduct on the official Coder website](https://coder.com/docs/contributing/CODE_OF_CONDUCT) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d61783c..e63060e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,7 @@ # Contributing +The Registry repo gives each contributing author a namespace to add modules and other Coder-specific resources under. (For example, Coder's official module for JetBrains Gateway can be found under [`/registry/coder/modules/jetbrains-gateway`](https://github.com/coder/registry/tree/main/registry/coder/modules/jetbrains-gateway).) This ensures that multiple users can publish resources with the same name or similar purposes without any risks of namespace collisions. Version control for each resource is also handled via Git tags in this repo. + ## Getting started This repo uses two main runtimes to verify the correctness of a module/template before it is published: diff --git a/README.md b/README.md index bd46b01..b666e48 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,50 @@ # Coder Registry -Publish Coder modules and templates for other developers to use. +[Registry Site](https://registry.coder.com) • [Coder OSS repo](https://github.com/coder/coder) • [Coder Docs](https://www.coder.com/docs) • [Official Discord](https://discord.gg/coder) + +> [!NOTE] +> The Coder Registry repo will be updated to support Coder Templates in the next few weeks. You can currently find all official templates [in the official coder/coder repo, under `examples/templates`](https://github.com/coder/coder/tree/main/examples/templates). + +[![Health](https://github.com/coder/registry/actions/workflows/check_registry_site_health.yaml/badge.svg)](https://github.com/coder/registry/actions/workflows/check_registry_site_health.yaml) + +Coder Registry is a community-driven platform for extending your Coder workspaces. Publish reusable Terraform as Coder Modules for users all over the world. + +## Overview + +Coder is built on HashiCorp's open-source Terraform language, to provide developers an easy, declarative way to define the infrastructure for their remote development environments. Coder-flavored versions of Terraform allow you to mix in other, reusable Terraform snippets to add integrations with other popular development tools, such as JetBrains, Cursor, or Visual Studio Code. + +This spares you the trouble of needing to figure out how to define these integrations yourself. Simply add the correct import snippet, along with any data dependencies, and your workspace can start using that new functionality immediately. + +![Coder Agent Bar](./images/coder-agent-bar.png) + +More information about Coder templates [can be found here](https://coder.com/docs/admin/templates/creating-templates), while more information about modules [can be found here](https://coder.com/docs/admin/templates/extending-templates/modules). + +## Getting started + +The easiest way to discover new modules and templates is by visiting [the official Coder Registry website](https://registry.coder.com/). The website is a full mirror of the Coder Registry repo, and it is where .tar versions of the various resources can be downloaded from, from within your Coder deployment. + +Note that while Coder has a baseline set of requirements for allowing an external PR to be merged in (i.e., published), Coder cannot vouch for the validity or functionality of a resource until that resource has been flagged with the `verified` status. [All modules under the Coder namespace](https://github.com/coder/registry/tree/main/registry/coder) are automatically verified. + +### Getting started with modules + +To get started with a module, navigate to that module's page in either the registry site, or the main repo: + +- [The Cursor repo directory](https://github.com/coder/registry/tree/main/registry/coder/modules/cursor) +- [The Cursor module page on the main website](https://registry.coder.com/modules/cursor) + +In both cases, the main README contains a Terraform snippet for integrating the module into your workspace. The snippet for Cursor looks like this: + +```tf +module "cursor" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/modules/cursor/coder" + version = "1.0.19" + agent_id = coder_agent.example.id +} +``` + +Simply include that snippet inside your Coder template, defining any data dependencies referenced, and the next time you create a new workspace, the functionality will be ready for you to use. + +## Contributing + +We are always accepting new contributions. [Please see our contributing guide for more information.](./CONTRIBUTING.md) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..313692d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,3 @@ +# Security + +[Please see our security policy on the official Coder website](https://coder.com/security/policy) diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..b58aa2073fb104f4c3203912c0b948c38672f35b GIT binary patch literal 53832 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 Date: Thu, 8 May 2025 19:47:28 +0000 Subject: [PATCH 2/9] wip: commit progress on README --- CONTRIBUTING.md | 76 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 66 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e63060e..28c3b40 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,7 +1,5 @@ # Contributing -The Registry repo gives each contributing author a namespace to add modules and other Coder-specific resources under. (For example, Coder's official module for JetBrains Gateway can be found under [`/registry/coder/modules/jetbrains-gateway`](https://github.com/coder/registry/tree/main/registry/coder/modules/jetbrains-gateway).) This ensures that multiple users can publish resources with the same name or similar purposes without any risks of namespace collisions. Version control for each resource is also handled via Git tags in this repo. - ## Getting started This repo uses two main runtimes to verify the correctness of a module/template before it is published: @@ -51,17 +49,75 @@ Once Go has been installed, verify the installation via: go version ``` -### Adding a new module/template (coming soon) +## Namespaces + +All Coder resources are scoped to namespaces placed at the top level of the `/registry` directory. Any modules or templates must be placed inside a namespace to be accepted as a contribution. For example, all modules created by TheZoker would be placed under `/registry/TheZoker/modules`, with a subdirectory for each individual module. + +If a name is already taken, you will need to create a subdirectory under a different name, but you will still be able to choose any display name. + +### Contributor README files + +Each namespace directory must contain a `README.md` file containing metadata about who you are as a contributor. Each README file must contain frontmatter with required metadata fields, but there are no restrictions on the body of the README. Feel free to customize it to your heart's content (within reason – the CI step will check for accessibility violations). + +The frontmatter must contain the following fields: -Once Bun (and possibly Go) have been installed, clone this repository. From there, you can run this script to make it easier to start contributing a new module or template: +- `display_name` (required string) – The name to use when displaying your user profile in the Coder Registry site +- `bio` (optional string) – A short description of who you are +- `github` (optional string) – Your GitHub handle +- `avatar_url` (optional string) – A relative/absolute URL pointing to your avatar for the Registry site. It is strongly recommended that you add avatar images to this repo and reference them via relative URLs. +- `linkedin` (optional string) – A URL pointing to your LinkedIn page +- `support_email` (optional string) – An email for users to reach you at if they need help with a published module/template +- `status` (optional string union) – If defined, must be one of `"community"`, `"partner"`, or `"official"`. `"community"` is treated as the default value if not specified, and should be used for the majority of external contributions. `"official"` should be used for Coder and Coder satellite companies. `"partner"` is for companies who have a formal business partnership with Coder. + +### Images + +Any images needed for either the main namespace directory or a module/template can be placed in a relative `/images` directory at the top of the namespace directory. This is to minimize the risk of file name conflicts between different users. + +## Coder modules + +### Adding a new module + +> [!NOTE] +> This script will be available shortly. These instructions cannot be followed just yet. Contributors looking to add modules early will need to create all directories manually. + +Once Bun (and possibly Go) have been installed, clone the Coder Registry repository. From there, you can run this script to make it easier to start contributing a new module or template: ```shell -./new.sh NAME_OF_NEW_MODULE +./new.sh USER_NAMESPACE/NAME_OF_NEW_MODULE ``` -You can also create the correct module/template files manually. +You can also create a module file manually by creating the necessary files and directories. + +### The composition of a Coder module + +Each Coder Module must contain the following files: + +- A `main.tf` file that defines the main Terraform-based functionality +- A `main.test.ts` file that is used to validate that the module works as expected +- A `README.md` file containing required information (listed below) + +You are free to include any additional files in the module, as needed by the module. For example, the [Windows RDP module](https://github.com/coder/registry/tree/main/registry/coder/modules/windows-rdp) contains additional files for injecting specific functionality into a Coder Workspace. + +### The structure of a module README + +All requirements listed below are validating using our CI process. A README file must have: + +- Frontmatter that describes metadata for the module: + - `display_name` (required string) – This is the name displayed on the Coder Registry website + - `description` (required string) – A short description of the module, which is displayed on the Registry website + - `icon` (required URL) – A relative/absolute URL pointing to the icon to display for the module in the Coder Registry website. + - `maintainer_github` (deprecated string) – The name of the creator of the module. This field exists for backwards compatibility with previous versions of the Registry, but going forward, the value will be calculated from the namespace directory. + - `partner_github` (deprecated string) + - `verified` (optional boolean) – Indicates whether the module has been officially verified by Coder. + - `tags` (required string array) – A list of metadata tags to describe the module. Used in the Registry site for search and navigation functionality. +- An H1 header with the name of the module +- The following content directly under the h1 header (without another header between them): + - A description of what the module does + - A Terraform snippet for letting other users import the functionality + +Additional information can be placed in the README file below the content listed above, using any number of headers. -## Testing a Module +### Testing a Module > [!IMPORTANT] > It is the responsibility of the module author to implement tests for every new module they wish to contribute. It falls to the author to test the module locally before submitting a PR. @@ -73,13 +129,13 @@ All general-purpose test helpers for validating Terraform can be found in the to You can reference the existing `*.test.ts` files to get an idea for how to set up tests. -You can run all tests by running this command: +You can run all tests by running this command from the root of the Registry directory: ```shell bun test ``` -Note that tests can take some time to run, so you probably don't want to be running this as part of your development loop. +Note that tests can take some time to run, so you probably don't want to be running this as part of your core development loop. To run specific tests, you can use the `-t` flag, which accepts a filepath regex: @@ -98,7 +154,7 @@ module "example" { ## Adding/modifying README files -This repo uses Go to do a quick validation of each README. If you are working with the README files at all, it is strongly recommended that you install Go, so that the files can be validated locally. +This repo uses Go to do a quick validation of each README file. If you are working with the README files at all (i.e., creating them, modifying them), it is strongly recommended that you install Go, so that the files can be validated locally. ### Validating all README files From 9483b15397423de73c0dee9e137e3ed499bc547f Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Thu, 8 May 2025 22:59:01 +0000 Subject: [PATCH 3/9] fix: remove accidental image --- image.png | Bin 53832 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 image.png diff --git a/image.png b/image.png deleted file mode 100644 index b58aa2073fb104f4c3203912c0b948c38672f35b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53832 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 Date: Thu, 8 May 2025 23:05:30 +0000 Subject: [PATCH 4/9] chore: revise main README --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b666e48..aae67b9 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,29 @@ # Coder Registry -[Registry Site](https://registry.coder.com) • [Coder OSS repo](https://github.com/coder/coder) • [Coder Docs](https://www.coder.com/docs) • [Official Discord](https://discord.gg/coder) - -> [!NOTE] -> The Coder Registry repo will be updated to support Coder Templates in the next few weeks. You can currently find all official templates [in the official coder/coder repo, under `examples/templates`](https://github.com/coder/coder/tree/main/examples/templates). +[Registry Site](https://registry.coder.com) • [Coder OSS](https://github.com/coder/coder) • [Coder Docs](https://www.coder.com/docs) • [Official Discord](https://discord.gg/coder) [![Health](https://github.com/coder/registry/actions/workflows/check_registry_site_health.yaml/badge.svg)](https://github.com/coder/registry/actions/workflows/check_registry_site_health.yaml) +> [!NOTE] +> The Coder Registry repo will be updated to support Coder Templates in the coming weeks. You can currently find all official templates in the official coder/coder repo, [under the `examples/templates` directory](https://github.com/coder/coder/tree/main/examples/templates). + Coder Registry is a community-driven platform for extending your Coder workspaces. Publish reusable Terraform as Coder Modules for users all over the world. ## Overview -Coder is built on HashiCorp's open-source Terraform language, to provide developers an easy, declarative way to define the infrastructure for their remote development environments. Coder-flavored versions of Terraform allow you to mix in other, reusable Terraform snippets to add integrations with other popular development tools, such as JetBrains, Cursor, or Visual Studio Code. +Coder is built on HashiCorp's open-source Terraform language to provide developers an easy, declarative way to define the infrastructure for their remote development environments. Coder-flavored versions of Terraform allow you to mix in reusable Terraform snippets to add integrations with other popular development tools, such as JetBrains, Cursor, or Visual Studio Code. -This spares you the trouble of needing to figure out how to define these integrations yourself. Simply add the correct import snippet, along with any data dependencies, and your workspace can start using that new functionality immediately. +Simply add the correct import snippet, along with any data dependencies, and your workspace can start using the new functionality immediately. ![Coder Agent Bar](./images/coder-agent-bar.png) -More information about Coder templates [can be found here](https://coder.com/docs/admin/templates/creating-templates), while more information about modules [can be found here](https://coder.com/docs/admin/templates/extending-templates/modules). +More information [about Coder Modules can be found here](https://coder.com/docs/admin/templates/extending-templates/modules), while more information [about Coder Templates can be found here](https://coder.com/docs/admin/templates/creating-templates). ## Getting started -The easiest way to discover new modules and templates is by visiting [the official Coder Registry website](https://registry.coder.com/). The website is a full mirror of the Coder Registry repo, and it is where .tar versions of the various resources can be downloaded from, from within your Coder deployment. +The easiest way to discover new modules and templates is by visiting [the official Coder Registry website](https://registry.coder.com/). The website is a full mirror of the Coder Registry repo, and it is where .tar versions of the various resources can be downloaded from, for use within your Coder deployment. -Note that while Coder has a baseline set of requirements for allowing an external PR to be merged in (i.e., published), Coder cannot vouch for the validity or functionality of a resource until that resource has been flagged with the `verified` status. [All modules under the Coder namespace](https://github.com/coder/registry/tree/main/registry/coder) are automatically verified. +Note that while Coder has a baseline set of requirements for allowing an external PR to be published, Coder cannot vouch for the validity or functionality of a resource until that resource has been flagged with the `verified` status. [All modules under the Coder namespace](https://github.com/coder/registry/tree/main/registry/coder) are automatically verified. ### Getting started with modules From 4fd105d997c54f7dc6a902c9cf252c5d42348dd2 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Thu, 8 May 2025 23:06:49 +0000 Subject: [PATCH 5/9] docs: revise main readme again --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aae67b9..1e44ad9 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ [![Health](https://github.com/coder/registry/actions/workflows/check_registry_site_health.yaml/badge.svg)](https://github.com/coder/registry/actions/workflows/check_registry_site_health.yaml) +Coder Registry is a community-driven platform for extending your Coder workspaces. Publish reusable Terraform as Coder Modules for users all over the world. + > [!NOTE] > The Coder Registry repo will be updated to support Coder Templates in the coming weeks. You can currently find all official templates in the official coder/coder repo, [under the `examples/templates` directory](https://github.com/coder/coder/tree/main/examples/templates). -Coder Registry is a community-driven platform for extending your Coder workspaces. Publish reusable Terraform as Coder Modules for users all over the world. - ## Overview Coder is built on HashiCorp's open-source Terraform language to provide developers an easy, declarative way to define the infrastructure for their remote development environments. Coder-flavored versions of Terraform allow you to mix in reusable Terraform snippets to add integrations with other popular development tools, such as JetBrains, Cursor, or Visual Studio Code. From 466389ded3fe0eac64160a4e0eb0e925e6d98d4b Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Thu, 8 May 2025 23:51:46 +0000 Subject: [PATCH 6/9] chore: revise contributing README --- CONTRIBUTING.md | 159 ++++++++++++++++++++++++++++-------------------- 1 file changed, 93 insertions(+), 66 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 28c3b40..df59e8d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ This repo uses two main runtimes to verify the correctness of a module/template before it is published: - [Bun](https://bun.sh/) – Used to run tests for each module/template to validate overall functionality and correctness of Terraform output -- [Go](https://go.dev/) – Used to validate all README files in the directory +- [Go](https://go.dev/) – Used to validate all README files in the directory. The README content is used to populate [the Registry website](https://registry.coder.com). ### Installing Bun @@ -51,34 +51,24 @@ go version ## Namespaces -All Coder resources are scoped to namespaces placed at the top level of the `/registry` directory. Any modules or templates must be placed inside a namespace to be accepted as a contribution. For example, all modules created by TheZoker would be placed under `/registry/TheZoker/modules`, with a subdirectory for each individual module. +All Coder resources are scoped to namespaces placed at the top level of the `/registry` directory. Any modules or templates must be placed inside a namespace to be accepted as a contribution. For example, all modules created by TheJonkler would be placed under `/registry/thejonkler/modules`, with a subdirectory for each individual module the user has published. -If a name is already taken, you will need to create a subdirectory under a different name, but you will still be able to choose any display name. +If a namespace is already taken, you will need to create a different, unique namespace, but will still be able to choose any display name. (The display name is shown in the Registry website. More info below.) -### Contributor README files +### Namespace (contributor profile) README files -Each namespace directory must contain a `README.md` file containing metadata about who you are as a contributor. Each README file must contain frontmatter with required metadata fields, but there are no restrictions on the body of the README. Feel free to customize it to your heart's content (within reason – the CI step will check for accessibility violations). - -The frontmatter must contain the following fields: - -- `display_name` (required string) – The name to use when displaying your user profile in the Coder Registry site -- `bio` (optional string) – A short description of who you are -- `github` (optional string) – Your GitHub handle -- `avatar_url` (optional string) – A relative/absolute URL pointing to your avatar for the Registry site. It is strongly recommended that you add avatar images to this repo and reference them via relative URLs. -- `linkedin` (optional string) – A URL pointing to your LinkedIn page -- `support_email` (optional string) – An email for users to reach you at if they need help with a published module/template -- `status` (optional string union) – If defined, must be one of `"community"`, `"partner"`, or `"official"`. `"community"` is treated as the default value if not specified, and should be used for the majority of external contributions. `"official"` should be used for Coder and Coder satellite companies. `"partner"` is for companies who have a formal business partnership with Coder. +More information about contributor profile README files can be found below. ### Images -Any images needed for either the main namespace directory or a module/template can be placed in a relative `/images` directory at the top of the namespace directory. This is to minimize the risk of file name conflicts between different users. +Any images needed for either the main namespace directory or a module/template can be placed in a relative `/images` directory at the top of the namespace directory. (e.g., The Jonkler can have a `/registry/thejonkler/images` directory, that can be referenced by the main README file, as well as a README file in `/registry/thejonkler/modules/custom_module/README.md`.) This is to minimize the risk of file name conflicts between different users as they add images to help illustrate parts of their README files. ## Coder modules ### Adding a new module -> [!NOTE] -> This script will be available shortly. These instructions cannot be followed just yet. Contributors looking to add modules early will need to create all directories manually. +> [!WARNING] +> These instructions cannot be followed just yet; the script referenced will be made available shortly. Contributors looking to add modules early will need to create all directories manually. Once Bun (and possibly Go) have been installed, clone the Coder Registry repository. From there, you can run this script to make it easier to start contributing a new module or template: @@ -98,36 +88,40 @@ Each Coder Module must contain the following files: You are free to include any additional files in the module, as needed by the module. For example, the [Windows RDP module](https://github.com/coder/registry/tree/main/registry/coder/modules/windows-rdp) contains additional files for injecting specific functionality into a Coder Workspace. -### The structure of a module README +> [!NOTE] +> Some legacy modules do not have test files defined just yet. This will be addressed soon. -All requirements listed below are validating using our CI process. A README file must have: +### The `main.tf` file -- Frontmatter that describes metadata for the module: - - `display_name` (required string) – This is the name displayed on the Coder Registry website - - `description` (required string) – A short description of the module, which is displayed on the Registry website - - `icon` (required URL) – A relative/absolute URL pointing to the icon to display for the module in the Coder Registry website. - - `maintainer_github` (deprecated string) – The name of the creator of the module. This field exists for backwards compatibility with previous versions of the Registry, but going forward, the value will be calculated from the namespace directory. - - `partner_github` (deprecated string) - - `verified` (optional boolean) – Indicates whether the module has been officially verified by Coder. - - `tags` (required string array) – A list of metadata tags to describe the module. Used in the Registry site for search and navigation functionality. -- An H1 header with the name of the module -- The following content directly under the h1 header (without another header between them): - - A description of what the module does - - A Terraform snippet for letting other users import the functionality +This file defines all core Terraform functionality, to be mixed into your Coder workspaces. More information about [Coder's use of Terraform can be found here](https://coder.com/docs/admin/templates/extending-templates/modules), and [general information about the Terraform language can be found in the official documentation](https://developer.hashicorp.com/terraform/docs). -Additional information can be placed in the README file below the content listed above, using any number of headers. +### The structure of a module README + +Validation criteria for module README files is listed below. ### Testing a Module > [!IMPORTANT] -> It is the responsibility of the module author to implement tests for every new module they wish to contribute. It falls to the author to test the module locally before submitting a PR. +> It is the responsibility of the module author to implement tests for every new module they wish to contribute. It is expected the author has tested the module locally before opening a PR. Feel free to reference existing test files to get an idea for how to set them up. All general-purpose test helpers for validating Terraform can be found in the top-level `/testing` directory. The helpers run `terraform apply` on modules that use variables, testing the script output against containers. +When writing a test file, you can import the test utilities via the `~test` import alias: + +```ts +// This works regardless of how deeply-nested your test file is in the file +// structure +import { + runTerraformApply, + runTerraformInit, + testRequiredVariables, +} from "~test"; +``` + > [!NOTE] -> The testing suite must be able to run docker containers with the `--network=host` flag. This typically requires running the tests on Linux as this flag does not apply to Docker Desktop for MacOS and Windows. MacOS users can work around this by using something like [colima](https://github.com/abiosoft/colima) or [Orbstack](https://orbstack.dev/) instead of Docker Desktop. +> The testing suite must be able to run docker containers with the `--network=host` flag. This typically requires running the tests on Linux as this flag does not apply to Docker Desktop for MacOS or Windows. MacOS users can work around this by using something like [colima](https://github.com/abiosoft/colima) or [Orbstack](https://orbstack.dev/) instead of Docker Desktop. -You can reference the existing `*.test.ts` files to get an idea for how to set up tests. +#### Running tests You can run all tests by running this command from the root of the Registry directory: @@ -135,7 +129,7 @@ You can run all tests by running this command from the root of the Registry dire bun test ``` -Note that tests can take some time to run, so you probably don't want to be running this as part of your core development loop. +Note that running _all_ tests can take some time, so you likely don't want to be running this command as part of your core development loop. To run specific tests, you can use the `-t` flag, which accepts a filepath regex: @@ -152,9 +146,9 @@ module "example" { } ``` -## Adding/modifying README files +## Updating README files -This repo uses Go to do a quick validation of each README file. If you are working with the README files at all (i.e., creating them, modifying them), it is strongly recommended that you install Go, so that the files can be validated locally. +This repo uses Go to validate each README file. If you are working with the README files at all (i.e., creating them, modifying them), it is strongly recommended that you install Go (installation instructions mentioned above), so that the files can be validated locally. ### Validating all README files @@ -164,7 +158,7 @@ To validate all README files throughout the entire repo, you can run the followi go build ./cmd/readmevalidation && ./readmevalidation ``` -The resulting binary is already part of the `.gitignore` file, but you can quickly remove it with: +The resulting binary is already part of the `.gitignore` file, but you can remove it with: ```shell rm ./readmevalidation @@ -172,17 +166,17 @@ rm ./readmevalidation ### README validation criteria -The following criteria exists for one of two reasons: (1) content accessibility, or (2) having content be designed in a way that's easy for the Registry site build step to use: +The following criteria exists for two reasons: + +1. Content accessibility +2. Having content be designed in a way that's easy for the Registry site build step to use #### General README requirements - There must be a frontmatter section. -- There must be exactly one h1 header, and it must be at the very top +- There must be exactly one h1 header, and it must be at the very top, directly below the frontmatter. - The README body (if it exists) must start with an h1 header. No other content (including GitHub-Flavored Markdown alerts) is allowed to be placed above it. - When increasing the level of a header, the header's level must be incremented by one each time. -- Additional image/video assets can be placed in one of two places: - - In the same user namespace directory where that user's main content lives - - In the top-level `.icons` directory - Any `.hcl` code snippets must be labeled as `.tf` snippets instead ```txt @@ -191,27 +185,60 @@ The following criteria exists for one of two reasons: (1) content accessibility, \`\`\` ``` -#### Contributor profiles - -- The README body is allowed to be empty, but if it isn't, it must follow all the rules above. -- The frontmatter supports the following fields: - - `display_name` (required string) – The name to use when displaying your user profile in the Coder Registry site - - `bio` (optional string) – A short description of who you are - - `github` (required string) – Your GitHub handle - - `avatar_url` (optional string) – A relative/absolute URL pointing to your avatar - - `linkedin` (optional string) – A URL pointing to your LinkedIn page - - `support_email` (optional string) – An email for users to reach you at if they need help with a published module/template - - `employer_github` (optional string) – The name of another user namespace whom you'd like to have associated with your account. The namespace must also exist in the repo, or else the README validation will fail. - - `status` (optional string union) – If defined, must be one of "community", "partner", or "official". "Community" is treated as the default value if not specified, and should be used for the majority of external contributions. "Official" should be used for Coder and Coder satellite companies. "Partner" is for companies who have a formal business agreement with Coder. - -#### Modules and templates - -- The frontmatter supports the following fields: - - `description` (required string) A short description of what the module/template does. - - `icon` (required string) – A URL pointing to the icon to use for the module/template when viewing it on the Registry website. - - `display_name` (optional string) – A name to display instead of the name intuited from the module's/template's directory name - - `verified` (optional boolean) – A boolean indicated that the Coder team has officially tested and vouched for the functionality/reliability of a given module or template. This field should only be changed by Coder employees. - - `tags` (optional string array) – A list of tags to associate with the module/template. Users will be able to search for these tags from the Registry website. +#### Namespace (contributor profile) criteria + +In addition to the general criteria, all README files must have the following: + +- Frontmatter metadata with support for the following fields: + + - `display_name` (required string) – The name to use when displaying your user profile in the Coder Registry site. + - `bio` (optional string) – A short description of who you are. + - `github` (optional string) – Your GitHub handle. + - `avatar_url` (optional string) – A relative/absolute URL pointing to your avatar for the Registry site. It is strongly recommended that you commit avatar images to this repo and reference them via a relative URL. + - `linkedin` (optional string) – A URL pointing to your LinkedIn page. + - `support_email` (optional string) – An email for users to reach you at if they need help with a published module/template. + - `status` (optional string union) – If defined, this must be one of `"community"`, `"partner"`, or `"official"`. `"community"` is treated as the default value if not specified, and should be used for the majority of external contributions. `"partner"` is for companies who have a formal business partnership with Coder. `"official"` should be used only by Coder and Coder satellite companies. + +- The README body (the content that goes directly below the frontmatter) is allowed to be empty, but if it isn't, it must follow all the rules above. + +You are free to customize the body of a contributor profile however you like, adding any number of images or information. Its content will never be rendered in the Registry website. + +Additional information can be placed in the README file below the content listed above, using any number of headers. + +Additional image/video assets can be placed in the same user namespace directory where that user's main content lives. + +#### Module criteria + +In addition to the general criteria, all README files must have the following: + +- Frontmatter that describes metadata for the module: + - `display_name` (required string) – This is the name displayed on the Coder Registry website + - `description` (required string) – A short description of the module, which is displayed on the Registry website + - `icon` (required string) – A relative/absolute URL pointing to the icon to display for the module in the Coder Registry website. + - `verified` (optional boolean) – Indicates whether the module has been officially verified by Coder. Please do not set this without approval from a Coder employee. + - `tags` (required string array) – A list of metadata tags to describe the module. Used in the Registry site for search and navigation functionality. + - `maintainer_github` (deprecated string) – The name of the creator of the module. This field exists for backwards compatibility with previous versions of the Registry, but going forward, the value will be inferred from the namespace directory. + - `partner_github` (deprecated string) - The name of any additional creators for a module. This field exists for backwards compatibility with previous versions of the Registry, but should not ever be used going forward. +- The following content directly under the h1 header (without another header between them): + + - A description of what the module does + - A Terraform snippet for letting other users import the functionality + + ```tf + module "cursor" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/modules/cursor/coder" + version = "1.0.19" + agent_id = coder_agent.example.id + } + ``` + +Additional information can be placed in the README file below the content listed above, using any number of headers. + +Additional image/video assets can be placed in one of two places: + +1. In the same user namespace directory where that user's main content lives +2. If the image is an icon, it can be placed in the top-level `.icons` directory (this is done because a lot of modules will be based off the same products) ## Releases From 0bfbc667681b029589088261ddb411e2d8e0d9ce Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Fri, 9 May 2025 15:02:05 +0000 Subject: [PATCH 7/9] docs: rename test case for clarity --- registry/whizus/modules/exoscale-instance-type/main.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/whizus/modules/exoscale-instance-type/main.test.ts b/registry/whizus/modules/exoscale-instance-type/main.test.ts index 8a63cbf..05e56eb 100644 --- a/registry/whizus/modules/exoscale-instance-type/main.test.ts +++ b/registry/whizus/modules/exoscale-instance-type/main.test.ts @@ -23,7 +23,7 @@ describe("exoscale-instance-type", async () => { expect(state.outputs.value.value).toBe("gpu3.huge"); }); - it("fails because of wrong categroy definition", async () => { + it("fails when default value is provided without any matching category definitions", async () => { expect(async () => { await runTerraformApply(import.meta.dir, { default: "gpu3.huge", From 25c033a24324f10307f813ea9b84163446023ecb Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Fri, 9 May 2025 22:00:56 +0000 Subject: [PATCH 8/9] fix: apply feedback --- CONTRIBUTING.md | 6 +++--- cmd/readmevalidation/contributors.go | 28 ++++++++++++---------------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df59e8d..3cd915d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ go version ## Namespaces -All Coder resources are scoped to namespaces placed at the top level of the `/registry` directory. Any modules or templates must be placed inside a namespace to be accepted as a contribution. For example, all modules created by TheJonkler would be placed under `/registry/thejonkler/modules`, with a subdirectory for each individual module the user has published. +All Coder resources are scoped to namespaces placed at the top level of the `/registry` directory. Any modules or templates must be placed inside a namespace to be accepted as a contribution. For example, all modules created by CoderEmployeeBob would be placed under `/registry/coderemployeebob/modules`, with a subdirectory for each individual module the user has published. If a namespace is already taken, you will need to create a different, unique namespace, but will still be able to choose any display name. (The display name is shown in the Registry website. More info below.) @@ -61,7 +61,7 @@ More information about contributor profile README files can be found below. ### Images -Any images needed for either the main namespace directory or a module/template can be placed in a relative `/images` directory at the top of the namespace directory. (e.g., The Jonkler can have a `/registry/thejonkler/images` directory, that can be referenced by the main README file, as well as a README file in `/registry/thejonkler/modules/custom_module/README.md`.) This is to minimize the risk of file name conflicts between different users as they add images to help illustrate parts of their README files. +Any images needed for either the main namespace directory or a module/template can be placed in a relative `/images` directory at the top of the namespace directory. (e.g., CoderEmployeeBob can have a `/registry/coderemployeebob/images` directory, that can be referenced by the main README file, as well as a README file in `/registry/coderemployeebob/modules/custom_module/README.md`.) This is to minimize the risk of file name conflicts between different users as they add images to help illustrate parts of their README files. ## Coder modules @@ -197,7 +197,7 @@ In addition to the general criteria, all README files must have the following: - `avatar_url` (optional string) – A relative/absolute URL pointing to your avatar for the Registry site. It is strongly recommended that you commit avatar images to this repo and reference them via a relative URL. - `linkedin` (optional string) – A URL pointing to your LinkedIn page. - `support_email` (optional string) – An email for users to reach you at if they need help with a published module/template. - - `status` (optional string union) – If defined, this must be one of `"community"`, `"partner"`, or `"official"`. `"community"` is treated as the default value if not specified, and should be used for the majority of external contributions. `"partner"` is for companies who have a formal business partnership with Coder. `"official"` should be used only by Coder and Coder satellite companies. + - `status` (optional string union) – If defined, this must be one of `"community"`, `"partner"`, or `"official"`. `"community"` is treated as the default value if not specified, and should be used for the majority of external contributions. `"partner"` is for companies who have a formal business partnership with Coder. `"official"` should be used only by Coder. - The README body (the content that goes directly below the frontmatter) is allowed to be empty, but if it isn't, it must follow all the rules above. diff --git a/cmd/readmevalidation/contributors.go b/cmd/readmevalidation/contributors.go index 3ef980e..daee82c 100644 --- a/cmd/readmevalidation/contributors.go +++ b/cmd/readmevalidation/contributors.go @@ -16,15 +16,15 @@ import ( var validContributorStatuses = []string{"official", "partner", "community"} type contributorProfileFrontmatter struct { - DisplayName string `yaml:"display_name"` - Bio string `yaml:"bio"` - // Script assumes that if value is nil, the Registry site build step will - // backfill the value with the user's GitHub avatar URL - AvatarURL *string `yaml:"avatar"` - LinkedinURL *string `yaml:"linkedin"` - WebsiteURL *string `yaml:"website"` - SupportEmail *string `yaml:"support_email"` - ContributorStatus *string `yaml:"status"` + DisplayName string `yaml:"display_name"` + Bio string `yaml:"bio"` + ContributorStatus string `yaml:"status"` + // Script assumes that if avatar URL is nil, the Registry site build step + // will backfill the value with the user's GitHub avatar URL + AvatarURL *string `yaml:"avatar"` + LinkedinURL *string `yaml:"linkedin"` + WebsiteURL *string `yaml:"website"` + SupportEmail *string `yaml:"support_email"` } type contributorProfileReadme struct { @@ -105,13 +105,9 @@ func validateContributorWebsite(websiteURL *string) error { return nil } -func validateContributorStatus(status *string) error { - if status == nil { - return nil - } - - if !slices.Contains(validContributorStatuses, *status) { - return fmt.Errorf("contributor status %q is not valid", *status) +func validateContributorStatus(status string) error { + if !slices.Contains(validContributorStatuses, status) { + return fmt.Errorf("contributor status %q is not valid", status) } return nil From 96b5f7bc1301cc71bb98af153c0d8c3e3849800c Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Fri, 9 May 2025 22:02:22 +0000 Subject: [PATCH 9/9] fix: rewrite section to affect new validation logic --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3cd915d..3b624b7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -197,7 +197,7 @@ In addition to the general criteria, all README files must have the following: - `avatar_url` (optional string) – A relative/absolute URL pointing to your avatar for the Registry site. It is strongly recommended that you commit avatar images to this repo and reference them via a relative URL. - `linkedin` (optional string) – A URL pointing to your LinkedIn page. - `support_email` (optional string) – An email for users to reach you at if they need help with a published module/template. - - `status` (optional string union) – If defined, this must be one of `"community"`, `"partner"`, or `"official"`. `"community"` is treated as the default value if not specified, and should be used for the majority of external contributions. `"partner"` is for companies who have a formal business partnership with Coder. `"official"` should be used only by Coder. + - `status` (string union) – If defined, this must be one of `"community"`, `"partner"`, or `"official"`. `"community"` should be used for the majority of external contributions. `"partner"` is for companies who have a formal business partnership with Coder. `"official"` should be used only by Coder employees. - The README body (the content that goes directly below the frontmatter) is allowed to be empty, but if it isn't, it must follow all the rules above.