From 02afe496d5c8f3d993c9f3e2b453150f981ab1ec Mon Sep 17 00:00:00 2001 From: Andrejus Date: Fri, 8 Mar 2024 11:34:37 +0000 Subject: [PATCH] feat: debian install, docker tests --- .github/workflows/ci.yml | 2 +- Dockerfile | 28 +- {dot-config => files/dot-config}/.gitignore | 0 {dot-ssh => files/dot-ssh}/config | 0 {home => files/home}/.bash_profile | 0 {home => files/home}/.gitconfig | 0 {home => files/home}/.p10k.zsh | 0 {home => files/home}/.profile | 0 {home => files/home}/.zshrc | 0 {tools => script}/docker-run | 0 script/install | 6 +- script/install.d/00-os_info.sh | 2 +- script/install.d/01-ssh.sh | 29 +- script/install.d/03-apt.sh | 6 +- script/install.d/06-stow.sh | 6 +- script/install.d/10-pyenv.sh | 35 +- script/install.d/20-docker.sh | 9 +- script/install.d/21-gh_cli.sh | 4 +- script/install.d/25-terraform.sh | 6 +- script/install.d/80-neofetch.sh | 2 +- script/install_config.json | 7 - {tools => script}/test | 0 tests/poetry.lock | 372 +++++++------------- tests/test_binaries.py | 13 +- 24 files changed, 201 insertions(+), 326 deletions(-) rename {dot-config => files/dot-config}/.gitignore (100%) rename {dot-ssh => files/dot-ssh}/config (100%) rename {home => files/home}/.bash_profile (100%) rename {home => files/home}/.gitconfig (100%) rename {home => files/home}/.p10k.zsh (100%) rename {home => files/home}/.profile (100%) rename {home => files/home}/.zshrc (100%) rename {tools => script}/docker-run (100%) rename {tools => script}/test (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d099e2..2487588 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,4 +10,4 @@ jobs: # Run the tests - name: 'Run tests' - run: ./tools/test + run: ./script/test diff --git a/Dockerfile b/Dockerfile index 067b782..5b315c9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,34 @@ # # debian-base: Base Debian image with sudo user # -FROM debian:bullseye AS debian-base +FROM debian:trixie-slim AS base RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections ENV DEBIAN_FRONTEND noninteractive RUN apt-get -qq update RUN apt-get -qq install --no-install-recommends \ + curl \ + gnupg \ + gnupg2 \ + openssh-client \ software-properties-common \ - wget \ - sudo + lsb-release \ + sudo \ + wget # Create user with sudo priviledge RUN useradd -r -u 1001 --create-home -m "test-user" -RUN adduser "test-user" sudo RUN echo "test-user ALL=(ALL) NOPASSWD: ALL" \ >>/etc/sudoers # # source: Base image with source copied over # -FROM debian-base AS source +FROM base AS source -ARG DOTFILES_DIR="/home/test-user/.dotfiles" -RUN mkdir ${DOTFILES_DIR} -RUN chown test-user ${DOTFILES_DIR} +ARG DOTFILES_DIR="/workdir/.dotfiles" +RUN mkdir -p "$DOTFILES_DIR" +RUN chown -R "test-user" "$DOTFILES_DIR" ADD --chown="test-user" files "$DOTFILES_DIR/files" ADD --chown="test-user" script "$DOTFILES_DIR/script" @@ -36,8 +40,12 @@ WORKDIR "$DOTFILES_DIR" # FROM source AS install +ENV USER="test-user" +ENV SKIP_SUDO_CHECK "true" +ENV SKIP_SSH_CONFIG "true" +ENV SKIP_DOCKER_CONFIG "true" + USER test-user -ENV USER=test-user ARG UUID="docker" RUN ./script/install @@ -48,5 +56,5 @@ RUN ./script/install FROM install AS test ADD --chown="test-user" tests "$DOTFILES_DIR/tests" -WORKDIR "${DOTFILES_DIR}/tests" +WORKDIR "$DOTFILES_DIR/tests" ENTRYPOINT [ "./run.sh" ] diff --git a/dot-config/.gitignore b/files/dot-config/.gitignore similarity index 100% rename from dot-config/.gitignore rename to files/dot-config/.gitignore diff --git a/dot-ssh/config b/files/dot-ssh/config similarity index 100% rename from dot-ssh/config rename to files/dot-ssh/config diff --git a/home/.bash_profile b/files/home/.bash_profile similarity index 100% rename from home/.bash_profile rename to files/home/.bash_profile diff --git a/home/.gitconfig b/files/home/.gitconfig similarity index 100% rename from home/.gitconfig rename to files/home/.gitconfig diff --git a/home/.p10k.zsh b/files/home/.p10k.zsh similarity index 100% rename from home/.p10k.zsh rename to files/home/.p10k.zsh diff --git a/home/.profile b/files/home/.profile similarity index 100% rename from home/.profile rename to files/home/.profile diff --git a/home/.zshrc b/files/home/.zshrc similarity index 100% rename from home/.zshrc rename to files/home/.zshrc diff --git a/tools/docker-run b/script/docker-run similarity index 100% rename from tools/docker-run rename to script/docker-run diff --git a/script/install b/script/install index 41058a1..99c4b14 100755 --- a/script/install +++ b/script/install @@ -9,13 +9,15 @@ printf "\n\t <<< dots installer >>>\n" printf "\t========================\n\n\n" # Prevent running as root -if [[ $EUID -eq 0 ]]; then +if [[ $EUID -eq 0 && -z "$SKIP_SUDO_CHECK" ]]; then echo "Failed: Running as sudo. Please run as user" exit 1 fi # Ensure sudo credentials are cached -sudo -v +if [[ -z "$SKIP_SUDO_CHECK" ]]; then + sudo -v +fi # Set up directory variables dir=$(dirname "$0") diff --git a/script/install.d/00-os_info.sh b/script/install.d/00-os_info.sh index 4e48e76..006b541 100644 --- a/script/install.d/00-os_info.sh +++ b/script/install.d/00-os_info.sh @@ -8,7 +8,7 @@ if [[ "$OSTYPE" == "darwin"* ]]; then sw_vers elif [[ "$OSTYPE" == "linux-gnu"* ]]; then - lsb_release -a + cat /etc/os-release else echo "Unknown OS: $OSTYPE" fi diff --git a/script/install.d/01-ssh.sh b/script/install.d/01-ssh.sh index dfddd29..49a3d1e 100644 --- a/script/install.d/01-ssh.sh +++ b/script/install.d/01-ssh.sh @@ -5,18 +5,21 @@ # Print SSH key. # -ssh_method="ed25519" +# skip if SKIP_SSH_CONFIG is set +if [ -z "$SKIP_SSH_CONFIG" ]; then + ssh_method="ed25519" -ssh_target="${HOME}/.ssh" -ssh_key="${ssh_target}/id_${ssh_method}" -ssh_pub="${ssh_key}.pub" -if [ ! -f $ssh_key ]; then - ssh-keygen \ - -t $ssh_method \ - -f $ssh_key \ - -C "$(whoami)@$(hostname)-$(date -I)" + ssh_target="${HOME}/.ssh" + ssh_key="${ssh_target}/id_${ssh_method}" + ssh_pub="${ssh_key}.pub" + if [ ! -f $ssh_key ]; then + ssh-keygen \ + -t $ssh_method \ + -f $ssh_key \ + -C "$(whoami)@$(hostname)-$(date -I)" + fi + + cat $ssh_pub + + unset ssh_method ssh_target ssh_key ssh_pub fi - -cat $ssh_pub - -unset ssh_method ssh_target ssh_key ssh_pub diff --git a/script/install.d/03-apt.sh b/script/install.d/03-apt.sh index 97cd0cc..2d2fb9d 100644 --- a/script/install.d/03-apt.sh +++ b/script/install.d/03-apt.sh @@ -10,12 +10,11 @@ if command -v apt-get &> /dev/null; then curl gnupg gnupg2 + wget ) sudo apt-get update -qq - if [ ${#apt_packages[@]} -gt 0 ]; then - sudo apt-get install -qq "${apt_packages[@]}" - fi + sudo apt-get install -qq "${apt_packages[@]}" unset apt_packages else @@ -23,4 +22,3 @@ else fi apt --version -echo "Last updated: $(ls -l /var/lib/apt/periodic/update-success-stamp | awk '{print $6" "$7" "$8}')" diff --git a/script/install.d/06-stow.sh b/script/install.d/06-stow.sh index 3154e17..568491f 100644 --- a/script/install.d/06-stow.sh +++ b/script/install.d/06-stow.sh @@ -28,6 +28,6 @@ rm -f $HOME/.ssh/config mkdir -p $HOME/.config mkdir -p $HOME/.ssh -sudo stow --dir="$root_dir" --target="$HOME" home -sudo stow --dir="$root_dir" --target="$HOME/.config" dot-config -sudo stow --dir="$root_dir" --target="$HOME/.ssh" dot-ssh +sudo stow --dir="$root_dir/files" --target="$HOME" home +sudo stow --dir="$root_dir/files" --target="$HOME/.config" dot-config +sudo stow --dir="$root_dir/files" --target="$HOME/.ssh" dot-ssh diff --git a/script/install.d/10-pyenv.sh b/script/install.d/10-pyenv.sh index d02334a..b5a3760 100644 --- a/script/install.d/10-pyenv.sh +++ b/script/install.d/10-pyenv.sh @@ -5,29 +5,16 @@ # Configure pyenv. # -if ! command -v "pyenv" &> /dev/null; then +export PYENV_ROOT="$HOME/.pyenv" +if ! echo $PATH | grep -q "$PYENV_ROOT"; then + export PATH="$PYENV_ROOT/bin:$PATH" +fi +if ! command -v "pyenv" &>/dev/null; then if [[ "$OSTYPE" == "linux-gnu"* ]]; then - # see https://github.com/pyenv/pyenv/wiki/common-build-problems - ppyenv_packages=( - build-essential - libssl-dev - libbz2-dev - libreadline-dev - libsqlite3-dev - libxml2-dev - libxmlsec1-dev - llvm - libncurses5-dev - libncursesw5-dev - xz-utils - tk-dev - libffi-dev - liblzma-dev - zlib1g-dev - ) - if [ ${#pyenv_packages[@]} -gt 0 ]; then - sudo apt-get install -qq "${pyenv_packages[@]}" - fi + # https://github.com/pyenv/pyenv/wiki#suggested-build-environment + sudo apt-get install -qq build-essential libssl-dev zlib1g-dev \ + libbz2-dev libreadline-dev libsqlite3-dev curl \ + libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev # see https://github.com/pyenv/pyenv-installer bash -c "$(curl -fsSL https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer)" @@ -49,8 +36,6 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then unset virtualenv_path fi -export PYENV_ROOT="$HOME/.pyenv" -[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" -eval "$(pyenv init -)" +eval "$(pyenv init --path)" pyenv --version diff --git a/script/install.d/20-docker.sh b/script/install.d/20-docker.sh index bfc40d1..9119aa3 100644 --- a/script/install.d/20-docker.sh +++ b/script/install.d/20-docker.sh @@ -1,11 +1,4 @@ -#!/usr/bin/env bash - -# ----------------------------------------------------------------------------- -# Description: -# (Ubuntu only) Configure docker. -# - -if [[ "$OSTYPE" == "linux-gnu"* ]]; then +if [[ "$OSTYPE" == "linux-gnu"* && -z "$SKIP_DOCKER_CONFIG" ]]; then docker --version readonly docker_group="docker" diff --git a/script/install.d/21-gh_cli.sh b/script/install.d/21-gh_cli.sh index e9b2ab0..6d8e6dc 100644 --- a/script/install.d/21-gh_cli.sh +++ b/script/install.d/21-gh_cli.sh @@ -11,8 +11,8 @@ if ! command -v gh &>/dev/null; then sudo mkdir -p -m 755 /etc/apt/keyrings && wget -qO- https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg >/dev/null && sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list >/dev/null && - sudo apt update && - sudo apt install gh -y + sudo apt-get update -qq && + sudo apt-get install -qq gh elif [[ "$OSTYPE" == "darwin"* ]]; then brew install gh fi diff --git a/script/install.d/25-terraform.sh b/script/install.d/25-terraform.sh index 38aeb95..6c0a727 100644 --- a/script/install.d/25-terraform.sh +++ b/script/install.d/25-terraform.sh @@ -7,7 +7,11 @@ if ! command -v "terraform" &>/dev/null; then if [[ "$OSTYPE" == "linux-gnu"* ]]; then - sudo apt-get install -qq terraform + wget -qO- https://apt.releases.hashicorp.com/gpg | sudo tee /etc/apt/keyrings/hashicorp-keyring.gpg >/dev/null && + sudo chmod go+r /etc/apt/keyrings/hashicorp-keyring.gpg && + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/hashicorp-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list >/dev/null && + sudo apt-get update -qq && + sudo apt-get install -qq terraform elif [[ "$OSTYPE" == "darwin"* ]]; then brew tap hashicorp/tap brew install hashicorp/tap/terraform diff --git a/script/install.d/80-neofetch.sh b/script/install.d/80-neofetch.sh index 3a5bd10..c6beaa1 100644 --- a/script/install.d/80-neofetch.sh +++ b/script/install.d/80-neofetch.sh @@ -7,7 +7,7 @@ if ! command -v "neofetch" &>/dev/null; then if [[ "$OSTYPE" == "linux-gnu"* ]]; then - sudo apt-get install neofetch -qq + sudo apt-get install -qq neofetch &>/dev/null elif [[ "$OSTYPE" == "darwin"* ]]; then brew install neofetch fi diff --git a/script/install_config.json b/script/install_config.json index 25d746b..4b6099d 100644 --- a/script/install_config.json +++ b/script/install_config.json @@ -23,12 +23,6 @@ "signingKey": "https://download.docker.com/linux/debian/gpg", "repository": "https://download.docker.com/linux/debian", "components": "bullseye stable" - }, - { - "key": "github", - "signingKey": "https://cli.github.com/packages/githubcli-archive-keyring.gpg", - "repository": "https://cli.github.com/packages", - "components": "stable main" } ], "apt_dependencies": [ @@ -46,7 +40,6 @@ "fonts-nanum", "fortune-mod", "fzf", - "gh", "git", "google-cloud-sdk", "kubectl", diff --git a/tools/test b/script/test similarity index 100% rename from tools/test rename to script/test diff --git a/tests/poetry.lock b/tests/poetry.lock index 6577875..dfca08c 100644 --- a/tests/poetry.lock +++ b/tests/poetry.lock @@ -1,154 +1,183 @@ -[[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = "*" +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "atomicwrites" -version = "1.4.0" +version = "1.4.1" description = "Atomic file writes." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] [[package]] name = "attrs" -version = "21.2.0" +version = "23.2.0" description = "Classes Without Boilerplate" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" +files = [ + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, +] [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "black" -version = "21.7b0" +version = "21.12b0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.6.2" +files = [ + {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, + {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, +] [package.dependencies] -appdirs = "*" click = ">=7.1.2" mypy-extensions = ">=0.4.3" -pathspec = ">=0.8.1,<1" -regex = ">=2020.1.8" +pathspec = ">=0.9.0,<1" +platformdirs = ">=2" tomli = ">=0.2.6,<2.0.0" +typing-extensions = [ + {version = ">=3.10.0.0,<3.10.0.1 || >3.10.0.1", markers = "python_version >= \"3.10\""}, + {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, +] [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] -python2 = ["typed-ast (>=1.4.2)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "click" -version = "8.0.1" +version = "8.1.7" description = "Composable command line interface toolkit" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "execnet" -version = "1.9.0" -description = "execnet: rapid multi-Python deployment" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -testing = ["pre-commit"] +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" optional = false -python-versions = "*" +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] [[package]] name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = "*" +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] [[package]] name = "packaging" -version = "21.0" +version = "23.2" description = "Core utilities for Python packages" -category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2" +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] [[package]] name = "pathspec" -version = "0.9.0" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.8" +files = [ + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, +] + +[[package]] +name = "platformdirs" +version = "4.2.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" -version = "0.13.1" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, +] [package.extras] dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [[package]] name = "py" -version = "1.10.0" +version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pyparsing" -version = "2.4.7" -description = "Python parsing module" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] [[package]] name = "pytest" -version = "6.2.4" +version = "6.2.5" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, +] [package.dependencies] atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} @@ -156,188 +185,47 @@ attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<1.0.0a1" +pluggy = ">=0.12,<2.0" py = ">=1.8.2" toml = "*" [package.extras] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] -[[package]] -name = "pytest-forked" -version = "1.3.0" -description = "run tests in isolated forked subprocesses" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -py = "*" -pytest = ">=3.10" - -[[package]] -name = "pytest-xdist" -version = "2.3.0" -description = "pytest xdist plugin for distributed testing and loop-on-failing modes" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -execnet = ">=1.1" -pytest = ">=6.0.0" -pytest-forked = "*" - -[package.extras] -psutil = ["psutil (>=3.0)"] -testing = ["filelock"] - -[[package]] -name = "regex" -version = "2021.7.6" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "1.1.0" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.6" - -[metadata] -lock-version = "1.1" -python-versions = "^3.9" -content-hash = "991d2f869433756ef344750fdb04b61e3ec16722b60154c4efd59006ca56cfa4" - -[metadata.files] -appdirs = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, - {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, -] -black = [ - {file = "black-21.7b0-py3-none-any.whl", hash = "sha256:1c7aa6ada8ee864db745b22790a32f94b2795c253a75d6d9b5e439ff10d23116"}, - {file = "black-21.7b0.tar.gz", hash = "sha256:c8373c6491de9362e39271630b65b964607bc5c79c83783547d76c839b3aa219"}, -] -click = [ - {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"}, - {file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -execnet = [ - {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, - {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -packaging = [ - {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, - {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -pluggy = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, -] -py = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, -] -pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, -] -pytest = [ - {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, - {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"}, -] -pytest-forked = [ - {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"}, - {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"}, -] -pytest-xdist = [ - {file = "pytest-xdist-2.3.0.tar.gz", hash = "sha256:e8ecde2f85d88fbcadb7d28cb33da0fa29bca5cf7d5967fa89fc0e97e5299ea5"}, - {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, -] -regex = [ - {file = "regex-2021.7.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e6a1e5ca97d411a461041d057348e578dc344ecd2add3555aedba3b408c9f874"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:6afe6a627888c9a6cfbb603d1d017ce204cebd589d66e0703309b8048c3b0854"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ccb3d2190476d00414aab36cca453e4596e8f70a206e2aa8db3d495a109153d2"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:ed693137a9187052fc46eedfafdcb74e09917166362af4cc4fddc3b31560e93d"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99d8ab206a5270c1002bfcf25c51bf329ca951e5a169f3b43214fdda1f0b5f0d"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:b85ac458354165405c8a84725de7bbd07b00d9f72c31a60ffbf96bb38d3e25fa"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3f5716923d3d0bfb27048242a6e0f14eecdb2e2a7fac47eda1d055288595f222"}, - {file = "regex-2021.7.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5983c19d0beb6af88cb4d47afb92d96751fb3fa1784d8785b1cdf14c6519407"}, - {file = "regex-2021.7.6-cp36-cp36m-win32.whl", hash = "sha256:c92831dac113a6e0ab28bc98f33781383fe294df1a2c3dfd1e850114da35fd5b"}, - {file = "regex-2021.7.6-cp36-cp36m-win_amd64.whl", hash = "sha256:791aa1b300e5b6e5d597c37c346fb4d66422178566bbb426dd87eaae475053fb"}, - {file = "regex-2021.7.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:59506c6e8bd9306cd8a41511e32d16d5d1194110b8cfe5a11d102d8b63cf945d"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:564a4c8a29435d1f2256ba247a0315325ea63335508ad8ed938a4f14c4116a5d"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:59c00bb8dd8775473cbfb967925ad2c3ecc8886b3b2d0c90a8e2707e06c743f0"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9a854b916806c7e3b40e6616ac9e85d3cdb7649d9e6590653deb5b341a736cec"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:db2b7df831c3187a37f3bb80ec095f249fa276dbe09abd3d35297fc250385694"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:173bc44ff95bc1e96398c38f3629d86fa72e539c79900283afa895694229fe6a"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:15dddb19823f5147e7517bb12635b3c82e6f2a3a6b696cc3e321522e8b9308ad"}, - {file = "regex-2021.7.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ddeabc7652024803666ea09f32dd1ed40a0579b6fbb2a213eba590683025895"}, - {file = "regex-2021.7.6-cp37-cp37m-win32.whl", hash = "sha256:f080248b3e029d052bf74a897b9d74cfb7643537fbde97fe8225a6467fb559b5"}, - {file = "regex-2021.7.6-cp37-cp37m-win_amd64.whl", hash = "sha256:d8bbce0c96462dbceaa7ac4a7dfbbee92745b801b24bce10a98d2f2b1ea9432f"}, - {file = "regex-2021.7.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edd1a68f79b89b0c57339bce297ad5d5ffcc6ae7e1afdb10f1947706ed066c9c"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:422dec1e7cbb2efbbe50e3f1de36b82906def93ed48da12d1714cabcd993d7f0"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cbe23b323988a04c3e5b0c387fe3f8f363bf06c0680daf775875d979e376bd26"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:0eb2c6e0fcec5e0f1d3bcc1133556563222a2ffd2211945d7b1480c1b1a42a6f"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1c78780bf46d620ff4fff40728f98b8afd8b8e35c3efd638c7df67be2d5cddbf"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bc84fb254a875a9f66616ed4538542fb7965db6356f3df571d783f7c8d256edd"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:598c0a79b4b851b922f504f9f39a863d83ebdfff787261a5ed061c21e67dd761"}, - {file = "regex-2021.7.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875c355360d0f8d3d827e462b29ea7682bf52327d500a4f837e934e9e4656068"}, - {file = "regex-2021.7.6-cp38-cp38-win32.whl", hash = "sha256:e586f448df2bbc37dfadccdb7ccd125c62b4348cb90c10840d695592aa1b29e0"}, - {file = "regex-2021.7.6-cp38-cp38-win_amd64.whl", hash = "sha256:2fe5e71e11a54e3355fa272137d521a40aace5d937d08b494bed4529964c19c4"}, - {file = "regex-2021.7.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6110bab7eab6566492618540c70edd4d2a18f40ca1d51d704f1d81c52d245026"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:4f64fc59fd5b10557f6cd0937e1597af022ad9b27d454e182485f1db3008f417"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:89e5528803566af4df368df2d6f503c84fbfb8249e6631c7b025fe23e6bd0cde"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2366fe0479ca0e9afa534174faa2beae87847d208d457d200183f28c74eaea59"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f9392a4555f3e4cb45310a65b403d86b589adc773898c25a39184b1ba4db8985"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:2bceeb491b38225b1fee4517107b8491ba54fba77cf22a12e996d96a3c55613d"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:f98dc35ab9a749276f1a4a38ab3e0e2ba1662ce710f6530f5b0a6656f1c32b58"}, - {file = "regex-2021.7.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:319eb2a8d0888fa6f1d9177705f341bc9455a2c8aca130016e52c7fe8d6c37a3"}, - {file = "regex-2021.7.6-cp39-cp39-win32.whl", hash = "sha256:eaf58b9e30e0e546cdc3ac06cf9165a1ca5b3de8221e9df679416ca667972035"}, - {file = "regex-2021.7.6-cp39-cp39-win_amd64.whl", hash = "sha256:4c9c3155fe74269f61e27617529b7f09552fbb12e44b1189cebbdb24294e6e1c"}, - {file = "regex-2021.7.6.tar.gz", hash = "sha256:8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d"}, -] -toml = [ +files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] -tomli = [ - {file = "tomli-1.1.0-py3-none-any.whl", hash = "sha256:f4a182048010e89cbec0ae4686b21f550a7f2903f665e34a6de58ec15424f919"}, - {file = "tomli-1.1.0.tar.gz", hash = "sha256:33d7984738f8bb699c9b0a816eb646a8178a69eaa792d258486776a5d21b8ca5"}, + +[[package]] +name = "tomli" +version = "1.2.3" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, + {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, ] + +[[package]] +name = "typing-extensions" +version = "4.10.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "4376b03828d7c131717dc3f1353b5cd36b56b6681184b9bb490f8a992ac15e44" diff --git a/tests/test_binaries.py b/tests/test_binaries.py index d5d6f05..b482f46 100644 --- a/tests/test_binaries.py +++ b/tests/test_binaries.py @@ -6,6 +6,7 @@ from distutils.spawn import find_executable from typing import List, Text from subprocess import run import pytest +import os # --------------------------------------------------------------------------- # @@ -22,7 +23,7 @@ def in_shell_path(shell: Text, binary: Text) -> bool: """ Check whether `binary` is in interactive shell's PATH """ - command = f"{shell} -i -c 'command -v {binary}'" + command = f"{shell} -c 'command -v {binary}'" try: result = run(command, shell=True) return result.returncode == 0 @@ -42,16 +43,14 @@ shells: List[Text] = [ binaries: List[Text] = [ # extend shells *shells, + # tools "git", "gh", - "aws", - "gcloud", "terraform", - "kubectl", - "docker", - "docker-compose", + "docker" if not os.environ.get("SKIP_DOCKER_CONFIG") else None, "screenfetch", + # language: python "pyenv", "python", @@ -59,10 +58,12 @@ binaries: List[Text] = [ "pip", "pip3", "poetry", + # langauge: js "node", "npm", "yarn", + # language: java "java", ]