puppet-python
puppet-python copied to clipboard
Puppet pre-releases causing corrective changes
Pip pre releases are set as the latest available package by puppet. This is done by following command
pip --log /tmp/pip.log install pip==notreallyaversion 2>&1 | grep -oP "\(from versions: .*\)" | sed -E "s/\(from versions: (.*?, )*(.*)\)/\2/g" | tr -d "[:space:]") = $(pip freeze --all | grep -i -e ^pip== | cut -d= -f3 | tr -d '[:space:]'
As of time of writing i got 20.2b1 however when you try to upgrade you dont get the pre release but latest stable version as that is not tagged latest version https://pypi.org/project/pip/#history
Thus puppet tries to correct this each time and you get a coorective change.
I think the check command should be changed so the pre releases are excluded from the latest version check. Or have the option to install pre-releases and keep the old check.
I checked and following command gave me the latest release:
pip --log /tmp/pip.log install pip==notreallyaversion 2>&1 | grep -oP "\(from versions: .*\)" | tr " " "\n" | grep -v b | sed 's/,//g' | tail -n 1
Any updates on this?
We are also affected by this and I would like to fix it.
But it's at least slightly more complicated than you suggest, @negast. Pre-releases have more possible segments than "bN", see https://peps.python.org/pep-0440/#pre-releases .
I think that this works, although it could use some optimisation (probably one sed in place of tr and those 2 seds will do):
pip install pip==notreallyaversion 2>&1 | grep -oP "(from versions: .*)" | tr " " "\n" | sed 's/,//g' | sed 's/)//g' | grep -vP '\d(a|b|rc)\d+((\.post|dev)\d+)?$' | tail -n 1
Note to self: we need to remember that the behavior of this should change if we add —pre to the params passed to pip.