onnxruntime/tools/python/update_version.py
Justin Chu d834ec895a
Adopt linrtunner as the linting tool - take 2 (#15085)
### Description

`lintrunner` is a linter runner successfully used by pytorch, onnx and
onnx-script. It provides a uniform experience running linters locally
and in CI. It supports all major dev systems: Windows, Linux and MacOs.
The checks are enforced by the `Python format` workflow.

This PR adopts `lintrunner` to onnxruntime and fixed ~2000 flake8 errors
in Python code. `lintrunner` now runs all required python lints
including `ruff`(replacing `flake8`), `black` and `isort`. Future lints
like `clang-format` can be added.

Most errors are auto-fixed by `ruff` and the fixes should be considered
robust.

Lints that are more complicated to fix are applied `# noqa` for now and
should be fixed in follow up PRs.

### Notable changes

1. This PR **removed some suboptimal patterns**:

	- `not xxx in` -> `xxx not in` membership checks
	- bare excepts (`except:` -> `except Exception`)
	- unused imports
	
	The follow up PR will remove:
	
	- `import *`
	- mutable values as default in function definitions (`def func(a=[])`)
	- more unused imports
	- unused local variables

2. Use `ruff` to replace `flake8`. `ruff` is much (40x) faster than
flake8 and is more robust. We are using it successfully in onnx and
onnx-script. It also supports auto-fixing many flake8 errors.

3. Removed the legacy flake8 ci flow and updated docs.

4. The added workflow supports SARIF code scanning reports on github,
example snapshot:
	

![image](https://user-images.githubusercontent.com/11205048/212598953-d60ce8a9-f242-4fa8-8674-8696b704604a.png)

5. Removed `onnxruntime-python-checks-ci-pipeline` as redundant

### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->

Unified linting experience in CI and local.

Replacing https://github.com/microsoft/onnxruntime/pull/14306

---------

Signed-off-by: Justin Chu <justinchu@microsoft.com>
2023-03-24 15:29:03 -07:00

132 lines
5.2 KiB
Python
Executable file

import os
def update_version():
version = ""
cwd = os.path.dirname(os.path.realpath(__file__))
with open(os.path.join(cwd, "..", "..", "VERSION_NUMBER")) as f:
version = f.readline().strip()
lines = []
current_version = ""
file_path = os.path.join(cwd, "..", "..", "docs", "Versioning.md")
with open(file_path) as f:
lines = f.readlines()
for line in lines:
if line.startswith("|"):
sections = line.split("|")
if len(sections) == 8 and sections[1].strip()[0].isdigit():
current_version = sections[1].strip()
break
print("Current version of ORT seems to be: " + current_version)
if version != current_version:
with open(file_path, "w") as f:
for i, line in enumerate(lines):
f.write(line)
if line.startswith("|--"):
sections = lines[i + 1].split("|")
# Make sure there are no 'False Positive' version additions
# by making sure the line we are building a new line from
# contains the current_version
if len(sections) > 1 and sections[1].strip() == current_version:
sections[1] = " " + version + " "
new_line = "|".join(sections)
f.write(new_line)
lines = []
current_version = ""
file_path = os.path.join(cwd, "..", "..", "docs", "python", "README.rst")
with open(file_path) as f:
lines = f.readlines()
for line in lines:
sections = line.strip().split(".")
if len(sections) == 3 and sections[0].isdigit() and sections[1].isdigit() and sections[2].isdigit():
current_version = line.strip()
break
if version != current_version:
inserted = False
with open(file_path, "w") as f:
for line in lines:
sections = line.strip().split(".")
if (
inserted is False
and len(sections) == 3
and sections[0].isdigit()
and sections[1].isdigit()
and sections[2].isdigit()
):
f.write(version + "\n")
f.write("^" * len(version) + "\n\n")
f.write(
"Release Notes : https://github.com/Microsoft/onnxruntime/releases/tag/v"
+ version.strip()
+ "\n\n"
)
inserted = True
f.write(line)
lines = []
current_version = ""
file_path = os.path.join(cwd, "..", "..", "package", "rpm", "onnxruntime.spec")
with open(file_path) as f:
lines = f.readlines()
for line in lines:
if line.startswith("Version:"):
current_version = line.split(":")[1].strip()
break
if version != current_version:
with open(file_path, "w") as f:
for line in lines:
if line.startswith("Version:"):
f.write("Version: " + version + "\n")
continue
f.write(line)
lines = []
current_version = ""
file_path = os.path.join(cwd, "..", "..", "onnxruntime", "__init__.py")
with open(file_path) as f:
lines = f.readlines()
for line in lines:
if line.startswith("__version__"):
current_version = line.split("=")[1].strip()[1:-1]
break
if version != current_version:
with open(file_path, "w") as f:
for line in lines:
if line.startswith("__version__"):
f.write('__version__ = "' + version + '"\n')
continue
f.write(line)
# update version for NPM packages
current_version = ""
js_root = os.path.join(cwd, "..", "..", "js")
def run(args, cwd):
from util import is_windows, run
if is_windows():
args = ["cmd", "/c", *args]
run(*args, cwd=cwd)
# check if node, npm and yarn are installed
run(["node", "--version"], cwd=js_root)
run(["npm", "--version"], cwd=js_root)
run(["yarn", "--version"], cwd=js_root)
# upgrade version for onnxruntime-common
run(["npm", "version", version], cwd=os.path.join(js_root, "common"))
run(["npm", "install", "--package-lock-only", "--ignore-scripts"], cwd=os.path.join(js_root, "common"))
# upgrade version for onnxruntime-node
run(["npm", "version", version], cwd=os.path.join(js_root, "node"))
run(["npm", "install", "--package-lock-only", "--ignore-scripts"], cwd=os.path.join(js_root, "node"))
# upgrade version for onnxruntime-web
run(["npm", "version", version], cwd=os.path.join(js_root, "web"))
run(["npm", "install", "--package-lock-only", "--ignore-scripts"], cwd=os.path.join(js_root, "web"))
# upgrade version for onnxruntime-react-native
run(["npm", "version", version], cwd=os.path.join(js_root, "react_native"))
run(["yarn", "upgrade", "onnxruntime-common"], cwd=os.path.join(js_root, "react_native"))
if __name__ == "__main__":
update_version()