chore: use pipx to isolate python packages #354

Merged
xoxys merged 3 commits from use-pipx into main 2023-12-14 07:55:09 +00:00
4 changed files with 26 additions and 33 deletions

View File

@ -24,7 +24,9 @@ steps:
TRIVY_NO_PROGRESS: "true" TRIVY_NO_PROGRESS: "true"
TRIVY_SEVERITY: HIGH,CRITICAL TRIVY_SEVERITY: HIGH,CRITICAL
TRIVY_TIMEOUT: 1m TRIVY_TIMEOUT: 1m
TRIVY_SKIP_FILES: /usr/local/bin/gomplate TRIVY_SKIP_FILES: >-
/usr/local/bin/gomplate,
/opt/pipx/venvs/ansible/lib/**/site-packages/ansible_collections/**/modules/*.py
publish-dockerhub: publish-dockerhub:
group: container group: container

View File

@ -20,25 +20,30 @@ ENV CARGO_NET_GIT_FETCH_WITH_CLI=true
ENV ANSIBLE_FORCE_COLOR=true ENV ANSIBLE_FORCE_COLOR=true
ENV USER=root ENV USER=root
ENV PATH=/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin ENV PATH=/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin
ENV PIPX_HOME=/opt/pipx
ENV PIPX_BIN_DIR=/usr/local/bin
COPY overlay/ / COPY overlay/ /
RUN apk add --update --no-cache --virtual .build-deps build-base libffi-dev musl-dev openssl-dev python3-dev cargo && \ RUN apk add --update --no-cache --virtual .build-deps build-base libffi-dev musl-dev openssl-dev python3-dev cargo && \
apk add --update --no-cache git openssh-client && \ apk add --update --no-cache git openssh-client pipx && \
echo "Installing requirements ..." && \
pip install -qq --upgrade --no-cache-dir pip && \
pip install -qq --no-cache-dir -r /root/requirements.txt && \
echo "Installing ansible 'v$ANSIBLE_VERSION' ..." && \ echo "Installing ansible 'v$ANSIBLE_VERSION' ..." && \
pip install -qq --no-cache-dir ansible=="$ANSIBLE_VERSION" && \ pipx install --include-deps ansible=="$ANSIBLE_VERSION" && \
MOLECULE_VERSION="${MOLECULE_VERSION##v}" && \ echo "Installing molecule version '$MOLECULE_VERSION' ..." && \
MOLECULE_MAJOR="${MOLECULE_VERSION%%.*}" && \ pipx inject --include-apps ansible molecule && \
if [ -z "${MOLECULE_MAJOR//[0-9]}" ] && [ -n "$MOLECULE_MAJOR" ]; then \ pipx inject --include-apps ansible pytest && \
echo "Installing molecule version '$MOLECULE_VERSION' ..." && \ pipx inject ansible pytest-testinfra && \
pip install -qq --no-cache-dir molecule=="$MOLECULE_VERSION" molecule-plugins[docker]; \ pipx inject ansible molecule-plugins[docker] && \
else \ pipx inject ansible molecule_hetznercloud && \
echo "Installing latest molecule ..." && \ pipx inject ansible boto && \
pip install -qq --no-cache-dir molecule molecule-plugins[docker]; \ pipx inject ansible boto3 && \
fi && \ pipx inject ansible botocore && \
pipx inject ansible hcloud && \
pipx inject ansible apache-libcloud && \
pipx inject ansible pycrypto && \
pipx inject ansible flaky && \
pipx inject ansible passlib && \
$PIPX_HOME/shared/bin/pip install -U pip setuptools && \
apk del .build-deps && \ apk del .build-deps && \
rm -rf /var/cache/apk/* && \ rm -rf /var/cache/apk/* && \
rm -rf /tmp/* && \ rm -rf /tmp/* && \

View File

@ -1,5 +1,5 @@
#!/usr/bin/env sh #!/usr/bin/env sh
# shellcheck disable=2039 # shellcheck disable=2039,3040
set -eo pipefail set -eo pipefail
DIR=$(pwd) DIR=$(pwd)
@ -11,7 +11,7 @@ if [ -n "${MOLECULE_CUSTOM_MODULES_REPO}" ]; then
WORKDIR="${MOLECULE_LIBRARY_DIR}" WORKDIR="${MOLECULE_LIBRARY_DIR}"
[ -d "$WORKDIR" ] && rm -rf "$WORKDIR" [ -d "$WORKDIR" ] && rm -rf "$WORKDIR"
mkdir -p "$WORKDIR" mkdir -p "$WORKDIR"
git clone "$MOLECULE_CUSTOM_MODULES_REPO" "$WORKDIR" 2> /dev/null git clone "$MOLECULE_CUSTOM_MODULES_REPO" "$WORKDIR" 2>/dev/null
fi fi
if [ -n "${MOLECULE_CUSTOM_FILTERS_REPO}" ]; then if [ -n "${MOLECULE_CUSTOM_FILTERS_REPO}" ]; then
@ -19,13 +19,13 @@ if [ -n "${MOLECULE_CUSTOM_FILTERS_REPO}" ]; then
printf "Cloning custom filters ...\n" printf "Cloning custom filters ...\n"
[ -d "$WORKDIR" ] && rm -rf "$WORKDIR" [ -d "$WORKDIR" ] && rm -rf "$WORKDIR"
mkdir -p "$WORKDIR" mkdir -p "$WORKDIR"
git clone "$MOLECULE_CUSTOM_FILTERS_REPO" "$WORKDIR" 2> /dev/null git clone "$MOLECULE_CUSTOM_FILTERS_REPO" "$WORKDIR" 2>/dev/null
fi fi
if [ -n "${MOLECULE_ANSIBLE_VAULT_PASSWORD}" ]; then if [ -n "${MOLECULE_ANSIBLE_VAULT_PASSWORD}" ]; then
printf "Write vault password file ...\n" printf "Write vault password file ...\n"
MOLECULE_ANSIBLE_VAULT_PASSWORD_FILE=/root/.vaultpasswd MOLECULE_ANSIBLE_VAULT_PASSWORD_FILE=/root/.vaultpasswd
echo "${MOLECULE_ANSIBLE_VAULT_PASSWORD}" > $MOLECULE_ANSIBLE_VAULT_PASSWORD_FILE echo "${MOLECULE_ANSIBLE_VAULT_PASSWORD}" >$MOLECULE_ANSIBLE_VAULT_PASSWORD_FILE
exec env ANSIBLE_VAULT_PASSWORD_FILE=$MOLECULE_ANSIBLE_VAULT_PASSWORD_FILE /usr/local/bin/molecule "$@" exec env ANSIBLE_VAULT_PASSWORD_FILE=$MOLECULE_ANSIBLE_VAULT_PASSWORD_FILE /usr/local/bin/molecule "$@"
else else
exec /usr/local/bin/molecule "$@" exec /usr/local/bin/molecule "$@"

View File

@ -1,14 +0,0 @@
# cloud provider deps
boto
boto3
botocore
apache-libcloud
hcloud
molecule_hetznercloud
# misc
pycrypto
flaky
passlib
pytest
pytest-testinfra