diff --git a/.github/shared/build_docs_pages/action.yml b/.github/shared/build_docs_pages/action.yml index a2a36530..96b6a234 100644 --- a/.github/shared/build_docs_pages/action.yml +++ b/.github/shared/build_docs_pages/action.yml @@ -6,10 +6,10 @@ description: Build Docs Pages for mkdocs workflows. runs: using: composite steps: - - uses: conda-incubator/setup-miniconda@835234971496cad1653abb28a638a281cf32541f # 3.2.0 + - uses: conda-incubator/setup-miniconda@fc2d68f6413eb2d87b895e92f8584b5b94a10167 # 3.3.0 with: - environment-file: build_env.yml - activate-environment: mkdocs + environment-file: env_build.yml + activate-environment: mkdocs-build miniforge-version: latest - name: Build Pages # this is both a build and check step diff --git a/.github/workflows/check_docs.yml b/.github/workflows/check_docs.yml index 980c6511..3938b6fe 100644 --- a/.github/workflows/check_docs.yml +++ b/.github/workflows/check_docs.yml @@ -7,7 +7,7 @@ on: # yamllint disable-line rule:truthy branches: - main paths: - - "build_env.yml" + - "env_build.yml" - "mkdocs.yml" - "build_scripts/**" - "docs/**" @@ -24,7 +24,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: fetch-depth: 0 # mkdocs-git-revision-date-localized-plugin - uses: "./.github/shared/build_docs_pages/" diff --git a/.github/workflows/check_python.yml b/.github/workflows/check_python.yml index e503edab..81e36758 100644 --- a/.github/workflows/check_python.yml +++ b/.github/workflows/check_python.yml @@ -24,8 +24,8 @@ jobs: matrix: args: ["check", "format --check --diff"] steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 - uses: astral-sh/ruff-action@eaf0ecdd668ceea36159ff9d91882c9795d89b49 # 3.4.0 with: args: ${{ matrix.args }} - version: 0.12.0 + version: 0.15.6 diff --git a/.github/workflows/check_yaml.yml b/.github/workflows/check_yaml.yml index 5aef429f..e2312323 100644 --- a/.github/workflows/check_yaml.yml +++ b/.github/workflows/check_yaml.yml @@ -23,7 +23,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 - uses: karancode/yamllint-github-action@4052d365f09b8d34eb552c363d1141fd60e2aeb2 # 3.0.0 with: yamllint_config_filepath: ".yamllint.yaml" diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index 6efe7bb7..7c565d10 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -6,11 +6,6 @@ on: # yamllint disable-line rule:truthy push: branches: - main - paths: - - "build_env.yml" - - "mkdocs.yml" - - "build_scripts/**" - - "docs/**" workflow_dispatch: # enables manual docs deployment in case of GitHub service issue concurrency: @@ -33,12 +28,12 @@ jobs: pages: write id-token: write steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 with: fetch-depth: 0 # mkdocs-git-revision-date-localized-plugin - uses: "./.github/shared/build_docs_pages/" - uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # 5.0.0 - - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # 3.0.1 + - uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # 4.0.0 with: path: "./site" - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # 4.0.5 diff --git a/.github/workflows/reusable_check_markdown.yml b/.github/workflows/reusable_check_markdown.yml index 31a2229e..e1250f78 100644 --- a/.github/workflows/reusable_check_markdown.yml +++ b/.github/workflows/reusable_check_markdown.yml @@ -9,7 +9,7 @@ on: # yamllint disable-line rule:truthy - main paths: - "**.md" - - "!docs/**" # covered by check_docs.yml + - "!docs/**" # covered by deploy_docs.yml pull_request: branches: - main @@ -28,7 +28,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 4.2.2 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 - name: Configure Globs id: globs run: | @@ -50,7 +50,7 @@ jobs: echo "globs<> "$GITHUB_OUTPUT" echo "$NEWLINE_DELIMITED_GLOBS" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - - uses: DavidAnson/markdownlint-cli2-action@992badcdf24e3b8eb7e87ff9287fe931bcb00c6e # 20.0.0 + - uses: DavidAnson/markdownlint-cli2-action@07035fd053f7be764496c0f8d8f9f41f98305101 # 22.0.0 with: config: ".markdownlint-cli2.jsonc" globs: "${{ steps.globs.outputs.globs }}" diff --git a/.gitignore b/.gitignore index b52314e1..6a3f10b1 100644 --- a/.gitignore +++ b/.gitignore @@ -271,6 +271,5 @@ $RECYCLE.BIN/ # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) -site/ -test.py out/ +site/ diff --git a/.markdownlint.json b/.markdownlint.json index 736eb7fa..1f70435d 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -125,5 +125,9 @@ "above", "below" ] + }, + "MD060": { + "style": "aligned", + "aligned_delimiter": true } } diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 88107a76..c433ec7c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,28 +1,29 @@ repos: # check markdown - repo: https://github.com/DavidAnson/markdownlint-cli2 - rev: v0.18.1 + rev: v0.21.0 hooks: - id: markdownlint-cli2 require_serial: true # check yaml - repo: https://github.com/adrienverge/yamllint - rev: v1.37.1 + rev: v1.38.0 hooks: - id: yamllint args: [-c, .yamllint.yaml, --strict] # check python - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.0 + rev: v0.15.6 hooks: - id: ruff-check - id: ruff-format + args: [--check, --diff] # check mkdocs-specific issues - repo: local hooks: - id: mkdocs-build name: Build documentation - entry: conda run -n mkdocs mkdocs build --strict + entry: conda run -n mkdocs-build mkdocs build --strict language: system always_run: true pass_filenames: false diff --git a/.ruff.toml b/.ruff.toml index f9b6e02a..45ab4afd 100644 --- a/.ruff.toml +++ b/.ruff.toml @@ -1,12 +1,10 @@ -exclude = ["test.py"] fix = true indent-width = 4 line-length = 88 -required-version = "==0.12.0" +required-version = ">=0.15.6" show-fixes = true [lint] -select = ["ALL"] ignore = [ "D203", # prefer conflicting D211 "D213", # prefer conflicting D212 @@ -22,10 +20,20 @@ ignore = [ "Q002", "Q003", # END ] - -[lint.per-file-ignores] -"build_scripts/*" = ["INP001"] -"verification_scripts/*" = ["INP001"] +select = ["ALL"] +per-file-ignores = { "test/*" = [ + "ANN201", + "ANN202", + "D101", + "D102", + "D100", + "PT", +], "**/*.ipynb" = [ + "T201", + "ANN401", +], "**/__init__.py" = [ + "D104", +] } [format] indent-style = "space" diff --git a/.yamllint-ignore b/.yamllint-ignore new file mode 100644 index 00000000..b57f8905 --- /dev/null +++ b/.yamllint-ignore @@ -0,0 +1 @@ +theme/ diff --git a/.yamllint.yaml b/.yamllint.yaml index 4f50ae54..c324fa7a 100644 --- a/.yamllint.yaml +++ b/.yamllint.yaml @@ -1,7 +1,6 @@ yaml-files: - - "*.yaml" - - "*.yml" - - ".yamllint" + - "**.yaml" + - "**.yml" rules: anchors: enable @@ -34,6 +33,6 @@ rules: truthy: level: warning -ignore: - - .git/ - - site/ +ignore-from-file: + - .gitignore + - .yamllint-ignore diff --git a/build_env.yml b/build_env.yml deleted file mode 100644 index a0843c8e..00000000 --- a/build_env.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: mkdocs -dependencies: - - conda-forge::click=8.2.1 - - conda-forge::jinja2=3.1.6 - - conda-forge::libffi=3.4.6 - - conda-forge::markupsafe=3.0.2 # Not semver, be cautious - - conda-forge::mergedeep=1.3.4 - - conda-forge::numpy=2.2.6 - - conda-forge::pandas=2.3.0 - - conda-forge::pandoc=3.7.0.2 - - conda-forge::pip=25.1.1 - - conda-forge::pygments=2.19.1 - - conda-forge::pypandoc=1.15 - - conda-forge::pyparsing=3.0.9 - - conda-forge::python=3.13.3 - - conda-forge::python-dateutil=2.9.0 - - conda-forge::pytz=2025.2 - - conda-forge::pyyaml=6.0.2 - - conda-forge::ruff=0.12.0 - - conda-forge::setuptools=80.9.0 - - conda-forge::six=1.17.0 - - conda-forge::sqlite=3.50.0 - - conda-forge::tabulate=0.9.0 - - conda-forge::tk=8.6.13 - - conda-forge::xz=5.8.1 - - conda-forge::yaml=0.2.5 - - conda-forge::yamllint=1.37.1 - - pip: - - jinja2-workarounds==0.1.0 - - markdown==3.8.0 - - mkdocs-gen-files==0.5.0 - - mkdocs-glightbox==0.3.7 - - mkdocs-git-revision-date-localized-plugin==1.2.6 - - mkdocs-material==9.6.14 - - mkdocs-redirects==1.2.1 - - mkdocs-table-reader-plugin==3.1.0 - - linkchecker==10.4.0 - - pre-commit==3.7.1 - - pymdown-extensions==10.8.1 # Not semver, be cautious - - git+https://github.com/wwarriner/mkdocs-macros-plugin@d445c98dcc14ecae48ddf53b4758f3942ed706b8 - - git+https://github.com/uabrc/mkdocs@888fd28f92a320352f63600c24635231a42e5fac # new - - git+https://github.com/uabrc/mkdocs-title-casing-plugin.git@stable diff --git a/docs/news/posts/2025/10/2025-10-07-migration-overview.md b/docs/news/posts/2025/10/2025-10-07-migration-overview.md index 53406a3e..68a1633e 100644 --- a/docs/news/posts/2025/10/2025-10-07-migration-overview.md +++ b/docs/news/posts/2025/10/2025-10-07-migration-overview.md @@ -153,13 +153,13 @@ Compute nodes are only able to run jobs from one of GPFS 4 or GPFS 5 so compute **Current GPFS 5 Compute Capacity Pre-Migration**: -| Partition | Available Nodes | Notes | -|---|---|---| -| mainline | 20 (2560 cores) | Include AMD CPUs. See the [list of changes](#changes-to-mainline-partitions) for details | -| pascalnodes | 0 | All pascalnodes will be moved during the 1st compute migration | -| amperenodes | 5 (10 A100s) | 10 amperenodes will be added during the 1st compute migration with the remaining 5 added once the migration completes | -| amperenodes-medium | 1 (2 A100s) | Nodes will be added to the amperenodes-medium partition during both compute migrations | -| largemem | 0 | largemem and largmem-long nodes will remain on GPFS 4 until the full migration completes. If you require access to the 1.5 TiB RAM nodes, contact support | +| Partition | Available Nodes | Notes | +|--------------------|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| +| mainline | 20 (2560 cores) | Include AMD CPUs. See the [list of changes](#changes-to-mainline-partitions) for details | +| pascalnodes | 0 | All pascalnodes will be moved during the 1st compute migration | +| amperenodes | 5 (10 A100s) | 10 amperenodes will be added during the 1st compute migration with the remaining 5 added once the migration completes | +| amperenodes-medium | 1 (2 A100s) | Nodes will be added to the amperenodes-medium partition during both compute migrations | +| largemem | 0 | largemem and largmem-long nodes will remain on GPFS 4 until the full migration completes. If you require access to the 1.5 TiB RAM nodes, contact support | #### Changes to Mainline Partitions @@ -190,17 +190,17 @@ To best accomodate workload for both migrated and not-yet-migrated users, comput **50% Migration Completion**: -| Partition | GPFS 4 Nodes | GPFS 5 Nodes | Notes | -|---|---|---|---| -| mainline | 25 | 68 | GPFS 4 mainline partitions will use the remaining largemem and amd-hdr100 nodes. Mixed Intel and AMD hardware on both GPFS 4 and GPFS 5 | -| pascalnodes | 0 | 17 | | -| pascalnodes-medium | 0 | 8 | | -| amperenodes | 5 (10 A100s) | 15 (30 A100s) | | -| amperenodes-medium | 1 (2 A100s) | 7 (14 A100s) | | -| largemem | 13 | 0 | Shared with mainline partitions | -| largemem-long | 5 | 0 | Shared with mainline partitions | -| amd-hdr100 | 12 | 20 | Shared with mainline partitions | -| intel-dcb | 9 | 0 | | +| Partition | GPFS 4 Nodes | GPFS 5 Nodes | Notes | +|--------------------|--------------|---------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| mainline | 25 | 68 | GPFS 4 mainline partitions will use the remaining largemem and amd-hdr100 nodes. Mixed Intel and AMD hardware on both GPFS 4 and GPFS 5 | +| pascalnodes | 0 | 17 | | +| pascalnodes-medium | 0 | 8 | | +| amperenodes | 5 (10 A100s) | 15 (30 A100s) | | +| amperenodes-medium | 1 (2 A100s) | 7 (14 A100s) | | +| largemem | 13 | 0 | Shared with mainline partitions | +| largemem-long | 5 | 0 | Shared with mainline partitions | +| amd-hdr100 | 12 | 20 | Shared with mainline partitions | +| intel-dcb | 9 | 0 | | #### Effects on Queue Times diff --git a/env_build.yml b/env_build.yml new file mode 100644 index 00000000..416dfa4d --- /dev/null +++ b/env_build.yml @@ -0,0 +1,6 @@ +name: mkdocs-build +dependencies: + - conda-forge::pip=26.0.1 + - conda-forge::python=3.13.12 + - pip: + - -r requirements-build.txt diff --git a/env_dev.yml b/env_dev.yml new file mode 100644 index 00000000..3452d13c --- /dev/null +++ b/env_dev.yml @@ -0,0 +1,7 @@ +name: mkdocs +dependencies: + - conda-forge::pip=26.0.1 + - conda-forge::python=3.13.12 + - pip: + - -r requirements-build.txt + - -r requirements-dev.txt diff --git a/macros/__init__.py b/macros/__init__.py index e2bb8bc4..c473ee01 100644 --- a/macros/__init__.py +++ b/macros/__init__.py @@ -3,7 +3,7 @@ from __future__ import annotations from pathlib import Path, PurePath -from typing import TYPE_CHECKING, Callable +from typing import TYPE_CHECKING import yaml @@ -13,6 +13,8 @@ from .render import CardRenderer if TYPE_CHECKING: + from collections.abc import Callable + from mkdocs.structure.pages import Page from mkdocs_macros.plugin import MacrosPlugin diff --git a/macros/render.py b/macros/render.py index ba2126d7..3f942950 100644 --- a/macros/render.py +++ b/macros/render.py @@ -4,12 +4,14 @@ import textwrap from pathlib import PurePath -from typing import TYPE_CHECKING, Callable +from typing import TYPE_CHECKING from macros.card import Card, CardNamespace, EmojiSizesCss, EmojiVerticalAlignmentCss from macros.util import normalize_page_link if TYPE_CHECKING: + from collections.abc import Callable + from mkdocs.structure.pages import Page @@ -145,7 +147,7 @@ def _icon_vertical_alignment(self) -> str: def _icon_color(self) -> str: color = self._card.icon_color - return color if color else self._DEFAULT_ICON_COLOR + return color or self._DEFAULT_ICON_COLOR #### CONTENT PART def _content_part(self) -> str | None: @@ -159,11 +161,11 @@ def _link_part(self) -> str | None: def _link_text(self) -> str: text = self._card.link_text - return text if text else self._DEFAULT_LINK_TEXT + return text or self._DEFAULT_LINK_TEXT def _link_icon(self) -> str: name = self._card.link_icon_name - return name if name else self._DEFAULT_LINK_ICON_NAME + return name or self._DEFAULT_LINK_ICON_NAME def _link_url(self) -> str | None: url = self._card.link_url diff --git a/requirements-build.txt b/requirements-build.txt new file mode 100644 index 00000000..79692119 --- /dev/null +++ b/requirements-build.txt @@ -0,0 +1,16 @@ +jinja2==3.1.6 +jinja2-workarounds==0.1.0 +markdown==3.10.2 +markupsafe==3.0.3 # not semver, be cautious +mkdocs-gen-files==0.6.1 +mkdocs-glightbox==0.5.2 +mkdocs-git-revision-date-localized-plugin==1.5.1 +mkdocs-material==9.7.5 +mkdocs-redirects==1.2.2 +mkdocs-table-reader-plugin==3.1.0 +pymdown-extensions==10.21.2 +pypandoc-binary==1.17 +pyyaml==6.0.3 +git+https://github.com/wwarriner/mkdocs-macros-plugin@d445c98dcc14ecae48ddf53b4758f3942ed706b8 +git+https://github.com/uabrc/mkdocs@888fd28f92a320352f63600c24635231a42e5fac +git+https://github.com/uabrc/mkdocs-title-casing-plugin.git@stable diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 00000000..6f6e1494 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,6 @@ +attrs==25.4.0 +linkchecker==10.6.0 +pandas==2.3.3 +pre-commit==4.5.1 +ruff==0.15.6 +yamllint==1.38.0 diff --git a/scripts/__init__.py b/scripts/__init__.py index 6e031999..e69de29b 100644 --- a/scripts/__init__.py +++ b/scripts/__init__.py @@ -1 +0,0 @@ -# noqa: D104 diff --git a/test.py b/verification_scripts/__init__.py similarity index 100% rename from test.py rename to verification_scripts/__init__.py diff --git a/verification_scripts/linkchecker.py b/verification_scripts/linkchecker.py index e64eff52..4216fb77 100644 --- a/verification_scripts/linkchecker.py +++ b/verification_scripts/linkchecker.py @@ -126,7 +126,7 @@ def modify_file_uris(_s: pd.Series) -> pd.Series: splits = _s.str.split("repos/uabrc.github.io", expand=True) fixes = splits.iloc[:, -1][keep] - fixes = fixes.apply(lambda x: PurePath(x)) # pyright: ignore[reportCallIssue,reportArgumentType] + fixes = fixes.apply(PurePath) # pyright: ignore[reportCallIssue,reportArgumentType] fixes = fixes.astype(str) fixes = fixes.str.lstrip(os.sep)