Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

python-setup: Add support for Poetry 1.2 #1258

Merged
merged 4 commits into from
Sep 21, 2022
Merged
Show file tree
Hide file tree
Changes from 2 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 CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## [UNRELEASED]

- We will soon be rolling out a feature of the CodeQL Action that stores some information used to make future runs faster in the GitHub Actions cache. Initially, this will only be enabled on JavaScript repositories, but we plan to add more languages to this soon. The new feature can be disabled by passing the `trap-caching: false` option to your workflow's `init` step, for example if you are already using the GitHub Actions cache for a different purpose and are near the storage limit for it.
- Add support for Python automatic dependency installation with Poetry 1.2 [#1258](https://github.com/github/codeql-action/pull/1258).

## 2.1.24 - 16 Sep 2022

Expand Down
34 changes: 28 additions & 6 deletions python-setup/auto_install_packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,49 @@
import extractor_version


def _check_call(command):
def _check_call(command, extra_env=None):
print('+ {}'.format(' '.join(command)), flush=True)
subprocess.check_call(command, stdin=subprocess.DEVNULL)

# only pass `env` argument if we need to pass in an updated environment
kwargs = {}
if extra_env:
new_env = os.environ.copy()
new_env.update(extra_env)
kwargs = {"env": new_env}

def _check_output(command):
subprocess.check_call(command, stdin=subprocess.DEVNULL, **kwargs)
henrymercer marked this conversation as resolved.
Show resolved Hide resolved


def _check_output(command, extra_env=None):
print('+ {}'.format(' '.join(command)), flush=True)
out = subprocess.check_output(command, stdin=subprocess.DEVNULL)

# only pass `env` argument if we need to pass in an updated environment
kwargs = {}
if extra_env:
new_env = os.environ.copy()
new_env.update(extra_env)
kwargs = {"env": new_env}

out = subprocess.check_output(command, stdin=subprocess.DEVNULL, **kwargs)
print(out, flush=True)
sys.stderr.flush()
return out


def install_packages_with_poetry():

# To handle poetry 1.2, which started to use keyring interaction MUCH more, we need
# add a workaround. See
# https://github.com/python-poetry/poetry/issues/2692#issuecomment-1235683370
extra_poetry_env = {"PYTHON_KEYRING_BACKEND": "keyring.backends.null.Keyring"}

command = [sys.executable, '-m', 'poetry']
if sys.platform.startswith('win32'):
# In windows the default path were the deps are installed gets wiped out between steps,
# so we have to set it up to a folder that will be kept
os.environ['POETRY_VIRTUALENVS_PATH'] = os.path.join(os.environ['RUNNER_WORKSPACE'], 'virtualenvs')
try:
_check_call(command + ['install', '--no-root'])
_check_call(command + ['install', '--no-root'], extra_env=extra_poetry_env)
except subprocess.CalledProcessError:
sys.exit('package installation with poetry failed, see error above')

Expand All @@ -38,7 +60,7 @@ def install_packages_with_poetry():
# virtualenv for the package, which was the case for using poetry for Python 2 when
# default system interpreter was Python 3 :/

poetry_out = _check_output(command + ['run', 'which', 'python'])
poetry_out = _check_output(command + ['run', 'which', 'python'], extra_env=extra_poetry_env)
python_executable_path = poetry_out.decode('utf-8').splitlines()[-1]

if sys.platform.startswith('win32'):
Expand Down
3 changes: 1 addition & 2 deletions python-setup/install_tools.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,5 @@ py -3 -m pip install --user --upgrade pip setuptools wheel
py -2 -m pip install --user 'virtualenv<20.11'
py -3 -m pip install --user 'virtualenv<20.11'

# We aren't compatible with poetry 1.2
py -3 -m pip install --user "poetry>=1.1,<1.2"
py -3 -m pip install --user "poetry>=1.1"
py -3 -m pip install --user pipenv
3 changes: 1 addition & 2 deletions python-setup/install_tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ python3 -m pip install --user 'virtualenv<20.11'
# "program uses threads.", RuntimeWarning)
# LGTM_PYTHON_SETUP_VERSION=The currently activated Python version 2.7.18 is not supported by the project (^3.5). Trying to find and use a compatible version. Using python3 (3.8.2) 3

# We aren't compatible with poetry 1.2
python3 -m pip install --user "poetry>=1.1,<1.2"
python3 -m pip install --user "poetry>=1.1"
python3 -m pip install --user pipenv

if command -v python2 >/dev/null 2>&1; then
Expand Down