Files
chia-blockchain/installhelper.py
T
6d9219b0c4 CHIA-597: Use poetry for package management (#11057)
* preliminary setup with poetry

* don't worry about locking the poetry env for the exploration right now

* recover black config in pyproject.toml

* install.sh for linting workflow

* pull chiavdf version from poetry in install-timelord.sh

* activate etc in upload and lint workflow

* debug poetry show output on macos

* update to clvm-tools 0.4.4

* add back setproctitle

* catchup deps

* lock

* allow 3.10

* debug

* make Install.ps1 use poetry as well

* -ErrorAction Ignore

* more todo about python version selection

* make install-timelord.sh modifications more posix compliant

* gitignore .penv* and .venv* as well

* remove requirements.penv.txt

* get artifact check requirements from poetry

* fix .gitignore for venv symlink

* separate out poetry setup

* :

* comment out code to be worked on

* setup poetry for dependency check

* ignore new poetry symlink

* chia_rs==0.1.4

* a few updates

* some missed updates `:[`

* update some types libs

* fix extras

* activate

* just use `python` somewhere

* for windows

* less symlinking for windows

* oops

* s

* more

* # shellcheck disable=SC2086

* activate action

* more python version

* lock up

* include ipython (for python >=3.8)

* add miniupnpc extra

* add poetry-dynamic-versioning

* type it out

* better match dev versioning

* catch up and delete setup.py again

* lock

* add pytest-cov

* .penv/bin/poetry

* .venv for windows activation

* update pytest-xdist

* install upnp extra

* upnp

* quote

* maybe update some deps

* mandatory and string

* oops

* slighty tidy

* debug pip list

* debug

* pybind11 maybe instead?

* remove pip install debugging

* debug without upnp nor pypi.chia.net

* chiavdf==1.0.8

* bring back upnp

* re-enable upnp

* diagnostic exception reraise

* .exe?

* diagnostics

* .cmd...?

* light tidy

* more cleanup

* make dependency check script not cwd dependent for finding the poetry env

* correct sh substitution

* lock

* coverage 7

* todo cleanup

* poetry update

* interesting

* windows too

* support non-editable install via scripts again

* oops

* again

* sheesh

* fixup

* more

* more

* Update dependencies

* various pre-commit linter updates

* add pyupgrade to extras list

* use priority=supplemental instead of secondary

* Add in some missing deps

* update setuptools and pyinstaller to match main

* venv->.venv

* lint fixes

* update a few packages for 3.12 support

* get zstd from chia resource for python 3.12

* Adjustments to dynamic versioning

* experiments with versioning

* test fixes

Signed-off-by: Earle Lowe <e.lowe@chia.net>

* fixup last commit

* include upnp as extra when installing on windows

* include mozilla-ca as a package for the cacert.pem file

* some windows tweaks

* use SPECPATH as anchor path in pyinstaller.spec file

* Add lxml as dev dependency

* Fixup typo in lxml version

* Update some packages to resolve GH vuln reports

* Update more packages to resolve GH vulns

* Ignore pylint license in depedency checker

* match installation of the dynamic version plugin on windows

* Fix issues with setting windows environment and use pip to install plugin per poetry docs recommendation

* properly apply non-editable option with -i

* use -f with ln to remove existing file as needed

* use shell=true for subprocess to help windows run chia if it's a .cmd

* Update .coveragerc

* use shutil.which() to find chia executable in a cross platform way

* mypy fixes

* Address conflicts for numpy based on python version

* Update lock file

* Remove troublesome reference to pypi source

* Add TODOs for manual install of poetry-dynamic-versioning plugin

* Use poetry dynamic versioning to figure out the version rather than setuptools_scm

* Update .github/workflows/reflow-version.yml

Co-authored-by: Kyle Altendorf <sda@fstab.net>

* Update .github/workflows/test-single.yml

Co-authored-by: Kyle Altendorf <sda@fstab.net>

* Update urllib3

* Attempts to get dynamic versioning to output something semver

* more versioning finangling

* lint pyproject.toml

* Update certifi

---------

Signed-off-by: Earle Lowe <e.lowe@chia.net>
Co-authored-by: Earle Lowe <e.lowe@chia.net>
Co-authored-by: Earle Lowe <30607889+emlowe@users.noreply.github.com>
2024-07-10 08:47:11 -07:00

80 lines
2.0 KiB
Python

#
# Install helper code to manage inserting the correct version for the GUI
# Gets the version from the result of "chia version"
# Converts to proper symver format so NPM doesn't complain
# Adds the version info to the package.json file
#
from __future__ import annotations
import json
import os
import shutil
import subprocess
from os.path import exists
from packaging.version import Version
#
# The following function is borrowed from
# https://github.com/inveniosoftware/invenio-assets/blob/maint-1.0/invenio_assets/npm.py
# Copyright (C) 2015-2018 CERN.
#
def make_semver(version_str: str) -> str:
v = Version(version_str)
major = v.release[0]
try:
minor = v.release[1]
except IndexError:
minor = 0
try:
patch = v.release[2]
except IndexError:
patch = 0
prerelease = []
if v.pre:
prerelease.append("".join(str(x) for x in v.pre))
if v.dev is not None:
prerelease.append(f"dev{v.dev}")
local = v.local
version = f"{major}.{minor}.{patch}"
if prerelease:
version += f"-{'.'.join(prerelease)}"
if local:
version += f"+{local}"
return version
def get_chia_version() -> str:
version: str = "0.0"
chia_executable = shutil.which("chia")
if chia_executable is None:
chia_executable = "chia"
output = subprocess.run([chia_executable, "version"], capture_output=True)
if output.returncode == 0:
version = str(output.stdout.strip(), "utf-8").splitlines()[-1]
return make_semver(version)
def update_version(package_json_path: str):
if not exists(package_json_path):
return
with open(package_json_path) as f:
data = json.load(f)
data["version"] = get_chia_version()
with open(package_json_path, "w") as w:
json.dump(data, indent=2, fp=w)
if __name__ == "__main__":
update_version(f"{os.path.dirname(__file__)}/chia-blockchain-gui/package.json")
update_version(f"{os.path.dirname(__file__)}/chia-blockchain-gui/packages/gui/package.json")