diff --git a/.github/workflows/docs-ci.yml b/.github/workflows/docs-ci.yml index d1002f028691..67d054f8f576 100644 --- a/.github/workflows/docs-ci.yml +++ b/.github/workflows/docs-ci.yml @@ -27,7 +27,10 @@ on: jobs: build-docs: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 diff --git a/.gitignore b/.gitignore index 3b6ac5e9a7f4..f931c10e9407 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ site/site/ site/docs/docs/ site/docs/.asf.yaml site/docs/javadoc/ +site/.venv/ # benchmark output spark/v3.4/spark/benchmark/* diff --git a/site/Makefile b/site/Makefile index 3c014f222553..14c73134f169 100755 --- a/site/Makefile +++ b/site/Makefile @@ -29,6 +29,14 @@ build: # Clean and build the docs site locally. deploy: # Clean, build, and deploy the Iceberg docs site. dev/deploy.sh $(remote_name) +.PHONY: lint +lint: # Check linting on the docs. + dev/lint.sh + +.PHONY: lint-fix +lint-fix: # Run linting with auto-fix on the docs. + dev/lint.sh --fix + .PHONY: clean clean: # Clean the local docs site. dev/clean.sh diff --git a/site/README.md b/site/README.md index d1c42e292f06..aae719fcbf16 100644 --- a/site/README.md +++ b/site/README.md @@ -76,6 +76,7 @@ The docs are built, run, and released using [make](https://www.gnu.org/software/ > help: Show help for each of the Makefile recipes. > [serve](dev/serve.sh): Clean, build, and run the site locally. > [lint](dev/lint.sh): Scan markdown files for style issues. +> [lint-fix](dev/lint.sh): Run linting with auto-fix on the markdown files. To scaffold the versioned docs and build the project, run the `build` recipe. @@ -103,9 +104,18 @@ This step will generate the staged source code which blends into the original so └─.asf.yaml ``` -It will also scan all markdown files and fail the build on any style issues. To fix style issues, run the `lint` script with fix mode. +#### Linting + +To check for markdown style issues without building the entire site, use the `lint` make command: + +```sh +make lint +``` + +To automatically fix markdown style issues, use the `lint-fix` make command: + ```sh -./dev/lint.sh --fix +make lint-fix ``` diff --git a/site/dev/build.sh b/site/dev/build.sh index 67c073bc3dc7..3e491bd2eebe 100755 --- a/site/dev/build.sh +++ b/site/dev/build.sh @@ -16,10 +16,11 @@ # limitations under the License. # +source dev/common.sh set -e ./dev/setup_env.sh ./dev/lint.sh -mkdocs build +"${VENV_DIR}/bin/python3" -m mkdocs build diff --git a/site/dev/common.sh b/site/dev/common.sh index 04310c0ca638..ac1bc22b6559 100755 --- a/site/dev/common.sh +++ b/site/dev/common.sh @@ -19,6 +19,7 @@ set -e export REMOTE="iceberg_docs" +export VENV_DIR=".venv" # Ensures the presence of a specified remote repository for documentation. # If the remote doesn't exist, it adds it using the provided URL. @@ -34,12 +35,20 @@ create_or_update_docs_remote () { git fetch "${REMOTE}" } +# Creates the virtual environment if it doesn't exist. +create_venv () { + if [ ! -d "${VENV_DIR}" ]; then + echo " --> creating virtual environment at ${VENV_DIR}" + python3 -m venv "${VENV_DIR}" + fi +} + # Installs or upgrades dependencies specified in the 'requirements.txt' file using pip. install_deps () { echo " --> install deps" - # Use pip to install or upgrade dependencies from the 'requirements.txt' file quietly - pip3 -q install -r requirements.txt --upgrade + # Use pip from venv to install or upgrade dependencies from the 'requirements.txt' file quietly + "${VENV_DIR}/bin/pip3" -q install -r requirements.txt --upgrade } # Checks if a provided argument is not empty. If empty, displays an error message and exits with a status code 1. @@ -186,16 +195,16 @@ pull_versioned_docs () { check_markdown_files () { echo " --> check markdown file styles" - if ! python3 -m pymarkdown --config markdownlint.yml scan docs/docs/nightly/docs/*.md docs/*.md README.md + if ! "${VENV_DIR}/bin/python3" -m pymarkdown --config markdownlint.yml scan docs/docs/nightly/docs/*.md docs/*.md README.md then - echo "Markdown style issues found. Please run './dev/lint.sh --fix' to fix them." + echo "Markdown style issues found. Please run 'make lint-fix' to fix them." exit 1 fi } fix_markdown_files () { echo " --> fix markdown file styles" - python3 -m pymarkdown --config markdownlint.yml fix docs/docs/nightly/docs/*.md docs/*.md README.md + "${VENV_DIR}/bin/python3" -m pymarkdown --config markdownlint.yml fix docs/docs/nightly/docs/*.md docs/*.md README.md } # Cleans up artifacts and temporary files generated during documentation management. diff --git a/site/dev/deploy.sh b/site/dev/deploy.sh index 4e59e055abc6..15bb826a4421 100755 --- a/site/dev/deploy.sh +++ b/site/dev/deploy.sh @@ -16,6 +16,7 @@ # limitations under the License. # +source dev/common.sh set -e remote_name="${1:-origin}" @@ -24,4 +25,4 @@ remote_name="${1:-origin}" echo " --> Deploy to asf-site branch of remote repository: ${remote_name}" -mkdocs gh-deploy --no-history --remote-branch=asf-site --remote-name ${remote_name} +"${VENV_DIR}/bin/python3" -m mkdocs gh-deploy --no-history --remote-branch=asf-site --remote-name ${remote_name} diff --git a/site/dev/lint.sh b/site/dev/lint.sh index db7762800cd4..069794578766 100755 --- a/site/dev/lint.sh +++ b/site/dev/lint.sh @@ -20,6 +20,8 @@ source dev/common.sh set -e +./dev/setup_env.sh + if [[ "$1" == "--fix" ]]; then fix_markdown_files else diff --git a/site/dev/serve.sh b/site/dev/serve.sh index 9a13dd2a1197..2be2e5f62661 100755 --- a/site/dev/serve.sh +++ b/site/dev/serve.sh @@ -16,10 +16,11 @@ # limitations under the License. # +source dev/common.sh set -e ./dev/setup_env.sh ./dev/lint.sh -mkdocs serve --dirty --watch . +"${VENV_DIR}/bin/python3" -m mkdocs serve --dirty --watch . diff --git a/site/dev/setup_env.sh b/site/dev/setup_env.sh index f87c10d20d2e..a31d56dd5a60 100755 --- a/site/dev/setup_env.sh +++ b/site/dev/setup_env.sh @@ -22,6 +22,8 @@ set -e clean +create_venv + install_deps pull_versioned_docs