From f3ac85c8349264e80b2d03b9b0d67c11909a5b44 Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Sun, 15 Jun 2025 05:10:59 -0500 Subject: [PATCH] Add support for updating const's defined in Nim source files. --- update_version.nim | 57 +++++++++++++++++++++++++++++++++---------- update_version.nimble | 2 +- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/update_version.nim b/update_version.nim index d49076b..cef6201 100644 --- a/update_version.nim +++ b/update_version.nim @@ -57,10 +57,11 @@ Details: Specifically it uses the following regexes: - TODO + Nim: ^\s*const\s+\S*VERSION\S*\*?\s*=\s*"()"\s*$ + Node: ^\s*export\s+const\s+\S*VERSION\S*\s*=\s*"()"\s*;?$ """ -const UV_VERSION = "1.0.0" +const UV_VERSION = "1.0.2" type LangType = enum lNim, lNode @@ -85,9 +86,13 @@ type PackageVersion = object # See also: # https://regex101.com/r/Ly7O1x/3/ # -let SemVerPattern = +let SemVerRegex = re"^(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)\.(?P0|[1-9]\d*)(?:-(?P(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$" +let NimConstPattern = "^\\s*const\\s+\\S*VERSION\\S*\\*?\\s*=\\s*\"($#)\"\\s*$" +let NodeConstPattern = + "^\\s*export\\s+const\\s+\\S*VERSION\\S*\\s*=\\s*\"($#)\"\\s*;?$" + proc parseNimblePackage(dir: Path): PackageVersion = result = PackageVersion(lang: lNim) @@ -146,6 +151,25 @@ proc writePackage(pkg: PackageVersion) = writeFile($pkg.file, pkg.nodePackage.pretty) +proc replaceVersionInFile(file: Path, pkg: PackageVersion, vOld: string) = + let rgx = + case pkg.lang + of lNim: re(NimConstPattern % [vOld.replace(".", "\\.")]) + of lNode: re(NodeConstPattern % [vOld.replace(".", "\\.")]) + + var newLines = newSeq[string]() + for l in lines($file): + let mOpt = l.match(rgx) + if mOpt.isSome: + let m = mOpt.get + newLines.add( + l[0.."] == "last": pkg.version = incrementLastVersionPart(pkg.version) @@ -249,10 +275,18 @@ when isMainModule: pkg.version = incrementSemverPart(pkg.version, part) writePackage(pkg) + + for filePath in args[""]: + replaceVersionInFile(Path(filePath), pkg, oldVersion) + echo pkg.version elif args["set"]: pkg.version = $args[""] + + for filePath in args[""]: + replaceVersionInFile(Path(filePath), pkg, oldVersion) + writePackage(pkg) echo pkg.version @@ -260,21 +294,18 @@ when isMainModule: elif args["interactive"]: var acceptNewVersion = false - var newVersion = pkg.version while not acceptNewVersion: - stdout.writeLine "Current version is " & pkg.version + stdout.writeLine "Current version is " & oldVersion stdout.write "New version? " - newVersion = stdin.readLine + pkg.version = stdin.readLine stdout.write "New version will be set to '" & pkg.version & "'. Is this correct (yes/no)? " let isCorrect = stdin.readLine - let acceptNewVersion = "yes".startsWith(isCorrect.toLower) + acceptNewVersion = "yes".startsWith(isCorrect.toLower) - pkg.version = newVersion echo "Updating version definition in " & $pkg.file writePackage(pkg) - # TODO: - # for f in filesToUpdate: - # echo "Updating version definition in " & $f - # updateVersionInFile(f) + for filePath in args[""]: + echo "Updating version definition in " & $filePath + replaceVersionInFile(Path(filePath), pkg, oldVersion) \ No newline at end of file diff --git a/update_version.nimble b/update_version.nimble index 132d34b..54e7355 100644 --- a/update_version.nimble +++ b/update_version.nimble @@ -1,6 +1,6 @@ # Package -version = "1.0.1" +version = "1.0.2" author = "Jonathan Bernard" description = "Small util to update version consistently for nim and node packages." license = "MIT"