Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,4 @@ plugins/webui/frontend/test-results/

docs
documentation
.omo/
5 changes: 5 additions & 0 deletions env.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ if (Test-Path -Path $ActivateScript -PathType Leaf) {
Write-Error "Failed to activate the RT-Thread Env Python venv: $_"
$ActivateStatus = 1
}

# Show welcome message using rt-env command
if (Get-Command rt-env -ErrorAction SilentlyContinue) {
rt-env --info
}
} else {
Write-Error "Cannot activate the RT-Thread Env Python venv: $ActivateScript was not found."
$ActivateStatus = 1
Expand Down
55 changes: 42 additions & 13 deletions env.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,29 @@
from vars import Export
from version import get_rt_env_version

def show_version_warning():
def show_version():
rtt_ver = get_rtt_verion()
rt_env_name, rt_env_ver = get_rt_env_version()

print('\033[1;36m===================================================================\033[0m')
print('\033[1;36m Welcome to %s %s\033[0m' % (rt_env_name, rt_env_ver))
print('\033[1;36m===================================================================\033[0m')
print('Environment Information:')
print(' - ENV_ROOT : %s' % get_env_root())
print(' - PKGS_ROOT: %s' % get_package_root())

if rtt_ver != (0, 0, 0):
print(' - RTT_ROOT : %s' % get_rtt_root())
print(' - BSP_ROOT : %s' % get_bsp_root())
print(' - RT-Thread Version: %d.%d.%d' % rtt_ver)
print('\033[1;36m===================================================================\033[0m')

def show_version_warning(is_show_version=True):
rtt_ver = get_rtt_verion()

if rtt_ver <= (5, 1, 0) and rtt_ver != (0, 0, 0):
print('===================================================================')
print('Welcome to %s %s' % (rt_env_name, rt_env_ver))
print('===================================================================')
# print('')
if is_show_version:
show_version()
print('env v2.0 has made the following important changes:')
print('1. Upgrading Python version from v2 to v3')
print('2. Replacing kconfig-frontends with Python kconfiglib')
Expand All @@ -67,12 +81,14 @@ def show_version_warning():


def init_argparse():
parser = argparse.ArgumentParser(description=__doc__)
# 'rt-env' mirrors the [project.scripts] entry in pyproject.toml
parser = argparse.ArgumentParser(prog='rt-env', description=__doc__)
subs = parser.add_subparsers()

rt_env_name, rt_env_ver = get_rt_env_version()
env_ver_str = '%s %s' % (rt_env_name, rt_env_ver)
parser.add_argument('-v', '--version', action='version', version=env_ver_str)
parser.add_argument('--info', action='store_true', help='Show environment information')

cmd_system.add_parser(subs)
cmd_menuconfig.add_parser(subs)
Expand Down Expand Up @@ -219,18 +235,31 @@ def exec_arg(arg):
args.func(args)


def main():
show_version_warning()
export_environment_variable()
init_logger(get_env_root())
def cmd_env_info(args):
"""Handle environment information display."""
show_version()
show_version_warning(False)
sys.exit(0)


def main():
parser = init_argparse()
args = parser.parse_args()

if not vars(args):
if args.info:
cmd_env_info(args)

# Check if any subcommand was provided
if not hasattr(args, 'func'):
# No subcommand provided, show help
parser.print_help()
else:
args.func(args)
exit(0)

show_version_warning()
export_environment_variable()
init_logger(get_env_root())

args.func(args)


def menuconfig():
Expand Down
5 changes: 5 additions & 0 deletions env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ if [ -f "$ENV_ACTIVATE" ]; then
echo "Failed to activate the RT-Thread Env Python venv." >&2
activate_status=1
fi

# Show welcome message using rt-env command
if command -v rt-env >/dev/null 2>&1; then
rt-env --info
fi
else
echo "Cannot activate the RT-Thread Env Python venv: $ENV_ACTIVATE was not found." >&2
activate_status=1
Expand Down
50 changes: 50 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,53 @@
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "rt-env"
dynamic = ["version", "description"]
requires-python = ">=3.6"
dependencies = [
"SCons>=4.0.0",
"requests",
"psutil",
"tqdm",
"kconfiglib",
"pyyaml",
"windows-curses; sys_platform=='win32'",
]

[project.scripts]
# 'rt-env' doubles as the argparse prog in env.py init_argparse()
rt-env = "env.env:main"
menuconfig = "env.env:menuconfig"
pkgs = "env.env:pkgs"
sdk = "env.env:sdk"
system = "env.env:system"
webui = "env.env:webui"

[tool.setuptools]
package-dir = { env = ".", "env.cmds" = "cmds", "env.cmds.cmd_package" = "cmds/cmd_package", "env.plugins" = "plugins", "env.plugins.sdk" = "plugins/sdk", "env.plugins.epack" = "plugins/epack", "env.plugins.spec" = "plugins/spec", "env.plugins.webui" = "plugins/webui" }
include-package-data = false
packages = [
"env",
"env.cmds",
"env.cmds.cmd_package",
"env.plugins",
"env.plugins.sdk",
"env.plugins.epack",
"env.plugins.spec",
"env.plugins.webui",
]

[tool.setuptools.package-data]
"env" = ["*.*"]
"env.plugins" = ["*.md", "bundled/**/*", "examples/**/*"]
"env.plugins.spec" = ["*.json", "*.md"]
"env.plugins.webui" = ["static/*", "static/assets/*"]

[tool.setuptools.exclude-package-data]
"env" = ["MANIFEST.in"]

[tool.black]
line-length = 128
skip-string-normalization = true
Expand Down
79 changes: 14 additions & 65 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,70 +1,19 @@
from setuptools import setup
from version import get_rt_env_version
import sys
import os

# Add current directory to path for version module discovery
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

try:
from version import get_rt_env_version, get_rt_env_description
_, env_ver = get_rt_env_version()
env_desc = get_rt_env_description()
except Exception:
env_ver = '2.0.2'
env_desc = 'A command-line toolkit for RT-Thread development.'

env_name, env_ver = get_rt_env_version()
setup(
name='env',
version=env_ver,
description='A command-line toolkit for RT-Thread development.',
url='https://github.com/RT-Thread/env.git',
author='RT-Thread Development Team',
author_email='rt-thread@rt-thread.org',
keywords='rt-thread',
license='Apache License 2.0',
project_urls={
'Github repository': 'https:/github.com/rt-thread/env.git',
'User guide': 'https:/github.com/rt-thread/env.git',
},
python_requires='>=3.6',
install_requires=[
'SCons>=4.0.0',
'requests',
'psutil',
'tqdm',
'kconfiglib',
'windows-curses; platform_system=="Windows"',
],
packages=[
'env',
'env.cmds',
'env.cmds.cmd_package',
'env.plugins',
'env.plugins.sdk',
'env.plugins.epack',
'env.plugins.spec',
'env.plugins.webui',
],
package_dir={
'env': '.',
'env.cmds': 'cmds',
'env.cmds.cmd_package': 'cmds/cmd_package',
'env.plugins': 'plugins',
'env.plugins.sdk': 'plugins/sdk',
'env.plugins.epack': 'plugins/epack',
'env.plugins.spec': 'plugins/spec',
'env.plugins.webui': 'plugins/webui',
},
package_data={
'': ['*.*'],
'env.plugins.webui': ['static/*', 'static/assets/*'],
},
exclude_package_data={
'': ['MANIFEST.in'],
'env.plugins.webui': [
'frontend/*',
'frontend/e2e/*',
'frontend/src/*',
],
},
include_package_data=True,
entry_points={
'console_scripts': [
'rt-env=env.env:main',
'menuconfig=env.env:menuconfig',
'pkgs=env.env:pkgs',
'sdk=env.env:sdk',
'system=env.env:system',
'webui=env.env:webui',
]
},
description=env_desc,
)
38 changes: 26 additions & 12 deletions version.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,19 @@
# Change Logs:
# Date Author Notes
# 2025-06-23 Dongly Add get_rt_env_version function
# 2026-09-10 Dongly Add get_rt_env_description function, Extract load_env_json common helper

import json
import os
import platform

def get_rt_env_version():
rt_env_ver = None
rt_env_name = None

def load_env_json():
# try to read env.json to get information
try:
# Get the directory where this script is located
script_dir = os.path.dirname(os.path.abspath(__file__))
env_json_path = os.path.join(script_dir, 'env.json')

# If not found in script directory, try ENV_ROOT
if not os.path.exists(env_json_path):
env_root = os.getenv("ENV_ROOT")
Expand All @@ -45,20 +43,36 @@ def get_rt_env_version():
else:
env_root = os.path.join(os.getenv('USERPROFILE'), '.env')
env_json_path = os.path.join(env_root, 'tools', 'scripts', 'env.json')

with open(env_json_path, 'r') as file:
env_data = json.load(file)
rt_env_name = env_data['name']
rt_env_ver = env_data['version']
return json.load(file)
except Exception as e:
# Only print error if running interactively (not imported)
if __name__ == '__main__':
print("Failed to read env.json: %s" % str(e))

return None

def get_rt_env_version():
env_data = load_env_json()

rt_env_name = env_data.get('name') if env_data else None
rt_env_ver = env_data.get('version') if env_data else None

if rt_env_name is None:
rt_env_name = 'RT-Thread Env Tool'
if rt_env_ver is None:
# use the default 'v2.0.1'
rt_env_ver = 'v2.0.1'
# use the default 'v2.0.2'
rt_env_ver = 'v2.0.2'

return rt_env_name, rt_env_ver

def get_rt_env_description():
env_data = load_env_json()

rt_env_desc = env_data.get('description') if env_data else None

if rt_env_desc is None:
rt_env_desc = 'A command-line toolkit for RT-Thread development.'

return rt_env_desc