Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add broken links checker #3305

Merged
merged 14 commits into from
Jan 25, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/workflows/check-markdown-links.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Check Markdown Links
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
check-links:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: pip install PyGithub
- name: Run markdown link checker
run: ./scripts/check_and_comment.sh docs
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion docs/book/component-guide/artifact-stores/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ zenml artifact-store flavor register flavors.my_flavor.MyArtifactStoreFlavor
```

{% hint style="warning" %}
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/setting-up-a-project-repository/best-practices.md) of initializing zenml at the root of your repository.
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/infrastructure-deployment/infrastructure-as-code/best-practices.md) of initializing zenml at the root of your repository.

If ZenML does not find an initialized ZenML repository in any parent directory, it will default to the current working directory, but usually, it's better to not have to rely on this mechanism and initialize zenml at the root.
{% endhint %}
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/container-registries/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ zenml container-registry flavor register flavors.my_flavor.MyContainerRegistryFl
```

{% hint style="warning" %}
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/setting-up-a-project-repository/best-practices.md) of initializing zenml at the root of your repository.
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/infrastructure-deployment/infrastructure-as-code/best-practices.md) of initializing zenml at the root of your repository.

If ZenML does not find an initialized ZenML repository in any parent directory, it will default to the current working directory, but usually it's better to not have to rely on this mechanism, and initialize zenml at the root.
{% endhint %}
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/data-validators/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ zenml data-validator flavor register flavors.my_flavor.MyDataValidatorFlavor
```

{% hint style="warning" %}
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/setting-up-a-project-repository/best-practices.md) of initializing zenml at the root of your repository.
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/infrastructure-deployment/infrastructure-as-code/best-practices.md) of initializing zenml at the root of your repository.

If ZenML does not find an initialized ZenML repository in any parent directory, it will default to the current working directory, but usually it's better to not have to rely on this mechanism, and initialize zenml at the root.
{% endhint %}
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/experiment-trackers/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ zenml experiment-tracker flavor register flavors.my_flavor.MyExperimentTrackerFl
```

{% hint style="warning" %}
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/setting-up-a-project-repository/best-practices.md) of initializing zenml at the root of your repository.
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/infrastructure-deployment/infrastructure-as-code/best-practices.md) of initializing zenml at the root of your repository.

If ZenML does not find an initialized ZenML repository in any parent directory, it will default to the current working directory, but usually, it's better to not have to rely on this mechanism and initialize zenml at the root.
{% endhint %}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ through Experiment Tracker stack components. This establishes a clear link betwe
Related concepts:

* the Experiment Tracker is an optional type of Stack Component that needs to be registered as part of your
ZenML [Stack](/docs/book/user-guide/production-guide/understand-stacks.md).
ZenML [Stack](../../user-guide/production-guide/understand-stacks.md).
* ZenML already provides versioning and tracking for the pipeline artifacts by storing artifacts in
the [Artifact Store](../artifact-stores/artifact-stores.md).

Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/image-builders/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ zenml image-builder flavor register flavors.my_flavor.MyImageBuilderFlavor
```

{% hint style="warning" %}
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/setting-up-a-project-repository/best-practices.md) of initializing zenml at the root of your repository.
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/infrastructure-deployment/infrastructure-as-code/best-practices.md) of initializing zenml at the root of your repository.

If ZenML does not find an initialized ZenML repository in any parent directory, it will default to the current working directory, but usually it's better to not have to rely on this mechanism, and initialize zenml at the root.
{% endhint %}
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/image-builders/image-builders.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ zenml image-builder flavor list
### How to use it

You don't need to directly interact with any image builder in your code. As long as the image builder that you want to
use is part of your active [ZenML stack](/docs/book/user-guide/production-guide/understand-stacks.md), it will be used
use is part of your active [ZenML stack](../../user-guide/production-guide/understand-stacks.md), it will be used
automatically by any component that needs to build container images.

<!-- For scarf -->
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/model-deployers/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ zenml model-deployer flavor register flavors.my_flavor.MyModelDeployerFlavor
```

{% hint style="warning" %}
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/setting-up-a-project-repository/best-practices.md) of initializing zenml at the root of your repository.
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/infrastructure-deployment/infrastructure-as-code/best-practices.md) of initializing zenml at the root of your repository.

