diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 00000000..58620e0a --- /dev/null +++ b/.github/README.md @@ -0,0 +1,18 @@ +# Overview GitHub workflows + +This document explains how and why we organize our workflows for a CI strategy using GitHub actions. + +## Directories and file structure + +Our directory structure is as follows: + +- 📁 `/workflows` contains GitHub workflow files + +## Pipeline + +When a Pull Request is opened targeting `main`, these workflows are triggered: + +- [`pull-request`](./workflows/pull-request.yaml) + - runs linting and code / markdown formatting checks +- [`link-check`](./workflows/link-check.yaml) + - checks that internal links are correct diff --git a/.github/workflows/link-check.yaml b/.github/workflows/link-check.yaml new file mode 100644 index 00000000..b636a9b0 --- /dev/null +++ b/.github/workflows/link-check.yaml @@ -0,0 +1,39 @@ +name: "Link check for internal links" +on: + push: + branches: ["main"] + paths: + - "**.md" + pull_request: + branches: ["main"] + paths: + - "**.md" + +jobs: + link-checker: + name: Check internal and external links in markdown files + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac #v4.0.0 + with: + ref: ${{ github.ref }} + fetch-depth: 0 + + - name: Set Node version + id: versions + shell: bash + run: | + NODE_VERSION=$(jq -r '.engines.node' package.json) + echo "NODE_VERSION=$NODE_VERSION" >> $GITHUB_OUTPUT + + - name: Setup node.js + uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 + with: + node-version: ${{ steps.versions.outputs.NODE_VERSION }} + + - name: Install dependencies + run: npm install + + - name: Run markdown link check + run: npm run markdown-link-check -- -q -o diff --git a/.github/workflows/pull-request.yaml b/.github/workflows/pull-request.yaml new file mode 100644 index 00000000..24554de3 --- /dev/null +++ b/.github/workflows/pull-request.yaml @@ -0,0 +1,39 @@ +name: "Static code and markdown analysis" + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +jobs: + static_analysis: + name: Static analysis code and markdown + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac #v4.0.0 + with: + ref: ${{ github.ref }} + fetch-depth: 0 + + - name: Set Node version + id: versions + shell: bash + run: | + NODE_VERSION=$(jq -r '.engines.node' package.json) + echo "NODE_VERSION=$NODE_VERSION" >> $GITHUB_OUTPUT + + - name: Setup node.js + uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 + with: + node-version: ${{ steps.versions.outputs.NODE_VERSION }} + + - name: Install dependencies + run: npm install + + - name: Linting code files + run: npm run lint:code + + - name: Linting markdown files + run: npm run lint:markdown diff --git a/.markdownlint.json b/.markdownlint.json index 8c4b013a..5b1334c9 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -2,5 +2,6 @@ "default": true, "MD013": false, "MD030": false, - "MD046": false + "MD046": false, + "MD051": false } diff --git a/README.md b/README.md index c9e845c1..6a3387ee 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Klaw documentation -- Please be aware of our [Code of Conduct](/CODE_OF_CONDUCT.md) ❤️ +- Please be aware of our [Code of Conduct](CODE_OF_CONDUCT.md) ❤️ ## About @@ -35,15 +35,22 @@ npm start ℹ️ You can see all our scripts in the [`package.json`](package.json). You can also run `npm run` in your console to get a list of all available scripts. +Please note that you have to set up your [local development](#installation-and-usage) in order to use the scripts. + Here are the important ones you're likely to use: - `npm start`: starts the app for development - `npm run build`: will build the documentation site and generate all static files in "build". After `build` you can run `npm run serve` to test your build locally -- `lint`: runs a format check and if no error is found, lints code and markdown files in the project. +- `npm run lint`: runs a format check and if no error is found, lints code and markdown files in the project. - the linting script does not mutate your code. See [Linting and code formatting](#linting-and-code-formatting) for more info. -- `reformat`: runs the code formatter (prettier) as well as the markdown linter in fix mode. This will mutate you code. +- `npm run reformat`: runs the code formatter (prettier) as well as the markdown linter in fix mode. This will mutate +- `npm run markdown-link-check`: checks if there are any broken links. Note: This requires internet connection, as it + does check external links, too! + - Run `npm run markdown-link-check -- -o` to only check for internal links (offline mode). + - Run `npm run markdown-link-check -- -q` to only log failures. + - Run `npm run markdown-link-check -- -f /path/your-file.md` to run checks for only one file. ℹ️ We are using a custom hook path for enabling pre-commit hooks. This path is set in the local git config when running `npm install`. diff --git a/blog/2023/09/schema-management-disaster-recovery-in-klaw.md b/blog/2023/09/schema-management-disaster-recovery-in-klaw.md index 3adebd4a..d3d2cfb8 100644 --- a/blog/2023/09/schema-management-disaster-recovery-in-klaw.md +++ b/blog/2023/09/schema-management-disaster-recovery-in-klaw.md @@ -176,7 +176,7 @@ Select the schemas you want to sync with the cluster. Once you submit your choic schemas directly into your designated schema registry environment. For more information on this synchronization process, refer to -**[sync-schemas-to-cluster](../../../docs/HowTo/kafka-cluster-migration/sync-schemas-to-cluster)** +**[sync-schemas-to-cluster](/docs/HowTo/kafka-cluster-migration/sync-schemas-to-cluster)** The following video demonstrates migrating schemas to a Schema Registry, specifically focusing on a couple of subjects already stored in Klaw. diff --git a/docs/Concepts/index.md b/docs/Concepts/index.md index f3fe9c10..841a5fe0 100644 --- a/docs/Concepts/index.md +++ b/docs/Concepts/index.md @@ -1,11 +1,11 @@ # Concepts -- [Workflows](workflows) -- [Users & Teams](users-teams) -- [Clusters & Environments](clusters-environments) -- [Synchronize](synchronize) -- [Metastore data](metastore) -- [Advanced configuration](config) -- [Promotion](promotion) -- [Switch Teams](switch-teams) -- [High Availability](high-availability) +- [Workflows](workflows.md) +- [Users & Teams](users-teams.md) +- [Clusters & Environments](clusters-environments.md) +- [Synchronize](synchronize.md) +- [Metastore data](metastore.md) +- [Advanced configuration](config.md) +- [Promotion](promotion.md) +- [Switch Teams](switch-teams.md) +- [High Availability](high-availability.md) diff --git a/docs/Concepts/switch-teams.md b/docs/Concepts/switch-teams.md index 5801880c..1ba67362 100644 --- a/docs/Concepts/switch-teams.md +++ b/docs/Concepts/switch-teams.md @@ -12,7 +12,7 @@ To switch between teams in Klaw, - Users must have the switch teams option enabled in their profile. A user's profile must also include the user's base team and a list of available teams for switching. To learn how to enable switch - teams, see [details](../HowTo/teams/switch-teams) + teams, see [details](../HowTo/teams/switch-teams.md) - Only superadmin or a user with `ADD_EDIT_DELETE_USERS` permission can enable a user profile to switch teams, - Once the option to switch teams is enabled, users can easily switch diff --git a/docs/HowTo/authentication/index.md b/docs/HowTo/authentication/index.md index 025bac94..c4d231b6 100644 --- a/docs/HowTo/authentication/index.md +++ b/docs/HowTo/authentication/index.md @@ -2,8 +2,8 @@ How to authenticate a user in Klaw. -- [UserPwd](userpwd-db) -- [Windows AD](windows-ad) -- [Azure AD](azure-ad) -- [Google Account](google-account) -- [Third Party account](third-party-account) +- [UserPwd](userpwd-db.md) +- [Windows AD](windows-ad.md) +- [Azure AD](azure-ad.md) +- [Google Account](google-account.md) +- [Third Party account](third-party-account.md) diff --git a/docs/HowTo/clusterconnectivity/confluent-cloud-kafka-cluster-ssl-protocol.md b/docs/HowTo/clusterconnectivity/confluent-cloud-kafka-cluster-ssl-protocol.md index 5db41566..a6c98847 100644 --- a/docs/HowTo/clusterconnectivity/confluent-cloud-kafka-cluster-ssl-protocol.md +++ b/docs/HowTo/clusterconnectivity/confluent-cloud-kafka-cluster-ssl-protocol.md @@ -12,10 +12,14 @@ cluster with Klaw. The following functionalities are available in Klaw for Confl - Sync Topics - Sync ACLs -References : +References: - - +[//]: # "" + +- +- + +[//]: # "" ## Prerequisite diff --git a/docs/HowTo/clusterconnectivity/index.md b/docs/HowTo/clusterconnectivity/index.md index 0a30d59d..2d2f8256 100644 --- a/docs/HowTo/clusterconnectivity/index.md +++ b/docs/HowTo/clusterconnectivity/index.md @@ -2,25 +2,25 @@ Efficiently manage connections between Klaw and various Kafka cluster types. -- [Klaw database connection](klaw-db-connection) +- [Klaw database connection](klaw-db-connection.md) -- [Connect Klaw Core and Klaw Cluster APIs](klaw-core-with-clusterapi) +- [Connect Klaw Core and Klaw Cluster APIs](klaw-core-with-clusterapi.md) -- [Connect to Apache Kafka cluster using SSL protocol](kafka-cluster-ssl-protocol) +- [Connect to Apache Kafka cluster using SSL protocol](kafka-cluster-ssl-protocol.md) -- [Connect to Apache Kafka cluster using SASL protocol](kafka-cluster-sasl-ssl-protocol) +- [Connect to Apache Kafka cluster using SASL protocol](kafka-cluster-sasl-ssl-protocol.md) -- [Connect to Schema Registry cluster](sr-cluster-ssl-protocol) +- [Connect to Schema Registry cluster](sr-cluster-ssl-protocol.md) -- [Connect with Aiven for Apache Kafka® cluster using SSL protocol](aiven-kafka-cluster-ssl-protocol) +- [Connect with Aiven for Apache Kafka® cluster using SSL protocol](aiven-kafka-cluster-ssl-protocol.md) -- [Connect with Aiven For Apache Kafka® cluster using SASL protocol](aiven-kafka-cluster-sasl-ssl-protocol) +- [Connect with Aiven For Apache Kafka® cluster using SASL protocol](aiven-kafka-cluster-sasl-ssl-protocol.md) -- [Connect to Karapace schema registry](aiven-karapace-cluster-ssl-protocol) +- [Connect to Karapace schema registry](aiven-karapace-cluster-ssl-protocol.md) -- [Aiven For Apache Kafka Connect cluster](aiven-kafka-connect-cluster-ssl-protocol) +- [Aiven For Apache Kafka Connect cluster](aiven-kafka-connect-cluster-ssl-protocol.md) -- [Connect with Confluent Cloud Kafka® cluster using SSL protocol](confluent-cloud-kafka-cluster-ssl-protocol) +- [Connect with Confluent Cloud Kafka® cluster using SSL protocol](confluent-cloud-kafka-cluster-ssl-protocol.md) Klaw supports the following Kafka flavors: diff --git a/docs/HowTo/clusters.md b/docs/HowTo/clusters.md index 4fbca6fd..eca0a774 100644 --- a/docs/HowTo/clusters.md +++ b/docs/HowTo/clusters.md @@ -26,14 +26,16 @@ To add a new cluster in Klaw, follow these steps: 3. On the **Clusters** screen, select **Add Cluster**. 4. On the **Add Kafka Cluster** screen, provide the following information: - - **Cluster type**: Choose a cluster type from the dropdown menu (Kafka, Schema Registry, or Kafka Connect). Based on the cluster type, you need to include additional information. + - **Cluster type**: Choose a cluster type from the dropdown menu (Kafka, Schema Registry, or Kafka Connect). Based + on the cluster type, you need to include additional information. - **Cluster name**: Enter a name for the cluster, for example, Dev_cluster. - **Kafka flavor**: Select a Kafka flavor from the dropdown list. - Provide the additional information required based on the **cluster type**: - If you are adding a **Kafka cluster**, enter the following: - **Protocol**: Select either plaintext or SSL. - - **RestAPI servers**: Enter the URL of the REST API servers, for example, . - - **Bootstrap servers**: Enter the comma-separated list of bootstrap servers, for example, `server1:9092,server2:9092,server3:9092`. + - **RestAPI servers**: Enter the URL of the REST API servers, for example, `https://server:12695`. + - **Bootstrap servers**: Enter the comma-separated list of bootstrap servers, for + example, `server1:9092,server2:9092,server3:9092`. - If you are adding a **Schema Registry cluster**, enter the following: - **Protocol**: Select either plaintext or SSL. - **Bootstrap servers**: Enter the comma-separated list of bootstrap servers. @@ -69,7 +71,8 @@ To delete a cluster, follow these steps: 3. Click the **Delete** icon in the **Actions** column for the cluster you want to delete. - You can only delete clusters that are not associated with any environment. If a cluster is associated with any environment, you must remove the environment association before deleting the cluster. + You can only delete clusters that are not associated with any environment. If a cluster is associated with any + environment, you must remove the environment association before deleting the cluster. 4. On the confirmation screen, select **delete** to confirm the deletion of the cluster. The selected cluster is deleted. diff --git a/docs/HowTo/connectors/Request-a-new-connector.md b/docs/HowTo/connectors/Request-a-new-connector.md index e289c311..bf28909d 100644 --- a/docs/HowTo/connectors/Request-a-new-connector.md +++ b/docs/HowTo/connectors/Request-a-new-connector.md @@ -8,7 +8,7 @@ Kafka Connector. ## Prerequisites - The Superadmin must configure the environment within Klaw. See - [Environments](../../Concepts/clusters-environments) for the steps to configure the environments. + [Environments](../../Concepts/clusters-environments.md) for the steps to configure the environments. ## Make a connector request diff --git a/docs/HowTo/connectors/index.md b/docs/HowTo/connectors/index.md index 7d73b955..7a9618a4 100644 --- a/docs/HowTo/connectors/index.md +++ b/docs/HowTo/connectors/index.md @@ -28,10 +28,10 @@ them to other environments, including production. The team that owns the connector is responsible for making the final decision related to any requests, such as approving or declining them. -- [Request a new Connector](Request-a-new-connector) +- [Request a new Connector](Request-a-new-connector.md) -- [Approve a Connector](Approve-a-connector) +- [Approve a Connector](Approve-a-connector.md) -- [My Connector Requests](My-connector-requests) +- [My Connector Requests](My-connector-requests.md) -- [Manage Connectors](manage-connectors) +- [Manage Connectors](manage-connectors.md) diff --git a/docs/HowTo/exportimport/index.md b/docs/HowTo/exportimport/index.md index 884ad4e6..e7aaa3dc 100644 --- a/docs/HowTo/exportimport/index.md +++ b/docs/HowTo/exportimport/index.md @@ -5,6 +5,6 @@ instance are important operations. These features provided by Klaw serve the purpose of disaster recovery and migrations, ensuring data security and smooth transitions. -- [Export Klaw data](exportdata) +- [Export Klaw data](exportdata.md) -- [Import Klaw data](importdata) +- [Import Klaw data](importdata.md) diff --git a/docs/HowTo/index.md b/docs/HowTo/index.md index fe7d7e8c..593bcfa0 100644 --- a/docs/HowTo/index.md +++ b/docs/HowTo/index.md @@ -2,23 +2,23 @@ How to install and configure Klaw. -- [Installation](installation) -- [Manage Klaw connections](clusterconnectivity) -- [Authentication](authentication) -- [Authorization](authorization) -- [Kafka Cluster Migration](kafka-cluster-migration) -- [Topics](topics) -- [Subscriptions](subscriptions) -- [Schemas](schemas) -- [Connectors](connectors) -- [Teams](teams) -- [Users](users) -- [Roles Permissions](rolespermissions) -- [Notifications](notifications) -- [Clusters](clusters) -- [Environments](environments) -- [Tenants](tenant) -- [Analytics](analytics) -- [Settings](settings) -- [Export Import Klaw data](exportimport) -- [Others](zothers) +- [Installation](installation/index.md) +- [Manage Klaw connections](clusterconnectivity/index.md) +- [Authentication](authentication/index.md) +- [Authorization](authorization.md) +- [Kafka Cluster Migration](kafka-cluster-migration/index.md) +- [Topics](topics/index.md) +- [Subscriptions](subscriptions/index.md) +- [Schemas](schemas/index.md) +- [Connectors](connectors/index.md) +- [Teams](teams/index.md) +- [Users](users.md) +- [Roles Permissions](rolespermissions.md) +- [Notifications](notifications/index.md) +- [Clusters](clusters.md) +- [Environments](environments.md) +- [Tenants](tenant.md) +- [Analytics](analytics.md) +- [Settings](settings.md) +- [Export Import Klaw data](exportimport/index.md) +- [Others](zothers.md) diff --git a/docs/HowTo/installation/index.md b/docs/HowTo/installation/index.md index e5d4c998..e67149c0 100644 --- a/docs/HowTo/installation/index.md +++ b/docs/HowTo/installation/index.md @@ -2,7 +2,9 @@ Klaw can be installed and configured in two ways: -- [Run From Source](run-source) -- [Run from Docker](run-docker) +- [Run From Source](run-source.md) +- [Run from Docker](run-docker.md) -Once Klaw is installed, you can use the [Configure Klaw Wizard](configure-klaw-wizard) to configure your Kafka cluster and start managing your Kafka resources. +Once Klaw is installed, you can use the [Configure Klaw Wizard](configure-klaw-wizard.md) to configure your Kafka +cluster +and start managing your Kafka resources. diff --git a/docs/HowTo/installation/run-source.md b/docs/HowTo/installation/run-source.md index bb814dba..f852ca52 100644 --- a/docs/HowTo/installation/run-source.md +++ b/docs/HowTo/installation/run-source.md @@ -12,7 +12,10 @@ the source. 2. Experimental UI Configuration - A redesigned user interface for Browse topics, providing a new look and feel for managing Kafka topics. It consists of changes to the layout, styling, and overall appearance of the interface, as well as improvements to make browsing and working topics easier, more efficient, and more accessible. This new look and feel is achieved by switching to React. + A redesigned user interface for Browse topics, providing a new look and feel for managing Kafka topics. It consists + of changes to the layout, styling, and overall appearance of the interface, as well as improvements to make browsing + and working topics easier, more efficient, and more accessible. This new look and feel is achieved by switching to + React. The redesigned UI is enabled by default since Release 2.4.0. If you want to use Klaw without the preview, for now, you can disable it: @@ -22,8 +25,10 @@ the source. 3. Configure Cluster API access - - Configure the property `klaw.clusterapi.access.base64.secret` in the `application.properties` file with a base64 string in the module: core. - - Configure the property `klaw.clusterapi.access.base64.secret` in the `application.properties` file with the above base64 string in the module: cluster-api. + - Configure the property `klaw.clusterapi.access.base64.secret` in the `application.properties` file with a base64 + string in the module: core. + - Configure the property `klaw.clusterapi.access.base64.secret` in the `application.properties` file with the above + base64 string in the module: cluster-api. ```{.bash caption="Bash Generation Example"} echo "ThisIsExactlyA32CharStringSecret" | base64 @@ -35,14 +40,17 @@ the source. VGhpc0lzRXhhY3RseUEzMkNoYXJTdHJpbmdTZWNyZXQ= ``` -4. Build the project by running `./mvnw clean package` for Linux(bash) or `mvnw clean package` for Windows, from the top level of the project directory. This will build JAR files in the `target/` directories of each module: core and cluster-api. +4. Build the project by running `./mvnw clean package` for Linux(bash) or `mvnw clean package` for Windows, from the top + level of the project directory. This will build JAR files in the `target/` directories of each module: core and + cluster-api. node, npm, and pnpm are also installed locally (required for React UI assets) through maven execution plugins. If the build runs into an error while installing node/npm/pnpm, you can - Disable the execution plugins (for node/npm/pnpm) in module core/pom.xml - - Manually install node/npm/pnpm and copy assets by following the procedure here. [Manual installation of React](https://github.com/aiven/klaw/blob/main/coral/README.md) + - Manually install node/npm/pnpm and copy assets by following the procedure + here. [Manual installation of React](https://github.com/aiven/klaw/blob/main/coral/README.md) 5. Start the API component by running its JAR file: @@ -65,4 +73,5 @@ the source. ## Next Steps -Once you have finished verifying your installation, we recommend you follow the documentation in [configure-klaw-wizard](configure-klaw-wizard). +Once you have finished verifying your installation, we recommend you follow the documentation +in [configure-klaw-wizard](configure-klaw-wizard.md). diff --git a/docs/HowTo/kafka-cluster-migration/index.md b/docs/HowTo/kafka-cluster-migration/index.md index 892d8b94..2862cbab 100644 --- a/docs/HowTo/kafka-cluster-migration/index.md +++ b/docs/HowTo/kafka-cluster-migration/index.md @@ -6,26 +6,29 @@ option. ## New Klaw installation -Suppose you're setting up a fresh Klaw environment with pre-existing data on other clusters. In that case, Klaw allows for the seamless synchronization of topics and Access Control Lists (ACLs) from those clusters into your new setup. +Suppose you're setting up a fresh Klaw environment with pre-existing data on other clusters. In that case, Klaw allows +for the seamless synchronization of topics and Access Control Lists (ACLs) from those clusters into your new setup. ## Existing Klaw environments -If your Klaw instance is already up and running—restored from a backup or unaffected by a cluster outage—you can leverage the `Synchronize` option to reinstate or update topics and ACLs across clusters, ensuring data consistency and uninterrupted operations. +If your Klaw instance is already up and running—restored from a backup or unaffected by a cluster outage—you can +leverage the `Synchronize` option to reinstate or update topics and ACLs across clusters, ensuring data consistency and +uninterrupted operations. ## Quick links -- [Tenant Configuration](tenant-config) +- [Tenant Configuration](tenant-config.md) -- [Synchronize topics from cluster](sync-topics-from-cluster) +- [Synchronize topics from cluster](sync-topics-from-cluster.md) -- [Synchronize topics to cluster](sync-topics-to-cluster) +- [Synchronize topics to cluster](sync-topics-to-cluster.md) -- [Synchronize ACLs from cluster](sync-acls-from-cluster) +- [Synchronize ACLs from cluster](sync-acls-from-cluster.md) -- [Synchronize ACLs to cluster](sync-acls-to-cluster) +- [Synchronize ACLs to cluster](sync-acls-to-cluster.md) -- [Synchronize connectors from cluster](sync-connectors-from-cluster) +- [Synchronize connectors from cluster](sync-connectors-from-cluster.md) -- [Synchronize schemas from cluster](sync-schemas-from-cluster) +- [Synchronize schemas from cluster](sync-schemas-from-cluster.md) -- [Synchronize schemas to cluster](sync-schemas-to-cluster) +- [Synchronize schemas to cluster](sync-schemas-to-cluster.md) diff --git a/docs/HowTo/kafka-cluster-migration/sync-acls-from-cluster.md b/docs/HowTo/kafka-cluster-migration/sync-acls-from-cluster.md index 471f15da..a86552b8 100644 --- a/docs/HowTo/kafka-cluster-migration/sync-acls-from-cluster.md +++ b/docs/HowTo/kafka-cluster-migration/sync-acls-from-cluster.md @@ -7,7 +7,8 @@ in Klaw. ## Prerequisites -1. **Environment configuration**: Make sure that the `klaw.tenant.config` property is set up as described in the [tenant configuration](tenant-config) documentation. +1. **Environment configuration**: Make sure that the `klaw.tenant.config` property is set up as described in + the [tenant configuration](tenant-config.md) documentation. 2. **User permissions**: Log in with a user account with either `SUPERADMIN` or `SYNC_SUBSCRIPTIONS` permissions. ## Steps to syncrhronize ACLs @@ -18,6 +19,7 @@ in Klaw. ![image](../../../static/images/sync/SyncAclsFromCluster.png) -3. To view all existing ACLs, whether assigned to teams or not, select the **Show all** option. This will display all Kafka ACLs, both assigned and unassigned to any teams. +3. To view all existing ACLs, whether assigned to teams or not, select the **Show all** option. This will display all + Kafka ACLs, both assigned and unassigned to any teams. Following the above steps, you can synchronize ACLs from an Apache Kafka cluster with Klaw metadata. diff --git a/docs/HowTo/kafka-cluster-migration/sync-acls-to-cluster.md b/docs/HowTo/kafka-cluster-migration/sync-acls-to-cluster.md index 820a379a..be3c0d2a 100644 --- a/docs/HowTo/kafka-cluster-migration/sync-acls-to-cluster.md +++ b/docs/HowTo/kafka-cluster-migration/sync-acls-to-cluster.md @@ -6,8 +6,10 @@ them on the Apache Kafka cluster. ## Prerequisites -1. **Environment configuration**: Make sure the `klaw.tenant.config` property is correctly configured, as outlined in the [tenant configuration](tenant-config) guide. -2. **User permissions**: Log in with a user account with either `SUPERADMIN` or a user granted the `SYNC_BACK_SUBSCRIPTIONS` permission. +1. **Environment configuration**: Make sure the `klaw.tenant.config` property is correctly configured, as outlined in + the [tenant configuration](tenant-config.md) guide. +2. **User permissions**: Log in with a user account with either `SUPERADMIN` or a user granted + the `SYNC_BACK_SUBSCRIPTIONS` permission. ## Steps to synchronize ACLs diff --git a/docs/HowTo/kafka-cluster-migration/sync-connectors-from-cluster.md b/docs/HowTo/kafka-cluster-migration/sync-connectors-from-cluster.md index cce36a04..3044804a 100644 --- a/docs/HowTo/kafka-cluster-migration/sync-connectors-from-cluster.md +++ b/docs/HowTo/kafka-cluster-migration/sync-connectors-from-cluster.md @@ -7,7 +7,8 @@ them to a team in Klaw. ## Prerequisites -1. **Environment configuration**: Make sure to configure your environments and set the `klaw.tenant.config` property as described in the [tenant configuration](tenant-config) guide. +1. **Environment configuration**: Make sure to configure your environments and set the `klaw.tenant.config` property as + described in the [tenant configuration](tenant-config.md) guide. 2. **User permissions**: You need to be logged in as a `SUPERADMIN` or a user with the `SYNC_CONNECTORS` permission. ## Steps to synchronize connectors @@ -23,4 +24,6 @@ them to a team in Klaw. ![image](../../../static/images/sync/SyncConnectorsFromCluster.png) -In case a connector is deleted from the cluster but still exists in Klaw metadata, you can remove it by selecting **REMOVE FROM KLAW** at the end of the corresponding record. + +In case a connector is deleted from the cluster but still exists in Klaw metadata, you can remove it by selecting +**REMOVE FROM KLAW** at the end of the corresponding record. diff --git a/docs/HowTo/kafka-cluster-migration/sync-topics-from-cluster.md b/docs/HowTo/kafka-cluster-migration/sync-topics-from-cluster.md index 45ea8404..bf5b29ce 100644 --- a/docs/HowTo/kafka-cluster-migration/sync-topics-from-cluster.md +++ b/docs/HowTo/kafka-cluster-migration/sync-topics-from-cluster.md @@ -1,10 +1,12 @@ # Synchronize Topics from cluster -To synchronize topics from an Apache Kafka cluster with Klaw, follow the procedure below, which involves retrieving the topics from an existing Apache Kafka cluster and assigning them to a Klaw team. +To synchronize topics from an Apache Kafka cluster with Klaw, follow the procedure below, which involves retrieving the +topics from an existing Apache Kafka cluster and assigning them to a Klaw team. ## Prerequisites -- **Configuration**: Ensure that your environments and the `klaw.tenant.config` property are configured as specified in the [Tenant Configuration](tenant-config) documentation. +- **Configuration**: Ensure that your environments and the `klaw.tenant.config` property are configured as specified in + the [Tenant Configuration](tenant-config.md) documentation. - **User Permissions**: Log in as either a `SUPERADMIN` or as a user with the `SYNC_TOPICS` permission. ## Steps to synchronize topics diff --git a/docs/HowTo/kafka-cluster-migration/sync-topics-to-cluster.md b/docs/HowTo/kafka-cluster-migration/sync-topics-to-cluster.md index d5b39ec8..c279c586 100644 --- a/docs/HowTo/kafka-cluster-migration/sync-topics-to-cluster.md +++ b/docs/HowTo/kafka-cluster-migration/sync-topics-to-cluster.md @@ -6,8 +6,10 @@ them on the Apache Kafka cluster. ## Prerequisites -- **Configuration**: Make sure to configure the environments and the `klaw.tenant.config` property. Refer to the [Tenant Configuration](tenant-config) documentation for more information. -- **User Permissions**: Log in with a user account with either `SUPERADMIN` or as a user with the `SYNC_BACK_TOPICS` permission. +- **Configuration**: Make sure to configure the environments and the `klaw.tenant.config` property. Refer to + the [Tenant Configuration](tenant-config.md) documentation for more information. +- **User Permissions**: Log in with a user account with either `SUPERADMIN` or as a user with the `SYNC_BACK_TOPICS` + permission. ## Steps to synchronize topics diff --git a/docs/HowTo/notifications/index.md b/docs/HowTo/notifications/index.md index fa636c4c..59589ed5 100644 --- a/docs/HowTo/notifications/index.md +++ b/docs/HowTo/notifications/index.md @@ -3,4 +3,4 @@ What notifications are available in Klaw how to configure them and how they work. -[Email Notification](email-notification) +[Email Notification](email-notification.md) diff --git a/docs/HowTo/schemas/Promote-a-schema.md b/docs/HowTo/schemas/Promote-a-schema.md index a1af4d7d..57e99b81 100644 --- a/docs/HowTo/schemas/Promote-a-schema.md +++ b/docs/HowTo/schemas/Promote-a-schema.md @@ -9,7 +9,7 @@ higher environments as needed. Before using this functionality, the Superadmin must ensure that all prerequisites are met. For more information, see -[Promotion](../../Concepts/promotion). +[Promotion](../../Concepts/promotion.md). ## Schema promotion diff --git a/docs/HowTo/schemas/Request-a-schema.md b/docs/HowTo/schemas/Request-a-schema.md index 36a1b487..a4c18817 100644 --- a/docs/HowTo/schemas/Request-a-schema.md +++ b/docs/HowTo/schemas/Request-a-schema.md @@ -8,7 +8,7 @@ decline any schema request. ## Prerequisites - The Superadmin must configure the environment within Klaw. See - [Environments](../../Concepts/clusters-environments) for the steps to configure the environments. + [Environments](../../Concepts/clusters-environments.md) for the steps to configure the environments. ## Make a schema request @@ -30,7 +30,9 @@ decline any schema request. topic name. :::note - Registering schemas on subject-key is not possible in Klaw. Klaw enforces `TopicNameStrategy` strategy, and it uses the topic name to determine the subject to be used for schema lookups. This strategy enforces following only one schema per topic. + Registering schemas on subject-key is not possible in Klaw. Klaw enforces `TopicNameStrategy` strategy, and it uses + the topic name to determine the subject to be used for schema lookups. This strategy enforces following only one + schema per topic. ::: 5. Upload the schema (avro) that you wish to register on this subject. diff --git a/docs/HowTo/schemas/index.md b/docs/HowTo/schemas/index.md index 7ab06386..39712b77 100644 --- a/docs/HowTo/schemas/index.md +++ b/docs/HowTo/schemas/index.md @@ -35,10 +35,10 @@ Schema management in Klaw is structured around the following: ## Learn how to -- [Request a schema](Request-a-schema) +- [Request a schema](Request-a-schema.md) -- [Promote a schema](Promote-a-schema) +- [Promote a schema](Promote-a-schema.md) -- [Approve a schema](manage-schemas) +- [Approve a schema](manage-schemas.md) -- [My Schema Requests](My-schema-requests) +- [My Schema Requests](My-schema-requests.md) diff --git a/docs/HowTo/subscriptions/Request-a-subscription.md b/docs/HowTo/subscriptions/Request-a-subscription.md index bab7159d..92294a46 100644 --- a/docs/HowTo/subscriptions/Request-a-subscription.md +++ b/docs/HowTo/subscriptions/Request-a-subscription.md @@ -7,7 +7,7 @@ responsible for approving or declining subscription requests. ## Prerequisites - The Superadmin must configure the environment within Klaw. See - [Environments](../../Concepts/clusters-environments) for the steps to configure the environments. + [Environments](../../Concepts/clusters-environments.md) for the steps to configure the environments. ## Make a subscription request diff --git a/docs/HowTo/subscriptions/index.md b/docs/HowTo/subscriptions/index.md index cbc5ccee..a9adb698 100644 --- a/docs/HowTo/subscriptions/index.md +++ b/docs/HowTo/subscriptions/index.md @@ -43,10 +43,10 @@ subscription, the team that owns the topic is responsible for making the final decision, such as approving or declining a request from the same team or another team to produce/consume events from the topic. -- [Request a subscription](Request-a-subscription) +- [Request a subscription](Request-a-subscription.md) -- [Approve a subscription](Approve-a-subscription) +- [Approve a subscription](Approve-a-subscription.md) -- [Delete a subscription](Delete-a-subscription) +- [Delete a subscription](Delete-a-subscription.md) -- [My Subscription Requests](My-subscription-requests) +- [My Subscription Requests](My-subscription-requests.md) diff --git a/docs/HowTo/teams/index.md b/docs/HowTo/teams/index.md index 0eec370a..799103f0 100644 --- a/docs/HowTo/teams/index.md +++ b/docs/HowTo/teams/index.md @@ -7,6 +7,5 @@ in a team makes a request, a peer from the same team is expected to approve. Teams can be managed by a user with `ADD_EDIT_DELETE_TEAMS` permission. -- [Switch Teams](switch-teams) - -- [Manage Teams](manage-teams) +- [Switch Teams](switch-teams.md) +- [Manage Teams](manage-teams.md) diff --git a/docs/HowTo/topics/Promote-a-topic.md b/docs/HowTo/topics/Promote-a-topic.md index 06879918..ffb131af 100644 --- a/docs/HowTo/topics/Promote-a-topic.md +++ b/docs/HowTo/topics/Promote-a-topic.md @@ -9,7 +9,7 @@ environments as required. The Superadmin must ensure all prerequisites are met before this functionality is used see -[Promotion](../../Concepts/promotion) +[Promotion](../../Concepts/promotion.md) ## Topic Promotion diff --git a/docs/HowTo/topics/Request-a-new-topic.md b/docs/HowTo/topics/Request-a-new-topic.md index 72a33cda..f6cab425 100644 --- a/docs/HowTo/topics/Request-a-new-topic.md +++ b/docs/HowTo/topics/Request-a-new-topic.md @@ -10,11 +10,11 @@ List requests made against the topic. ## Prerequisites - The Superadmin must configure the environment within Klaw, see - [Environments](../../Concepts/clusters-environments) + [Environments](../../Concepts/clusters-environments.md) for the steps to configure the environments. - The Superadmin must also update the Server Config to include the environments, see - [Configure Klaw](../installation/configure-klaw-wizard) + [Configure Klaw](../installation/configure-klaw-wizard.md) for the steps to configure the server settings. ## Make a request @@ -32,10 +32,10 @@ List requests made against the topic. conventions, or Klaw will enforce a minimum 5-character name. 4. Select the number of Topic Partitions you would like for your topic. To learn more, see - [partitions](https://kafka.apache.org/intro#intro_concepts_and_terms). + [partitions](https://kafka.apache.org/intro#intro_concepts_and_terms.md). 5. Select the Replication factor. This is the number of times each event is written to a broker. To learn more, see - [replication](https://kafka.apache.org/intro#intro_concepts_and_terms). + [replication](https://kafka.apache.org/intro#intro_concepts_and_terms.md). 6. Add any advanced topic configuration settings. To learn more, see Kafka's [Topic configuration guide](https://kafka.apache.org/documentation/#topicconfigs). diff --git a/docs/HowTo/topics/index.md b/docs/HowTo/topics/index.md index 24dfcc12..989fe8ff 100644 --- a/docs/HowTo/topics/index.md +++ b/docs/HowTo/topics/index.md @@ -45,16 +45,16 @@ from the topic. Similarly, if the team wants to enforce a schema on the topic, the team submits a request, and another team member reviews and approves or declines it. -- [Request a new topic](Request-a-new-topic) +- [Request a new topic](Request-a-new-topic.md) -- [Approve a topic](Approve-a-topic) +- [Approve a topic](Approve-a-topic.md) -- [Promote a topic](Promote-a-topic) +- [Promote a topic](Promote-a-topic.md) -- [Claim a topic](Claim-a-topic) +- [Claim a topic](Claim-a-topic.md) -- [Edit Topic Request](Edit-topic-request) +- [Edit Topic Request](Edit-topic-request.md) -- [Delete a topic](Delete-a-topic) +- [Delete a topic](Delete-a-topic.md) -- [My Topic Requests](My-topic-requests) +- [My Topic Requests](My-topic-requests.md) diff --git a/docs/Releases/release200.md b/docs/Releases/release200.md index 5850154c..732d346b 100644 --- a/docs/Releases/release200.md +++ b/docs/Releases/release200.md @@ -58,7 +58,7 @@ force-register the schema in case of any compatibility issues during registration. For more information, see [Schema -Promotion](https://www.klaw-project.io/docs/concepts/promotion#schema-promotion). +Promotion](../../docs/Concepts/promotion.md#schema-promotion). ### Authorization from OAuth2 Provider/Active Directory @@ -68,7 +68,7 @@ provider, such as grants in Azure Active Directory, and Klaw will validate and assign these roles to users during the sign-up process. For more information, see -[Authorization](https://www.klaw-project.io/docs/howto/authorization). +[Authorization](../../docs/HowTo/authorization.md). To enable the authorization feature, set the below property to value `true` in the `application.properties` file: : diff --git a/docs/Releases/release210.md b/docs/Releases/release210.md index 6985e663..51bcb70a 100644 --- a/docs/Releases/release210.md +++ b/docs/Releases/release210.md @@ -57,7 +57,7 @@ includes the implementation of the following APIs: (v3)]() For more information, see [Confluent -Cloud](https://www.klaw-project.io/docs/howto/clusterconnectivity/confluent-cloud-kafka-cluster-ssl-protocol). +Cloud](../../docs/HowTo/clusterconnectivity/confluent-cloud-kafka-cluster-ssl-protocol.md). ### Switch Teams @@ -69,7 +69,7 @@ from increased flexibility and efficiency when working within the Klaw platform, particularly when creating or approving requests. For more information, see [Switch -Teams](https://www.klaw-project.io/docs/concepts/switch-teams). +Teams](../../docs/Concepts/switch-teams.md). :::note For a complete list of improvements, changelog, and to download the diff --git a/docs/Releases/release220.md b/docs/Releases/release220.md index 7bb0bd5a..2c9a4c48 100644 --- a/docs/Releases/release220.md +++ b/docs/Releases/release220.md @@ -67,7 +67,7 @@ feature provides administrators with additional backup and recovery options, enabling them to manage the system more effectively. For more information, see [Export Klaw -data](https://www.klaw-project.io/docs/howto/exportdata). +data](../../docs/HowTo/exportimport/exportdata.md). :::note For a complete list of improvements, changelog, and to download the diff --git a/docs/Releases/release240.md b/docs/Releases/release240.md index 419c1729..28d02d8b 100644 --- a/docs/Releases/release240.md +++ b/docs/Releases/release240.md @@ -88,9 +88,7 @@ improved security and prompting users to update their passwords promptly. This release introduces significant improvements to the email notifications functionality. Emails are now sent in accordance with the defined email matrix, ensuring consistency. For more detailed -information, refer to the -[Workflows](https://www.klaw-project.io/docs/concepts/workflows#approval-process) -documentation. +information, refer to the [Workflows](../../docs/Concepts/workflows.md#approval-process) documentation. ### Improved error responses to UI diff --git a/docs/features.md b/docs/features.md index a235e65b..11fd9b2d 100644 --- a/docs/features.md +++ b/docs/features.md @@ -6,35 +6,35 @@ sidebar_position: 1.2 Explore the comprehensive range of features Klaw offers to manage your Kafka ecosystem more efficiently. -| Feature | Description | -| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [_Topics creation_](HowTo/topics/Request-a-new-topic) | Easily request and approve Kafka Topics for your applications. | -| [_ACLs creation_](HowTo/subscriptions/Request-a-subscription) | Manage access control by requesting and approving Producer and Consumer access to Kafka Topics. | -| [_Schemas creation_](HowTo/schemas/Request-a-schema) | Request and approve Avro schemas, compatible with Karapace and Confluent Schema Registry. | -| [_Connectors creation_](HowTo/connectors/Request-a-new-connector) | Request and approve Kafka Connectors for streamlined data integration. | -| [_Promote topics, schemas, connectors_](HowTo/topics/Promote-a-topic) | Define a hierarchy of environments and effortlessly promote entities to higher environments. | -| [_Topic naming conventions_](HowTo/environments) | Enforce naming conventions using prefixes, suffixes, or regex on topic names. | -| [_Schema evolution_](HowTo/schemas/manage-schemas) | Manage multiple versions of schemas efficiently. | -| Reset consumer offsets | Gain the ability to reset consumer offsets for specific consumer groups per topic. | -| View kafka events | Easily view events on any Kafka topic for better monitoring and debugging. | -| View your own topics | Access dashboard to see the topics for which your team has created ACLs, both as a producer and consumer. | -| View consumer lag | Keep track of consumer offsets and view lags for a consumer group. | -| [_Sync topics to a cluster_](HowTo/kafka-cluster-migration/sync-topics-to-cluster) | Synchronize topics with any new or existing Kafka cluster seamlessly. | -| [_Sync topics from a cluster_](HowTo/kafka-cluster-migration/sync-topics-from-cluster) | Synchronize topics from any Kafka cluster to Klaw. | -| [_Sync ACLs to a cluster_](HowTo/kafka-cluster-migration/sync-acls-to-cluster) | Ensure access control by synchronizing access control lists with new or existing Kafka clusters. | -| [_Sync ACLs from a cluster_](HowTo/kafka-cluster-migration/sync-acls-from-cluster) | Ensure the security of your Kafka topics by synchronizing access control lists from any Kafka cluster with Klaw. | -| [_Sync schemas to a cluster_](HowTo/kafka-cluster-migration/sync-schemas-to-cluster) | Maintain consistency by synchronizing schemas, including all versions, to new or existing Schema Registry clusters. | -| [_Sync schemas from a cluster_](HowTo/kafka-cluster-migration/sync-schemas-from-cluster) | Ensure schema consistency by synchronizing schemas from any Schema Registry cluster to Klaw. | -| [_Sync connectors from a cluster_](HowTo/kafka-cluster-migration/sync-connectors-from-cluster) | Efficiently manage connectors by syncing them from any Kafka Connect cluster to Klaw. | -| [_Import / Export Klaw data_](HowTo/exportimport) | Easily export Klaw metadata to JSON files and import it into another Klaw instance for data security and smooth transitions. | -| Secured kafka topics | Secure and protect Kafka topics, schemas, and access control lists with defined ownership and access control. | -| [_Controlled access to users_](HowTo/rolespermissions) | Define granular roles and permissions, allowing users to view, request, and modify entities as needed. | -| [_Kafka connectivity PLAINTEXT/SSL/SASL_](HowTo/clusterconnectivity) | Connect Klaw to Kafka clusters using PLAINTEXT, SSL, or SASL mechanisms. | -| [_Email Notifications_](HowTo/notifications) | Stay informed with email notifications for every request, approval, and Kafka cluster change. | -| [_Analytics / Reports_](HowTo/analytics) | Access and download reports on your requests, topics, consumer groups, and ACL ownership in Klaw. Data availability varies based on your role as USER or SUPERADMIN. | -| Audit history | Keep track of every request, approval, and change with a comprehensive audit history. | -| [_Kafka flavor support_](HowTo/clusters) | Klaw is compatible with multiple Kafka flavors, including Apache Kafka, Aiven Kafka, Confluent Kafka, and Confluent Cloud Kafka. | -| [_Klaw login AD/SSO/DB_](HowTo/authentication) | Users can log in to Klaw using Windows AD or SSO providers like Azure and Google. | +| Feature | Description | +| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [_Topics creation_](HowTo/topics/Request-a-new-topic.md) | Easily request and approve Kafka Topics for your applications. | +| [_ACLs creation_](HowTo/subscriptions/Request-a-subscription.md) | Manage access control by requesting and approving Producer and Consumer access to Kafka Topics. | +| [_Schemas creation_](HowTo/schemas/Request-a-schema.md) | Request and approve Avro schemas, compatible with Karapace and Confluent Schema Registry. | +| [_Connectors creation_](HowTo/connectors/Request-a-new-connector.md) | Request and approve Kafka Connectors for streamlined data integration. | +| [_Promote topics, schemas, connectors_](HowTo/topics/Promote-a-topic.md) | Define a hierarchy of environments and effortlessly promote entities to higher environments. | +| [_Topic naming conventions_](HowTo/environments.md) | Enforce naming conventions using prefixes, suffixes, or regex on topic names. | +| [_Schema evolution_](HowTo/schemas/manage-schemas.md) | Manage multiple versions of schemas efficiently. | +| Reset consumer offsets | Gain the ability to reset consumer offsets for specific consumer groups per topic. | +| View kafka events | Easily view events on any Kafka topic for better monitoring and debugging. | +| View your own topics | Access dashboard to see the topics for which your team has created ACLs, both as a producer and consumer. | +| View consumer lag | Keep track of consumer offsets and view lags for a consumer group. | +| [_Sync topics to a cluster_](HowTo/kafka-cluster-migration/sync-topics-to-cluster.md) | Synchronize topics with any new or existing Kafka cluster seamlessly. | +| [_Sync topics from a cluster_](HowTo/kafka-cluster-migration/sync-topics-from-cluster.md) | Synchronize topics from any Kafka cluster to Klaw. | +| [_Sync ACLs to a cluster_](HowTo/kafka-cluster-migration/sync-acls-to-cluster.md) | Ensure access control by synchronizing access control lists with new or existing Kafka clusters. | +| [_Sync ACLs from a cluster_](HowTo/kafka-cluster-migration/sync-acls-from-cluster.md) | Ensure the security of your Kafka topics by synchronizing access control lists from any Kafka cluster with Klaw. | +| [_Sync schemas to a cluster_](HowTo/kafka-cluster-migration/sync-schemas-to-cluster.md) | Maintain consistency by synchronizing schemas, including all versions, to new or existing Schema Registry clusters. | +| [_Sync schemas from a cluster_](HowTo/kafka-cluster-migration/sync-schemas-from-cluster.md) | Ensure schema consistency by synchronizing schemas from any Schema Registry cluster to Klaw. | +| [_Sync connectors from a cluster_](HowTo/kafka-cluster-migration/sync-connectors-from-cluster.md) | Efficiently manage connectors by syncing them from any Kafka Connect cluster to Klaw. | +| [_Import / Export Klaw data_](HowTo/exportimport/index.md) | Easily export Klaw metadata to JSON files and import it into another Klaw instance for data security and smooth transitions. | +| Secured kafka topics | Secure and protect Kafka topics, schemas, and access control lists with defined ownership and access control. | +| [_Controlled access to users_](HowTo/rolespermissions.md) | Define granular roles and permissions, allowing users to view, request, and modify entities as needed. | +| [_Kafka connectivity PLAINTEXT/SSL/SASL_](HowTo/clusterconnectivity/index.md) | Connect Klaw to Kafka clusters using PLAINTEXT, SSL, or SASL mechanisms. | +| [_Email Notifications_](HowTo/notifications/index.md) | Stay informed with email notifications for every request, approval, and Kafka cluster change. | +| [_Analytics / Reports_](HowTo/analytics.md) | Access and download reports on your requests, topics, consumer groups, and ACL ownership in Klaw. Data availability varies based on your role as USER or SUPERADMIN. | +| Audit history | Keep track of every request, approval, and change with a comprehensive audit history. | +| [_Kafka flavor support_](HowTo/clusters.md) | Klaw is compatible with multiple Kafka flavors, including Apache Kafka, Aiven Kafka, Confluent Kafka, and Confluent Cloud Kafka. | +| [_Klaw login AD/SSO/DB_](HowTo/authentication/index.md) | Users can log in to Klaw using Windows AD or SSO providers like Azure and Google. | :::note Klaw is continuously evolving, and many other minor features are also available that are not listed above. diff --git a/docs/index.md b/docs/index.md index a658b2b0..e0c08eb4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -12,4 +12,5 @@ Klaw consists of two components: ## Quickstart -Copy the docker script and run. It installs Klaw, Kafka, and schema registry servers as docker processes. [**Go through this guide**](./quickstart) +Copy the docker script and run. It installs Klaw, Kafka, and schema registry servers as docker processes. [**Go through +this guide**](./quickstart.md) diff --git a/docs/quickstart.md b/docs/quickstart.md index 6af1bee9..b4e647a4 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -4,29 +4,105 @@ sidebar_position: 1.1 # Quick Start -In this tutorial, we will install Klaw with docker, and request for a kafka topic and verify its existence on kafka cluster. +In this tutorial, we will install Klaw with docker, and request for a kafka topic and verify its existence on kafka +cluster. ## 1. Run the docker script ```typescript copy-button -docker run -d -t -i \ --e KLAW_CLUSTERAPI_ACCESS_BASE64_SECRET="dGhpcyBpcyBhIHNlY3JldCB0byBhY2Nlc3MgY2x1c3RlcmFwaQ==" \ --p 9343:9343 \ ---name klaw-cluster-api aivenoy/klaw-cluster-api:nightly --add-host host.docker.internal:host-gateway \ -&& docker run -d -t -i \ --e KLAW_CLUSTERAPI_ACCESS_BASE64_SECRET="dGhpcyBpcyBhIHNlY3JldCB0byBhY2Nlc3MgY2x1c3RlcmFwaQ==" \ --e KLAW_QUICKSTART_ENABLED=true \ --e SPRING_DATASOURCE_URL="jdbc:h2:file:/klaw/klawprodb;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;MODE=MySQL;CASE_INSENSITIVE_IDENTIFIERS=TRUE;" \ --p 9097:9097 --name klaw-core aivenoy/klaw-core:nightly \ -&& docker run -d -t -i -p 2181:2181 --add-host host.docker.internal:host-gateway \ --e ALLOW_ANONYMOUS_LOGIN=yes --name klaw-zookeeper bitnami/zookeeper:3.8 \ -&& docker run -d -t -i -p 9092:9092 --add-host host.docker.internal:host-gateway \ --e KAFKA_CFG_ZOOKEEPER_CONNECT=host.docker.internal:2181 -e ALLOW_PLAINTEXT_LISTENER=yes \ --e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://host.docker.internal:9092 \ ---name klaw-kafka bitnami/kafka:3.3 \ -&& docker run -d -t -i -p 8081:8081 --add-host host.docker.internal:host-gateway \ --e SCHEMA_REGISTRY_KAFKA_BROKERS=PLAINTEXT://host.docker.internal:9092 \ ---name klaw-schema-registry bitnami/schema-registry:latest +docker +run - d - t - i \ +-e +KLAW_CLUSTERAPI_ACCESS_BASE64_SECRET = "dGhpcyBpcyBhIHNlY3JldCB0byBhY2Nlc3MgY2x1c3RlcmFwaQ==" \ +-p +9343 +: +9343 \ +--name +klaw - cluster - api +aivenoy / klaw - cluster - api +: +nightly-- +add - host +host.docker.internal +: +host - gateway \ +&& +docker +run - d - t - i \ +-e +KLAW_CLUSTERAPI_ACCESS_BASE64_SECRET = "dGhpcyBpcyBhIHNlY3JldCB0byBhY2Nlc3MgY2x1c3RlcmFwaQ==" \ +-e +KLAW_QUICKSTART_ENABLED = true \ +-e +SPRING_DATASOURCE_URL = "jdbc:h2:file:/klaw/klawprodb;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;MODE=MySQL;CASE_INSENSITIVE_IDENTIFIERS=TRUE;" \ +-p +9097 +: +9097-- +name +klaw - core +aivenoy / klaw - core +: +nightly \ +&& +docker +run - d - t - i - p +2181 +: +2181-- +add - host +host.docker.internal +: +host - gateway \ +-e +ALLOW_ANONYMOUS_LOGIN = yes-- +name +klaw - zookeeper +bitnami / zookeeper +: +3.8 \ +&& +docker +run - d - t - i - p +9092 +: +9092-- +add - host +host.docker.internal +: +host - gateway \ +-e +KAFKA_CFG_ZOOKEEPER_CONNECT = host.docker.internal +: +2181 - e +ALLOW_PLAINTEXT_LISTENER = yes \ +-e +KAFKA_ADVERTISED_LISTENERS = PLAINTEXT +://host.docker.internal:9092 \ +--name +klaw - kafka +bitnami / kafka +: +3.3 \ +&& +docker +run - d - t - i - p +8081 +: +8081-- +add - host +host.docker.internal +: +host - gateway \ +-e +SCHEMA_REGISTRY_KAFKA_BROKERS = PLAINTEXT +://host.docker.internal:9092 \ +--name +klaw - schema - registry +bitnami / schema - registry +: +latest ``` This script basically creates Klaw, Kafka and schema registry processes, and also configures Kafka and schema @@ -35,7 +111,7 @@ registry servers in Klaw. ## 2. Login to Klaw After docker has started 5 processes, you may verify them by `docker ps`. -Now you may log into Klaw here [http://localhost:9097/](http://localhost:9097/) with credentials `william : welcome` +Now you may log into Klaw on `http://localhost:9097` with credentials `william : welcome` ![Screenshot: Klaw's login page](../static/images/quickstart/QS_LoginScreen.png) @@ -43,7 +119,8 @@ Now you may log into Klaw here [http://localhost:9097/](http://localhost:9097/) After logging in you will be redirected to our brand-new feature rich React UI. -You can "Request new Topic" from the top right corner, or you can select the dropdown "Request a new" to view all your options. +You can "Request new Topic" from the top right corner, or you can select the dropdown "Request a new" to view all your +options. ![Screenshot: Topic catalog page](../static/images/quickstart/AfterLogin.png) @@ -95,4 +172,5 @@ To verify docker exec -it klaw-kafka /opt/bitnami/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092 ``` -should display the newly created kafka topic. You can also try creating a schema for the topic from the "Request a new" dropdown. +should display the newly created kafka topic. You can also try creating a schema for the topic from the "Request a new" +dropdown. diff --git a/markdown-link-check-script/README.md b/markdown-link-check-script/README.md new file mode 100644 index 00000000..c938b54d --- /dev/null +++ b/markdown-link-check-script/README.md @@ -0,0 +1,35 @@ +# What markdown-link-check does + +Uses [markdown-link-check](https://github.com/tcort/markdown-link-check) to check links in `.md` files. + +## Scripts you can use + +Note: All scripts need to be run from root and you have to set up +your [local development](../README.md#installation-and-usage) in +order to use them. + +### ➡️ `npm run markdown-link-check` + +Will run the check for all Markdown files. It checks internal as well as external links (so it needs internet +connection) and assets. Please be aware that you need to [check your results](#-limitation) + +### ➡️ `npm run markdown-link-check -f "path/to/file.md` + +Will run the check for a specific Markdown files. It checks internal as well as external links (so it needs internet +connection) and assets. + +### Flags to use + +- `npm run markdown-link-check -- -q` will run in quite mode and not log the files checked, but log the different + processes and a end result. If there is an error, the error will be logged. + +- `npm run markdown-link-check -- -o` will run in offline mode and not check for links starting with http/https. + +The flags can be used with all files as well as only one. They can also be used together. + +## ⚠️ Limitation + +When running the link-check for all files without the offline mode flag, the first command ("Checking links in all +markdown files in /docs") will always return an exist code `1`. We've investigated that for quite some time, but not +found out what the issue is. Since we're only using offline mode in CI, we decided that we can live with that for now, +as we still can run the checks and get all result. diff --git a/markdown-link-check-script/markdown-link-check-blog-config.json b/markdown-link-check-script/markdown-link-check-blog-config.json new file mode 100644 index 00000000..9ae5ecf1 --- /dev/null +++ b/markdown-link-check-script/markdown-link-check-blog-config.json @@ -0,0 +1,7 @@ +{ + "ignorePatterns": [ + { + "pattern": "^(?!(http://|https://)|[^/]*/blog/).+" + } + ] +} diff --git a/markdown-link-check-script/markdown-link-check-offline-config.json b/markdown-link-check-script/markdown-link-check-offline-config.json new file mode 100644 index 00000000..c5911613 --- /dev/null +++ b/markdown-link-check-script/markdown-link-check-offline-config.json @@ -0,0 +1 @@ +{ "ignorePatterns": [{ "pattern": "^https?://.*" }] } diff --git a/markdown-link-check-script/markdown-link-check-other-files-config.json b/markdown-link-check-script/markdown-link-check-other-files-config.json new file mode 100644 index 00000000..9ae5ecf1 --- /dev/null +++ b/markdown-link-check-script/markdown-link-check-other-files-config.json @@ -0,0 +1,7 @@ +{ + "ignorePatterns": [ + { + "pattern": "^(?!(http://|https://)|[^/]*/blog/).+" + } + ] +} diff --git a/markdown-link-check-script/markdown-link-check.sh b/markdown-link-check-script/markdown-link-check.sh new file mode 100755 index 00000000..5ed25dde --- /dev/null +++ b/markdown-link-check-script/markdown-link-check.sh @@ -0,0 +1,109 @@ +#!/bin/bash + + +FILES_TO_CHECK="" +QUIET_MODE="" +OFFLINE_MODE="" +BROKEN_LINK=false +EXIT_CODES=() + +# Parse command-line options +while getopts "f:qo" opt; do + case $opt in + f) + FILES_TO_CHECK="$OPTARG" + ;; + q) + QUIET_MODE="-q" + ;; + o) + OFFLINE_MODE="--config=./markdown-link-check-script/markdown-link-check-offline-config.json" + ;; + \?) + echo "Usage: $0 [-f file] [-q]" + exit 1 + ;; + esac +done + + + +if [ -n "$FILES_TO_CHECK" ]; then + # Check the specified file + echo "🔍 Checking links in $FILES_TO_CHECK." + # shellcheck disable=SC2046 + + markdown-link-check $(find "docs" -type f -name '*.md' ! -path '*/node_modules/*' -print) \ + $QUIET_MODE \ + $OFFLINE_MODE + + EXIT_CODES+=("$?") +else + + + + # @TODO without offline mode, this returns an exist code 1 + # even though there is no error. I've not found out why, + # needs further investigation. + echo "🔍 Checking links in all markdown files in /docs" + # Use "find" to locate all Markdown files in docs, excluding those in node_modules + # shellcheck disable=SC2046 + markdown-link-check $(find "docs" -type f -name '*.md' ! -path '*/node_modules/*' -print) \ + $QUIET_MODE \ + $OFFLINE_MODE + + EXIT_CODES+=("$?") + + echo "🔍 Checking links in all markdown files in /blog" + # Use "find" to locate all Markdown files in blog, excluding those in node_modules + # Apply ignore pattern to not check links that are not starting with http/https AND + # are not located in "blog" + IGNORE_PATTERN_BLOG="--config=./markdown-link-check-script/markdown-link-check-blog-config.json" + # shellcheck disable=SC2046 + markdown-link-check $(find "blog" -type f -name '*.md' ! -path '*/node_modules/*' -print) \ + $QUIET_MODE \ + $OFFLINE_MODE \ + $IGNORE_PATTERN_BLOG + + EXIT_CODES+=("$?") + + + echo "🔍 Checking links in other markdown files" + # Use "find" to locate all Markdown files excluding those in node_modules, docs or blog + # shellcheck disable=SC2046 + markdown-link-check \ + $(find . -type f -name '*.md' ! -path './docs/*' ! -path './blog/*' ! -path '*/node_modules/*' -print) \ + $QUIET_MODE \ + $OFFLINE_MODE + + EXIT_CODES+=("$?") +fi + + +# Check if an error occurred for link checking +for code in "${EXIT_CODES[@]}"; do + if [ -n "$code" ] && [ "$code" -ne 0 ]; then + echo "Error in link checking (exit code $code)" + BROKEN_LINK=true + fi +done + + + + +if [ -n "$OFFLINE_MODE" ]; then + if [ $BROKEN_LINK == true ]; then + echo -e "\n\n🙋 Markdown link check failed" + echo -e "1. A file name contains spaces (My file.md). Use a '-' instead of spaces." + echo -e "2. A file was moved and this broke existing links to that file. Check the log-output! You can search for 'dead links found!' to find the failures." + echo -e "3. A target in a link was not found. Make sure that relative paths start from the location of your file." + # This does NOT return an exist code 1 as "🔍 Checking links in all markdown files in /docs" + # always returns exit code 1, so for the github workflow it should not break the pipeline + fi +else + echo -e "\n\n🙋🙋 Markdown link check finished, please check logs for results!" + echo -e "There is a known error when running checking links not in offline mode." + echo -e "You will see: 'Error in link checking (exit code 1)' even if there are no errors." + echo -e "So check for 'dead links found!' in the logs to see if there are errors." +fi + diff --git a/package-lock.json b/package-lock.json index dd30c8c5..7aee5d3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,13 +26,14 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-react": "^7.33.2", "lint-staged": "^14.0.1", + "markdown-link-check": "^3.11.2", "markdownlint": "^0.31.1", "markdownlint-cli": "^0.36.0", "prettier": "^3.0.3", "prop-types": "^15.8.1" }, "engines": { - "node": ">=16.14" + "node": ">=18.0.0 <19.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -4444,6 +4445,12 @@ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, "node_modules/asynciterator.prototype": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", @@ -8093,6 +8100,15 @@ } ] }, + "node_modules/html-link-extractor": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-link-extractor/-/html-link-extractor-1.0.5.tgz", + "integrity": "sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==", + "dev": true, + "dependencies": { + "cheerio": "^1.0.0-rc.10" + } + }, "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -8428,6 +8444,18 @@ "node": ">= 10" } }, + "node_modules/is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -8830,6 +8858,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-relative-url": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-4.0.0.tgz", + "integrity": "sha512-PkzoL1qKAYXNFct5IKdKRH/iBQou/oCC85QhXj6WKtUQBliZ4Yfd3Zk27RHu9KQG8r6zgvAA2AQKC9p+rqTszg==", + "dev": true, + "dependencies": { + "is-absolute-url": "^4.0.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", @@ -8993,6 +9036,27 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, + "node_modules/isemail": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", + "dev": true, + "dependencies": { + "punycode": "2.x.x" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/isemail/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -9270,6 +9334,24 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/link-check": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/link-check/-/link-check-5.2.0.tgz", + "integrity": "sha512-xRbhYLaGDw7eRDTibTAcl6fXtmUQ13vkezQiTqshHHdGueQeumgxxmQMIOmJYsh2p8BF08t8thhDQ++EAOOq3w==", + "dev": true, + "dependencies": { + "is-relative-url": "^4.0.0", + "isemail": "^3.2.0", + "ms": "^2.1.3", + "needle": "^3.1.0" + } + }, + "node_modules/link-check/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/linkify-it": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", @@ -9702,6 +9784,56 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/markdown-link-check": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/markdown-link-check/-/markdown-link-check-3.11.2.tgz", + "integrity": "sha512-zave+vI4AMeLp0FlUllAwGbNytSKsS3R2Zgtf3ufVT892Z/L6Ro9osZwE9PNA7s0IkJ4onnuHqatpsaCiAShJw==", + "dev": true, + "dependencies": { + "async": "^3.2.4", + "chalk": "^5.2.0", + "commander": "^10.0.1", + "link-check": "^5.2.0", + "lodash": "^4.17.21", + "markdown-link-extractor": "^3.1.0", + "needle": "^3.2.0", + "progress": "^2.0.3" + }, + "bin": { + "markdown-link-check": "markdown-link-check" + } + }, + "node_modules/markdown-link-check/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/markdown-link-check/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/markdown-link-extractor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/markdown-link-extractor/-/markdown-link-extractor-3.1.0.tgz", + "integrity": "sha512-r0NEbP1dsM+IqB62Ru9TXLP/HDaTdBNIeylYXumuBi6Xv4ufjE1/g3TnslYL8VNqNcGAGbMptQFHrrdfoZ/Sug==", + "dev": true, + "dependencies": { + "html-link-extractor": "^1.0.5", + "marked": "^4.1.0" + } + }, "node_modules/markdownlint": { "version": "0.31.1", "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.31.1.tgz", @@ -9815,6 +9947,18 @@ "node": ">=16" } }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", @@ -10133,6 +10277,44 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "devOptional": true }, + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -11446,6 +11628,15 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", diff --git a/package.json b/package.json index b3d3002f..af0a4f65 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "reformat:code": "eslint . --fix && prettier --write .", "reformat:markdown": "markdownlint \"**/*.md\" --ignore node_modules --fix", "reformat": "npm run reformat:code && npm run reformat:markdown", - "lint-staged": "lint-staged" + "lint-staged": "lint-staged", + "markdown-link-check": "markdown-link-check-script/markdown-link-check.sh" }, "lint-staged": { "**/*.{js,jsx,json}": [ @@ -52,6 +53,7 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-react": "^7.33.2", "lint-staged": "^14.0.1", + "markdown-link-check": "^3.11.2", "markdownlint": "^0.31.1", "markdownlint-cli": "^0.36.0", "prettier": "^3.0.3",