194 lines
7.5 KiB
YAML
194 lines
7.5 KiB
YAML
|
---
|
||
|
version: '3'
|
||
|
|
||
|
tasks:
|
||
|
pip:
|
||
|
deps:
|
||
|
- :install:software:python
|
||
|
run: when_changed
|
||
|
log:
|
||
|
error: Failed to install pip3 package `{{.PACKAGE}}`
|
||
|
start: Installing pip3 package `{{.PACKAGE}}`
|
||
|
success: Installed pip3 package `{{.PACKAGE}}`
|
||
|
cmds:
|
||
|
- |
|
||
|
if [ -n "$CI" ]; then echo "*************** pip3 --> {{.PACKAGE}}"; fi
|
||
|
- pip3 install {{.PACKAGE}}
|
||
|
status:
|
||
|
- type {{.PACKAGE}} > /dev/null
|
||
|
|
||
|
pipx:
|
||
|
cmds:
|
||
|
- task: :install:pipx:install
|
||
|
vars:
|
||
|
BIN_NAME: '{{.BIN_NAME}}'
|
||
|
PACKAGE: '{{.PACKAGE}}'
|
||
|
|
||
|
pytest:
|
||
|
cmds:
|
||
|
- task: :install:pipx:pytest
|
||
|
|
||
|
pytest-cov:
|
||
|
cmds:
|
||
|
- task: :install:pipx:pytest-cov
|
||
|
|
||
|
requirements:
|
||
|
run: once
|
||
|
cmds:
|
||
|
- task: :install:software:python
|
||
|
- task: :{{if eq .REPOSITORY_TYPE "ansible"}}install:pipx:ansible{{else}}donothing{{end}}
|
||
|
- task: requirements:poetry
|
||
|
- task: :{{if eq .REPOSITORY_TYPE "ansible"}}ansible:galaxy:requirements{{else}}donothing{{end}}
|
||
|
|
||
|
requirements:poetry:
|
||
|
cmds:
|
||
|
- task: requirements:poetry:prereqs
|
||
|
- task: requirements:poetry:install
|
||
|
status:
|
||
|
- '[ ! -f pyproject.toml ] || ! type poetry &> /dev/null'
|
||
|
|
||
|
requirements:poetry:install:
|
||
|
summary: |
|
||
|
# Poetry Requirements
|
||
|
|
||
|
`poetry publish -r gitlab` will publish to GitLab registry on GitLab CI
|
||
|
env:
|
||
|
CPPFLAGS: -I/usr/local/opt/openssl@3/include
|
||
|
LDFLAGS: -L/usr/local/opt/openssl@3/lib
|
||
|
run: once
|
||
|
log:
|
||
|
error: Failed to configure / install via `poetry`
|
||
|
start: Configuring Poetry and running `poetry install`
|
||
|
success: Successfully ran `poetry install`
|
||
|
cmds:
|
||
|
- task: :install:software:poetry
|
||
|
- poetry env use "$(which python3)"
|
||
|
- poetry config virtualenvs.create {{if .PYTHON_VIRTUALENV}}{{.PYTHON_VIRTUALENV}}{{else}}false{{end}}
|
||
|
- poetry config virtualenvs.in-project true
|
||
|
- |
|
||
|
if [ -n "$PYPI_TOKEN" ]; then
|
||
|
poetry config pypi-token.pypi "$PYPI_TOKEN" || EXIT_CODE=$?
|
||
|
if [ -n "$EXIT_CODE" ]; then
|
||
|
.config/log warn 'Failed to run `poetry config pypi-token.pypi`'
|
||
|
fi
|
||
|
fi
|
||
|
- |
|
||
|
if [ -n "$GITLAB_CI" ]; then
|
||
|
poetry config repositories.gitlab "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/packages/pypi"
|
||
|
fi
|
||
|
- |
|
||
|
if [ -n "$GITLAB_CI" ]; then
|
||
|
poetry config http-basic.gitlab gitlab-ci-token "${CI_JOB_TOKEN}" || EXIT_CODE=$?
|
||
|
if [ -n "$EXIT_CODE" ]; then
|
||
|
.config/log warn 'Failed to run `poetry config http-basic.gitlab gitlab-ci-token`'
|
||
|
fi
|
||
|
fi
|
||
|
- |
|
||
|
if [ -n "$AUTO_UPDATE_PIP_PACKAGES" ]; then
|
||
|
.config/log info 'Updating Poetry dependencies{{if .INSTALL_OPTIONS}} with options `{{.INSTALL_OPTIONS}}`{{end}}'
|
||
|
poetry update{{if .INSTALL_OPTIONS}} {{.INSTALL_OPTIONS}}{{end}}
|
||
|
else
|
||
|
.config/log info 'Installing Poetry dependencies{{if .INSTALL_OPTIONS}} with options `{{.INSTALL_OPTIONS}}`{{end}}'
|
||
|
export "CFLAGS=-I/usr/local/include -L/usr/local/lib"
|
||
|
poetry install{{if .INSTALL_OPTIONS}} {{.INSTALL_OPTIONS}}{{end}} || EXIT_CODE=$?
|
||
|
if [ -n "$EXIT_CODE" ]; then
|
||
|
.config/log warn 'Running `poetry install{{if .INSTALL_OPTIONS}} {{.INSTALL_OPTIONS}}{{end}}` failed.'
|
||
|
.config/log info 'Attempting to fix by running `poetry update{{if .INSTALL_OPTIONS}} {{.INSTALL_OPTIONS}}{{end}}`'
|
||
|
poetry update{{if .INSTALL_OPTIONS}} {{.INSTALL_OPTIONS}}{{end}}
|
||
|
fi
|
||
|
fi
|
||
|
sources:
|
||
|
- pyproject.toml
|
||
|
|
||
|
requirements:poetry:prereqs:
|
||
|
tags:
|
||
|
- update
|
||
|
env:
|
||
|
GCC5_MISSING_MESSAGE: |
|
||
|
# Sudo Required for gcc-5 Symlink
|
||
|
|
||
|
It looks like your system is missing gcc-5 but gcc is available. Select "Yes" if you would
|
||
|
like to symlink your version of gcc to gcc-5 which, for the purposes of this project, can
|
||
|
prevent issues with our Python runner `poetry`. However, there are some circumstances where
|
||
|
you may not want to do this. This will generally be harmless - you can always remove the symlink
|
||
|
by running `sudo rm -rf /usr/local/bin/gcc-5`.
|
||
|
log:
|
||
|
error: Error checking `gcc`
|
||
|
start: Checking if `gcc` should be symlinked to `gcc-5`
|
||
|
success: Checked `gcc`
|
||
|
cmds:
|
||
|
- |
|
||
|
if which gcc &> /dev/null; then
|
||
|
TMP="$(mktemp)" && echo "$GCC5_MISSING_MESSAGE" > "$TMP" && .config/log md "$TMP"
|
||
|
if [[ $- == *i* ]]; then
|
||
|
if [ -w /usr/local/bin ]; then
|
||
|
if .config/log confirm 'Symlink `gcc` to `gcc-5`?'; then
|
||
|
ln -s "$(which gcc)" /usr/local/bin/gcc-5
|
||
|
fi
|
||
|
else
|
||
|
if .config/log confirm 'Symlink `gcc` to `gcc-5` via sudo?'; then
|
||
|
.config/log info 'Running sudo command `sudo ln -s '"$(which gcc)"' /usr/local/bin/gcc-5`'
|
||
|
sudo ln -s "$(which gcc)" /usr/local/bin/gcc-5
|
||
|
else
|
||
|
.config/log warn 'Continuing with missing `gcc-5` binary'
|
||
|
fi
|
||
|
fi
|
||
|
else
|
||
|
.config/log info 'Session is non-interactive'
|
||
|
.config/log warn 'Symlinking `gcc` to `gcc-5` since session is non-interactive'
|
||
|
.config/log info 'Remove the symlink later on (if required) by running `sudo rm /usr/local/bin/gcc-5`'
|
||
|
if [ -w /usr/local/bin ]; then
|
||
|
ln -s "$(which gcc)" /usr/local/bin/gcc-5
|
||
|
else
|
||
|
sudo ln -s "$(which gcc)" /usr/local/bin/gcc-5
|
||
|
fi
|
||
|
fi
|
||
|
else
|
||
|
.config/log warn '`gcc` is missing.'
|
||
|
fi
|
||
|
status:
|
||
|
- which gcc-5
|
||
|
|
||
|
venv:node:
|
||
|
deps:
|
||
|
- :install:software:dasel
|
||
|
- :install:software:python
|
||
|
vars:
|
||
|
POETRY_MANUAL_SETUP_MSG: Adding semantic-release-python plugin Python dependencies by
|
||
|
running `poetry add pip@latest setuptools@latest twine@latest wheel@latest`
|
||
|
log:
|
||
|
error: Encountered error while installing Python dependencies for `semantic-release-python`
|
||
|
start: Installing `semantic-release-python` Python dependencies
|
||
|
success: Successfully installed `semantic-release-python` Python dependencies
|
||
|
cmds:
|
||
|
- |
|
||
|
REQUIREMENTS_PATH="$PWD/lib/requirements.txt"
|
||
|
cd "$INIT_CWD" || exit
|
||
|
if type poetry > /dev/null && test -f pyproject.toml; then
|
||
|
.config/log info 'Poetry installation detected. Using Poetry to install NPM package Python dependencies.'
|
||
|
if dasel select -f pyproject.toml '.tool.poetry.extras.semantic' > /dev/null; then
|
||
|
.config/log info '`semantic` extras bundle detected.. Installing via `poetry install -E semantic`'
|
||
|
poetry install -E semantic
|
||
|
else
|
||
|
.config/log info '{{.POETRY_MANUAL_SETUP_MSG}}'
|
||
|
poetry add pip@latest setuptools@latest twine@latest wheel@latest
|
||
|
fi
|
||
|
else
|
||
|
if [ -f venv/bin/activate ]; then
|
||
|
.config/log info 'Using existing virtualenv found at `venv/`'
|
||
|
. venv/bin/activate
|
||
|
elif [ -f .venv/bin/activate ]; then
|
||
|
.config/log info 'Using existing virtualenv found at `.venv/`'
|
||
|
. .venv/bin/activate
|
||
|
else
|
||
|
.config/log info 'No virtualenv detected.. Creating virtualenv in `.venv/`'
|
||
|
python3 -m venv .venv
|
||
|
. .venv/bin/activate
|
||
|
fi
|
||
|
.config/log info 'Installing Python dependencies into virtualenv'
|
||
|
pip3 install -U pip setuptools
|
||
|
pip3 install -r "$REQUIREMENTS_PATH"
|
||
|
fi
|
||
|
sources:
|
||
|
- lib/requirements.txt
|