OCaml: `(flags …)` of an ocamllex stanza or a test fixture's `(env …)` are taken as the project dropping :standard; opam's own-compiler matrix (`ocamlv`) is "1 OCaml version"; `ocaml/setup-ocaml/lint-fmt` is the ecosystem's format check

Offen
#286 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
52/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Aktiv
Tech-Stack
github-actions, ocaml, python
Bereich
ci-cd, tooling

Rechercherichtung

Start in project_validator/ecosystems/ocaml.py: the dune (flags ...) parsing around lines 203-206 treats ocamllex and test-fixture flags as compiler flags, and the setup-ocaml handling near line 298 needs lint-fmt recognition. The matrix check should read ocamlv-style keys with version-shaped values. Done when the repros in the issue (fx_h, fx_g, the ocamlv matrix, and the lint-fmt@v3 workflow) give the expected PASS results without breaking the existing OCaml tests.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

dune: compiler-warnings/warnings-as-errors FAIL "no OCaml warning settings found" although CI tests in the dev profile; the (flags -ml) that "drops :standard" is an ocamllex lexer stanza and (env (_ (flags -w -33))) sits inside test fixtures. opam: "1 OCaml version (default)" while the matrix variable ocamlv drives 11 compiler versions built by opam itself. lwt: ocaml/setup-ocaml/lint-fmt@v3 runs dune build @fmt and fails on unformatted files → "CI does not run ocamlformat".

Evidence from the corpus audit

ocaml/dune / compiler-warnings, warnings-as-errors
  • kind: FALSE_NEGATIVE
  • actual: FAIL: OCaml: no OCaml warning settings found; enable at least dune's dev profile warning set (or -w +a); OCaml: warnings are not treated as errors in CI configuration and the dune files
  • expected: PASS: CI tests in the dev profile (opam exec -- make test, opam exec -- ./dune.exe test ...); the (flags …) fields that "drop :standard" are an ocamllex stanza's lexer flags ((flags -ml)) and (env (_ (flags -w -33))) inside test fixtures, not compiler flags of the product
  • evidence: src/dune_lang/dune:22-24: (ocamllex\n (modules dune_file_script)\n (flags -ml)); also src/dune_rules/dune:42, otherlibs/dune-rpc/dune:9, src/dune_rules/cram/dune:3 (all (flags -ml) of ocamllex); otherlibs/dune-site/test/plugin_require_thread.t/plugin/dune:1: (env (_ (flags -w -33))); .github/workflows/workflow.yml:293: run: opam exec -- make test; project_validator/ecosystems/ocaml.py:203-206: every (flags …) form of a dune file is read as compiler flags
  • repro: dune with (library (name l))\n(ocamllex (modules lexer) (flags -ml)) + workflow run: ./_boot/dune.exe runtest → compiler-warnings FAIL (reproduced in audit/scratch/fx_h; without the ocamllex stanza, fx_g, it passes)
  • confidence: high
ocaml/opam / platform-matrix
  • kind: FALSE_NEGATIVE
  • actual: FAIL: OCaml: CI covers 3 OS(es) (linux, macos, windows), 1 OCaml version(s) (default), 3 combination(s); expected at least 2 OCaml versions (found 1); map names the jobs Build-Linux (4.11.2) ... Build-Linux (5.5.0) yet gives them toolchain OCaml default
  • expected: 11 OCaml versions on Linux and 2 on Windows: the matrix variable ocamlv is the compiler version (opam builds its own compilers, .github/scripts/main/ocaml-cache.sh ${{ matrix.ocamlv }}); the profile knows only setup-ocaml's ocaml-compiler, ocaml/opam: images and opam switch create
  • evidence: .github/workflows/main.yml:114: ocamlv: [ 4.11.2, 4.12.1, 4.13.1, 5.0.0, 5.1.1, 5.2.1, 5.3.0, 5.4.1, trunk, 4.14.4, 5.5.0 ]; :142: run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}; docs/ecosystems/ocaml.md "platform-matrix" lists only setup-ocaml, the docker image and opam switch create
  • repro: matrix ocamlv: [4.14.4, 5.5.0] with a run: passing ${{ matrix.ocamlv }} to a script → "1 OCaml version (default)"
  • confidence: medium (a matrix key named ocaml*/ocamlv with version-shaped values is strong evidence; recognising it is a heuristic)
ocsigen/lwt / code-formatting
  • kind: FALSE_NEGATIVE
  • actual: FAIL component: OCaml: .ocamlformat is defined but CI does not run ocamlformat
  • expected: PASS: ocaml/setup-ocaml/lint-fmt@v3 is the standard OCaml-ecosystem formatting check (it runs dune build @fmt, failing on unformatted files); its sibling lint-opam runs opam-dune-lint
  • evidence: .github/workflows/lint.yml:25-34: lint-fmt:\n ... - uses: ocaml/setup-ocaml@v3\n with:\n ocaml-compiler: 5\n - uses: ocaml/setup-ocaml/lint-fmt@v3; .ocamlformat at the root; project_validator/ecosystems/ocaml.py mentions setup-ocaml only for ocaml-compiler (line 298)
  • repro: .ocamlformat + workflow step uses: ocaml/setup-ocaml/lint-fmt@v3 → "CI does not run ocamlformat"
  • confidence: high

Found by the regression-corpus audit (235 real repositories, one or more per ecosystem profile; corpus and expected results in corpus/). Evidence is quoted from the audited checkouts at the commits pinned in corpus/projects.toml; <checkouts>/<owner>__<repo> is such a checkout.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ByTXNqDWdM7HzezrFtEvQt

Vorherrschende Sprache
Python
Sterne
4
Forks
1
Ø Merge
10 Std. 41 Min.
Gemergte PRs (30 T.)
79

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus cpp-best-practices/project_validator

Alle Issues in cpp-best-practices/project_validator

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.