diff --git a/tools/argument-comment-lint/README.md b/tools/argument-comment-lint/README.md index 91c1fdecc8..d5c3861e1e 100644 --- a/tools/argument-comment-lint/README.md +++ b/tools/argument-comment-lint/README.md @@ -73,6 +73,35 @@ GitHub releases also publish a DotSlash file named x64. The published package contains a small runner executable, a bundled `cargo-dylint`, and the prebuilt lint library. +The Unix archive layout is: + +```text +argument-comment-lint/ + bin/ + argument-comment-lint + cargo-dylint + lib/ + libargument_comment_lint@nightly-2025-09-18-.dylib|so +``` + +On Windows the same layout is published as a `.zip`, with `.exe` and `.dll` +filenames instead. + +DotSlash resolves the package entrypoint to `argument-comment-lint/bin/argument-comment-lint` +(or `.exe` on Windows). That runner then finds the sibling bundled +`cargo-dylint` binary and the single packaged Dylint library under `lib/`, and +invokes `cargo-dylint dylint --lib-path ` with the repo's default +`DYLINT_RUSTFLAGS` and `CARGO_INCREMENTAL=0` settings. + +`run.sh` prefers that packaged runner when `dotslash` is installed, and falls +back to the local `cargo dylint --path ...` flow when the release asset is not +available yet or `CODEX_ARGUMENT_COMMENT_LINT_USE_LOCAL=1` is set. To refresh +the cached DotSlash manifest after a new release: + +```bash +CODEX_ARGUMENT_COMMENT_LINT_REFRESH=1 ./tools/argument-comment-lint/run.sh -p codex-core +``` + Run the lint against `codex-rs` from the repo root: ```bash diff --git a/tools/argument-comment-lint/run.sh b/tools/argument-comment-lint/run.sh index 8e3c59714f..512123e0e9 100755 --- a/tools/argument-comment-lint/run.sh +++ b/tools/argument-comment-lint/run.sh @@ -5,6 +5,11 @@ set -euo pipefail repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" lint_path="$repo_root/tools/argument-comment-lint" manifest_path="$repo_root/codex-rs/Cargo.toml" +release_manifest_url="https://github.com/openai/codex/releases/latest/download/argument-comment-lint" +cache_root="${XDG_CACHE_HOME:-$HOME/.cache}/codex/argument-comment-lint" +release_manifest_path="$cache_root/argument-comment-lint" +dotslash_cache_root="$cache_root/dotslash" +toolchain_channel="nightly-2025-09-18" strict_lint="uncommented-anonymous-literal-argument" noise_lint="unknown_lints" @@ -14,6 +19,69 @@ has_no_deps=false has_library_selection=false expect_value="" +try_release_runner() { + if [[ "${CODEX_ARGUMENT_COMMENT_LINT_USE_LOCAL:-0}" == "1" ]]; then + return 1 + fi + if ! command -v dotslash >/dev/null 2>&1 || ! command -v curl >/dev/null 2>&1; then + return 1 + fi + + mkdir -p "$cache_root" "$dotslash_cache_root" + if [[ ! -f "$release_manifest_path" || "${CODEX_ARGUMENT_COMMENT_LINT_REFRESH:-0}" == "1" ]]; then + local tmp_manifest + tmp_manifest="$(mktemp "$cache_root/argument-comment-lint.XXXXXX")" + if ! curl -fsL "$release_manifest_url" -o "$tmp_manifest"; then + rm -f "$tmp_manifest" + return 1 + fi + chmod +x "$tmp_manifest" + mv "$tmp_manifest" "$release_manifest_path" + fi + + if ! DOTSLASH_CACHE="$dotslash_cache_root" dotslash -- fetch "$release_manifest_path" >/dev/null 2>&1; then + return 1 + fi + + exec env DOTSLASH_CACHE="$dotslash_cache_root" "$release_manifest_path" "$@" +} + +ensure_local_prerequisites() { + if ! command -v cargo-dylint >/dev/null 2>&1 || ! command -v dylint-link >/dev/null 2>&1; then + cat >&2 <&2 <