If ZenML does not find an initialized ZenML repository in any parent directory, it will default to the current working directory, but usually, it's better to not have to rely on this mechanism and initialize zenml at the root.
{% endhint %}
Expand Down
8 changes: 4 additions & 4 deletions docs/book/component-guide/orchestrators/airflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ of your Airflow deployment.
{% hint style="info" %}
ZenML will build a Docker image called `<CONTAINER_REGISTRY_URI>/zenml:<PIPELINE_NAME>` which includes your code and use
it to run your pipeline steps in Airflow. Check
out [this page](/docs/book/how-to/customize-docker-builds/README.md) if you want to learn
out [this page](../../how-to/customize-docker-builds/README.md) if you want to learn
more about how ZenML builds these images and how you can customize them.
{% endhint %}

Expand Down Expand Up @@ -204,13 +204,13 @@ The username will always be `admin`.
For additional configuration of the Airflow orchestrator, you can pass `AirflowOrchestratorSettings` when defining or
running your pipeline. Check out
the [SDK docs](https://sdkdocs.zenml.io/latest/integration\_code\_docs/integrations-airflow/#zenml.integrations.airflow.flavors.airflow\_orchestrator\_flavor.AirflowOrchestratorSettings)
for a full list of available attributes and [this docs page](/docs/book/how-to/pipeline-development/use-configuration-files/README.md) for
for a full list of available attributes and [this docs page](../../how-to/pipeline-development/use-configuration-files/README.md) for
more information on how to specify settings.

#### Enabling CUDA for GPU-backed hardware

Note that if you wish to use this orchestrator to run steps on a GPU, you will need to
follow [the instructions on this page](/docs/book/how-to/pipeline-development/training-with-gpus/README.md) to ensure that it
follow [the instructions on this page](../../how-to/pipeline-development/training-with-gpus/README.md) to ensure that it
works. It requires adding some extra settings customization and is essential to enable CUDA for the GPU to give its full
acceleration.

Expand Down Expand Up @@ -297,7 +297,7 @@ the [original module](https://github.com/zenml-io/zenml/blob/main/src/zenml/inte
. For this reason, we suggest starting by copying the original and modifying it according to your needs.

Check out our docs on how to apply settings to your
pipelines [here](/docs/book/how-to/pipeline-development/use-configuration-files/README.md).
pipelines [here](../../how-to/pipeline-development/use-configuration-files/README.md).

For more information and a full list of configurable attributes of the Airflow orchestrator, check out the [SDK Docs](https://sdkdocs.zenml.io/latest/integration_code_docs/integrations-airflow/#zenml.integrations.airflow.orchestrators.airflow_orchestrator.AirflowOrchestrator) .

Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/orchestrators/azureml.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ In order to use an AzureML orchestrator, you need to first
deploy [ZenML to the cloud](../../getting-started/deploying-zenml/README.md).
It would be recommended to deploy ZenML in the same region as you plan on
using for AzureML, but it is not necessary to do so. You must ensure that
you are [connected to the remote ZenML server](../../how-to/connecting-to-zenml/connect-in-with-your-user-interactive.md)
you are [connected to the remote ZenML server](../../how-to/manage-zenml-server/connecting-to-zenml/connect-in-with-your-user-interactive.md)
before using this stack component.

## How to use it
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/orchestrators/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ zenml orchestrator flavor register flavors.my_flavor.MyOrchestratorFlavor
```

{% hint style="warning" %}
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/setting-up-a-project-repository/best-practices.md) of initializing zenml at the root of your repository.
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/infrastructure-deployment/infrastructure-as-code/best-practices.md) of initializing zenml at the root of your repository.

If ZenML does not find an initialized ZenML repository in any parent directory, it will default to the current working directory, but usually, it's better to not have to rely on this mechanism and initialize zenml at the root.
{% endhint %}
Expand Down
4 changes: 2 additions & 2 deletions docs/book/component-guide/orchestrators/orchestrators.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ zenml orchestrator flavor list
### How to use it

You don't need to directly interact with any ZenML orchestrator in your code. As long as the orchestrator that you want
to use is part of your active [ZenML stack](/docs/book/user-guide/production-guide/understand-stacks.md), using the
to use is part of your active [ZenML stack](../../user-guide/production-guide/understand-stacks.md), using the
orchestrator is as simple as executing a Python file
that [runs a ZenML pipeline](/docs/book/user-guide/starter-guide/starter-guide.md):
that [runs a ZenML pipeline](../../user-guide/starter-guide/starter-project.md):

```shell
python file_that_runs_a_zenml_pipeline.py
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/step-operators/custom.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ zenml step-operator flavor register flavors.my_flavor.MyStepOperatorFlavor
```

{% hint style="warning" %}
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/setting-up-a-project-repository/best-practices.md) of initializing zenml at the root of your repository.
ZenML resolves the flavor class by taking the path where you initialized zenml (via `zenml init`) as the starting point of resolution. Therefore, please ensure you follow [the best practice](../../how-to/infrastructure-deployment/infrastructure-as-code/best-practices.md) of initializing zenml at the root of your repository.

If ZenML does not find an initialized ZenML repository in any parent directory, it will default to the current working directory, but usually, it's better to not have to rely on this mechanism and initialize zenml at the root.
{% endhint %}
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/step-operators/modal.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ ZenML will build a Docker image which includes your code and use it to run your
#### Additional configuration

You can specify the hardware requirements for each step using the
`ResourceSettings` class as described in our documentation on [resource settings](../../how-to/training-with-gpus/training-with-gpus.md):
`ResourceSettings` class as described in our documentation on [resource settings](../../how-to/pipeline-development/training-with-gpus/README.md):

```python
from zenml.config import ResourceSettings
Expand Down
2 changes: 1 addition & 1 deletion docs/book/component-guide/step-operators/step-operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ zenml step-operator flavor list
### How to use it

You don't need to directly interact with any ZenML step operator in your code. As long as the step operator that you
want to use is part of your active [ZenML stack](/docs/book/user-guide/production-guide/understand-stacks.md), you can simply
want to use is part of your active [ZenML stack](../../user-guide/production-guide/understand-stacks.md), you can simply
specify it in the `@step` decorator of your step.

```python
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,6 @@ If you want to create your own custom secrets store implementation, you can foll

1. Create a class that inherits from the `zenml.zen_stores.secrets_stores.base_secrets_store.BaseSecretsStore` base class and implements the `abstractmethod`s shown in the interface above. Use `SecretsStoreType.CUSTOM` as the `TYPE` value for your secrets store class.
2. If you need to provide any configuration, create a class that inherits from the `SecretsStoreConfiguration` class and add your configuration parameters there. Use that as the `CONFIG_TYPE` value for your secrets store class.
3. To configure the ZenML server to use your custom secrets store, make sure your code is available in the container image that is used to run the ZenML server. Then, use environment variables or helm chart values to configure the ZenML server to use your custom secrets store, as covered in the [deployment guide](../README.md).
3. To configure the ZenML server to use your custom secrets store, make sure your code is available in the container image that is used to run the ZenML server. Then, use environment variables or helm chart values to configure the ZenML server to use your custom secrets store, as covered in the [deployment guide](./README.md).

<figure><img src="https://static.scarf.sh/a.png?x-pxid=f0b4f458-0a54-4fcd-aa95-d5ee424815bc" alt="ZenML Scarf"><figcaption></figcaption></figure>
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: Deploying ZenML with custom Docker images.

In most cases, deploying ZenML with the default `zenmlhub/zenml-server` Docker image should work just fine. However, there are some scenarios when you might need to deploy ZenML with a custom Docker image:

* You have implemented a custom artifact store for which you want to enable [artifact visualizations](../../how-to/handle-data-artifacts/visualize-artifacts.md) or [step logs](../../how-to/setting-up-a-project-repository/best-practices.md#logging) in your dashboard.
* You have implemented a custom artifact store for which you want to enable [artifact visualizations](../../how-to/data-artifact-management/visualize-artifacts/README.md) or [step logs](../../../how-to/setting-up-a-project-repository/best-practices.md#logging) in your dashboard.
* You have forked the ZenML repository and want to deploy a ZenML server based on your own fork because you made changes to the server / database logic.

{% hint style="warning" %}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ These configuration options are only relevant if you're using Hashicorp Vault as
{% endtab %}

{% tab title="Custom" %}
These configuration options are only relevant if you're using a custom secrets store backend implementation. For this to work, you must have [a custom implementation of the secrets store API](manage-the-deployed-services/custom-secret-stores.md) in the form of a class derived from `zenml.zen_stores.secrets_stores.base_secrets_store.BaseSecretsStore`. This class must be importable from within the ZenML server container, which means you most likely need to mount the directory containing the class into the container or build a custom container image that contains the class.
These configuration options are only relevant if you're using a custom secrets store backend implementation. For this to work, you must have [a custom implementation of the secrets store API](custom-secret-stores.md) in the form of a class derived from `zenml.zen_stores.secrets_stores.base_secrets_store.BaseSecretsStore`. This class must be importable from within the ZenML server container, which means you most likely need to mount the directory containing the class into the container or build a custom container image that contains the class.

The following configuration option is required:

Expand Down
Loading
Loading