# azy5030 overlay management commands

# Install dev tooling (linters) used by the lint recipes and CI
setup-dev:
    brew install just markdownlint-cli shellcheck actionlint uv

# Lint Markdown: all repo files, or only the .md files in a passed list
lint-md files="":
    #!/usr/bin/env bash
    set -euo pipefail
    if [ -z "{{files}}" ]; then
        markdownlint --ignore node_modules '**/*.md'
    else
        targets=$(printf '%s\n' {{files}} | grep -E '\.md$' || true)
        if [ -n "$targets" ]; then markdownlint --ignore node_modules $targets; fi
    fi

# Lint shell scripts: all repo files, or only the .sh files in a passed list
lint-sh files="":
    #!/usr/bin/env bash
    set -euo pipefail
    if [ -z "{{files}}" ]; then
        targets=$(find . -name '*.sh' -not -path './node_modules/*')
    else
        targets=$(printf '%s\n' {{files}} | grep -E '\.sh$' || true)
    fi
    if [ -n "$targets" ]; then shellcheck $targets; fi

# Lint YAML: all repo files, or only the .yaml/.yml in a passed list (via uv)
lint-yaml files="":
    #!/usr/bin/env bash
    set -euo pipefail
    if [ -z "{{files}}" ]; then
        targets=$(find . \( -name '*.yaml' -o -name '*.yml' \) -not -path './node_modules/*')
    else
        targets=$(printf '%s\n' {{files}} | grep -E '\.ya?ml$' || true)
    fi
    if [ -n "$targets" ]; then uvx yamllint $targets; fi

# Lint Gitea Actions workflows: all, or only the workflow files in a passed list
lint-actions files="":
    #!/usr/bin/env bash
    set -euo pipefail
    if [ -z "{{files}}" ]; then
        targets=$(find .gitea/workflows \( -name '*.yaml' -o -name '*.yml' \) 2>/dev/null || true)
    else
        targets=$(printf '%s\n' {{files}} | grep -E '^\.gitea/workflows/.*\.ya?ml$' || true)
    fi
    # actionlint also runs shellcheck on each `run:` block. No custom runner
    # labels here (workflows use ubuntu-latest), so no -config-file is needed.
    if [ -n "$targets" ]; then actionlint $targets; fi

# Autofix all Markdown files
fix-md:
    markdownlint --fix --ignore node_modules '**/*.md'

# Apply shellcheck's auto-fixable suggestions to all shell scripts
fix-sh:
    #!/usr/bin/env bash
    set -euo pipefail
    targets=$(find . -name '*.sh' -not -path './node_modules/*')
    # shellcheck's diff carries ./ path segments that `git apply` rejects; strip them.
    diff=$(shellcheck -f diff $targets 2>/dev/null | sed 's|/\./|/|g' || true)
    if [ -n "$diff" ]; then printf '%s\n' "$diff" | git apply; fi

# Lint everything (all repo files, or only a passed list of files)
lint files="": (lint-md files) (lint-sh files) (lint-yaml files) (lint-actions files)

# Autofix everything
fix: fix-md fix-sh
