0
0
Fork 0
Commit graph

2 commits

Author SHA1 Message Date
Karstein Phobic Nyvold Kvistad
75d77e2fb2 bump_project_version: seed at 1.0.0.0 on first run
Per user feedback. Previous behaviour treated 'no version yet' as
0.0.0.0 and bumped from there, so the very first call with level=build
produced 0.0.0.1 -- awkward as a canonical starting point. Most
projects start tracking at 1.0.0.0 the moment they turn on versioning.

New behaviour: if Project Information.version is None / empty / '0.0.0.0',
the tool seeds the value at 1.0.0.0 directly and ignores the level
argument for that one call. Subsequent calls bump per the level as
before.

Test cases:
  None     + level=build    -> 1.0.0.0  (seed)
  None     + level=major    -> 1.0.0.0  (seed)
  ''       + level=minor    -> 1.0.0.0  (seed)
  0.0.0.0  + level=revision -> 1.0.0.0  (seed)
  1.0.0.0  + level=build    -> 1.0.0.1
  1.0.0.0  + level=minor    -> 1.1.0.0
  1.2.3.4  + level=major    -> 2.0.0.0
2026-04-26 00:08:26 +02:00
Karstein Phobic Nyvold Kvistad
2ed3f17dc7 feat(bump_project_version): bump Project Information.Version one part
New MCP tool that increments one part of the 4-part
Project Information.Version field of the primary project, saves the
project, and reports the before/after.

Behaviour:
  - level=major   -> bump major,    reset minor/revision/build to 0
  - level=minor   -> bump minor,    reset revision/build to 0
  - level=revision-> bump revision, reset build to 0
  - level=build   -> bump build only

Convention follows the rest of CODESYS / 3S / WAGO library practice
(visible in any X33 library reference like 'WagoAppCanLayer2,
1.6.1.4 (WAGO)'):
  Major     -- incompatible API break (rename FB, change public
               signature, remove method).
  Minor     -- backward-compatible feature add.
  Revision  -- bug fix only, no API change.
  Build     -- internal / CI counter, often 0 for hand-released.

Implementation notes:
  - Project Information lives as the first child node of the project
    root. Its .version property is read/written directly; IronPython
    coerces strings like '1.2.3.4' to a System.Version on assignment,
    str(System.Version) gives the dotted form back. None / empty /
    unset is treated as '0.0.0.0'.
  - Verified live against X33 (MRCodesysX33_0021): set version to
    '1.0.0.0' from None, project.save() persisted it; reload via
    primary_project.get_children() found the same value. Probe done
    via the inject-once.mjs bridge against the live watcher in PID
    23056 before this commit landed.
  - project.save() is called after the bump so the new value sticks
    in the .project file. Soft-fails on save error (visible WARNING
    in DEBUG output but the bump itself is still reported as
    successful) so a save permission glitch doesn't mask the actual
    version change.

Used by the X33 GitLab project's "version in README header" workflow:
the version surfaces at the top of README.md (and at the top of the
library list once list_project_libraries gets enriched in a follow-up
commit).
2026-04-26 00:07:36 +02:00