1+
2+ # campare_versions(v1, v2)
3+ # Compares two 3-part sematic versions, returning -1 if v1 is less than v2, 1 if v1 is greater than v2 or 0 if v1 and v2 are equal.
4+ compare_versions () {
5+ local v1=(${1// ./ } )
6+ local v2=(${2// ./ } )
7+
8+ for i in {0..2}; do
9+ if [[ ${v1[i]} -lt ${v2[i]} ]]; then
10+ # Version $1 is less than $2
11+ echo -1
12+ return
13+ elif [[ ${v1[i]} -gt ${v2[i]} ]]; then
14+ # Version $1 is greater than $2"
15+ echo 1
16+ return
17+ fi
18+ done
19+ # "Version $1 is equal to $2"
20+ echo 0
21+ }
22+
23+ # get_version_in_pipx(package_name)
24+ # Gets the standard semantic version of a package installed in Pipx if installed.
25+ get_version_in_pipx () {
26+ local package_name=$1
27+ local version
28+ version=$( pipx list | grep -oP " $package_name " \\ s+\\ K\[ 0-9\] +\.\[ 0-9\] +\.\[ 0-9\] +)
29+ echo " $version "
30+ }
31+
32+ # capitalise(word)
33+ # Capitalizes a word.
34+ capitalize () {
35+ local word=$1
36+ echo " $( tr ' [:lower:]' ' [:upper:]' <<< " ${word:0:1}" ) ${word: 1} "
37+ }
38+
39+ # print_version(name, version, capitalize, width)
40+ # Prints the version of the software with option to capitalize name and change left-aligned padding.
41+ print_version () {
42+ local name=$1
43+ local version=$2
44+ local capitalize=${3:- true}
45+ local width=${4:- 19}
46+ name=$( [[ $capitalize == ' true' ]] && capitalize " $name " || echo " $name " )
47+ printf " %-${width} s %s\n" " $name version:" " $version "
48+ }
49+
50+ # install_package(package_name)
51+ # Installs specified package with Pipx or displays the its version if it's already installed.
52+ install_package () {
53+ local package_name=$1
54+ local capitalize=${2:- true}
55+
56+ local version
57+ version=$( get_version_in_pipx " $package_name " )
58+ if [[ -n $version ]]; then
59+ print_version " $package_name " " $version " " $capitalize "
60+ else
61+ pipx install " $package_name "
62+ pipx ensurepath
63+ fi
64+ }
65+
66+ main () {
67+ local python_version
68+ python_version=$( python --version | awk ' {print $2}' )
69+ print_version " Python" " $python_version "
70+
71+ local pipx_version
72+ pipx_version=$( pipx --version)
73+ if [[ -z " $pipx_version " ]]; then
74+ echo " Please install Pipx before running this script."
75+ exit 1
76+ else
77+ print_version " Pipx" " $pipx_version "
78+ fi
79+
80+ install_package " poetry"
81+
82+ install_package " pre-commit" false
83+
84+ echo
85+
86+ if ! poetry install; then
87+ poetry lock
88+ poetry install
89+ fi
90+
91+ echo
92+
93+ poetry run pylint functional
94+
95+ echo
96+
97+ poetry run ruff check functional
98+
99+ echo
100+
101+ poetry run black --diff --color --check functional
102+
103+ echo
104+
105+ poetry run mypy functional
106+
107+ echo
108+
109+ poetry run pytest
110+ }
111+
112+ main " $@ "
0 commit comments