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