diff --git a/.config/Brewfile b/.config/Brewfile index 62d082e8..0d48a1f7 100644 --- a/.config/Brewfile +++ b/.config/Brewfile @@ -1,8 +1,8 @@ # Standard Homebrew taps +tap "homebrew/cask" tap "homebrew/core" tap "homebrew/bundle" tap "homebrew/services" -tap "caskroom/cask" # Homebrew Formulae # e.g. `brew install ` @@ -10,12 +10,14 @@ tap "caskroom/cask" brew "act" # @brew [appium](https://appium.io/) - A framework focused on native Android/iOS testing brew "appium" +# @brew [azure-cli](https://docs.microsoft.com/en-us/cli/azure/) - The official CLI for interacting with Microsoft Azure brew "azure-cli" # @brew [bat](https://github.com/sharkdp/bat) - Clone of cat with syntax highlighting and Git integration brew "bat" # @brew [bitwarden-cli](https://github.com/bitwarden/cli) - Access and manage a BitWarden instance via CLI brew "bitwarden-cli" # @brew [codeclimate](https://github.com/codeclimate/codeclimate) - Interact with CodeClimate via CLI +tap "codeclimate/formulae" brew "codeclimate" # @brew [croc](https://github.com/schollz/croc) - A sharing tool that helps transfer files from one computer to another brew "croc" @@ -34,13 +36,12 @@ end # @brew [docker-slim](https://github.com/docker-slim/docker-slim) - A tool that shrinks Docker images and makes them more secure brew "docker-slim" # @brew [Dockle](https://github.com/goodwithtech/dockle) - A container image security scanner +tap "goodwithtech/r" brew "goodwithtech/r/dockle" # @brew [exiftool](https://exiftool.org) - A library for reading and writing EXIF data to files brew "exiftool" # @brew [ffsend](https://github.com/timvisee/ffsend) - Fully featured Firefox Send client that makes sharing files easy brew "ffsend" -# @brew [gcloud](https://cloud.google.com/sdk/gcloud) - The official Google Cloud Platform SDK CLI tool -brew "gcloud" # @brew [gh](https://github.com/cli/cli) - The official GitHub command line tool brew "gh" # @brew [git](https://git-scm.com) - Tool for interacting with git repositories @@ -69,6 +70,7 @@ brew "jq" brew "kubectx" brew "kubernetes-cli" # @brew [mc](https://github.com/minio/mc) - Replacement for ls, cp and other commands that are compatible with file-system-mounted S3 buckets +tap "minio/stable" brew "minio/stable/mc" # @brew [mkcert](https://github.com/FiloSottile/mkcert) - Simple tool to make locally trusted development certificates brew "mkcert" @@ -81,7 +83,7 @@ brew "ots" # @brew [oq](https://blacksmoke16.github.io/oq) - Performant, and portable jq wrapper that supports formats other than JSON brew "oq" # @brew [php](https://www.php.net/) - General-purpose scripting language -brew "php", restart_service: true +# brew "php", restart_service: false # @brew [poetry](https://python-poetry.org/) - A Python project package management tool and more brew "poetry" # @brew [pup](https://github.com/EricChiang/pup) - Parse HTML with a CLI @@ -92,13 +94,13 @@ brew "python@3.10" brew "rsync" # @brew [ruby](https://www.ruby-lang.org/) - Powerful, clean, object-oriented scripting language brew "ruby" -# @brew [sentry-cli](https://github.com/getsentry/sentry-cli) - Interact with Sentry via a CLI -brew "getsentry/tools/sentry-cli" # @brew [sshpass](https://github.com/hudochenkov/homebrew-sshpass) - Library that allows Ansible to connect over SSH with a password +tap "hudochenkov/sshpass" brew "hudochenkov/sshpass/sshpass" # @brew [sysbench](https://github.com/akopytov/sysbench) - System performance benchmark tool brew "sysbench" # @brew [task](https://github.com/go-task/homebrew-tap) - A parallel task runner +tap "go-task/tap" brew "go-task/tap/go-task" # @brew [teleport](https://github.com/bbatsche/homebrew-teleport) - An identity-aware SSH client for teams brew "teleport" @@ -106,10 +108,12 @@ brew "terraform" # @brew [tokei](https://github.com/XAMPPRocky/tokei) - Count and display the lines of code and the language used in a project brew "tokei" # @brew [trivy](https://aquasecurity.github.io/trivy/v0.18.3/) - Scan images for vulnerabilities +tap "aquasecurity/trivy" brew "aquasecurity/trivy/trivy" # @brew [up](https://github.com/akavel/up) - Write Linux pipes with an instant live preview brew "up" # @brew [waypoint](https://www.waypointproject.io/) - Tool to build, deploy, and release any application on any platform +tap "hashicorp/tap" brew "hashicorp/tap/waypoint" # @brew [wireshark](https://www.wireshark.org) - Graphical network analyzer and capture tool (CLI) if OS.linux? @@ -140,6 +144,8 @@ cask "firefox" cask "gimp" # @cask [google-chrome](https://www.google.com/chrome/) - Sandbox-based web browser published by Google cask "google-chrome" +# @cask [gcloud](https://cloud.google.com/sdk/gcloud) - The official Google Cloud Platform SDK CLI tool +cask "google-cloud-sdk" # @cask [iterm2](https://www.iterm2.com/) - An improved terminal for macOS cask "iterm2" # @cask [java](https://www.java.com/en/) - Libraries required for running and developing Java applications diff --git a/.config/docs/readme-playbook/quick-description.md b/.config/docs/readme-playbook/quick-description.md index 07a13663..b3edeff4 100644 --- a/.config/docs/readme-playbook/quick-description.md +++ b/.config/docs/readme-playbook/quick-description.md @@ -1 +1 @@ ->
**A no-stone-unturned Ansible playbook you can use to set up the ultimate home lab or on-premise addition to your cloud!**

+>

**A no-stone-unturned Ansible playbook you can use to set up the ultimate home lab or on-premise addition to your cloud!**



diff --git a/.config/docs/variables.json b/.config/docs/variables.json index 2a3bd06e..88f60e21 100644 --- a/.config/docs/variables.json +++ b/.config/docs/variables.json @@ -363,6 +363,8 @@ "scriptsBuild": "task donothing", "scriptsHelp": "task --menu", "scriptsPrepare": "npm run start && (test -f Taskfile.yml && task common:husky) || true", + "scriptsReplaceThis": "\"", + "scriptsReplaceWith": "\\\"", "scriptsStart": "bash start.sh", "scriptsTest": "task donothing", "sharp_instructions": [], diff --git a/.config/log b/.config/log index b2784e4d..8c2b2ca7 100755 --- a/.config/log +++ b/.config/log @@ -13,7 +13,7 @@ # * `warn` - Logs a warning message # * `md` - Log a stylized markdown string or file -# @description Installs Stylog from GitHub releases +# @description Installs Stylog (a logging CLI) from GitHub releases # @example installStylog installStylog() { true diff --git a/.config/requirements.txt b/.config/requirements.txt index b42285df..ae40d4cf 100644 --- a/.config/requirements.txt +++ b/.config/requirements.txt @@ -1,13 +1,13 @@ -ansible-core==2.11.8; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" +ansible-core==2.11.9; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" ansible==4.10.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") certifi==2021.10.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" cffi==1.15.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" -charset-normalizer==2.0.11; python_full_version >= "3.6.0" and python_version >= "3.6" +charset-normalizer==2.0.12; python_full_version >= "3.6.0" and python_version >= "3.6" cryptography==36.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" docker==5.0.3; python_version >= "3.6" idna==3.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6" jinja2==3.0.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" -markupsafe==2.0.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" +markupsafe==2.1.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7" ntlm-auth==1.5.0; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" packaging==21.3; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" pycparser==2.21; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.6" @@ -21,5 +21,5 @@ requests==2.27.1; python_version >= "3.6" and python_full_version < "3.0.0" or p resolvelib==0.5.5; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" six==1.16.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" urllib3==1.26.8; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.6" -websocket-client==1.2.3; python_version >= "3.6" +websocket-client==1.3.1; python_version >= "3.6" xmltodict==0.12.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" diff --git a/.config/scripts/start.sh b/.config/scripts/start.sh index baac5090..9f9249f6 100644 --- a/.config/scripts/start.sh +++ b/.config/scripts/start.sh @@ -91,7 +91,11 @@ if [ "$EUID" -eq 0 ] && [ -z "$INIT_CWD" ] && type useradd &> /dev/null; then # shellcheck disable=SC2016 logger info 'Running as root - creating seperate user named `megabyte` to run script with' echo "megabyte ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers - useradd -m -s "$(which bash)" -c "Megabyte Labs Homebrew Account" megabyte + useradd -m -s "$(which bash)" -c "Megabyte Labs Homebrew Account" megabyte > /dev/null || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + # shellcheck disable=SC2016 + logger info 'User `megabyte` already exists' + fi ensureRootPackageInstalled "sudo" # shellcheck disable=SC2016 logger info 'Reloading the script with the `megabyte` user' @@ -258,7 +262,12 @@ function installTask() { mkdir -p "$TARGET_BIN_DIR" fi mv "$TMP_DIR/task/task" "$TARGET_DEST" - logger success "Installed Task to $TARGET_DEST" + if type sudo &> /dev/null && sudo -n true; then + sudo mv "$TARGET_DEST" /usr/local/bin/task + logger success "Installed Task to /usr/local/bin/task" + else + logger success "Installed Task to $TARGET_DEST" + fi rm "$CHECKSUM_DESTINATION" rm "$DOWNLOAD_DESTINATION" } @@ -343,7 +352,7 @@ fi if [[ "$OSTYPE" == 'darwin'* ]] || [[ "$OSTYPE" == 'linux-gnu'* ]] || [[ "$OSTYPE" == 'linux-musl'* ]]; then if [ -z "$INIT_CWD" ]; then if ! type brew &> /dev/null; then - if sudo -n true; then + if type sudo &> /dev/null && sudo -n true; then echo | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" else logger warn "Homebrew is not installed. The script will attempt to install Homebrew and you might be prompted for your password." @@ -390,10 +399,12 @@ fi ensureTaskInstalled # @description Run the start logic, if appropriate -if [ -z "$GITLAB_CI" ] && [ -z "$INIT_CWD" ] && [ -f Taskfile.yml ]; then +if [ -z "$CI" ] && [ -z "$INIT_CWD" ] && [ -f Taskfile.yml ]; then # shellcheck disable=SC1091 . "$HOME/.profile" - task start - # shellcheck disable=SC2016 - logger info 'There may have been changes to your PATH variable. You may have to reload your terminal or run:\n\n`. "$HOME/.profile"`' + if task donothing &> /dev/null; then + task start + # shellcheck disable=SC2016 + logger info 'There may have been changes to your PATH variable. You may have to reload your terminal or run:\n\n`. "$HOME/.profile"`' + fi fi diff --git a/.config/taskfiles/ansible/Taskfile-ansibler.yml b/.config/taskfiles/ansible/Taskfile-ansibler.yml index 9c0f315e..bc8de4e5 100644 --- a/.config/taskfiles/ansible/Taskfile-ansibler.yml +++ b/.config/taskfiles/ansible/Taskfile-ansibler.yml @@ -33,10 +33,24 @@ tasks: jq -s -S '.[0] + .[1]' '{{.VARIABLES_PATH}}' .cache/compatibility-chart.json > "$TMP" mv "$TMP" '{{.VARIABLES_PATH}}' + compatibility-chart:ansifilter: + deps: + - :install:software:ansifilter + cmds: + - | + for LOG in {{.MOLECULE_RESULTS_PATH}}; do + if [ "$LOG" != '{{.MOLECULE_RESULTS_PATH}}' ]; then + TMP="$(mktemp)" && cat "$LOG" | ansifilter > "$TMP" && mv "$TMP" "$LOG" + fi + done + sources: + - '{{.MOLECULE_RESULTS_PATH}}/*' + compatibility-chart:generate: deps: - :install:python:requirements cmds: + - task: compatibility-chart:ansifilter - > {{.PYTHON_HANDLE}}ansibler --generate-compatibility-chart --molecule-results-dir '{{.MOLECULE_RESULTS_PATH}}' --json-file .cache/compatibility-chart.json diff --git a/.config/taskfiles/ansible/Taskfile-playbook.yml b/.config/taskfiles/ansible/Taskfile-playbook.yml index 31049337..784b9ddc 100644 --- a/.config/taskfiles/ansible/Taskfile-playbook.yml +++ b/.config/taskfiles/ansible/Taskfile-playbook.yml @@ -156,9 +156,8 @@ tasks: deps: - :install:software:git - :install:software:jq - - :install:software:subrepo summary: | - # Ensures each role is added as a remote + # Ensures each role is added as a remote and a sub-repo (if applicable) This task cycles through all the roles in the `/roles` folder and ensures they are added as remotes. This helps with managing the git trees used @@ -184,6 +183,9 @@ tasks: else git remote add "$ROLE_FOLDER" "$ROLE_SSH_REPO" fi + if [ -d $ROLE_RELATIVE_PATH/.git ] && [ ! -f $ROLE_RELATIVE_PATH/.gitrepo ]; then + task ansible:playbook:subrepo:init -- $ROLE_RELATIVE_PATH + fi else .config/log warn "${ROLE_RELATIVE_PATH}/package.json is missing!" fi @@ -250,3 +252,32 @@ tasks: - task: run:cli vars: CLI_ARGS: '{{.ANSWER}}' + + subrepo:init: + deps: + - :install:software:subrepo + summary: | + # Add Role as a Sub-Repository + + Since roles should each have their own repository for Ansible Galaxy and to make it easier + for the community to download specific roles, they must be declared as sub-repositories. + Submodules could also be used but we use sub-repos instead because they are more flexible. + + In the main playbook, if someone clones the playbook, the playbook and all the roles will download + without any requirement to initialize submodules. At the same time, each role can be in its own + repository. The playbook recognizes roles like this because they have a `.gitrepo` file that is only + saved in the playbook version of the role. Users can interact with the playbook and its role + repositories transparently without any need to understand what git subrepos are. + + Managers of roles can update the role repositories without any need to understand what git subrepos + are. Managers of the playbook can use the tool [git-subrepo](https://github.com/ingydotnet/git-subrepo) + to perform various actions including pulling changes from individual role repositories and + other actions. + + Usage: + `task ansible:playbook:subrepo:init -- path/to/folder/with.git/folder` + cmds: + - | + BASENAME="$(basename {{.CLI_ARGS}})" + REMOTE="$(git remote get-url $BASENAME)" + HUSKY=0 git subrepo init {{.CLI_ARGS}} -r "$REMOTE" -b master diff --git a/.config/taskfiles/ansible/Taskfile-test.yml b/.config/taskfiles/ansible/Taskfile-test.yml index 2c6f34ad..800424ba 100644 --- a/.config/taskfiles/ansible/Taskfile-test.yml +++ b/.config/taskfiles/ansible/Taskfile-test.yml @@ -6,6 +6,13 @@ vars: MOLECULE_TEST_OPTIONS: ANSIBLE_STDOUT_CALLBACK=community.general.yaml ANSIBLE_CALLBACKS_ENABLED="junit, ansible.posix.profile_tasks, ansible.posix.timer" JUNIT_OUTPUT_DIR="molecule/.results/junit" JUNIT_FAIL_ON_CHANGE=true JUNIT_HIDE_TASK_ARGUMENTS=true + PYTHON_MOLECULE_HANDLE: + sh: | + if [ -n "$CI" ]; then + echo '' + else + echo 'unbuffer {{.PYTHON_HANDLE}}' + fi tasks: allure:report: @@ -21,6 +28,14 @@ tasks: - cp -rf allure-reports/history/ molecule/.results/junit/ - allure open allure-reports + ansifilter: + deps: + - :install:software:ansifilter + cmds: + - TMP="$(mktemp)" && cat {{.RESULTS_FILE}} | ansifilter > "$TMP" && mv "$TMP" {{.RESULTS_FILE}} + status: + - '[ -n "$CI" ]' + default: log: start: Running default Ansible test @@ -41,30 +56,125 @@ tasks: - task: local:test local:test: + cmds: + - | + if [ -n "$CI" ]; then + .config/log info '`$CI` environment variable is present' + task ansible:test:local:test:ci + else + task ansible:test:local:test:local + fi + + local:test:ci: + deps: + - :symlink:{{.REPOSITORY_SUBTYPE}} + cmds: + - | + if [ -n "$WINDOWS_ANSIBLE_TEST" ]; then + pip3 install ansible 'pywinrm[credssp]' + else + pip3 install ansible + fi + - ansible-galaxy install -r requirements.yml + - task: local:test:logic + + local:test:local: deps: - :symlink:{{.REPOSITORY_SUBTYPE}} - - :install:software:sentry - task: :install:python:requirements env: INSTALL_OPTIONS: --no-dev + cmds: + - task: local:test:logic + + local:test:logic: + vars: + ANSIBLE_CFG: |- + [winrm_connection] + scheme = https + server_cert_validation = ignore + transport = credssp,ssl + ROLE_NAME: '{{.GALAXY_NAMESPACE}}.{{.GALAXY_ROLE_NAME}}' + SUDO_PASS_PARAM: + sh: if [ -z "$CI" ]; then echo ' --ask-sudo-pass'; else echo ''; fi + WINDOWS_INVENTORY: windows-ci ansible_host=localhost ansible_user=runneradmin + ansible_password=AnsibleTest999 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore + ansible_winrm_transport=credssp log: error: Encountered error while testing the Ansible playbook locally start: Testing the Ansible playbook locally success: Successfully tested the Ansible playbook locally cmds: - - cp test/{{OS}}/inventory inventory - - if [ ! -f ansible.cfg.bak ]; then cp ansible.cfg ansible.cfg.bak; fi - - cp test/{{OS}}/ansible.cfg ansible.cfg - | - .config/log info 'Prompting for sudo password (required)' - set -o pipefail - {{.PYTHON_HANDLE}}ansible-playbook --ask-sudo-pass test/{{OS}}/test.yml 2&>1 | tee debug.log || EXIT_CODE=$? - - mv ansible.cfg.bak ansible.cfg - - rm inventory + if [ -n "$WINDOWS_ANSIBLE_TEST" ]; then + echo '{{.WINDOWS_INVENTORY}}' > inventory + echo '{{.ANSIBLE_CFG}}' > ansible.cfg + else + echo 'localhost ansible_connection=local' > inventory + fi + - task: local:test:playbook + vars: + PLAY_HOSTS: + sh: if [ -z "$WINDOWS_ANSIBLE_TEST" ]; then echo 'localhost'; else echo 'windows-ci'; fi + PLAY_ROLE_NAME: '{{.ROLE_NAME}}' + - | + if [ -z "$CI" ]; then + .config/log info 'Prompting for sudo password (required for non-CI environments)' + fi + if [ -n "$WINDOWS_ANSIBLE_TEST" ]; then + export ANSIBLE_CONFIG="$PWD/ansible.cfg" + fi + {{.PYTHON_MOLECULE_HANDLE}} ansible-playbook -i inventory{{.SUDO_PASS_PARAM}} test/{{OS}}/test.yml 2>&1 | tee debug.log || EXIT_CODE=$? + - task: post:molecule:log + vars: + RESULTS_FILE: debug.log + + local:test:playbook: + vars: + TEST_PLAY: | + --- + - hosts: {{.PLAY_HOSTS}} + roles: + - role: '{{.PLAY_ROLE_NAME}}' + cmds: + - echo '{{.TEST_PLAY}}' > test.yml + + molecule:ci:requirements: + cmds: + - | + if [ -n "$WINDOWS_ANSIBLE_TEST" ]; then + .config/log info 'Running `pip3 install ansible ansibler molecule pywinrm[credssp]`' + pip3 install ansible ansibler molecule 'pywinrm[credssp]' + else + .config/log info 'Running `pip3 install ansible ansibler molecule`' + pip3 install ansible ansibler molecule + fi + - | + .config/log info 'Running `ansible-galaxy install --ignore-errors -r requirements.yml`' + ansible-galaxy install --ignore-errors -r requirements.yml molecule:dependencies: + run: once + cmds: + - | + if [ -n "$CI" ]; then + .config/log info '`$CI` environment is present' + task ansible:test:molecule:dependencies:ci + else + task ansible:test:molecule:dependencies:local + fi + + molecule:dependencies:ci: + cmds: + - task: molecule:ci:requirements + status: + - '[ -z "$CI" ]' + + molecule:dependencies:local: deps: - :install:python:requirements + - :install:software:expect + - :install:software:sshpass log: error: Encountered error while installing Ansible Galaxy requirements defined in `requirements.yml` start: Installing Ansible Galaxy requirements defined in `requirements.yml` @@ -74,10 +184,12 @@ tasks: if poetry &> /dev/null; then {{.PYTHON_HANDLE}} ansible-galaxy install --ignore-errors -r requirements.yml else - .config/log info 'Current shell is already inside a Poetry virtualenv' + .config/log info 'Current shell is already a Poetry virtual environment' ansible-galaxy install --ignore-errors -r requirements.yml fi - task: :symlink:{{.REPOSITORY_SUBTYPE}} + status: + - '[ -n "$CI" ]' molecule:docker: desc: Runs a Docker Molecule test @@ -103,8 +215,6 @@ tasks: deps: - molecule:dependencies - :install:software:docker - - :install:software:sentry - - :install:software:sshpass log: error: The `{{.CLI_ARGS}}` Docker Molecule test finished with errors start: Running Docker Molecule test on containers in the `{{.CLI_ARGS}}` group @@ -112,15 +222,18 @@ tasks: cmds: - | set -o pipefail - {{.MOLECULE_TEST_OPTIONS}} MOLECULE_GROUP="{{.CLI_ARGS}}" {{.PYTHON_HANDLE}}molecule test -s docker \ + {{.MOLECULE_TEST_OPTIONS}} MOLECULE_GROUP="{{.CLI_ARGS}}" {{.PYTHON_MOLECULE_HANDLE}}molecule test -s docker \ -- --skip-tags skipdockertest 2>&1 | tee debug.log || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + fi + - task: post:molecule:log + vars: + RESULTS_FILE: debug.log molecule:docker:matrix: deps: - molecule:dependencies - :install:software:docker - - :install:software:sentry - - :install:software:sshpass vars: MOLECULE_DATE: sh: date '+%Y-%m-%d' @@ -137,8 +250,13 @@ tasks: .config/log warn 'Running Docker Molecule tests on the Docker containers that are compatible with `snap` since the role has references to `snap`' fi set -o pipefail - PY_COLORS=0 {{.MOLECULE_TEST_OPTIONS}} MOLECULE_GROUP="$SCENARIO" {{.PYTHON_HANDLE}}molecule test -s docker -- --skip-tags skipdockertest 2>&1 | \ - tee "{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-$SCENARIO.txt" || EXIT_CODE=$? + {{.MOLECULE_TEST_OPTIONS}} MOLECULE_GROUP="$SCENARIO" {{.PYTHON_MOLECULE_HANDLE}}molecule test -s docker -- --skip-tags skipdockertest 2>&1 | \ + tee '{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-$SCENARIO.txt' || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + fi + - task: post:molecule:log + vars: + RESULTS_FILE: '{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-$SCENARIO.txt' molecule:docker:prompt: vars: @@ -186,7 +304,6 @@ tasks: deps: - molecule:dependencies - :install:software:gcloud - - :install:software:sentry log: error: Encountered error(s) while running the Google Cloud Platform Molecule test start: Running Google Cloud Platform Molecule test @@ -195,13 +312,17 @@ tasks: - task: molecule:gcp:preconditions - | set -o pipefail - {{.PYTHON_HANDLE}}molecule test -s gcp | tee debug.log || EXIT_CODE=$? + {{.PYTHON_MOLECULE_HANDLE}}molecule test -s gcp 2>&1 | tee debug.log || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + fi + - task: post:molecule:log + vars: + RESULTS_FILE: debug.log molecule:gcp:matrix: deps: - molecule:dependencies - :install:software:gcloud - - :install:software:sentry - :install:software:yq vars: MOLECULE_DATE: @@ -215,13 +336,14 @@ tasks: - mkdir -p {{.MOLECULE_LOGS_PATH}} - | set -o pipefail - EXIT_CODE=0 - PY_COLORS=0 {{.PYTHON_HANDLE}}molecule test -s gcp 2>&1 | tee "{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-gcp.txt" || EXIT_CODE=$? - if [ "$EXIT_CODE" != '0' ]; then - exit 1 + {{.PYTHON_MOLECULE_HANDLE}}molecule test -s gcp 2>&1 | tee "{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-gcp.txt" || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then else .config/log success 'Finished running the test (results were logged to `{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-gcp.txt`)' fi + - task: post:molecule:log + vars: + RESULTS_FILE: '{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-gcp.txt' - | RESULTS="{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-gcp.txt" PLATFORM_LENGTH="$(yq e '.platforms | length' molecule/gcp/molecule.yml)" @@ -304,7 +426,9 @@ tasks: molecule:local:test: deps: - molecule:dependencies - - :install:software:sentry + vars: + MOLECULE_DATE: + sh: date '+%Y-%m-%d' log: error: There was an error while running the Molecule test locally start: Running the Molecule test locally @@ -312,8 +436,16 @@ tasks: cmds: - | set -o pipefail - PATH="$(poetry env info | grep 'Python: /' | sed 's/Python: //' | sed 's/$/\/bin/'):$PATH" \ - {{.MOLECULE_TEST_OPTIONS}} {{.PYTHON_HANDLE}}molecule test -s local 2&>1 | tee debug.log || EXIT_CODE=$? + if [ -z "$CI" ]; then + export PATH="$(poetry env info | grep 'Python: /' | sed 's/Python: //' | sed 's/$/\/bin/'):$PATH" + fi + {{.MOLECULE_TEST_OPTIONS}} {{.PYTHON_MOLECULE_HANDLE}}molecule test -s local 2>&1 | \ + tee '{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-default.txt' || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + fi + - task: post:molecule:log + vars: + RESULTS_FILE: '{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-default.txt' molecule:ssh: desc: Runs a Molecule test over SSH @@ -332,7 +464,6 @@ tasks: molecule:ssh:cli: deps: - molecule:dependencies - - :install:software:sentry log: error: Errors encountered while running the SSH Molecule test start: Running the Molecule test over SSH @@ -340,7 +471,12 @@ tasks: cmds: - | set -o pipefail - {{.MOLECULE_TEST_OPTIONS}} {{.PYTHON_HANDLE}}molecule test -s remote 2&>1 | tee debug.log || EXIT_CODE=$? + {{.MOLECULE_TEST_OPTIONS}} {{.PYTHON_MOLECULE_HANDLE}}molecule test -s remote 2>&1 | tee debug.log || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + fi + - task: post:molecule:log + vars: + RESULTS_FILE: debug.log molecule:ssh:prompt: vars: @@ -444,8 +580,6 @@ tasks: molecule:virtualbox:cli: deps: - molecule:dependencies - - :install:software:sentry - - :install:software:sshpass - :install:software:vagrant - :install:software:virtualbox env: @@ -456,7 +590,13 @@ tasks: success: Finished running the `{{.CLI_ARGS}}` VirtualBox Molecule test cmds: - | - {{.MOLECULE_TEST_OPTIONS}} MOLECULE_GROUP="{{.CLI_ARGS}}" {{.PYTHON_HANDLE}}molecule test 2&>1 | tee debug.log || EXIT_CODE=$? + set -o pipefail + {{.MOLECULE_TEST_OPTIONS}} MOLECULE_GROUP="{{.CLI_ARGS}}" {{.PYTHON_MOLECULE_HANDLE}}molecule test 2>&1 | tee debug.log || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + fi + - task: post:molecule:log + vars: + RESULTS_FILE: debug.log molecule:virtualbox:converge: desc: Provisions a desktop VirtualBox VM and then runs a Molecule test @@ -488,8 +628,6 @@ tasks: molecule:virtualbox:converge:cli: deps: - molecule:dependencies - - :install:software:sentry - - :install:software:sshpass - :install:software:vagrant - :install:software:virtualbox env: @@ -501,7 +639,12 @@ tasks: cmds: - | set -o pipefail - {{.MOLECULE_TEST_OPTIONS}} MOLECULE_GROUP={{.CLI_ARGS}} {{.PYTHON_HANDLE}}molecule converge -s desktop 2&>1 | tee debug.log || EXIT_CODE=$? + {{.MOLECULE_TEST_OPTIONS}} MOLECULE_GROUP={{.CLI_ARGS}} {{.PYTHON_MOLECULE_HANDLE}}molecule converge -s desktop 2>&1 | tee debug.log || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + fi + - task: post:molecule:log + vars: + RESULTS_FILE: debug.log molecule:virtualbox:converge:prompt: vars: @@ -547,14 +690,11 @@ tasks: molecule:virtualbox:matrix: deps: - molecule:dependencies - - :install:software:sentry - - :install:software:sshpass - :install:software:vagrant - :install:software:virtualbox vars: MOLECULE_DATE: sh: date '+%Y-%m-%d' - OBJC_DISABLE_INITIALIZE_FORK_SAFETY: YES log: error: Errors were encountered while running the full E2E test (see `{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-default.txt` for details) start: Running a full E2E test with VirtualBox (results will be saved to `{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-default.txt`) @@ -563,8 +703,13 @@ tasks: - mkdir -p {{.MOLECULE_LOGS_PATH}} - | set -o pipefail - PY_COLORS=0 {{.MOLECULE_TEST_OPTIONS}} {{.PYTHON_HANDLE}}molecule test 2&>1 | \ + {{.MOLECULE_TEST_OPTIONS}} {{.PYTHON_MOLECULE_HANDLE}}molecule test 2>&1 | \ tee '{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-default.txt' || EXIT_CODE=$? + if [ "$EXIT_CODE" ]; then + fi + - task: post:molecule:log + vars: + RESULTS_FILE: '{{.MOLECULE_LOGS_PATH}}/{{.MOLECULE_DATE}}-default.txt' # yamllint enable rule:truthy molecule:virtualbox:prompt: @@ -610,6 +755,27 @@ tasks: - sh: test -f molecule/default/molecule.yml msg: The `molecule/default/molecule.yml` file must be present and in the proper format + post:molecule:log: + cmds: + - task: ansifilter + vars: + RESULTS_FILE: '{{.RESULTS_FILE}}' + - task: post:molecule:log:commit:ci + - cmd: | + git pull --ff-only origin master + git add '{{.RESULTS_FILE}}' + HUSKY=0 git commit -m "📝 docs(test results): new molecule test results added [ci skip]" -n + git push origin master + ignore_error: true + status: + - '[ "{{.RESULTS_FILE}}" == "debug.log" ] || [ ! -d .git ]' + + post:molecule:log:commit:ci: + cmds: + - task: :ci:commit:config + status: + - '[ -z "$GITLAB_CI" ]' + prompt: vars: MARKDOWN: | @@ -746,8 +912,6 @@ tasks: - task: :install:python:requirements vars: INSTALL_OPTIONS: --no-dev - - :install:software:sentry - - :install:software:sshpass - :install:software:vagrant - :install:software:virtualbox log: @@ -757,9 +921,12 @@ tasks: cmds: - | set -o pipefail - vagrant up {{.CLI_ARGS}} 2&>1 | tee debug.log || EXIT_CODE=$? - if [ "$EXIT_CODE" != '0' ]; then + vagrant up {{.CLI_ARGS}} 2>&1 | tee debug.log || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then fi + - task: post:molecule:log + vars: + RESULTS_FILE: debug.log vagrant:prompt: vars: diff --git a/.config/taskfiles/ansible/Taskfile.yml b/.config/taskfiles/ansible/Taskfile.yml index 44190f1b..f21a3a7b 100644 --- a/.config/taskfiles/ansible/Taskfile.yml +++ b/.config/taskfiles/ansible/Taskfile.yml @@ -148,7 +148,9 @@ tasks: mkdir -p .cache/megabytelabs jq -n --argjson result "$RESULT" --argjson gi "$GALAXY_INFO" '$gi | .galaxy_info.galaxy_tags = $result' > .cache/megabytelabs/galaxy-meta.json yq eval -P .cache/megabytelabs/galaxy-meta.json > meta/main.yml - - '{{.NPX_HANDLE}}prettier --write meta/main.yml > /dev/null' + - task: :fix:prettier + vars: + CLI_ARGS: meta/main.yml - task: :fix:yaml:dashes vars: CLI_ARGS: meta/main.yml diff --git a/.config/taskfiles/app/Taskfile-virtualbox.yml b/.config/taskfiles/app/Taskfile-virtualbox.yml new file mode 100644 index 00000000..d4c48270 --- /dev/null +++ b/.config/taskfiles/app/Taskfile-virtualbox.yml @@ -0,0 +1,34 @@ +--- +version: '3' + +tasks: + clear: + deps: + - :install:software:virtualbox + summary: | + # Remove All VMs / Reset + + This task will remove all the VirtualBox VMs. It is useful in scenarios + where VirtualBox is being called through automation and things can + potentially break. When they break, they need a reset. + + **Example resetting all VMs:** + `task app:virtualbox:clear` + + There is the capability of only resetting VMs that match a certain pattern. + + **Example resetting all VMs matching a pattern:** + `task app:virtualbox:clear -- 'macOS'` + vars: + DEFAULT_PATTERN: default_ + cmds: + - cmd: killall -9 VBoxHeadless + ignore_error: true + - | + while read VM; do + VM_NAME="$(echo $VM | sed 's/^"\(.*\)" {.*}/\1/')" + VM_UUID="$(echo $VM | sed 's/^".*".{\(.*\)}/\1/')" + vboxmanage startvm "$VM_UUID" --type emergencystop || true + vboxmanage unregistervm "$VM_UUID" || true + rm -rf "$HOME/VirtualBox VMs/$VM_NAME" || true + done < <(vboxmanage list vms | grep '{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}{{.DEFAULT_PATTERN}}{{end}}') diff --git a/.config/taskfiles/app/Taskfile.yml b/.config/taskfiles/app/Taskfile.yml new file mode 100644 index 00000000..17f3a609 --- /dev/null +++ b/.config/taskfiles/app/Taskfile.yml @@ -0,0 +1,5 @@ +--- +version: '3' + +tasks: + default: 'true' diff --git a/.config/taskfiles/boilerplate/Taskfile-populate.yml b/.config/taskfiles/boilerplate/Taskfile-populate.yml index d87344d1..1cc00642 100644 --- a/.config/taskfiles/boilerplate/Taskfile-populate.yml +++ b/.config/taskfiles/boilerplate/Taskfile-populate.yml @@ -133,8 +133,12 @@ tasks: fi fi + common: 'true' + docker: 'true' + documentation: 'true' + go: 'true' group: diff --git a/.config/taskfiles/common/Taskfile-update.yml b/.config/taskfiles/common/Taskfile-update.yml index 5cbcf88c..6935c029 100644 --- a/.config/taskfiles/common/Taskfile-update.yml +++ b/.config/taskfiles/common/Taskfile-update.yml @@ -92,7 +92,9 @@ tasks: cat .dockerignore | sed -n '/# Saved entries below/,$p' | sed 's/# Saved entries below//' | awk 'NF' >> "$TMP" mv "$TMP" .dockerignore elif [ '{{.PROJECT_TYPE}}' == 'project' ]; then - rm .config/dockerignore + if [ -f .config/dockerignore ]; then + rm .config/dockerignore + fi fi - task: :common:{{if eq .CONTAINER "docker"}}husky:ci{{else}}husky{{end}} - task: :{{if eq .REPOSITORY_SUBTYPE "role"}}ansible:keywords:sync{{else}}donothing{{end}} @@ -168,6 +170,7 @@ tasks: start: Ensuring submodules in the `.modules/` folder are up-to-date success: Successfully ensured submodules in the `.modules/` folder are up-to-date cmds: + - git submodule update --init --recursive - | ROOT_DIR="$PWD" if ls .modules/*/ > /dev/null 2>&1; then @@ -248,7 +251,7 @@ tasks: update: deps: - ':{{if eq .REPOSITORY_SUBTYPE "role"}}common:update:ansible{{else}}donothing{{end}}' - - ':{{if eq .REPOSITORY_TYPE "packer"}}packer:latestos{{else}}donothing{{end}}' + - ':{{if eq .REPOSITORY_TYPE "packer"}}{{if eq .REPOSITORY_SUBTYPE "server"}}packer:latestos{{else}}donothing{{end}}{{else}}donothing{{end}}' - init - repositories summary: | diff --git a/.config/taskfiles/docker/Taskfile-test.yml b/.config/taskfiles/docker/Taskfile-test.yml index a4bd196e..5cb5121d 100644 --- a/.config/taskfiles/docker/Taskfile-test.yml +++ b/.config/taskfiles/docker/Taskfile-test.yml @@ -23,7 +23,7 @@ tasks: successfully validated by `container-structure-test`' cmds: - container-structure-test test --image {{.DOCKERHUB_PROFILE}}/{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}{{.SLUG}}{{end}}:latest - --config Docker{{if .CLI_ARGS}}-{{.CLI_ARGS}}{{end}}.test.yml + --config Docker{{if .CLI_ARGS}}.{{.CLI_ARGS}}{{end}}.test.yml status: - '[[ "$(docker images -q {{.DOCKERHUB_PROFILE}}/{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}{{.SLUG}}{{end}}:latest 2>/dev/null)" == "" ]]' @@ -40,7 +40,7 @@ tasks: successfully validated by `container-structure-test`' cmds: - container-structure-test test --image {{.DOCKERHUB_PROFILE}}/{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}{{.SLUG}}{{end}}:slim - --config Docker{{if .CLI_ARGS}}-{{.CLI_ARGS}}{{end}}.test.yml + --config Docker{{if .CLI_ARGS}}.{{.CLI_ARGS}}{{end}}.test.yml status: - '[[ "$(docker images -q {{.DOCKERHUB_PROFILE}}/{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}{{.SLUG}}{{end}}:slim 2> /dev/null)" == "" ]]' diff --git a/.config/taskfiles/fix/Taskfile.yml b/.config/taskfiles/fix/Taskfile.yml index c58ea33f..a8f23357 100644 --- a/.config/taskfiles/fix/Taskfile.yml +++ b/.config/taskfiles/fix/Taskfile.yml @@ -23,10 +23,10 @@ tasks: deps: - :install:modules:local - :install:npm:eslint - desc: Fix JavaScript/TypeScript errors automatically - hide: '{{not (has .REPOSITORY_TYPE (list "angular" "npm"))}}' + - :install:software:expect + desc: Fix ESLint errors automatically summary: | - # Fix JavaScript/TypeScript Errors with ESLint + # Fix Errors with ESLint Automatically This task is an [`eslint`](https://eslint.org/) task. It will attempt to automatically fix `eslint` issues. It will report any issues it was unable to fix. The configuration found in @@ -35,15 +35,46 @@ tasks: **Example using `eslint` to fix a single JS/TS file:** `task fix:js -- single.ts` - **Example fixing all JS/TS files in a project:** + **Example fixing all files in a project:** `task fix:js` log: error: ESLint found some issues that need to be fixed manually start: Auto-fixing with ESLint success: ESLint fixing appears to have corrected all the issues {{if .CLI_ARGS}}in `{{.CLI_ARGS}}`{{else}}in the project{{end}} cmds: - - '{{.NPX_HANDLE}}eslint -c package.json --no-eslintrc --format pretty --cache --cache-location .cache/eslintcache - --fix {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}}' + - 'unbuffer {{.NPX_HANDLE}}eslint -c package.json --no-eslintrc --format {{.ESLINT_FORMATTER}} --cache --cache-location .cache/eslintcache + --fix {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} | tee eslint.log' + - | + if [ '{{.ESLINT_FIX_RECURSIVE}}' == 'true' ]; then + COUNT=0 + while [ $COUNT -le 5 ]; do + COUNT=$((COUNT + 1)) + if grep 'potentially fixable with the `--fix` option' < eslint.log > /dev/null; then + COUNT="$COUNT" + unbuffer {{.NPX_HANDLE}}eslint -c package.json --no-eslintrc --format {{.ESLINT_FORMATTER}} --cache --cache-location .cache/eslintcache \ + --fix {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} | tee eslint.log + else + echo '' > eslint.log + fi + done + fi + - rm eslint.log + + eslint:staged: + deps: + - :install:modules:local + - :install:npm:eslint + desc: Auto-fix only modified files with ESLint + env: + ESLINT_STAGED_ONLY: on + log: + error: Failed to auto-fix modified files with ESLint + start: Auto-fixing modified files with ESLint + success: Successfully auto-fixed modified files with ESLint + cmds: + - > + {{.NPX_HANDLE}}eslint -c package.json --no-eslintrc --format {{.ESLINT_FORMATTER}} --cache + --cache-location .cache/eslintcache --fix {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} go: desc: Fix Go with all available Go fixers @@ -109,6 +140,38 @@ tasks: - '{{.NPX_HANDLE}}eslint -c package.json --no-eslintrc --cache --cache-location .cache/eslintcache --fix --format pretty --ext .json {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}}' + markdown: + deps: + - :install:npm:markdown-table-formatter + desc: Auto-fixes markdown files + summary: | + # Auto-Fix Markdown Files + + This task performs various tasks that cleanup markdown files. It currently: + + 1. Runs `markdown-table-formatter` which fixes up markdown tables + + You can either pass a file as a CLI argument or run it without a CLI argument to + auto-fix all the markdown files in the project that are not ignored by .gitignore. + + **Example running against whole project:** + `task fix:markdown` + + **Example running on single file:** + `task fix:markdown -- README.md` + log: + error: Error encountered while auto-fixing markdown file(s) + start: Auto-fixing markdown file(s) + success: Successfully finished auto-fixing markdown file(s) + cmds: + - > + {{if .CLI_ARGS}} + markdown-table-formatter {{.CLI_ARGS}} + {{else}} + find . -type d \( {{.IGNORE_FOLDERS}} \) -prune -o -type f \( -name '*.md' \) + -print0 | xargs -0 -r -n1 markdown-table-formatter + {{end}} + misc: deps: - :install:python:requirements @@ -226,7 +289,12 @@ tasks: log: start: Running Prettier on {{if .CLI_ARGS}}`{{.CLI_ARGS}}`{{else}}project{{end}} cmds: - - '{{.NPX_HANDLE}}prettier --ignore-path {{.PRETTIERIGNORE_CONFIG}} --write {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}}' + - | + {{.NPX_HANDLE}}prettier --ignore-path {{.PRETTIERIGNORE_CONFIG}} --write {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + .config/log warn 'Failed to run `{{.NPX_HANDLE}}prettier` - falling back to `prettier`' + prettier --ignore-path {{.PRETTIERIGNORE_CONFIG}} --write {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} + fi python: deps: @@ -305,6 +373,52 @@ tasks: -print0 | xargs -0 {{.NPX_HANDLE}}shellcheck -e {{.SHELLCHECK_EXCLUDE}} -f diff | git apply {{end}} + spelling:markdown: + deps: + - :install:go:misspell + desc: Auto-fix spelling errors in markdown files using `misspell` + log: + error: Encountered error while attempting to auto-correct spelling mistakes with `misspell` + start: Auto-fixing using the `misspell` spell-check engine + success: Successfully auto-fixed files using `misspell` + cmds: + - > + {{if .CLI_ARGS}} + misspell -w {{.CLI_ARGS}} + {{else}} + find . -type d \( {{.IGNORE_FOLDERS}} \) -prune -o -type f \( -name '*.md' \) + -print0 | xargs -0 -r -n1 misspell -w + {{end}} + + toml: + deps: + - :install:python:requirements + desc: Format `.toml` files by alphabetizing and flattening + summary: | + # Automatically format `.toml` files + + [toml-sort](https://pypi.org/project/toml-sort/) will automatically alphabetize and flatten + `.toml` files. + + **Example running on whole project:** + `task fix:toml` + + **Example usage on specific file:** + `task fix:toml -- pyproject.toml` + log: + error: Encountered an error while running `toml-sort` + start: Running `toml-sort` auto-fixer + success: Successfully ran the `toml-sort` auto-fixer + cmds: + - | + {{if .CLI_ARGS}} + {{.PYTHON_HANDLE}}toml-sort -i --all {{.CLI_ARGS}} + {{else}} + while read PATHH; do + {{.PYTHON_HANDLE}}toml-sort -i --all "$PATHH" + done < <(find . -type d \( {{.IGNORE_FOLDERS}} \) -prune -o -type f \( -name '*.toml' \)) + {{end}} + xml: deps: - :install:npm:eslint diff --git a/.config/taskfiles/git/Taskfile-gitlab.yml b/.config/taskfiles/git/Taskfile-gitlab.yml index 5fdb512c..963d8fbf 100644 --- a/.config/taskfiles/git/Taskfile-gitlab.yml +++ b/.config/taskfiles/git/Taskfile-gitlab.yml @@ -66,6 +66,23 @@ tasks: glab api projects/:fullpath/protected_branches -X POST -f name=test/windows \ -f code_owner_approval_required=true -f allow_force_push=true &> /dev/null & fi + if [[ '{{.REPOSITORY_TYPE}}' == 'packer' ]]; then + glab api projects/:fullpath/repository/branches -X POST -f id={{.REPO_ID}} -f branch=hyperv -f ref=master &> /dev/null & + glab api projects/:fullpath/protected_branches -X POST -f name=hyperv \ + -f code_owner_approval_required=true -f allow_force_push=true &> /dev/null & + glab api projects/:fullpath/repository/branches -X POST -f id={{.REPO_ID}} -f branch=kvm -f ref=master &> /dev/null & + glab api projects/:fullpath/protected_branches -X POST -f name=kvm \ + -f code_owner_approval_required=true -f allow_force_push=true &> /dev/null & + glab api projects/:fullpath/repository/branches -X POST -f id={{.REPO_ID}} -f branch=parallels -f ref=master &> /dev/null & + glab api projects/:fullpath/protected_branches -X POST -f name=parallels \ + -f code_owner_approval_required=true -f allow_force_push=true &> /dev/null & + glab api projects/:fullpath/repository/branches -X POST -f id={{.REPO_ID}} -f branch=virtualbox -f ref=master &> /dev/null & + glab api projects/:fullpath/protected_branches -X POST -f name=virtualbox \ + -f code_owner_approval_required=true -f allow_force_push=true &> /dev/null & + glab api projects/:fullpath/repository/branches -X POST -f id={{.REPO_ID}} -f branch=vmware -f ref=master &> /dev/null & + glab api projects/:fullpath/protected_branches -X POST -f name=vmware \ + -f code_owner_approval_required=true -f allow_force_push=true &> /dev/null & + fi wait create: @@ -97,7 +114,7 @@ tasks: --description '{{.EMOJI_START}}{{.DESCRIPTION}}{{.EMOJI_END}}' --name '{{.NAME}}' \ {{.PROJECT_TYPE}} --tag "$(jq -r '.keywords | tostring' package.json | sed 's/\[//' | sed 's/\]//')" git add --all - git commit --quiet -m "🎂 Birth" -n || true + HUSKY=0 git commit --quiet -m "🎂 Birth" -n || true git push --quiet -u --no-progress gitlab master ignore_error: true status: diff --git a/.config/taskfiles/install/Taskfile-github.yml b/.config/taskfiles/install/Taskfile-github.yml index 46c0bde5..2343724f 100644 --- a/.config/taskfiles/install/Taskfile-github.yml +++ b/.config/taskfiles/install/Taskfile-github.yml @@ -5,6 +5,8 @@ tasks: bundle: deps: - docker-pushrm + - fusion + - sentry docker-pushrm: run: once @@ -23,15 +25,38 @@ tasks: type -f /usr/lib/docker/cli-plugins/docker-pushrm || type -f /usr/libexec/docker/cli-plugins/docker-pushrm + fusion: + run: once + cmds: + - task: install + vars: + BIN: fusion + GITHUB: github.com/edgelaboratories/fusion + status: + - type fusion > /dev/null + install: deps: - - :install:go:bin + - :install:software:jq run: when_changed log: error: Failed to acquire GitHub release from `{{.GITHUB}}` start: Acquiring GitHub binary release from `{{.GITHUB}}` success: Installed GitHub release from `{{.GITHUB}}`, available as `{{.BIN}}` cmds: - - bin install {{.GITHUB}} "$GOPATH/bin/{{.BIN}}" + - task: :install:go:bin + - mkdir -p "$HOME/.config/bin" + - jq '. | .default_path = "./.bin" | .bins = {}' <<< $(echo '{}') > "$HOME/.config/bin/config.json" + - bin install -f {{.GITHUB}} "$GOPATH/bin/{{.BIN}}" + status: + - type {{.BIN}} > /dev/null || [ -n "$NO_INSTALL_HOMEBREW" ] + + sentry: + run: once + cmds: + - task: install + vars: + BIN: sentry-cli + GITHUB: github.com/getsentry/sentry-cli status: - - type {{.BIN}} > /dev/null + - type sentry-cli > /dev/null diff --git a/.config/taskfiles/install/Taskfile-go.yml b/.config/taskfiles/install/Taskfile-go.yml index 8c80ee6a..bb5c93cf 100644 --- a/.config/taskfiles/install/Taskfile-go.yml +++ b/.config/taskfiles/install/Taskfile-go.yml @@ -73,6 +73,14 @@ tasks: status: - type {{.BIN}} > /dev/null + misspell: + run: once + cmds: + - task: install + vars: + BIN: misspell + PACKAGE: github.com/client9/misspell/cmd/misspell@latest + nfpm: run: once cmds: diff --git a/.config/taskfiles/install/Taskfile-npm.yml b/.config/taskfiles/install/Taskfile-npm.yml index 25d92e52..4110b644 100644 --- a/.config/taskfiles/install/Taskfile-npm.yml +++ b/.config/taskfiles/install/Taskfile-npm.yml @@ -65,6 +65,13 @@ tasks: vars: NPM_PACKAGE: depcheck + dockerfilelint: + run: once + cmds: + - task: global + vars: + NPM_PACKAGE: dockerfilelint + esbuild: run: once cmds: @@ -210,6 +217,13 @@ tasks: vars: NPM_PACKAGE: markdown-link-check + markdown-table-formatter: + run: once + cmds: + - task: global + vars: + NPM_PACKAGE: markdown-table-formatter + ndb: run: once cmds: diff --git a/.config/taskfiles/install/Taskfile-python.yml b/.config/taskfiles/install/Taskfile-python.yml index dfa7a224..c39ae87a 100644 --- a/.config/taskfiles/install/Taskfile-python.yml +++ b/.config/taskfiles/install/Taskfile-python.yml @@ -66,7 +66,10 @@ tasks: - poetry config virtualenvs.in-project true - | if [ -n "$PYPI_TOKEN" ]; then - poetry config pypi-token.pypi "$PYPI_TOKEN" + 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 @@ -74,14 +77,23 @@ tasks: fi - | if [ -n "$GITLAB_CI" ]; then - poetry config http-basic.gitlab gitlab-ci-token "${CI_JOB_TOKEN}" + 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 - - .config/log info "Installing/updating poetry install options -> {{.INSTALL_OPTIONS}}" - | 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 - poetry install{{if .INSTALL_OPTIONS}} {{.INSTALL_OPTIONS}}{{end}} + .config/log info 'Installing Poetry dependencies{{if .INSTALL_OPTIONS}} with options `{{.INSTALL_OPTIONS}}`{{end}}' + 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 diff --git a/.config/taskfiles/install/Taskfile-software.yml b/.config/taskfiles/install/Taskfile-software.yml index 5bdcce86..6a808ac8 100644 --- a/.config/taskfiles/install/Taskfile-software.yml +++ b/.config/taskfiles/install/Taskfile-software.yml @@ -26,6 +26,15 @@ tasks: status: - type allure > /dev/null + ansifilter: + run: once + cmds: + - task: brew:formulae + vars: + FORMULAE: ansifilter + status: + - type ansifilter > /dev/null + brew: run: once log: @@ -36,7 +45,7 @@ tasks: - task: common - task: brew:{{OS}} status: - - type brew > /dev/null + - type brew > /dev/null || [ -n "$NO_INSTALL_HOMEBREW" ] brew:cask: run: when_changed @@ -54,7 +63,7 @@ tasks: cmds: - | if ! type brew &> /dev/null; then - if sudo -n bash; then + if type sudo &> /dev/null && sudo -n true; then echo | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" else /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" @@ -77,7 +86,7 @@ tasks: - task: brew - brew install {{.FORMULAE}} status: - - type {{.FORMULAE}} &> /dev/null + - type {{.FORMULAE}} &> /dev/null || [ -n "$NO_INSTALL_HOMEBREW" ] brew:linux: run: once @@ -89,7 +98,7 @@ tasks: fi } if ! type brew &> /dev/null; then - if sudo -n bash; then + if type sudo &> /dev/null && sudo -n bash; then echo | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" else /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" @@ -384,6 +393,15 @@ tasks: - .config/log info 'Please reboot the system and re-run the same command after rebooting' - exit 1 + expect: + run: once + cmds: + - task: brew:formulae + vars: + FORMULAE: expect + status: + - type expect > /dev/null + gcloud: run: once cmds: @@ -516,6 +534,16 @@ tasks: status: - type jq > /dev/null + kvm: + run: once + cmds: + - task: :install:install-doctor + vars: + SOFTWARE: kvm + - task: exit:notice:restart + status: + - type qemu-system-x86_64 > /dev/null + node: run: once cmds: @@ -525,6 +553,22 @@ tasks: status: - type node > /dev/null + packer: + run: once + cmds: + - task: brew:formulae + vars: + FORMULAE: packer + + parallels: + run: once + cmds: + - task: brew:cask + vars: + CASK: parallels + status: + - '[ "{{OS}}" != "darwin" ] || ! mdfind -name "Parallels Desktop.app" &> /dev/null' + pipx: run: once log: @@ -633,13 +677,8 @@ tasks: - type rust &> /dev/null sentry: - run: once cmds: - - task: brew:formulae - vars: - FORMULAE: getsentry/tools/sentry-cli - status: - - type sentry-cli > /dev/null + - task: :install:github:sentry snapcraft: run: once diff --git a/.config/taskfiles/install/Taskfile.yml b/.config/taskfiles/install/Taskfile.yml index 4d9c6dd4..6625251c 100644 --- a/.config/taskfiles/install/Taskfile.yml +++ b/.config/taskfiles/install/Taskfile.yml @@ -12,8 +12,12 @@ tasks: cmds: - brew tap Homebrew/bundle - mkdir -p local - - cp .config/Brewfile local/Brewfile - - brew bundle install --file local/Brewfile + - cp .config/Brewfile local/Brewfile.common + - brew bundle install --file local/Brewfile.common + - | + if [ -f local/Brewfile ]; then + brew bundle install --file local/Brewfile + fi install-doctor: log: @@ -57,6 +61,15 @@ tasks: - :install:npm:cz-emoji - :install:software:jq env: + DEPS: + sh: jq -r -S '.dependencies + .devDependencies + .optionalDependencies + .peerDependencies' package.json + PREVIOUS_DEPS: + sh: | + if [ -f .task/npm-deps ]; then + cat .task/npm-deps + else + echo "" + fi SEMANTIC_PYTHON_POST_INSTALL: '{{if eq .SEMANTIC_RELEASE "true"}}true{{else}}false{{end}}' run: once log: @@ -65,19 +78,19 @@ tasks: success: Successfully installed local NPM dependencies cmds: - | - if [ -n "$AUTO_UPDATE_NPM_PACKAGES" ]; then - {{.NPM_PROGRAM_LOCAL}} update - else - {{.NPM_PROGRAM_LOCAL}} install || EXIT_CODE=$? - if [ -n "$EXIT_CODE" ]; then - .config/log info 'Running `{{.NPM_PROGRAM_LOCAL}} update` because install had non-zero exit code '"(Code $EXIT_CODE)" + if [ "$DEPS" != "$PREVIOUS_DEPS" ] || [ ! -d node_modules ]; then + if [ -n "$AUTO_UPDATE_NPM_PACKAGES" ]; then {{.NPM_PROGRAM_LOCAL}} update + else + {{.NPM_PROGRAM_LOCAL}} install || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + .config/log info 'Running `{{.NPM_PROGRAM_LOCAL}} update` because install had non-zero exit code '"(Code $EXIT_CODE)" + {{.NPM_PROGRAM_LOCAL}} update + fi fi fi - - | - if [ "$(jq -r '.devDependencies.glob' package.json)" == 'null' ] && [ "$(jq -r '.dependencies.glob' package.json)" == 'null' ]; then - pnpm install --save-dev glob - fi + mkdir -p .task + echo "$DEPS" > .task/npm-deps sources: - package.json diff --git a/.config/taskfiles/lint/Taskfile.yml b/.config/taskfiles/lint/Taskfile.yml index 328dc003..87b7b5b6 100644 --- a/.config/taskfiles/lint/Taskfile.yml +++ b/.config/taskfiles/lint/Taskfile.yml @@ -166,7 +166,6 @@ tasks: success: Hadolint reported no errors cmds: - | - .config/log info 'Linting {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}all Dockerfiles{{end}} with a Hadolint Docker image' {{if .CLI_ARGS}} docker run -v "$PWD:/work" -w /work megabytelabs/hadolint:slim {{.CLI_ARGS | replace .PWD ""}} {{else}} @@ -179,6 +178,25 @@ tasks: cmds: - task: docker + dockerfilelint: + deps: + - :install:npm:dockerfilelint + desc: Lint a Dockerfile with `dockerfilelint` + hide: + sh: '[ ! -f Dockerfile ]' + log: + error: '`dockerfilelint` reported errors' + start: Linting {{if .CLI_ARGS}}`{{.CLI_ARGS}}`{{else}}the project{{end}} with `dockerfilelint` + success: '`dockerfilelint` ran successfully and reported no errors' + cmds: + - | + {{if .CLI_ARGS}} + dockerfilelint {{.CLI_ARGS | replace .PWD ""}} + {{else}} + find . -type d \( {{.IGNORE_FOLDERS}} \) -prune -o -type f \( -name Dockerfile -o \ + -name Dockerfile.j2 \) -print0 | xargs -0 -r -n1 dockerfilelint + {{end}} + eslint: deps: - :install:modules:local @@ -208,6 +226,22 @@ tasks: {{.NPX_HANDLE}}eslint -c package.json --no-eslintrc --format {{.ESLINT_FORMATTER}} --cache --cache-location .cache/eslintcache {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} + eslint:staged: + deps: + - :install:modules:local + - :install:npm:eslint + desc: Lint only modified files with ESLint + env: + ESLINT_STAGED_ONLY: on + log: + error: Failed to lint modified files with ESLint + start: Linting modified files with ESLint + success: Successfully linted modified files with ESLint + cmds: + - > + {{.NPX_HANDLE}}eslint -c package.json --no-eslintrc --format {{.ESLINT_FORMATTER}} --cache + --cache-location .cache/eslintcache {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} + eslint:warn-all: deps: - :install:modules:local @@ -388,7 +422,12 @@ tasks: start: Linting {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}the project{{end}} with Prettier success: Prettier successfully finished cmds: - - '{{.NPX_HANDLE}}prettier --ignore-path {{.PRETTIERIGNORE_CONFIG}} --list-different {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}}' + - | + {{.NPX_HANDLE}}prettier --ignore-path {{.PRETTIERIGNORE_CONFIG}} --list-different {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + .config/log warn 'Failed to lint with `{{.NPX_HANDLE}}prettier` - falling back to `prettier`' + prettier --ignore-path {{.PRETTIERIGNORE_CONFIG}} --list-different {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.{{end}} + fi python: deps: @@ -508,6 +547,24 @@ tasks: fi ignore_errors: true + spelling:markdown: + deps: + - :install:go:misspell + desc: Run `misspell` (a spell-checker) on all markdown files + log: + error: Encountered errors while running `misspell` + start: Running `misspell` spell-check + success: Successfully ran `misspell` with no errors reported + cmds: + - > + .config/log info 'If errors are found, you can auto-fix them by running `task fix:spelling:markdown`' + {{if .CLI_ARGS}} + misspell {{.CLI_ARGS}} + {{else}} + find . -type d \( {{.IGNORE_FOLDERS}} \) -prune -o -type f \( -name '*.md' \) + -print0 | xargs -0 -r -n1 misspell + {{end}} + spelling:staged: deps: - :install:npm:cspell diff --git a/.config/taskfiles/packer/Taskfile-build.yml b/.config/taskfiles/packer/Taskfile-build.yml index 16e6963c..57f4b3a0 100644 --- a/.config/taskfiles/packer/Taskfile-build.yml +++ b/.config/taskfiles/packer/Taskfile-build.yml @@ -2,45 +2,6 @@ version: '3' tasks: - all: - deps: - - :install:software:kvm - - :install:software:packer - - :install:software:parallels - - :install:software:virtualbox - - :install:software:vmware - desc: Build Packer images for all platforms (default setting uses `template.json`) - summary: | - # Build Packer images for all virtualization platforms - - This task begins by removing cached files that may interfere with the Packer build - process. It then runs `packer build template.json` if no arguments are passed. This - command will build Packer images for all the virtualization platforms specified in - the template file. The template file may include instructions for the following - virtualization platforms (and it is possible that it includes other ones that are - not listed below): - - * Hyper-V - * KVM - * Parallels - * VMWare - * VirtualBox - - If you would like to build machine images with another template then you can pass the - template's file name as a parameter (see example below). - - **Example building on all platforms:** - `task build:all` - - **Example using a template file named `another_template.json`:** - `task build:all -- another_template.json` - log: - error: Packer reported an error while running `packer build {{.TEMPLATE_FILE}}` - start: Running `packer build {{.TEMPLATE_FILE}}` - success: Packer finished building - cmds: - - packer build {{.TEMPLATE_FILE}} - kvm: deps: - :install:software:kvm @@ -61,11 +22,15 @@ tasks: **Example using a template file named `another_template.json`:** `task build:kvm -- another_template.json` + hide: + sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' log: error: Error running `packer build -only=qemu {{.TEMPLATE_FILE}}` start: Running `packer build -only=qemu {{.TEMPLATE_FILE}}` success: Successfully ran `packer build -only=qemu {{.TEMPLATE_FILE}}` cmds: + - task: :packer:prepare:template + - rm -rf build - packer build -only=qemu {{.TEMPLATE_FILE}} parallels: @@ -87,11 +52,14 @@ tasks: **Example using a template file named `another_template.json`:** `task build:parallels -- another_template.json` + hide: + sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' log: error: Error running `packer build -only=parallels-iso {{.TEMPLATE_FILE}}` start: Running `packer build -only=parallels-iso {{.TEMPLATE_FILE}}` success: Successfully ran `packer build -only=parallels-iso {{.TEMPLATE_FILE}}` cmds: + - rm -rf build - packer build -only=parallels-iso {{.TEMPLATE_FILE}} virtualbox: @@ -113,11 +81,15 @@ tasks: **Example using a template file named `another_template.json`:** `task build:virtualbox -- another_template.json` + hide: + sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' log: error: Error running `packer build -only=virtualbox-iso {{.TEMPLATE_FILE}}` start: Running `packer build -only=virtualbox-iso {{.TEMPLATE_FILE}}` success: Successfully ran `packer build -only=virtualbox-iso {{.TEMPLATE_FILE}}` cmds: + - task: :app:virtualbox:clear + - rm -rf build - packer build -only=virtualbox-iso {{.TEMPLATE_FILE}} vmware: @@ -144,5 +116,8 @@ tasks: error: Error running `packer build -only=vmware-iso {{.TEMPLATE_FILE}}` start: Running `packer build -only=vmware-iso {{.TEMPLATE_FILE}}` success: Successfully ran `packer build -only=vmware-iso {{.TEMPLATE_FILE}}` + hide: + sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' cmds: + - rm -rf build - packer build -only=vmware-iso {{.TEMPLATE_FILE}} diff --git a/.config/taskfiles/packer/Taskfile-update.yml b/.config/taskfiles/packer/Taskfile-update.yml index 84f8cfcd..94512242 100644 --- a/.config/taskfiles/packer/Taskfile-update.yml +++ b/.config/taskfiles/packer/Taskfile-update.yml @@ -2,7 +2,7 @@ version: '3' vars: - TEMPLATE_FILE: default.template.json + TEMPLATE_FILE: '{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}template.json{{end}}' tasks: descriptions: @@ -17,9 +17,9 @@ tasks: DESCRIPTION_TEMPLATE="$(jq -r '.description_template' '{{.VARIABLES_PATH}}')" VERSION_DESCRIPTION="$(jq -r '.version_description' '{{.VARIABLES_PATH}}')" TMP="$(mktemp)" - jq --arg a "$DESCRIPTION_TEMPLATE" --arg b "$VERSION_DESCRIPTION" '.variables.description = $a - | .variables.version_description = $b' {{.TEMPLATE_FILE}} > "$TMP" - - mv "$TMP" {{.TEMPLATE_FILE}} + jq --arg a "$DESCRIPTION_TEMPLATE" --arg b "$VERSION_DESCRIPTION" \ + '.variables.description = $a | .variables.version_description = $b' {{.TEMPLATE_FILE}} > "$TMP" + mv "$TMP" {{.TEMPLATE_FILE}} sources: - '{{.TEMPLATE_FILE}}' - '{{.VARIABLES_PATH}}' @@ -51,9 +51,11 @@ tasks: start: Determining whether to update README.md for `{{.TYPE}}` cmds: - task: readme:platform:{{OS}} + vars: + TYPE: '{{.TYPE}}' status: - | - ! grep -q '"type": "{{.TYPE}}"' {{.TEMPLATE_FILE}} + grep -q '"type": "{{.TYPE}}"' {{.TEMPLATE_FILE}} readme:platform:darwin: log: @@ -92,6 +94,10 @@ tasks: jq -S --arg templatejson "$TEMPLATE_JSON" '.template_json = ($templatejson | fromjson)' '{{.VARIABLES_PATH}}' > "$TMP" mv "$TMP" '{{.VARIABLES_PATH}}' - task: variables:{{OS}} + vars: + ISO_VERSION: '{{.ISO_VERSION}}' + MAJOR_VERSION: '{{.MAJOR_VERSION}}' + MINOR_VERSION: '{{.MINOR_VERSION}}' sources: - '{{.TEMPLATE_FILE}}' - '{{.VARIABLES_PATH}}' diff --git a/.config/taskfiles/packer/Taskfile.yml b/.config/taskfiles/packer/Taskfile.yml index 2664d44e..09fae0da 100644 --- a/.config/taskfiles/packer/Taskfile.yml +++ b/.config/taskfiles/packer/Taskfile.yml @@ -2,11 +2,82 @@ version: '3' vars: - TEMPLATE_FILE: - sh: if [ ! -z "{{.CLI_ARGS}}" ]; then echo "{{.CLI_ARGS}}"; else echo "default.packer.json"; fi + TEMPLATE_FILE: '{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}template.json{{end}}' VARIABLES_PATH: .variables.json tasks: + build: + deps: + - :install:software:packer + desc: Build Packer images for all available platforms + summary: | + # Build Packer images for all available virtualization platforms + + This task begins by removing cached files that may interfere with the Packer build + process. It then runs `packer build template.json` if no arguments are passed. This + command will build Packer images for all the virtualization platforms specified in + the template file. The template file may include instructions for the following + virtualization platforms (and it is possible that it includes other ones that are + not listed below): + + * Hyper-V + * KVM + * Parallels + * VMWare + * VirtualBox + + If you would like to build machine images with another template then you can pass the + template's file name as a parameter (see example below). + + **Example building on all available platforms:** + `task packer:build` + + **Example using a template file named `another_template.json`:** + `task packer:build -- another_template.json` + hide: + sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' + log: + error: Encountered error while running `packer build` + start: Running `packer build` for all supported platforms that are installed + success: Successfully built the Packer images + cmds: + - task: prepare:template + - rm -rf build + - | + IMAGES="," + if type qemu-system-x86_64 &> /dev/null; then + .config/log info 'QEMU is available' + IMAGES="${IMAGES},qemu" + fi + if [ '{{OS}}' == 'darwin' ] && mdfind -name 'Parallels Desktop.app' &> /dev/null; then + .config/log info 'Parallels is installed' + IMAGES="${IMAGES},parallels-iso" + fi + if type vboxmanage &> /dev/null; then + .config/log info 'VirtualBox is installed' + task app:virtualbox:clear + IMAGES="${IMAGES},virtualbox-iso" + fi + if [ '{{OS}}' == 'linux' ] && type vmware &> /dev/null; then + .config/log info 'VMWare Workstation is installed' + IMAGES="${IMAGES},vmware-iso" + fi + if [ '{{OS}}' == 'darwin' ] && type vmrun &> /dev/null; then + .config/log info 'VMWare Fusion is installed' + IMAGES="${IMAGES},vmware-iso" + fi + packer build -only=$(echo $IMAGES | sed 's/^.//') {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}template.json{{end}} + + install:platforms: + desc: Install all available virtualization providers + hide: + sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' + cmds: + - task: :install:software:kvm + - task: :install:software:parallels + - task: :install:software:virtualbox + - task: :install:software:vmware + latestos: deps: - :install:python:requirements @@ -14,6 +85,8 @@ tasks: vars: TAG: sh: jq -r '.variables.latestos_tag' {{.TEMPLATE_FILE}} + hide: + sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' log: error: Error running `{{.PYTHON_HANDLE}}latestos {{.TAG}}` start: Running `{{.PYTHON_HANDLE}}latestos {{.TAG}}` @@ -25,3 +98,22 @@ tasks: preconditions: - sh: test -f {{.TEMPLATE_FILE}} msg: The `{{.TEMPLATE_FILE}}` file is missing from the root of this project. + + prepare:template: + deps: + - :install:software:jq + log: + error: Error preparing Packer template + start: Preparing Packer template + success: Successfully prepared Packer template + cmds: + - | + TMP="$(mktemp)" + if [ '{{OS}}' == 'linux' ]; then + jq '.variables.accelerator = "kvm"' {{.TEMPLATE_FILE}} > "$TMP" + elif [ '{{OS}}' == 'darwin' ]; then + jq '.variables.accelerator = "hvf"' {{.TEMPLATE_FILE}} > "$TMP" + else + .config/log warn 'Windows not yet tested' + fi + mv "$TMP" {{.TEMPLATE_FILE}} diff --git a/.config/taskfiles/publish/Taskfile.yml b/.config/taskfiles/publish/Taskfile.yml index 6beea98e..9c8da87e 100644 --- a/.config/taskfiles/publish/Taskfile.yml +++ b/.config/taskfiles/publish/Taskfile.yml @@ -43,40 +43,16 @@ tasks: - :install:npm:semantic-release - :install:software:git - :install:software:poetry - summary: | - # Run Semantic Release - - Runs `semantic-release` using the `semantic-release-config` package. The package - includes release instructions for: - - 1. Python packages - 2. NPM packages - 3. Dockerfile projects - 4. Go projects - 5. Ansible roles - - It does its best to ship projects out in as many formats (that make sense) as possible. - For instance, an NPM CLI gets published as: - - 1. NPM package - 2. Binaries (including deb and rpm) available on GitHub/GitLab releases - 3. Brew formulae - 4. Snapcraft - 5. Probably more implemented after writing this - - ## Python Package Notes - - If `setup.cfg` is present, then the project is assumed to be a legacy Python - project that needs to run in environment with access to the `python-semantic` - extras defined in `pyproject.toml`. vars: RELEASE_PREFIX: sh: if [ -f setup.cfg ]; then echo 'poetry run '; else echo ''; fi + RUN_OPTIONS: '{{if .CLI_ARGS}} {{.CLI_ARGS}}{{else}} --ci false --debug --dry-run false{{end}}' log: error: Error while running `semantic-release` start: Releasing with `semantic-release`.. success: Finished running `semantic-release` cmds: + - rm -rf build dist - task: :install:modules:local:sync vars: NPM_KEEP_UPDATED: '{{.SEMANTIC_CONFIG}}' @@ -87,8 +63,11 @@ tasks: poetry install -E semantic fi - | - export GIT_CREDENTIALS="gitlab-ci-token:$CI_BUILD_TOKEN" - {{.RELEASE_PREFIX}}semantic-release -r "$(git remote get-url origin)"{{if .CLI_ARGS}} {{.CLI_ARGS}}{{end}} + if [ -n "$CI" ]; then + export GIT_CREDENTIALS="gitlab-ci-token:$CI_BUILD_TOKEN" + fi + unset + {{.RELEASE_PREFIX}}semantic-release -r "$(git remote get-url origin)"{{.RUN_OPTIONS}} version:tag: deps: diff --git a/.config/taskfiles/security/Taskfile.yml b/.config/taskfiles/security/Taskfile.yml index 6ac33f45..01e17a8c 100644 --- a/.config/taskfiles/security/Taskfile.yml +++ b/.config/taskfiles/security/Taskfile.yml @@ -15,8 +15,14 @@ tasks: start: Running `bandit -r run.py` success: No security issues found with `bandit`! cmds: - - poetry run bandit -r run.py - - poetry run bandit -r src + - | + if [ -f run.py ]; then + poetry run bandit -r run.py + fi + - | + if [ -d src ]; then + poetry run bandit -r src + fi dockle: deps: diff --git a/.config/taskfiles/symlink/Taskfile.yml b/.config/taskfiles/symlink/Taskfile.yml index 5cb02211..572dd8de 100644 --- a/.config/taskfiles/symlink/Taskfile.yml +++ b/.config/taskfiles/symlink/Taskfile.yml @@ -34,7 +34,6 @@ tasks: msg: The roles folder is missing. Is the project set up right? role: - # @desc_when [symlink/Taskfile.yml] ansible/role desc: Symlink the current role to ~/.ansible/roles/{{.ROLE_NAME}} summary: | # Symlink this role to `~/.ansible/roles/{{.ROLE_NAME}}` diff --git a/.config/taskfiles/upstream/Taskfile.yml b/.config/taskfiles/upstream/Taskfile.yml index 846fe658..4864ebcd 100644 --- a/.config/taskfiles/upstream/Taskfile.yml +++ b/.config/taskfiles/upstream/Taskfile.yml @@ -155,6 +155,7 @@ tasks: function handlebars() { FILE="$1" TMP="$(mktemp)" + .config/log info 'Generating `'"${FILE//.liquid}"'` from `'"$FILE"'`' {{.NPX_HANDLE}}hbs --data .variables.json --helper ./.config/hbs.cjs "$FILE" --stdout > "$TMP" mv "$TMP" "${FILE//.liquid}" rm "$FILE" @@ -185,6 +186,60 @@ tasks: package.json.bak package.json > "$TMP" - mv "$TMP" package.json - rm package.json.bak + - task: template:pyproject + + template:pyproject: + deps: + - :install:github:fusion + cmds: + - task: template:pyproject:config + - task: template:pyproject:local + - task: template:pyproject:fix + + template:pyproject:config: + log: + error: Encountered error while merging `.config/pyproject.partial.toml` into the regenerated `pyproject.toml` + start: Merging `.config/pyproject.partial.toml` into `pyproject.toml` + success: The `pyproject.toml` file was successfully generated from `.config/pyproject.partial.toml` + cmds: + - fusion toml pyproject.toml .config/pyproject.partial.toml -o pyproject.next.toml + - mv pyproject.next.toml pyproject.toml + status: + - '[ ! -f .config/pyproject.partial.toml ] || [ ! -f pyproject.toml ]' + + template:pyproject:fix: + cmds: + - task: :fix:toml + vars: + CLI_ARGS: pyproject.toml + - task: :fix:prettier + vars: + CLI_ARGS: pyproject.toml + status: + - '[ -n "$NO_INSTALL_HOMEBREW" ]' + + template:pyproject:local: + vars: + PYPROJECT_NOTICE: |- + ##### IMPORTANT DEVELOPER NOTICE ##### + # This `pyproject.toml` file is automatically generated. + # If you want to make changes that persist then you should + # add your changes to `./docs/pyproject.partial.toml`. + # Be sure to include the section's title with your custom + # entries. You can test the generation of this file by running + # `bash start.sh && task init`. + log: + error: Encountered error while merging `local/pyproject.partial.toml` into the regenerated `pyproject.toml` + start: Merging `local/pyproject.partial.toml` into `pyproject.toml` + success: The `pyproject.toml` file was successfully generated from `local/pyproject.partial.toml` + cmds: + - fusion toml pyproject.toml local/pyproject.partial.toml -o pyproject.next.toml + - mv pyproject.next.toml pyproject.toml + - echo '' >> pyproject.toml + - echo '{{.PYPROJECT_NOTICE}}' >> pyproject.toml + - echo '' >> pyproject.toml + status: + - '[ ! -f local/pyproject.partial.toml ] || [ ! -f pyproject.toml ]' variables: deps: @@ -216,3 +271,7 @@ tasks: if [ '{{.REPOSITORY_TYPE}}' == 'ansible' ] && [ -f meta/main.yml ]; then task ansible:update:variables:descriptions fi + - | + if [ '{{.REPOSITORY_TYPE}}' == 'packer' ]; then + task packer:update:variables + fi diff --git a/.config/taskfiles/vagrant/Taskfile.yml b/.config/taskfiles/vagrant/Taskfile.yml new file mode 100644 index 00000000..15d2fd65 --- /dev/null +++ b/.config/taskfiles/vagrant/Taskfile.yml @@ -0,0 +1,42 @@ +--- +version: '3' + +tasks: + up: + deps: + - :install:software:jq + - :install:software:vagrant + desc: Select which virtualization platform to run the image on using an interactive prompt + hide: + sh: '[ ! -f Vagrantfile ]' + prompt: + type: select + message: Which virtualization platform would you like to use to launch with `vagrant up`? + options: + - Parallels + - QEMU/KVM + - VirtualBox + - VMWare + answer: + cmds: + - | + if [ '{{.ANSWER}}' == 'Parallels' ]; then + if [ '{{OS}}' != 'darwin' ]; then + .config/log error '`Parallels` is only available on macOS!' && exit 50 + fi + .config/log info 'Ensuring `Parallels` is installed' + task install:software:parallels + vagrant up --provider=parallels + elif [ '{{.ANSWER}}' == 'QEMU/KVM' ]; then + .config/log info 'Ensuring `QEMU/KVM` are installed' + task install:software:kvm + vagrant up --provider=libvirt + elif [ '{{.ANSWER}}' == 'VirtualBox' ]; then + .config/log info 'Ensuring `VirtualBox` is installed' + task install:software:virtualbox + vagrant up --provider=virtualbox + elif [ '{{.ANSWER}}' == 'VMWare' ]; then + .config/log info 'Ensuring `VMWare` is installed' + task install:software:vmware + vagrant up --provider={{if eq OS "darwin"}}vmware_fusion{{else}}vmware_workstation{{end}} + fi diff --git a/.config/taskfiles/vscode/Taskfile.yml b/.config/taskfiles/vscode/Taskfile.yml index 1b2e0fcf..0192327b 100644 --- a/.config/taskfiles/vscode/Taskfile.yml +++ b/.config/taskfiles/vscode/Taskfile.yml @@ -34,8 +34,9 @@ tasks: TMP_JQ="$(mktemp)" jq -cRrs 'split("\n") | "{ \"recommendations\": \(.) }"' < "$TMP_YQ" > "$TMP_JQ" sed 's/,""//' < "$TMP_JQ" > '{{.EXTENSIONS_FILE}}' - - | - {{.NPX_HANDLE}}prettier --write '{{.EXTENSIONS_FILE}}' > /dev/null + - task: :fix:prettier + vars: + CLI_ARGS: '{{.EXTENSIONS_FILE}}' extensions:devcontainer: deps: @@ -55,8 +56,9 @@ tasks: TMP="$(mktemp)" jq --arg recommendations "$(jq '.recommendations' {{.EXTENSIONS_FILE}})" '.extensions = ($recommendations | fromjson)' {{.DEVCONTAINER_CONFIG}} > "$TMP" mv "$TMP" {{.DEVCONTAINER_CONFIG}} - - | - {{.NPX_HANDLE}}prettier --write '{{.DEVCONTAINER_CONFIG}}' > /dev/null + - task: :fix:prettier + vars: + CLI_ARGS: '{{.DEVCONTAINER_CONFIG}}' generate: deps: @@ -99,5 +101,6 @@ tasks: fi done <<< "$(task --list)" jq --arg tasks "${TASKS%?}]" '.tasks = ($tasks | fromjson)' "$TMP" > '{{.TASKS_FILE}}' - - | - {{.NPX_HANDLE}}prettier --write '{{.TASKS_FILE}}' > /dev/null + - task: :fix:prettier + vars: + CLI_ARGS: '{{.TASKS_FILE}}' diff --git a/.config/taskfiles/web/Taskfile-ionic.yml b/.config/taskfiles/web/Taskfile-ionic.yml index faff06af..7d1d5e83 100644 --- a/.config/taskfiles/web/Taskfile-ionic.yml +++ b/.config/taskfiles/web/Taskfile-ionic.yml @@ -2,6 +2,26 @@ version: '3' tasks: + build: + deps: + - :install:npm:ionic + log: + error: Error building Ionic project + start: Building Ionic project + success: Successfully built Ionic project + cmds: + - ionic build + + build:prod: + deps: + - :install:npm:ionic + log: + error: Error building Ionic production build + start: Building Ionic project in production mode + success: Successfully built Ionic project in production mode + cmds: + - ionic build --prod + config: deps: - :install:npm:ionic @@ -11,3 +31,24 @@ tasks: success: Configured Ionic cmds: - ionic config set -g npmClient {{.NPM_PROGRAM_LOCAL}} + + prepare: + deps: + - :install:npm:ionic + log: + error: Failed to prepare with Cordova via Ionic + start: Preparing Cordova targets via Ionic + success: Successfully prepared Ionic Cordova targets + cmds: + - ionic cordova prepare android + - ionic cordova prepare ios + + serve: + deps: + - :install:npm:ionic + log: + error: Failed to run `ionic serve` + start: Running `ionic serve` + success: Successfully finished running `ionic serve` + cmds: + - ionic serve diff --git a/.config/variables.json b/.config/variables.json index 0d6a5489..37c5ec87 100644 --- a/.config/variables.json +++ b/.config/variables.json @@ -402,8 +402,10 @@ "scriptsBuild": "task ansible:build:none", "scriptsHelp": "task --menu", "scriptsPrepare": "npm run start && (test -f Taskfile.yml && task common:husky) || true", + "scriptsReplaceThis": "\"", + "scriptsReplaceWith": "\\\"", "scriptsStart": "bash start.sh", - "scriptsTest": "[[ $- == *i* ]] && task ansible:test:prompt || task ansible:test:default", + "scriptsTest": "[ -z \"$PS1\" ] && task ansible:test:prompt || task ansible:test:default", "sharp_instructions": [], "slackNotificationChannel": "#misc", "slackNotificationIcon": "https://gitlab.com/megabyte-labs/misc/assets/-/raw/master/logo/megabytelabs-color-icon-350x350.png", diff --git a/.github/workflows/Windows.yml b/.github/workflows/Windows.yml index ede36545..fcedc5ad 100644 --- a/.github/workflows/Windows.yml +++ b/.github/workflows/Windows.yml @@ -21,7 +21,14 @@ jobs: - name: Setup WinRM. run: | - ./test/windows/test.ps1 + Write-Host "Changing $env:UserName password to 'AnsibleTest999'" + $NewPassword = ConvertTo-SecureString "AnsibleTest999" -AsPlainText -Force + Set-LocalUser -Name $env:UserName -Password $NewPassword + Write-Host "Setting up WinRM CredSSP" + $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1" + $file = "$env:temp\ConfigureRemotingForAnsible.ps1" + (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) + PowerShell.exe -ExecutionPolicy ByPass -File $file -Verbose -EnableCredSSP -DisableBasicAuth -ForceNewSSLCert - name: Setup WSL. uses: Vampire/setup-wsl@v1.1.0 @@ -29,15 +36,16 @@ jobs: additional-packages: dos2unix python3 python3-pip distribution: Ubuntu-20.04 - - name: Install dependencies. + - name: Install task. shell: wsl-bash {0} run: | - pip3 install ansible 'pywinrm[credssp]' - dos2unix test/windows/test.sh + dos2unix start.sh + bash start.sh - name: Test the role. env: ANSIBLE_FORCE_COLOR: '1' shell: wsl-bash {0} run: | - bash test/windows/test.sh + export WINDOWS_ANSIBLE_TEST=true + task ansible:test:local diff --git a/.travis.yml b/.travis.yml index 03d4093c..37e7d995 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,4 +17,5 @@ jobs: python: - 3.8 script: - - bash test/linux/test.sh + - bash start.sh + - task ansible:test:local diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 38990226..e6e009bb 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -132,10 +132,15 @@ "command": "bash .config/scripts/start.sh && task fix" }, { - "label": "(fix:eslint): Fix JavaScript/TypeScript errors automatically", + "label": "(fix:eslint): Fix ESLint errors automatically", "type": "shell", "command": "bash .config/scripts/start.sh && task fix:eslint" }, + { + "label": "(fix:eslint:staged): Auto-fix only modified files with ESLint", + "type": "shell", + "command": "bash .config/scripts/start.sh && task fix:eslint:staged" + }, { "label": "(fix:go): Fix Go with all available Go fixers", "type": "shell", @@ -146,6 +151,11 @@ "type": "shell", "command": "bash .config/scripts/start.sh && task fix:json" }, + { + "label": "(fix:markdown): Auto-fixes markdown files", + "type": "shell", + "command": "bash .config/scripts/start.sh && task fix:markdown" + }, { "label": "(fix:packer): Automatically fix and format Packer templates", "type": "shell", @@ -171,11 +181,26 @@ "type": "shell", "command": "bash .config/scripts/start.sh && task fix:shellcheck" }, + { + "label": "(fix:spelling:markdown): Auto-fix spelling errors in markdown files using `misspell`", + "type": "shell", + "command": "bash .config/scripts/start.sh && task fix:spelling:markdown" + }, + { + "label": "(fix:toml): Format `.toml` files by alphabetizing and flattening", + "type": "shell", + "command": "bash .config/scripts/start.sh && task fix:toml" + }, { "label": "(fix:yaml): Auto-format and sort YML files", "type": "shell", "command": "bash .config/scripts/start.sh && task fix:yaml" }, + { + "label": "(get:links): Log useful links such as the current", + "type": "shell", + "command": "bash .config/scripts/start.sh && task get:links" + }, { "label": "(git:remotes): Configure the the `origin`, `gitlab`, `github`, and `all` git remotes", "type": "shell", @@ -231,11 +256,21 @@ "type": "shell", "command": "bash .config/scripts/start.sh && task lint:docker" }, + { + "label": "(lint:dockerfilelint): Lint a Dockerfile with `dockerfilelint`", + "type": "shell", + "command": "bash .config/scripts/start.sh && task lint:dockerfilelint" + }, { "label": "(lint:eslint): Lint with ESLint", "type": "shell", "command": "bash .config/scripts/start.sh && task lint:eslint" }, + { + "label": "(lint:eslint:staged): Lint only modified files with ESLint", + "type": "shell", + "command": "bash .config/scripts/start.sh && task lint:eslint:staged" + }, { "label": "(lint:eslint:warn-all): Convert ESLint errors into warnings by saving the modified configuration inside `package.json`", "type": "shell", @@ -291,6 +326,11 @@ "type": "shell", "command": "bash .config/scripts/start.sh && task lint:spelling" }, + { + "label": "(lint:spelling:markdown): Run `misspell` (a spell-checker) on all markdown files", + "type": "shell", + "command": "bash .config/scripts/start.sh && task lint:spelling:markdown" + }, { "label": "(lint:vagrant): Validate the Vagrantfile", "type": "shell", @@ -397,9 +437,9 @@ "command": "bash .config/scripts/start.sh && task npm:typesync" }, { - "label": "(packer:build:all): Build Packer images for all platforms (default setting uses `template.json`)", + "label": "(packer:build): Build Packer images for all available platforms", "type": "shell", - "command": "bash .config/scripts/start.sh && task packer:build:all" + "command": "bash .config/scripts/start.sh && task packer:build" }, { "label": "(packer:build:kvm): Build a Packer image for KVM", @@ -421,6 +461,11 @@ "type": "shell", "command": "bash .config/scripts/start.sh && task packer:build:vmware" }, + { + "label": "(packer:install:platforms): Install all available virtualization providers", + "type": "shell", + "command": "bash .config/scripts/start.sh && task packer:install:platforms" + }, { "label": "(preload): Set up your workstation in advance by installing commonly used programs", "type": "shell", @@ -431,6 +476,11 @@ "type": "shell", "command": "bash .config/scripts/start.sh && task prepare" }, + { + "label": "(publish): Publish a semantic release via `semantic-release`", + "type": "shell", + "command": "bash .config/scripts/start.sh && task publish" + }, { "label": "(publish:android:beta): Publishes Android app to Firebase beta channel", "type": "shell", @@ -466,6 +516,11 @@ "type": "shell", "command": "bash .config/scripts/start.sh && task publish:chrome:release" }, + { + "label": "(publish:force): Force a `semantic-release` even if there are no new eligible commits", + "type": "shell", + "command": "bash .config/scripts/start.sh && task publish:force" + }, { "label": "(publish:ios:beta): Publishes iOS app to Firebase beta channel", "type": "shell", @@ -590,6 +645,11 @@ "label": "(test): Open an interactive dialog to select and run a Molecule test", "type": "shell", "command": "bash .config/scripts/start.sh && task test" + }, + { + "label": "(vagrant:up): Select which virtualization platform to run the image on using an interactive prompt", + "type": "shell", + "command": "bash .config/scripts/start.sh && task vagrant:up" } ] } diff --git a/Taskfile.yml b/Taskfile.yml index 365b57ea..3300e0d9 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -7,13 +7,15 @@ includes: ansible:playbook: ./.config/taskfiles/ansible/Taskfile-playbook.yml ansible:populate: ./.config/taskfiles/ansible/Taskfile-populate.yml ansible:test: ./.config/taskfiles/ansible/Taskfile-test.yml + app: ./.config/taskfiles/app/Taskfile.yml + app:virtualbox: ./.config/taskfiles/app/Taskfile-virtualbox.yml boilerplate: ./.config/taskfiles/boilerplate/Taskfile.yml boilerplate:populate: ./.config/taskfiles/boilerplate/Taskfile-populate.yml - boilerplate:prompt: ./.config/taskfiles/boilerplate/Taskfile-prompt.yml - ci: ./.config/taskfiles/ci/Taskfile.yml project: taskfile: ./local/Taskfile-project.yml optional: true + boilerplate:prompt: ./.config/taskfiles/boilerplate/Taskfile-prompt.yml + ci: ./.config/taskfiles/ci/Taskfile.yml ci:github: ./.config/taskfiles/ci/Taskfile-github.yml common: ./.config/taskfiles/common/Taskfile.yml common:code: ./.config/taskfiles/common/Taskfile-code.yml @@ -72,6 +74,7 @@ includes: upstream:docs: ./.config/taskfiles/upstream/Taskfile-docs.yml upstream:project: ./.config/taskfiles/upstream/Taskfile-project.yml upstream:shared: ./.config/taskfiles/upstream/Taskfile-shared.yml + vagrant: ./.config/taskfiles/vagrant/Taskfile.yml vscode: ./.config/taskfiles/vscode/Taskfile.yml web: ./.config/taskfiles/web/Taskfile.yml web:ionic: ./.config/taskfiles/web/Taskfile-ionic.yml @@ -83,7 +86,8 @@ output: interleaved vars: DOCKERHUB_PROFILE: megabytelabs DOCKERHUB_USER: professormanhattan - ESLINT_FORMATTER: pretty + ESLINT_FIX_RECURSIVE: 'true' + ESLINT_FORMATTER: stylish ESLINT_FORMATTER_OPTIONS: git-log gitlab pretty summary GALAXY_AUTHOR: ProfessorManhattan GALAXY_COMPANY: Megabyte Labs @@ -117,6 +121,12 @@ vars: TIMEZONE: America/New_York env: + OSTYPE: + sh: | + {{if (eq OS "linux")}}LINUX_FLAVOR='linux-gnu' + LIBC=$(ldd /bin/ls | grep 'musl' | head -1 | cut -d ' ' -f1) + if [ -n "$LIBC" ]; then LINUX_FLAVOR='linux-musl'; fi{{end}} + echo "{{if (eq OS "linux")}}$LINUX_FLAVOR{{else}}darwin{{end}}" SENTRY_DSN: '' profile: | @@ -234,6 +244,12 @@ tasks: git commit {{end}} + commit:quick: + cmds: + - git add --all + - HUSKY=0 git commit -m '🔧 chore(tweak): quick minor update' --no-verify + - git push origin master + donothing: 'true' fix: @@ -247,6 +263,19 @@ tasks: cmds: - task: fix:all + get:links: + deps: + - install:software:jq + desc: Log useful links such as the current project's git repository link + vars: + GITHUB_URL: + sh: jq -r '.blueprint.repository.github' package.json + GITLAB_URL: + sh: jq -r '.blueprint.repository.gitlab' package.json + cmds: + - .config/log info 'GitHub -----> `{{.GITHUB_URL}}`' + - .config/log info 'GitLab -----> `{{.GITLAB_URL}}`' + group:exec: desc: Execute group commands on any GitLab group (including repositories in sub-groups) summary: | @@ -366,8 +395,6 @@ tasks: - nodemon --config {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.config/nodemon.json{{end}} preload: - deps: - - install:brewfile desc: Set up your workstation in advance by installing commonly used programs summary: | # Speed Up Future Development by Preloading Common System Applications @@ -400,8 +427,13 @@ tasks: success: Successfully preloaded system with common dependencies (REBOOT RECOMMENDED) cmds: - task: install:brewfile - - task: install:modules:global - - task: install:pipx:global + - task: install:go:bundle + - task: install:rust:bundle + - task: install:github:bundle + - task: install:npm:bundle + - task: install:pipx:bundle + - task: install:python:requirements + - task: install:modules:local prepare: desc: Prepares the project for the normal start command @@ -420,6 +452,83 @@ tasks: - task: boilerplate:check:package - task: boilerplate:clean + publish: + desc: Publish a semantic release via `semantic-release` + summary: | + # Publish the Project + + Using this task, you can publish a project to all its targets. The targets + depend on the project type. Most projects will include: + + 1. Updating version numbers in `package.json`, `pyproject.toml`, etc. + 2. Adding a new git tag at the version and publishing it with updated assets + 3. Publishing repository-specific items like NPM packages, PyPi packages, etc. + 4. Publishing artifacts to GitLab Releases and GitHub Releases + 5. Updating the `docs/CHANGELOG.md` + + ## Packages Used + + This task runs `semantic-release` using the `semantic-release-config` package. The package + includes release instructions for: + + 1. Python packages + 2. NPM packages + 3. Dockerfile projects + 4. Go projects + 5. Ansible roles + + ## Formats + + It does its best to ship projects out in as many formats (that make sense) as possible. + For instance, an NPM CLI gets published as: + + 1. NPM package + 2. Binaries (including deb and rpm) available on GitHub/GitLab releases + 3. Brew formulae + 4. Snapcraft + 5. Probably more implemented after writing this + + ## Python Package Notes + + If `setup.cfg` is present, then the project is assumed to be a legacy Python + project that needs to run in environment with access to the `python-semantic` + extras defined in `pyproject.toml`. + log: + error: Error running `semantic-release` via `task publish` + start: Running `semantic-release` via `task publish` + success: Successfully ran `semantic-release` via `task publish` + cmds: + - task: publish:semantic-release + + publish:force: + desc: Force a `semantic-release` even if there are no new eligible commits + summary: | + # Force a Release with Empty Commit + + Trigger any kind of version bump / semantic release by passing + `PATCH UPDATE`, `MINOR UPDATE`, or `MAJOR UPDATE` in via CLI arguments. + This task will commit an empty commit message that will trigger the + corresponding version bump type. + + **Example of patch update:** + `task publish:force -- 'PATCH UPDATE'` + + **Example of minor update:** + `task publish:force -- 'MINOR UPDATE'` + + **Example of major update:** + `task publish:force -- 'MAJOR UPDATE'` + vars: + UPDATE_LEVEL: '{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}PATCH UPDATE{{end}}' + log: + error: Error creating update via `task publish:force` + start: Publishing `semantic-release` update via `task publish:force` + success: Successfully published update via `task publish:force` + cmds: + - | + HUSKY=0 git commit -a --allow-empty -m '🔨 build(version bump): semantic-release {{.UPDATE_LEVEL}}' -n + - task: publish + reset: desc: Resets the project by removing all caches and then re-generating templated files summary: | diff --git a/meta/main.yml b/meta/main.yml index c3215b7b..44765981 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -9,18 +9,6 @@ galaxy_info: license: license (MIT) min_ansible_version: 2.1 platforms: - - name: Ubuntu - versions: - - all - - name: Debian - versions: - - all - - name: EL - versions: - - all - - name: Fedora - versions: - - all - name: Mac versions: - all diff --git a/molecule/local/molecule.yml b/molecule/local/molecule.yml index fca6a8c6..15470239 100644 --- a/molecule/local/molecule.yml +++ b/molecule/local/molecule.yml @@ -7,7 +7,7 @@ driver: ansible_connection: local managed: false platforms: - - name: Local-Connection + - name: ${TEST_PLATFORM:-Local-Connection} provisioner: inventory: group_vars: diff --git a/package.json b/package.json index 1a1f9659..d1fd456f 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "prepare": "npm run start && (test -f Taskfile.yml && task common:husky) || true", "repair": "bash <(curl -sS https://install.doctor/repair)", "start": "bash start.sh", - "test": "[[ $- == *i* ]] && task ansible:test:prompt || task ansible:test:default" + "test": "[ -z \"$PS1\" ] && task ansible:test:prompt || task ansible:test:default" }, "config": { "commitizen": { @@ -34,7 +34,6 @@ "devDependencies": { "@commitlint/config-conventional": "^16.0.0", "@washingtondc/development": "latest", - "cz-emoji-conventional": "^1.0.1", "eslint-config-strict-mode": "latest", "git-cz-emoji": "latest", "glob": "^7.2.0", @@ -140,6 +139,9 @@ "**/*": [ "task lint:any --" ], + "**/*!(template).(json|webapp|webmanifest)": [ + "task fix:json --" + ], "**/*.(bash|cfg|cgi|command|css|env|env.*|handlebars|hbs|html|less|fcgi|java|md|mdx|mjml|php|phtml|properties|reg|scss|tmpl|tmux|tool|tpl|zsh)": [ "task fix:prettier --" ], @@ -168,6 +170,10 @@ "**/*.json": [ "task fix:json --" ], + "**/*.md": [ + "task fix:markdown --", + "task lint:spelling:markdown --" + ], "**/*.php": [ "task fix:php --", "task lint:php --" @@ -182,6 +188,7 @@ "task lint:shell --" ], "**/*.toml": [ + "task fix:toml --", "task fix:prettier --", "task lint:toml --" ], @@ -233,10 +240,8 @@ ], "peerDependencyRules": { "ignoreMissing": [ - "@typescript-eslint/eslint-plugin", "eslint", - "prettier", - "typescript" + "prettier" ] } }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4559894c..6ba2cd42 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,6 @@ neverBuiltDependencies: specifiers: '@commitlint/config-conventional': ^16.0.0 '@washingtondc/development': latest - cz-emoji-conventional: ^1.0.1 eslint-config-strict-mode: latest git-cz-emoji: latest glob: ^7.2.0 @@ -20,12 +19,11 @@ specifiers: devDependencies: '@commitlint/config-conventional': 16.2.1 '@washingtondc/development': 1.0.10_typescript@4.5.5 - cz-emoji-conventional: 1.0.1 - eslint-config-strict-mode: 1.0.44_typescript@4.5.5 + eslint-config-strict-mode: 1.0.47_typescript@4.5.5 git-cz-emoji: 1.1.24 glob: 7.2.0 handlebars-helpers: 0.10.0 - prettier-config-sexy-mode: 1.0.1_typescript@4.5.5 + prettier-config-sexy-mode: 1.0.3_typescript@4.5.5 semantic-release-config: 1.1.18 typescript: 4.5.5 @@ -108,7 +106,7 @@ packages: '@babel/compat-data': 7.17.0 '@babel/core': 7.17.5 '@babel/helper-validator-option': 7.16.7 - browserslist: 4.19.3 + browserslist: 4.20.0 semver: 6.3.0 dev: true @@ -376,7 +374,7 @@ packages: '@types/node': 17.0.18 chalk: 4.1.2 cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 1.0.5_f3bd4037939c2ed2942ba074291f8ef2 + cosmiconfig-typescript-loader: 1.0.6_f3bd4037939c2ed2942ba074291f8ef2 lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.5.5 @@ -486,7 +484,7 @@ packages: '@cspell/dict-dart': 1.1.0 '@cspell/dict-django': 2.0.0 '@cspell/dict-dotnet': 2.0.0 - '@cspell/dict-elixir': 2.0.0 + '@cspell/dict-elixir': 2.0.1 '@cspell/dict-en_us': 2.1.7 '@cspell/dict-en-gb': 1.1.33 '@cspell/dict-filetypes': 2.0.1 @@ -507,10 +505,10 @@ packages: '@cspell/dict-public-licenses': 1.0.4 '@cspell/dict-python': 2.0.6 '@cspell/dict-r': 1.0.2 - '@cspell/dict-ruby': 2.0.0 + '@cspell/dict-ruby': 2.0.1 '@cspell/dict-rust': 2.0.0 '@cspell/dict-scala': 2.0.0 - '@cspell/dict-software-terms': 2.1.1 + '@cspell/dict-software-terms': 2.1.3 '@cspell/dict-swift': 1.0.2 '@cspell/dict-typescript': 2.0.0 '@cspell/dict-vue': 2.0.2 @@ -570,8 +568,8 @@ packages: resolution: {integrity: sha512-WOHfjwMuLbo76khDsDa1lJvP/dXcwXVwonWwfUFRt82BL/GtyMalh1HEtCWwKDuK/9f8PCEt/EZMkHT3D5ZV3w==} dev: true - /@cspell/dict-elixir/2.0.0: - resolution: {integrity: sha512-NeDObcqiYuqWRrzMAQLZDSrZlChTEZwTA2zHdI2nPtpeDl4FQcTz2BHP8zVt6Lj6G2QHJmNGmQtSmDguX86NYA==} + /@cspell/dict-elixir/2.0.1: + resolution: {integrity: sha512-eTTTxZt1FqGkM780yFDxsGHvTbWqvlK8YISSccK8FyrB6ULW+uflQlNS5AnWg3uWKC48b7pQott+odYCsPJ+Ow==} dev: true /@cspell/dict-en-gb/1.1.33: @@ -654,8 +652,8 @@ packages: resolution: {integrity: sha512-Rp3d4sgD6izW9TW5yVI3D//3HTl9oOGBuzTvXRdoHksVPRvzIu2liVhj8MnQ3XIRe5Kc6IhLBAm6izuV2BpGwQ==} dev: true - /@cspell/dict-ruby/2.0.0: - resolution: {integrity: sha512-ux73GEIZrApxIG/BDnpdxWE7r9TY3n+3HFAEp+LDJjSjpwpn2VXopd7GsjwsvmlAv5F3Jch8tzgzujFZkvqdoA==} + /@cspell/dict-ruby/2.0.1: + resolution: {integrity: sha512-qGqhYfFeoBOashv/l0Kj5o4ilyvfq0s+t+r32juPOkOnbHz+hzxnJo2tMMg/L/UdjVV7Y8ovg4LDBC/seVrMYQ==} dev: true /@cspell/dict-rust/2.0.0: @@ -666,8 +664,8 @@ packages: resolution: {integrity: sha512-MUwA2YKpqaQOSR4V1/CVGRNk8Ii5kf6I8Ch+4/BhRZRQXuwWbi21rDRYWPqdQWps7VNzAbbMA+PQDWsD5YY38g==} dev: true - /@cspell/dict-software-terms/2.1.1: - resolution: {integrity: sha512-PmmqysKSvNwksjEfXrzD1wEVvctR6qppxDhwNc4IQQjwpjmtN8e+8HiXxIbCsBcll1rO0vOmnhpXUdl+d9apXQ==} + /@cspell/dict-software-terms/2.1.3: + resolution: {integrity: sha512-JmMfRa9Xl0MCD/z5gYUnY05BNxSMnx25Ky6kO/Cs0gBYZZdYzHZNqrbfnqBMsB9PpOzn2uqrYUmAEusoI1WyMQ==} dev: true /@cspell/dict-swift/1.0.2: @@ -717,7 +715,7 @@ packages: dependencies: comment-parser: 1.3.0 esquery: 1.4.0 - jsdoc-type-pratt-parser: 2.2.3 + jsdoc-type-pratt-parser: 2.2.4 dev: true /@eslint/eslintrc/1.1.0: @@ -745,8 +743,8 @@ packages: resolution: {integrity: sha512-NqfoW12eXMdDJz3g3NHnopEgDoqdY1YshO6XxIVPOqotGTDcjD1sL28AVKskbYveGmHBPdHieRRv6M9Iq7dt4w==} dev: true - /@humanwhocodes/config-array/0.9.3: - resolution: {integrity: sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==} + /@humanwhocodes/config-array/0.9.5: + resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -1135,8 +1133,8 @@ packages: - supports-color dev: true - /@semantic-release/npm/9.0.0_semantic-release@19.0.2: - resolution: {integrity: sha512-hj2jqayS2SPUmFtCMCOQMX975uMDfRoymj1HvMSwYdaoI6hVZvhrTFPBgJeM85O0C+G3IFviAUar5gel/1VGDQ==} + /@semantic-release/npm/9.0.1_semantic-release@19.0.2: + resolution: {integrity: sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g==} engines: {node: '>=16 || ^14.17'} peerDependencies: semantic-release: '>=19.0.0' @@ -1148,7 +1146,7 @@ packages: lodash: 4.17.21 nerf-dart: 1.0.0 normalize-url: 6.1.0 - npm: 8.5.1 + npm: 8.5.4 rc: 1.2.8 read-pkg: 5.2.0 registry-auth-token: 4.2.1 @@ -1190,8 +1188,8 @@ packages: dev: true optional: true - /@sindresorhus/is/4.4.0: - resolution: {integrity: sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==} + /@sindresorhus/is/4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} dev: true @@ -1225,7 +1223,7 @@ packages: '@types/aria-query': 4.2.2 aria-query: 4.2.2 chalk: 4.1.2 - dom-accessibility-api: 0.5.12 + dom-accessibility-api: 0.5.13 lz-string: 1.4.4 pretty-format: 26.6.2 dev: true @@ -1234,6 +1232,19 @@ packages: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} dev: true + /@toml-tools/lexer/0.3.1: + resolution: {integrity: sha512-CCKHQb5OWpgFu47MQ2rcql4AnE9GaehNk/c1oJOyOBovED6XmdzQPXsvPSu+NJ9lToqJNoX+nLXQsB8WyQGdzQ==} + dependencies: + chevrotain: 4.1.1 + dev: true + + /@toml-tools/parser/0.3.1: + resolution: {integrity: sha512-vadwVx5TkgByt19dbp/rfIUKPkDdn5werANYvziiGK9wHlqPA0BWnvOloQw/dPDxF31+Ag0+zarXJpPDdRsPPg==} + dependencies: + '@toml-tools/lexer': 0.3.1 + chevrotain: 4.1.1 + dev: true + /@tootallnate/once/2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -2241,13 +2252,13 @@ packages: fill-range: 7.0.1 dev: true - /browserslist/4.19.3: - resolution: {integrity: sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==} + /browserslist/4.20.0: + resolution: {integrity: sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001312 - electron-to-chromium: 1.4.71 + caniuse-lite: 1.0.30001314 + electron-to-chromium: 1.4.81 escalade: 3.1.1 node-releases: 2.0.2 picocolors: 1.0.0 @@ -2373,8 +2384,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001312: - resolution: {integrity: sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==} + /caniuse-lite/1.0.30001314: + resolution: {integrity: sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw==} dev: true /cardinal/2.1.1: @@ -2426,8 +2437,8 @@ packages: supports-color: 7.2.0 dev: true - /chalk/5.0.0: - resolution: {integrity: sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ==} + /chalk/5.0.1: + resolution: {integrity: sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true @@ -2453,6 +2464,12 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true + /chevrotain/4.1.1: + resolution: {integrity: sha512-NQky1HQyiAzxsxpq4Ppt47SYO2U3JLtmfs85QPf3kYSzGBjjp5AA8kqjH8hCjGFRpaQ781QOk1ragQIOkBgUTA==} + dependencies: + regexp-to-ast: 0.3.5 + dev: true + /chevrotain/6.5.0: resolution: {integrity: sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg==} dependencies: @@ -2554,7 +2571,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: slice-ansi: 5.0.0 - string-width: 5.1.0 + string-width: 5.1.2 dev: true /cli-width/2.2.1: @@ -2678,7 +2695,7 @@ packages: cz-conventional-changelog: 3.2.0 dedent: 0.7.0 detect-indent: 6.0.0 - find-node-modules: 2.1.2 + find-node-modules: 2.1.3 find-root: 1.1.0 fs-extra: 8.1.0 glob: 7.1.4 @@ -2838,8 +2855,8 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig-typescript-loader/1.0.5_f3bd4037939c2ed2942ba074291f8ef2: - resolution: {integrity: sha512-FL/YR1nb8hyN0bAcP3MBaIoZravfZtVsN/RuPnoo6UVjqIrDxSNIpXHCGgJe0ZWy5yImpyD6jq5wCJ5f1nUv8g==} + /cosmiconfig-typescript-loader/1.0.6_f3bd4037939c2ed2942ba074291f8ef2: + resolution: {integrity: sha512-2nEotziYJWtNtoTjKbchj9QrdTT6DBxCvqjNKoDKARw+e2yZmTQCa07uRrykLIZuvSgp69YXLH89UHc0WhdMfQ==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' @@ -2850,7 +2867,7 @@ packages: dependencies: '@types/node': 17.0.18 cosmiconfig: 7.0.1 - ts-node: 10.5.0_f3bd4037939c2ed2942ba074291f8ef2 + ts-node: 10.7.0_f3bd4037939c2ed2942ba074291f8ef2 typescript: 4.5.5 transitivePeerDependencies: - '@swc/core' @@ -3247,8 +3264,8 @@ packages: esutils: 2.0.3 dev: true - /dom-accessibility-api/0.5.12: - resolution: {integrity: sha512-gQ2mON6fLWZeM8ubjzL7RtMeHS/g8hb82j4MjHmcQECD7pevWsMlhqwp9BjIRrQvmyJMMyv/XiO1cXzeFlUw4g==} + /dom-accessibility-api/0.5.13: + resolution: {integrity: sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw==} dev: true /dom-serializer/1.3.2: @@ -3322,8 +3339,8 @@ packages: sigmund: 1.0.1 dev: true - /electron-to-chromium/1.4.71: - resolution: {integrity: sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==} + /electron-to-chromium/1.4.81: + resolution: {integrity: sha512-Gs7xVpIZ7tYYSDA+WgpzwpPvfGwUk3KSIjJ0akuj5XQHFdyQnsUoM76EA4CIHXNLPiVwTwOFay9RMb0ChG3OBw==} dev: true /elegant-spinner/1.0.1: @@ -3332,8 +3349,8 @@ packages: dev: true optional: true - /emoji-regex/10.0.0: - resolution: {integrity: sha512-KmJa8l6uHi1HrBI34udwlzZY1jOEuID/ft4d8BSSEdRyap7PwBEt910453PJa5MuGvxkLqlt4Uvhu7tttFHViw==} + /emoji-regex/10.0.1: + resolution: {integrity: sha512-cLuZzriSWVE+rllzeq4zpUEoCPfYEbQ6ZVhIq+ed6ynWST7Bw9XnOr+bKWgCup4paq72DI21gw9M3aaFkm4HAw==} dev: true /emoji-regex/8.0.0: @@ -3404,7 +3421,7 @@ packages: get-intrinsic: 1.1.1 get-symbol-description: 1.0.0 has: 1.0.3 - has-symbols: 1.0.2 + has-symbols: 1.0.3 internal-slot: 1.0.3 is-callable: 1.2.4 is-negative-zero: 2.0.2 @@ -3481,8 +3498,8 @@ packages: eslint: 8.9.0 dev: true - /eslint-config-strict-mode/1.0.44_typescript@4.5.5: - resolution: {integrity: sha512-kM+KvUGpx6/Uow0d2+wCVLjVMtphht+JT6r7lpiysj51ci7PnppUQV422GDYO5D9O4q43P7H8wdsMblOGwbM+Q==} + /eslint-config-strict-mode/1.0.47_typescript@4.5.5: + resolution: {integrity: sha512-Cy1jgUv5kB2hU8FdL7zNOR363paHzMhfN/+B5UAhmBU31twrzdXY9v3OloVYGU6ojw3nmgBdV+gMeOqFMg4EJg==} engines: {node: '>=14.18.0'} dependencies: '@typescript-eslint/eslint-plugin': 5.12.0_c467cf9bb49b295941e83ce479a578b7 @@ -3495,6 +3512,7 @@ packages: eslint-formatter-summary: 1.1.0 eslint-plugin-angular: 4.1.0 eslint-plugin-array-func: 3.1.7_eslint@8.9.0 + eslint-plugin-diff: 1.0.12_eslint@8.9.0 eslint-plugin-editorconfig: 3.2.0_9b55c518508e7c97d05321ef8ec74f2e eslint-plugin-eslint-comments: 3.2.0_eslint@8.9.0 eslint-plugin-etc: 2.0.2_eslint@8.9.0+typescript@4.5.5 @@ -3649,6 +3667,18 @@ packages: eslint: 8.9.0 dev: true + /eslint-plugin-diff/1.0.12_eslint@8.9.0: + resolution: {integrity: sha512-gc770JHqLd5BSGc3dk/LZ4l58dEGg3leAX/7mQLnuAnC1ar8ZC1jNxLF8pvpTQTXEOXtwXyeSeXiV0TMhAM+nA==} + engines: {node: '>=10.23.0'} + peerDependencies: + eslint: '>=6.7.0' + peerDependenciesMeta: + eslint: + optional: true + dependencies: + eslint: 8.9.0 + dev: true + /eslint-plugin-editorconfig/3.2.0_9b55c518508e7c97d05321ef8ec74f2e: resolution: {integrity: sha512-XiUg69+qgv6BekkPCjP8+2DMODzPqtLV5i0Q9FO1v40P62pfodG1vjIihVbw/338hS5W26S+8MTtXaAlrg37QQ==} dependencies: @@ -3800,7 +3830,7 @@ packages: minimatch: 3.1.2 object.values: 1.1.5 resolve: 1.22.0 - tsconfig-paths: 3.12.0 + tsconfig-paths: 3.13.0 dev: true /eslint-plugin-jest-async/1.0.3: @@ -4347,7 +4377,7 @@ packages: hasBin: true dependencies: '@eslint/eslintrc': 1.1.0 - '@humanwhocodes/config-array': 0.9.3 + '@humanwhocodes/config-array': 0.9.5 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -4606,7 +4636,7 @@ packages: dependencies: readable-web-to-node-stream: 3.0.2 strtok3: 6.3.0 - token-types: 4.1.1 + token-types: 4.2.0 dev: true /fill-range/4.0.0: @@ -4631,8 +4661,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /find-node-modules/2.1.2: - resolution: {integrity: sha512-x+3P4mbtRPlSiVE1Qco0Z4YLU8WFiFcuWTf3m75OV9Uzcfs2Bg+O9N+r/K0AnmINBW06KpfqKwYJbFlFq4qNug==} + /find-node-modules/2.1.3: + resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} dependencies: findup-sync: 4.0.0 merge: 2.1.1 @@ -4811,7 +4841,7 @@ packages: dependencies: function-bind: 1.1.1 has: 1.0.3 - has-symbols: 1.0.2 + has-symbols: 1.0.3 dev: true /get-object/0.2.0: @@ -5055,7 +5085,7 @@ packages: resolution: {integrity: sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==} engines: {node: '>=10.19.0'} dependencies: - '@sindresorhus/is': 4.4.0 + '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.2 '@types/responselike': 1.0.0 @@ -5163,7 +5193,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.15.1 + uglify-js: 3.15.3 dev: true /hard-rejection/2.1.0: @@ -5198,8 +5228,8 @@ packages: engines: {node: '>=8'} dev: true - /has-symbols/1.0.2: - resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true @@ -5207,7 +5237,7 @@ packages: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: - has-symbols: 1.0.2 + has-symbols: 1.0.3 dev: true /has-value/0.3.1: @@ -5950,7 +5980,7 @@ packages: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: - has-symbols: 1.0.2 + has-symbols: 1.0.3 dev: true /is-text-path/1.0.1: @@ -6076,8 +6106,8 @@ packages: argparse: 2.0.1 dev: true - /jsdoc-type-pratt-parser/2.2.3: - resolution: {integrity: sha512-QPyxq62Q8veBSDtDrWmqaEPjSCeknUV9dH/OAGt3q9an8qC8UQDqitQiw1NvoMskIESpoRZ6qzt4H3rlK0xo8A==} + /jsdoc-type-pratt-parser/2.2.4: + resolution: {integrity: sha512-GKkP4t6NwFtMpxR/3jNoRzauTdpum5/lkkhBxWSDP3IG/1IFd1NxCTMJ/sgRy8BA1UFsFq6LEwOo0YmiBDA52Q==} engines: {node: '>=12.0.0'} dev: true @@ -6393,7 +6423,7 @@ packages: log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 - rxjs: 7.5.4 + rxjs: 7.5.5 through: 2.3.8 wrap-ansi: 7.0.0 dev: true @@ -6667,7 +6697,7 @@ packages: dependencies: ansi-escapes: 5.0.0 cardinal: 2.1.1 - chalk: 5.0.0 + chalk: 5.0.1 cli-table3: 0.6.1 marked: 4.0.12 node-emoji: 1.11.0 @@ -7103,8 +7133,8 @@ packages: path-key: 3.1.1 dev: true - /npm/8.5.1: - resolution: {integrity: sha512-zHrOHAatEPJ59o2JIPlhgc9LX9mb8xFrqu4kiiul4w1IGMTtKn2lqRiGIRKU0or69NSLXNmqbCP9bNJIr/wB6Q==} + /npm/8.5.4: + resolution: {integrity: sha512-VnGLT4t88cUE78lLw5kxBwtLn2/Sx6O7Uw9dYwmq6AnF/taWHyMYQgDzUEsLhaXAVH7prG+sjG+MvxlHdIasgg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16} hasBin: true dev: true @@ -7228,7 +7258,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - has-symbols: 1.0.2 + has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -7333,7 +7363,7 @@ packages: resolution: {integrity: sha512-dlsoDe39g7mhdsdrC1R/YwjT7yjVqE3svWwOlMGvN690waBkgEZBmKBdkmKvSt5/wZ6E0Jn/nIesPqMZOpPKqw==} engines: {node: '>=10'} dependencies: - '@sindresorhus/is': 4.4.0 + '@sindresorhus/is': 4.6.0 callsites: 3.1.0 dot-prop: 6.0.1 lodash.isequal: 4.5.0 @@ -7698,8 +7728,8 @@ packages: dev: true optional: true - /prettier-config-sexy-mode/1.0.1_typescript@4.5.5: - resolution: {integrity: sha512-6ZdAv6LW2vq++c5fqoh2MWrIZk9fi67o608xizEPYKPMjGUNDsqjJ/pYiJLp7yDHgGerEERc4bRQqlh8a9W6YA==} + /prettier-config-sexy-mode/1.0.3_typescript@4.5.5: + resolution: {integrity: sha512-A4bP9Ktdxyx5c+yd6reU5zcNqieIkyNwjoAo8vfjgxa3ZWpt2eRBeqKd7ru8gcrNOCiPI57JXXFjuDEvU0lfWg==} engines: {node: '>=14.18.0'} dependencies: '@prettier/plugin-php': 0.17.6_prettier@2.5.1 @@ -7717,6 +7747,7 @@ packages: prettier-plugin-sh: 0.7.1_prettier@2.5.1 prettier-plugin-solidity: 1.0.0-beta.19_prettier@2.5.1 prettier-plugin-sql: 0.4.1_prettier@2.5.1 + prettier-plugin-toml: 0.3.1 tslib: 2.3.1 transitivePeerDependencies: - supports-color @@ -7845,7 +7876,7 @@ packages: optional: true dependencies: '@solidity-parser/parser': 0.14.1 - emoji-regex: 10.0.0 + emoji-regex: 10.0.1 escape-string-regexp: 4.0.0 prettier: 2.5.1 semver: 7.3.5 @@ -7866,6 +7897,19 @@ packages: sql-formatter: 4.0.2 dev: true + /prettier-plugin-toml/0.3.1: + resolution: {integrity: sha512-j47DEO/dN/acU1nSL/B7q4A4Z2SYJhpWPCLPkcmfAXIQC6A5GD6Ao/bi9HRHZ8ueIDOauqjuAQbnvRxLXMjazA==} + dependencies: + '@toml-tools/parser': 0.3.1 + prettier: 1.19.1 + dev: true + + /prettier/1.19.1: + resolution: {integrity: sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==} + engines: {node: '>=4'} + hasBin: true + dev: true + /prettier/2.3.1: resolution: {integrity: sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==} engines: {node: '>=10.13.0'} @@ -8115,6 +8159,10 @@ packages: regexpp: 3.2.0 dev: true + /regexp-to-ast/0.3.5: + resolution: {integrity: sha512-1CJygtdvsfNFwiyjaMLBWtg2tfEqx/jSZ8S6TV+GlNL8kiH8rb4cm5Pb7A/C2BpyM/fA8ZJEudlCwi/jvAY+Ow==} + dev: true + /regexp-to-ast/0.4.0: resolution: {integrity: sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw==} dev: true @@ -8350,8 +8398,8 @@ packages: tslib: 1.14.1 dev: true - /rxjs/7.5.4: - resolution: {integrity: sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==} + /rxjs/7.5.5: + resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} dependencies: tslib: 2.3.1 dev: true @@ -8408,14 +8456,14 @@ packages: '@semantic-release/exec': 6.0.3_semantic-release@19.0.2 '@semantic-release/git': 10.0.1_semantic-release@19.0.2 '@semantic-release/gitlab': 7.0.4_semantic-release@19.0.2 - '@semantic-release/npm': 9.0.0_semantic-release@19.0.2 + '@semantic-release/npm': 9.0.1_semantic-release@19.0.2 '@semantic-release/release-notes-generator': 10.0.3_semantic-release@19.0.2 conventional-changelog-emoji-config: 1.4.8 git-cz-emoji: 1.1.24 semantic-release: 19.0.2 - semantic-release-gh: 0.0.7_semantic-release@19.0.2 + semantic-release-gh: 1.0.15_semantic-release@19.0.2 semantic-release-npm-deprecate-old-versions: 1.3.2 - semantic-release-python: 2.5.24 + semantic-release-python: 2.5.30 tslib: 2.3.1 yaml: 1.10.2 transitivePeerDependencies: @@ -8425,8 +8473,8 @@ packages: - supports-color dev: true - /semantic-release-gh/0.0.7_semantic-release@19.0.2: - resolution: {integrity: sha512-T3eQwyiMXwWMzvDIFMPVn7mzJERVRZYtNEF58bVV0SL3I9UzUkM3UAY1idJUcG3ovbz7BeerfTdIAhE2GrD/sg==} + /semantic-release-gh/1.0.15_semantic-release@19.0.2: + resolution: {integrity: sha512-VuKk2i/E4TCX9QgvBtWUZhGVI2OIZf0VWnk/X71OB2NVpopBgmfquBuQX9NZLkcHMj7XU+LkWjoq/CPL372hQA==} engines: {node: '>=14.18.0'} peerDependencies: semantic-release: '>=18.0.0-beta.1' @@ -8464,8 +8512,8 @@ packages: - encoding dev: true - /semantic-release-python/2.5.24: - resolution: {integrity: sha512-u+eAsg8DMN6CjcNALozE0nH3W/wttk5NkRXB78IITJInhy6jwN5oHRRFOIiXM0yFwwA9MY7cv8YvtW7IbALTdg==} + /semantic-release-python/2.5.30: + resolution: {integrity: sha512-Xo/jmF7o5kfQQbN5zQq447wKT8ssZm+/jggaWJu23w2ckcarcFZMNxsCiACvXre4hhKTKfopC/7hNLZHjgvlMg==} engines: {node: '>=14.18.0'} requiresBuild: true dependencies: @@ -8485,7 +8533,7 @@ packages: '@semantic-release/commit-analyzer': 9.0.2_semantic-release@19.0.2 '@semantic-release/error': 3.0.0 '@semantic-release/github': 8.0.2_semantic-release@19.0.2 - '@semantic-release/npm': 9.0.0_semantic-release@19.0.2 + '@semantic-release/npm': 9.0.1_semantic-release@19.0.2 '@semantic-release/release-notes-generator': 10.0.3_semantic-release@19.0.2 aggregate-error: 3.1.0 cosmiconfig: 7.0.1 @@ -8850,8 +8898,8 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width/5.1.0: - resolution: {integrity: sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==} + /string-width/5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: eastasianwidth: 0.2.0 @@ -9154,8 +9202,8 @@ packages: safe-regex: 1.1.0 dev: true - /token-types/4.1.1: - resolution: {integrity: sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==} + /token-types/4.2.0: + resolution: {integrity: sha512-P0rrp4wUpefLncNamWIef62J0v0kQR/GfDVji9WKY7GDCWy5YbVSrKUTam07iWPZQGy0zWNOfstYTykMmPNR7w==} engines: {node: '>=10'} dependencies: '@tokenizer/token': 0.3.0 @@ -9186,8 +9234,8 @@ packages: engines: {node: '>=12'} dev: true - /ts-node/10.5.0_f3bd4037939c2ed2942ba074291f8ef2: - resolution: {integrity: sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==} + /ts-node/10.7.0_f3bd4037939c2ed2942ba074291f8ef2: + resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -9239,8 +9287,8 @@ packages: yn: 3.1.1 dev: true - /tsconfig-paths/3.12.0: - resolution: {integrity: sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==} + /tsconfig-paths/3.13.0: + resolution: {integrity: sha512-nWuffZppoaYK0vQ1SQmkSsQzJoHA4s6uzdb2waRpD806x9yfq153AdVsWz4je2qZcW+pENrMQXbGQ3sMCkXuhw==} dependencies: '@types/json5': 0.0.29 json5: 1.0.1 @@ -9364,8 +9412,8 @@ packages: hasBin: true dev: true - /uglify-js/3.15.1: - resolution: {integrity: sha512-FAGKF12fWdkpvNJZENacOH0e/83eG6JyVQyanIJaBXCN1J11TUQv1T1/z8S+Z0CG0ZPk1nPcreF/c7lrTd0TEQ==} + /uglify-js/3.15.3: + resolution: {integrity: sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==} engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true @@ -9382,7 +9430,7 @@ packages: dependencies: function-bind: 1.1.1 has-bigints: 1.0.1 - has-symbols: 1.0.2 + has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true @@ -9665,8 +9713,8 @@ packages: engines: {node: '>=10'} dev: true - /yargs-parser/21.0.0: - resolution: {integrity: sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==} + /yargs-parser/21.0.1: + resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} engines: {node: '>=12'} dev: true @@ -9693,7 +9741,7 @@ packages: require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 21.0.0 + yargs-parser: 21.0.1 dev: true /yarnhook/0.5.1: diff --git a/poetry.lock b/poetry.lock index 42b73741..be86c401 100644 --- a/poetry.lock +++ b/poetry.lock @@ -24,11 +24,11 @@ setupext = "*" [[package]] name = "ansible-compat" -version = "1.0.0" +version = "2.0.0" description = "Ansible compatibility goodies" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" [package.dependencies] PyYAML = "*" @@ -39,7 +39,7 @@ test = ["coverage", "flaky", "pip-tools", "pytest", "pytest-markdown", "pytest-m [[package]] name = "ansible-core" -version = "2.11.8" +version = "2.11.9" description = "Radically simple IT automation" category = "main" optional = false @@ -68,7 +68,7 @@ rich = "*" [[package]] name = "ansibler" -version = "0.2.4" +version = "0.3" description = "Generate JSON data that describes the dependencies of an Ansible playbook/role. Also, automatically generate OS compatibility charts using Molecule." category = "dev" optional = false @@ -222,7 +222,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "charset-normalizer" -version = "2.0.11" +version = "2.0.12" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -233,7 +233,7 @@ unicode_backport = ["unicodedata2"] [[package]] name = "click" -version = "8.0.3" +version = "8.0.4" description = "Composable command line interface toolkit" category = "dev" optional = false @@ -314,11 +314,11 @@ test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pr [[package]] name = "distro" -version = "1.6.0" +version = "1.7.0" description = "Distro - an OS platform information API" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "docker" @@ -434,7 +434,7 @@ grpc = ["grpcio (>=1.0rc1)", "google-gax (>=0.12.3,<0.13dev)", "gax-google-pubsu [[package]] name = "google-api-core" -version = "2.5.0" +version = "2.7.1" description = "Google API client core library" category = "dev" optional = false @@ -453,14 +453,14 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2)"] [[package]] name = "google-api-python-client" -version = "2.36.0" +version = "2.40.0" description = "Google API Client Library for Python" category = "dev" optional = false python-versions = ">=3.6" [package.dependencies] -google-api-core = ">=1.21.0,<3.0.0dev" +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" google-auth = ">=1.16.0,<3.0.0dev" google-auth-httplib2 = ">=0.1.0" httplib2 = ">=0.15.0,<1dev" @@ -515,7 +515,7 @@ protobuf = ">=3.0.0b3" [[package]] name = "googleapis-common-protos" -version = "1.54.0" +version = "1.55.0" description = "Common protobufs used in Google APIs" category = "dev" optional = false @@ -555,7 +555,7 @@ oauth2client = ">=1.4.11" [[package]] name = "grpcio" -version = "1.44.0rc2" +version = "1.45.0rc1" description = "HTTP/2-based RPC framework" category = "dev" optional = false @@ -565,7 +565,7 @@ python-versions = ">=3.6" six = ">=1.5.2" [package.extras] -protobuf = ["grpcio-tools (>=1.44.0rc2)"] +protobuf = ["grpcio-tools (>=1.45.0rc1)"] [[package]] name = "httplib2" @@ -588,7 +588,7 @@ python-versions = ">=3.5" [[package]] name = "importlib-metadata" -version = "4.10.1" +version = "4.11.2" description = "Read metadata from Python packages" category = "main" optional = true @@ -598,9 +598,9 @@ python-versions = ">=3.7" zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "jeepney" @@ -686,11 +686,11 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [[package]] name = "markupsafe" -version = "2.0.1" +version = "2.1.0" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "mccabe" @@ -713,36 +713,34 @@ ansible-autodoc-fork = "*" [[package]] name = "molecule" -version = "3.5.2" +version = "3.6.1" description = "Molecule aids in the development and testing of Ansible roles" category = "dev" optional = false python-versions = ">=3.6" [package.dependencies] -ansible-compat = ">=0.5.0" +ansible-compat = ">=1.0.0" cerberus = ">=1.3.1,<1.3.3 || >1.3.3,<1.3.4 || >1.3.4" click = ">=8.0,<9" click-help-colors = ">=0.9" cookiecutter = ">=1.7.3" -enrich = ">=1.2.5" +enrich = ">=1.2.7" Jinja2 = ">=2.11.3" packaging = "*" paramiko = ">=2.5.0,<3" pluggy = ">=0.7.1,<2.0" -PyYAML = ">=5.1,<6" +PyYAML = ">=5.1" rich = ">=9.5.1" -selinux = {version = "*", markers = "sys_platform == \"linux\" or sys_platform == \"linux2\""} -subprocess-tee = ">=0.3.5" [package.extras] ansible = ["ansible (>=2.10)"] ansible-base = ["ansible-base (>=2.10)"] docker = ["molecule-docker (>=1.0.0)"] -docs = ["Sphinx (>=4.0.2)", "simplejson (>=3.17.2)", "sphinx-ansible-theme (>=0.8.0,<0.9.0)", "sphinx-notfound-page (>=0.7.1)"] +docs = ["Sphinx (>=4.3.2,<4.4.0)", "simplejson (>=3.17.2)", "sphinx-ansible-theme (>=0.8.0,<0.10.0)", "sphinx-notfound-page (>=0.7.1)"] lint = ["flake8 (>=3.8.4)", "pre-commit (>=2.10.1)", "yamllint"] podman = ["molecule-podman (>=1.0.1)"] -test = ["ansi2html (>=1.6.0)", "pexpect (>=4.8.0,<5)", "pytest-cov (>=2.10.1)", "pytest-html (>=3.0.0)", "pytest-mock (>=3.3.1)", "pytest-plus (>=0.2)", "pytest-testinfra (>=6.1.0)", "pytest-xdist (>=2.1.0)", "pytest (>=6.1.2)"] +test = ["ansi2html (>=1.6.0)", "coverage (>=6.2)", "filelock", "pexpect (>=4.8.0,<5)", "pytest-cov (>=2.10.1)", "pytest-html (>=3.0.0)", "pytest-mock (>=3.3.1)", "pytest-plus (>=0.2)", "pytest-testinfra (>=6.1.0)", "pytest-xdist (>=2.1.0)", "pytest (>=6.1.2)"] windows = ["pywinrm"] [[package]] @@ -887,7 +885,7 @@ testing = ["coverage", "nose"] [[package]] name = "platformdirs" -version = "2.4.1" +version = "2.5.1" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false @@ -1006,7 +1004,7 @@ python-versions = "*" [[package]] name = "pycryptodome" -version = "3.14.0" +version = "3.14.1" description = "Cryptographic library for Python" category = "dev" optional = false @@ -1067,11 +1065,11 @@ six = ">=1.5" [[package]] name = "python-slugify" -version = "5.0.2" -description = "A Python Slugify application that handles Unicode" +version = "6.1.1" +description = "A Python slugify application that also handles Unicode" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.dependencies] text-unidecode = ">=1.3" @@ -1131,7 +1129,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [[package]] name = "readme-renderer" -version = "32.0" +version = "33.0" description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse" category = "main" optional = true @@ -1143,7 +1141,7 @@ docutils = ">=0.13.1" Pygments = ">=2.5.1" [package.extras] -md = ["cmarkgfm (>=0.5.0,<0.7.0)"] +md = ["cmarkgfm (>=0.8.0)"] [[package]] name = "requests" @@ -1214,14 +1212,13 @@ idna2008 = ["idna"] [[package]] name = "rich" -version = "11.1.0" +version = "12.0.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "dev" optional = false python-versions = ">=3.6.2,<4.0.0" [package.dependencies] -colorama = ">=0.4.0,<0.5.0" commonmark = ">=0.9.0,<0.10.0" pygments = ">=2.6.0,<3.0.0" @@ -1241,7 +1238,7 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruamel.yaml" -version = "0.17.20" +version = "0.17.21" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" category = "dev" optional = false @@ -1328,6 +1325,18 @@ category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "toml-sort" +version = "0.19.0" +description = "Toml sorting library" +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" + +[package.dependencies] +click = ">=7.0" +tomlkit = ">=0.5.8" + [[package]] name = "tomli" version = "1.2.3" @@ -1336,9 +1345,17 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "tomlkit" +version = "0.10.0" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" + [[package]] name = "tqdm" -version = "4.62.3" +version = "4.63.0" description = "Fast, Extensible Progress Meter" category = "main" optional = true @@ -1374,7 +1391,7 @@ urllib3 = ">=1.26.0" [[package]] name = "typing-extensions" -version = "4.0.1" +version = "4.1.1" description = "Backported and Experimental Type Hints for Python 3.6+" category = "dev" optional = false @@ -1411,7 +1428,7 @@ python-versions = "*" [[package]] name = "websocket-client" -version = "1.2.3" +version = "1.3.1" description = "WebSocket client for Python with low level API options" category = "main" optional = false @@ -1460,7 +1477,7 @@ semantic = ["pip", "setuptools", "twine", "wheel"] [metadata] lock-version = "1.1" python-versions = ">=3.10.0,<4.0.0" -content-hash = "26a191002a18b603065322f580ab69e43efffe38348b765091406a65f5658a59" +content-hash = "348ab91c7c6f5167ea45a37f662ec9c49b55051ef71df1e16be82f03ef8426dd" [metadata.files] ansible = [ @@ -1470,18 +1487,18 @@ ansible-autodoc-fork = [ {file = "ansible-autodoc-fork-0.5.6.tar.gz", hash = "sha256:5718ede0383731ea366280004863f140c6a0e33dbcd0e7f3eb14da49e7b1320c"}, ] ansible-compat = [ - {file = "ansible-compat-1.0.0.tar.gz", hash = "sha256:2ade2acbd1d7868eeb602c682afe92bc8c05480333205c328b4c2a1b09f970a4"}, - {file = "ansible_compat-1.0.0-py3-none-any.whl", hash = "sha256:8b9c9678e82c328df9574cd7eb3777e7f25cf1530bc48e612597213bc6e4bd0d"}, + {file = "ansible-compat-2.0.0.tar.gz", hash = "sha256:4027da4ec2b524c263a801cc2dc6da2b98c2996cec258cef118a30c790467ed2"}, + {file = "ansible_compat-2.0.0-py3-none-any.whl", hash = "sha256:c004cf81a6f8aa94e656f576327c2a30476dbe06385ec93ab7d866a35f444c45"}, ] ansible-core = [ - {file = "ansible-core-2.11.8.tar.gz", hash = "sha256:5f360f090a6f2e3169e583542413bdd40b8122dbc4153603048e7747d1ba9604"}, + {file = "ansible-core-2.11.9.tar.gz", hash = "sha256:4e1fa4b81a18caca7db1a9110b63fbee957d5d7468bcd2b58d6ea2429d40bde0"}, ] ansible-lint = [ {file = "ansible-lint-4.3.7.tar.gz", hash = "sha256:1012fc3f5c4c0c58eece515860f19c34c5088faa5be412eec6fae5b45bda9c4f"}, {file = "ansible_lint-4.3.7-py2.py3-none-any.whl", hash = "sha256:300e841f690b556a08d44902d6414283dc101079b27909e3a892f1cf1d10d7ff"}, ] ansibler = [ - {file = "ansibler-0.2.4.tar.gz", hash = "sha256:80e23abe1cf99741d51ab55ea4dfb62afdf99424cc8afdbee6978526a2ca408c"}, + {file = "ansibler-0.3.tar.gz", hash = "sha256:200ae6a0b077593883814ceac55d10a6bedd7758ccecce207b70ce7465030645"}, ] apache-libcloud = [ {file = "apache-libcloud-3.4.1.tar.gz", hash = "sha256:88f18da0cf3fac0af723e743fb741d9d1be251881edab7a5a0d1629955b5011b"}, @@ -1587,12 +1604,12 @@ chardet = [ {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.11.tar.gz", hash = "sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"}, - {file = "charset_normalizer-2.0.11-py3-none-any.whl", hash = "sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45"}, + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] click = [ - {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, - {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, + {file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, + {file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, ] click-help-colors = [ {file = "click-help-colors-0.9.1.tar.gz", hash = "sha256:78cbcf30cfa81c5fc2a52f49220121e1a8190cd19197d9245997605d3405824d"}, @@ -1633,8 +1650,8 @@ cryptography = [ {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"}, ] distro = [ - {file = "distro-1.6.0-py2.py3-none-any.whl", hash = "sha256:c8713330ab31a034623a9515663ed87696700b55f04556b97c39cd261aa70dc7"}, - {file = "distro-1.6.0.tar.gz", hash = "sha256:83f5e5a09f9c5f68f60173de572930effbcc0287bb84fdc4426cb4168c088424"}, + {file = "distro-1.7.0-py3-none-any.whl", hash = "sha256:d596311d707e692c2160c37807f83e3820c5d539d5a83e87cfb6babd8ba3a06b"}, + {file = "distro-1.7.0.tar.gz", hash = "sha256:151aeccf60c216402932b52e40ee477a939f8d58898927378a02abbe852c1c39"}, ] docker = [ {file = "docker-5.0.3-py2.py3-none-any.whl", hash = "sha256:7a79bb439e3df59d0a72621775d600bc8bc8b422d285824cb37103eab91d1ce0"}, @@ -1665,12 +1682,12 @@ gcloud = [ {file = "gcloud-0.18.3.tar.gz", hash = "sha256:0af2dec59fce20561752f86e42d981c6a255e306a6c5e5d1fa3d358a8857e4fb"}, ] google-api-core = [ - {file = "google-api-core-2.5.0.tar.gz", hash = "sha256:f33863a6709651703b8b18b67093514838c79f2b04d02aa501203079f24b8018"}, - {file = "google_api_core-2.5.0-py2.py3-none-any.whl", hash = "sha256:7d030edbd3a0e994d796e62716022752684e863a6df9864b6ca82a1616c2a5a6"}, + {file = "google-api-core-2.7.1.tar.gz", hash = "sha256:b0fa577e512f0c8e063386b974718b8614586a798c5894ed34bedf256d9dae24"}, + {file = "google_api_core-2.7.1-py3-none-any.whl", hash = "sha256:6be1fc59e2a7ba9f66808bbc22f976f81e4c3e7ab20fa0620ce42686288787d0"}, ] google-api-python-client = [ - {file = "google-api-python-client-2.36.0.tar.gz", hash = "sha256:533c69e8ddce6630a2ce5b98348f6a58a23df49cb92040a0086315df979404af"}, - {file = "google_api_python_client-2.36.0-py2.py3-none-any.whl", hash = "sha256:9e8863dec46224d4375cf3834e27ffd4bce79858f0f00a6109a51e3e62b4f3c2"}, + {file = "google-api-python-client-2.40.0.tar.gz", hash = "sha256:080d4be6c66aa95fb530916844cb2601645daf5e5a1ce8d2bc57b8c72f1c7cf6"}, + {file = "google_api_python_client-2.40.0-py2.py3-none-any.whl", hash = "sha256:bf969a84cf882958999cf6de35928bf5ae3957637d5842060798e5d39b0ba1e5"}, ] google-auth = [ {file = "google-auth-2.6.0.tar.gz", hash = "sha256:ad160fc1ea8f19e331a16a14a79f3d643d813a69534ba9611d2c80dc10439dad"}, @@ -1684,8 +1701,8 @@ google-gax = [ {file = "google-gax-0.12.5.tar.gz", hash = "sha256:63312a04cb87ca50e857245f05c582b2171807a30e61cef85006b983bf659cb9"}, ] googleapis-common-protos = [ - {file = "googleapis-common-protos-1.54.0.tar.gz", hash = "sha256:a4031d6ec6c2b1b6dc3e0be7e10a1bd72fb0b18b07ef9be7b51f2c1004ce2437"}, - {file = "googleapis_common_protos-1.54.0-py2.py3-none-any.whl", hash = "sha256:e54345a2add15dc5e1a7891c27731ff347b4c33765d79b5ed7026a6c0c7cbcae"}, + {file = "googleapis-common-protos-1.55.0.tar.gz", hash = "sha256:53eb313064738f45d5ac634155ae208e121c963659627b90dfcb61ef514c03e1"}, + {file = "googleapis_common_protos-1.55.0-py2.py3-none-any.whl", hash = "sha256:183bb0356bd614c4330ad5158bc1c1bcf9bcf7f5e7f911317559fe209496eeee"}, ] grpc-google-logging-v2 = [ {file = "grpc-google-logging-v2-0.8.1.tar.gz", hash = "sha256:4b6b4e603860b134b2cb8732bb4d1f2cec963d553497dcf70b3f5ecc99d7fb4f"}, @@ -1694,50 +1711,60 @@ grpc-google-pubsub-v1 = [ {file = "grpc-google-pubsub-v1-0.8.1.tar.gz", hash = "sha256:ab5a3a239a9678012cdc00a9b9a8fe8c75fca9a0035da41da3078145e9d967b9"}, ] grpcio = [ - {file = "grpcio-1.44.0rc2-cp310-cp310-linux_armv7l.whl", hash = "sha256:e77a828716dfbd79f2752fe574fe52aaf2753e1f59ec549356dd91a1b2dcf3ea"}, - {file = "grpcio-1.44.0rc2-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:bfc3914107d7095fd649cbe96fd2329e2fc3b43411b78a1199f00ca86abc27d5"}, - {file = "grpcio-1.44.0rc2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:d835b5de806276a73402f3b9e46ab5557aa6906dffb01e37f0db737170c87e13"}, - {file = "grpcio-1.44.0rc2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81ecdc63947283f136c41d1ce1836af11d5e9722ebeb1264ebf1de5dff71db0b"}, - {file = "grpcio-1.44.0rc2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbdf4cea10da555d6ca99be8c14fac2e58b326ea2159895977008d8d5239ca9c"}, - {file = "grpcio-1.44.0rc2-cp310-cp310-win32.whl", hash = "sha256:07bdaca45538e04aee726d7c5885cddd8d838aeb29b298c5d181e69d5364c3c6"}, - {file = "grpcio-1.44.0rc2-cp310-cp310-win_amd64.whl", hash = "sha256:7bfeeed865b0608a0c4bde6f2dd0151cee8682bf09c1e67abc0820595f51b6b4"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-linux_armv7l.whl", hash = "sha256:c3e342707d6bd7a94a98d80ef84ac9c1a62d1bccdbeed5012c69d9f9534d71aa"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:8c88fa3f6c995131c9747891f02ec7b7df288a73bf13f49059439afa700dce58"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:1362035396051fd5be9efb83a1eaa41a15f0a16e0213c7440387fcb8a8859a11"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:5da23c113e81d93d35fd88a1f9736df7c6e375485a71eff3ae4d04ddc7e95441"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:47aa802456dbe48a48932fba63c20e2c2b62e356a7f0fa52c4d3694ea134a85f"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd5550a4b10103f688a9c4d1beaf3eff1fe17fcd2df715439258f0ff77715733"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc80a10a4c832ef9ee107b2a4f01a04d11fc3bd1b803421c16e980b6febcf4ff"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-win32.whl", hash = "sha256:eca7aaaf54d7c3fa83adc89cf107a6db065c1059cc1628ae1bb0f88658228bf2"}, - {file = "grpcio-1.44.0rc2-cp36-cp36m-win_amd64.whl", hash = "sha256:71b6a0b78b481e51f000066485229120f242d3154b8b8a08689b9219038cfe4e"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:708bc3cd31044bd0d3b47f0179cbc107e3ca9fa5271196ce1bc0799cb3cd84c2"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:fe5f7b5eca7dbf6155bffba2d762a80d7e2a89d52911735c74c109fd2a66d326"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:3e3e256dcaf6d4ebb8aca07c141bcc1bce7ddd3a140f3625cc764b0bd14b5bc0"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:b2b543eec8bfb1c097561821f9b9a9c40f4705ac62acc5651611a8330b2c6e14"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:1f10b336530dd0f91269042b085936839ec6ac9104186a6fd1a55745b7b381c8"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cad50488b5675042b3e76bad83d80d9a76921346e57a9ff827bcb9bc1c5e715f"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0d296ae91cf2dd7c0140d871cb3d8d59584c3951775cd40951129f93438592d"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-win32.whl", hash = "sha256:ffead2484f45b775bc3e32bd54a1ee35c32006f67cfaa80be3e55d031dcf5a62"}, - {file = "grpcio-1.44.0rc2-cp37-cp37m-win_amd64.whl", hash = "sha256:845f8de9baf98f1d6ca7f031b03fb4e0341d587812501f1828f567473c88874c"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-linux_armv7l.whl", hash = "sha256:6d670addae599d5b010340c9e457dd1a615d7ee627451471e909b1b28fe52aa2"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:e8f89463461bf8c3de3690be78b20ad28666f49a9df3df7520b187c4f8194065"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:e1933c2a5f4a5a544d489997668ce49d79a14c03e7b41c34c7796afd814a4c0e"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:00ff827b3301722a7b2b3a647fda1078ff5c4821dbe32bd0adb3c8ac0bfe5c4d"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:ab82ac1b94bd8a2d0f39d72702f890fc328d82ffccac4e338f6da4b87cec7635"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81c567b1b12634e3c30e3afcacd64178b24acbf5a41423e8fde81ebed63b1c4e"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d790fc0b2e9f1fd067ce5565be2a2e0018e0ababa17c3bcef25ece57824d7109"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-win32.whl", hash = "sha256:4647b742bc4416f07c548c7abf079394836e560c47a65315f912f3d25406f698"}, - {file = "grpcio-1.44.0rc2-cp38-cp38-win_amd64.whl", hash = "sha256:15a4c113fcd5630417426198a4b648d03c20164e4837cd879a03af26ef523bfa"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-linux_armv7l.whl", hash = "sha256:0020b5b0fbe1418cda4dd1810772cc60798464063d4a901eadb550f4c0ccc2cf"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:d071b13210c4e139377ccb116e1bd0213ae80afdba25c7b7b54f6392a93b56c3"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:95a47cbc62ac5f663732430e46bf88604cb96b936294bb8945c30073eba496b7"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:be4d6e09fbf02d91b83f7a483b09aeed8f295a1a6b63f62b713fcc27ab729aa5"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:327e527115c34e370f25972f6ed0e4f5df8a84fc943d77bed632fff4b53a7191"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fde7553ee57af4087229718ed702ec31b8a978264c5e56c3e04724d7e2d73bb"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:557877087a246c8a957c1ea5a8d436c583fc1b06bfc028b46a6062b1b3e077b4"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-win32.whl", hash = "sha256:b06c602e1118cd2f3f80533052f7f407207b6f07f72c488df0f56a682343bf2b"}, - {file = "grpcio-1.44.0rc2-cp39-cp39-win_amd64.whl", hash = "sha256:53e7d73c37ce90f9f4d6c16846b30b404d6f99dbd6c00c68529deb3d36f95d42"}, - {file = "grpcio-1.44.0rc2.tar.gz", hash = "sha256:99f22f98d3726d660c9c05969ef5cd9551fed03e937df180faef8aa3d8f595a7"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-linux_armv7l.whl", hash = "sha256:bcdf6fe55e37773b0bee4d7383dfee47f9d044a9712b2a3833f813a65364bf42"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:a22f00a049b0d90bb76acdda74ab16df5f59a836aef933ba07dca77853a68dc5"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:8e602a17cc802b1c44f4be0d0210a48cbd554afce1d75d0903d6e225bece31c9"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7dcd57233db114b2343847751308ffa8c9be2769ff069dbcf1fec3c482fcdc0e"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e548edd49d076d84a31329b096cd33f415702705a5220da9ce831fff264c999e"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4ed924193d60e0536c1d21beca1b80ac5564ce969a6ef44a1cabeba5cd36ae1e"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a46df2f6abe947cef50ef25f7d2703fb8ae69d54e656e42be4a9cf14c6780cf4"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-win32.whl", hash = "sha256:d575ac36d7b40f9deea1af92cf727dac97fa081ee31dfd945d0ec027a854ebd5"}, + {file = "grpcio-1.45.0rc1-cp310-cp310-win_amd64.whl", hash = "sha256:ef357179b0910b2ab1f303f10414eef6097445c70d849031841b7c2b3f7c6c8d"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-linux_armv7l.whl", hash = "sha256:7fc82cdaade801d96e5226eb40f0f1a6fa395ef39ea37ceeb216b87d3e503303"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:8816dd44c8e0bd2e0760aebb77a5ce401b49ccd7f1eb195d47ce3e2751224c7a"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b3a76937b6079a010e2f27d1758f96977385352e3839d09f7c467e708194d50c"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bf39add21569032ba0ccc6d40d68da5386292ccb6da57df6d5b0c3605b3b05b0"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:735a622ee588d1d10b11caab66ee4d9a776d0067fe8b8af1792a09b8d1a96868"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e637b3374fc78c30064fc174ffcd1eb3ba6078836d883bc03130196a16ac8d71"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f65525548961140f1348e94fc3fd3f7794b8c0414c03e34e82ffe7ea4023f216"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:ab8d4abd07372f0de678f48cde17a82e3a44eccc555f6fe0fd21b63fcefe4099"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9f8187610c4c995a5aa73a81d8b524ca75c48e1c5082cc3ec410756db0d19b6b"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-win32.whl", hash = "sha256:b2d1895d7868f63169ccb72d997b6912fb8a29ebaece7c8e4edfe84b6993ff18"}, + {file = "grpcio-1.45.0rc1-cp36-cp36m-win_amd64.whl", hash = "sha256:077a15ce2c620aa3d0e458d585e48281153147fe8c09231d93fb095d36d776df"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:731987a32e46b5bcc9d1520b54ed6ebacc8b4c1dd433202af3014e1e26f9683b"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f5309452e6f0538e32d07aab2f0d62e234a2e4b45d53bea07d74b5afa7729527"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f33769c0a2167454e69caddaa89affe791178413955be491192027abb1ab0353"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:777dfa25cfdafbb95ed1c0e9fe144f902101bc11c1146c5c01d980a1d5c234dc"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:ef4e8a726696344fa9d51e289cf78e742edf5f18ec210d70f838d521ea50ec48"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de243a3cf74b4e5369882e13632803f16cb180a9c958dd16450c9445c07ff776"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6d78794096444306c687f208cda6539c61d0ec38a8bd88f3583243feeb90e43"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c37a6d4932d7b331962e478ad0a4cd09aa548e7b2cbf5aefd2d4dce0544f7c26"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:82fb184ff5ba1333060a41efff2e90717275d14c07cf07efafa7f9782c03c018"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-win32.whl", hash = "sha256:cfaa0c0070644540e4343c3837c7c44e53bf7591ab1393573025ef3b00b1ff23"}, + {file = "grpcio-1.45.0rc1-cp37-cp37m-win_amd64.whl", hash = "sha256:d018a3c03608e62fadb89ca26a247ff90fa863baeef81b74bdffccde4f720d4b"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-linux_armv7l.whl", hash = "sha256:4c07dab99be2b4d4fef08387dda400ff480e3fe2ac4fd8e40dc4a5a69b7d6753"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4d840c837363772ae435244073d7537955cbe68f48345d431e925f55921775cd"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f57f719cac4e10fe8c7ab97d302af5fed38381b214b2a8cb88e3b686d05d8ac"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c968431be96459a0b2c3a076d01ba52de6ad1ba669cd19dc1654a9f5ab655e"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:819d62fe3eb5600da736f1b6ebc89dfe3747463bf9a7689cfc4e9c77f489017d"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1371914fd87fa358271a62e8c489526ebcedcda7f332aa75b1327f32c6a77116"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c81e62cedecf41c3bf884f987233d232e9d0b4df3b0a5dbb29f660c2a1ed61fa"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3c85ba795ca00ddc5439ae4e719d69ba072627aa38eab3730c03b1a3696becea"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:46347bcdedcfa3a38f367e9391972a701c6e998559c8fb0a88187db1e7e7034b"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-win32.whl", hash = "sha256:713dae6b3d5fcf92da125a0aadc4c99b1174f9a3679ce9426236e362adfae6ab"}, + {file = "grpcio-1.45.0rc1-cp38-cp38-win_amd64.whl", hash = "sha256:a066fdfd0a8a84ef72a69fd685bd0b801e5db2eedc497010421c5a5b96e3c328"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-linux_armv7l.whl", hash = "sha256:846574e9b99d59c63f70df6822a7a6400fec6c65cb380db27bb1bd6e93b18f52"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:8ab88e5fc85f7389b8656671e0deeadfe4cf806cdfc493fd7571c74ed5b0f695"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4261726896a288e7865be25bb9b51767ffd5ed72cef93e7bd150541e6ecd6657"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:853eefbbac33717a4bc9b4285784786c4cb194885672063445b48226feeb5538"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:815abda8af85f9b43cdffe22a22f70ee7b806078a8ecc760ff303c1f85b4da33"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:681644ae9cb8280ca365c076fa6b3d82734ea797bd920c466f476b5d2648ea07"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97af6a4607dadfaa764fe2ede136999e629cb23d75ca888c0cb99c737718bfdf"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1f091ae9c476556482b23c82e38b7e3f8f8936acfe49ce94d9b469ce2f4864fa"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:13f7fa460fbf3900cd4de70c9e461dadd0d41a6f97ed6d211fa64c6227199713"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-win32.whl", hash = "sha256:26863cae81589be15fff218a63404f096cf3307089d8ceb35fa6ed4f71056729"}, + {file = "grpcio-1.45.0rc1-cp39-cp39-win_amd64.whl", hash = "sha256:c8170689b4dae5e9ed16a0a6cc9ce7a857849b2a5056e6511ceaef172a76d3a0"}, + {file = "grpcio-1.45.0rc1.tar.gz", hash = "sha256:8b9a2fe1ba1ee1969415387ead42f1d39d970963724d455631de5e862c132cb0"}, ] httplib2 = [ {file = "httplib2-0.20.4-py3-none-any.whl", hash = "sha256:8b6a905cb1c79eefd03f8669fd993c36dc341f7c558f056cb5a33b5c2f458543"}, @@ -1748,8 +1775,8 @@ idna = [ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"}, - {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"}, + {file = "importlib_metadata-4.11.2-py3-none-any.whl", hash = "sha256:d16e8c1deb60de41b8e8ed21c1a7b947b0bc62fab7e1d470bcdf331cea2e6735"}, + {file = "importlib_metadata-4.11.2.tar.gz", hash = "sha256:b36ffa925fe3139b2f6ff11d6925ffd4fa7bc47870165e3ac260ac7b4f91e6ac"}, ] jeepney = [ {file = "jeepney-0.7.1-py3-none-any.whl", hash = "sha256:1b5a0ea5c0e7b166b2f5895b91a08c14de8915afda4407fb5022a195224958ac"}, @@ -1775,75 +1802,46 @@ keyring = [ {file = "keyring-23.5.0.tar.gz", hash = "sha256:9012508e141a80bd1c0b6778d5c610dd9f8c464d75ac6774248500503f972fb9"}, ] markupsafe = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3028252424c72b2602a323f70fbf50aa80a5d3aa616ea6add4ba21ae9cc9da4c"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:290b02bab3c9e216da57c1d11d2ba73a9f73a614bbdcc027d299a60cdfabb11a"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e104c0c2b4cd765b4e83909cde7ec61a1e313f8a75775897db321450e928cce"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24c3be29abb6b34052fd26fc7a8e0a49b1ee9d282e3665e8ad09a0a68faee5b3"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204730fd5fe2fe3b1e9ccadb2bd18ba8712b111dcabce185af0b3b5285a7c989"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d3b64c65328cb4cd252c94f83e66e3d7acf8891e60ebf588d7b493a55a1dbf26"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:96de1932237abe0a13ba68b63e94113678c379dca45afa040a17b6e1ad7ed076"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75bb36f134883fdbe13d8e63b8675f5f12b80bb6627f7714c7d6c5becf22719f"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-win32.whl", hash = "sha256:4056f752015dfa9828dce3140dbadd543b555afb3252507348c493def166d454"}, + {file = "MarkupSafe-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:d4e702eea4a2903441f2735799d217f4ac1b55f7d8ad96ab7d4e25417cb0827c"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f0eddfcabd6936558ec020130f932d479930581171368fd728efcfb6ef0dd357"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ddea4c352a488b5e1069069f2f501006b1a4362cb906bee9a193ef1245a7a61"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09c86c9643cceb1d87ca08cdc30160d1b7ab49a8a21564868921959bd16441b8"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a0abef2ca47b33fb615b491ce31b055ef2430de52c5b3fb19a4042dbc5cadb"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:736895a020e31b428b3382a7887bfea96102c529530299f426bf2e636aacec9e"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:679cbb78914ab212c49c67ba2c7396dc599a8479de51b9a87b174700abd9ea49"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:84ad5e29bf8bab3ad70fd707d3c05524862bddc54dc040982b0dbcff36481de7"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-win32.whl", hash = "sha256:8da5924cb1f9064589767b0f3fc39d03e3d0fb5aa29e0cb21d43106519bd624a"}, + {file = "MarkupSafe-2.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:454ffc1cbb75227d15667c09f164a0099159da0c1f3d2636aa648f12675491ad"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:142119fb14a1ef6d758912b25c4e803c3ff66920635c44078666fe7cc3f8f759"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b2a5a856019d2833c56a3dcac1b80fe795c95f401818ea963594b345929dffa7"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d1fb9b2eec3c9714dd936860850300b51dbaa37404209c8d4cb66547884b7ed"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62c0285e91414f5c8f621a17b69fc0088394ccdaa961ef469e833dbff64bd5ea"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc3150f85e2dbcf99e65238c842d1cfe69d3e7649b19864c1cc043213d9cd730"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f02cf7221d5cd915d7fa58ab64f7ee6dd0f6cddbb48683debf5d04ae9b1c2cc1"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5653619b3eb5cbd35bfba3c12d575db2a74d15e0e1c08bf1db788069d410ce8"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7d2f5d97fcbd004c03df8d8fe2b973fe2b14e7bfeb2cfa012eaa8759ce9a762f"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-win32.whl", hash = "sha256:3cace1837bc84e63b3fd2dfce37f08f8c18aeb81ef5cf6bb9b51f625cb4e6cd8"}, + {file = "MarkupSafe-2.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:fabbe18087c3d33c5824cb145ffca52eccd053061df1d79d4b66dafa5ad2a5ea"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:023af8c54fe63530545f70dd2a2a7eed18d07a9a77b94e8bf1e2ff7f252db9a3"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d66624f04de4af8bbf1c7f21cc06649c1c69a7f84109179add573ce35e46d448"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c532d5ab79be0199fa2658e24a02fce8542df196e60665dd322409a03db6a52c"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ec74fada3841b8c5f4c4f197bea916025cb9aa3fe5abf7d52b655d042f956"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c653fde75a6e5eb814d2a0a89378f83d1d3f502ab710904ee585c38888816c"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:961eb86e5be7d0973789f30ebcf6caab60b844203f4396ece27310295a6082c7"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:598b65d74615c021423bd45c2bc5e9b59539c875a9bdb7e5f2a6b92dfcfc268d"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:599941da468f2cf22bf90a84f6e2a65524e87be2fce844f96f2dd9a6c9d1e635"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-win32.whl", hash = "sha256:e6f7f3f41faffaea6596da86ecc2389672fa949bd035251eab26dc6697451d05"}, + {file = "MarkupSafe-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:b8811d48078d1cf2a6863dafb896e68406c5f513048451cd2ded0473133473c7"}, + {file = "MarkupSafe-2.1.0.tar.gz", hash = "sha256:80beaf63ddfbc64a0452b841d8036ca0611e049650e20afcb882f5d3c266d65f"}, ] mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, @@ -1853,8 +1851,8 @@ mod-ansible-autodoc = [ {file = "mod-ansible-autodoc-0.5.7.tar.gz", hash = "sha256:6594bd2fd47d661e3f0effce0328f4cfa02906540e33d40d1e86b1535e49d693"}, ] molecule = [ - {file = "molecule-3.5.2-py3-none-any.whl", hash = "sha256:b174c2974897791e1681723d16f3744700e071f6d1e3df9cf9a07d35c6df0552"}, - {file = "molecule-3.5.2.tar.gz", hash = "sha256:c82af099e5c0998d7eb16a3bf65ed5a4edd97e3824fb938ce01bf064a46ce0ca"}, + {file = "molecule-3.6.1-py3-none-any.whl", hash = "sha256:f7f57d6b3b775e876bea2a46e368eee72d391e163f8175acf29fef797a280248"}, + {file = "molecule-3.6.1.tar.gz", hash = "sha256:3b7d5ba2978c15a034df8c7aa59dec5436f7d3260d1f9db2c78ae14ae3a9deeb"}, ] molecule-docker = [ {file = "molecule-docker-1.1.0.tar.gz", hash = "sha256:e15133395f10dbf60f75125aae7145f47747fc7158f2317698885013796252bf"}, @@ -1897,8 +1895,8 @@ pkginfo = [ {file = "pkginfo-1.8.2.tar.gz", hash = "sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff"}, ] platformdirs = [ - {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"}, - {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"}, + {file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"}, + {file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -1981,36 +1979,36 @@ pycrypto = [ {file = "pycrypto-2.6.1.tar.gz", hash = "sha256:f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c"}, ] pycryptodome = [ - {file = "pycryptodome-3.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:bd800856e6dea6924504795ae4ec0d822e912e0a9a215e73b77b585c4d15a0f7"}, - {file = "pycryptodome-3.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:625f78ad69aa3c45e19b85b9e9cae3a30aa4a1de6b908981a63426b88e860489"}, - {file = "pycryptodome-3.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:a1c116dd7a00aac631f67920912fd8ef7a5ad3402cd4d497c6f5cc6b8115747b"}, - {file = "pycryptodome-3.14.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0d0b6cca6b707b2c7cd4177c2d3cd950efa959ed8f01c30e676f102c68156f00"}, - {file = "pycryptodome-3.14.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d939a257117cc8c6840ad69f149b3ca5e07268cfe0429bd9feec0f91da2343d"}, - {file = "pycryptodome-3.14.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:41dbb8c2129d43f34ed555cbd365d5e8f023ef0f9238fd9cd0302086b15a38b3"}, - {file = "pycryptodome-3.14.0-cp27-cp27m-win32.whl", hash = "sha256:9b454af09914807cef1222d100a8c523737a160347cb8d699facc4bdfb9fe725"}, - {file = "pycryptodome-3.14.0-cp27-cp27m-win_amd64.whl", hash = "sha256:95bac6e55411650933f3b615e57bf0966bf08f3ce07c01f07482ced95f18cbec"}, - {file = "pycryptodome-3.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:0ffbca43c1788243421a8583d85acb59f4cd0b82b001c485fdc3fbfd8fd0804f"}, - {file = "pycryptodome-3.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:69b85d78f7db628370d2cc87f1c41a449f6460896ba95f412173618f75027c2c"}, - {file = "pycryptodome-3.14.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:bba348d2823315ab8ebe44f0b2fc2ff8dfac8de881713a08def3dadcfc8e92bb"}, - {file = "pycryptodome-3.14.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7d667daa851b1f9a20f2b5cad3cff13fba5204bc2f857d12f27c25b178d8629b"}, - {file = "pycryptodome-3.14.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:74918d5de06b12fef2255135bede41307a5f7b929b145ad867111525aea075dc"}, - {file = "pycryptodome-3.14.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c2b6faabd09d2876f9050f8af5d78046d81fe856f99e801c2ddab85b59602007"}, - {file = "pycryptodome-3.14.0-cp35-abi3-manylinux1_i686.whl", hash = "sha256:22a8629315c76d2bec57bc4fd67eb7e01664c3e3b9579df40f530ee5821db1de"}, - {file = "pycryptodome-3.14.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:7e3851e4fbbab72d9b30f98a504f450cc61e497e8e4b0be8205dc198703eee4d"}, - {file = "pycryptodome-3.14.0-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:9006f17944efaacc3be364c01c2253c00a00f0b5fa5a1a85a1191efd861e764d"}, - {file = "pycryptodome-3.14.0-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:8f0da308fca149b4c4da78e1388f82d8dd167e0ce12992a44f81b506cede3109"}, - {file = "pycryptodome-3.14.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:d186e34747985fbd94df7ed4d621f8377165053a06872314c2a594af34741655"}, - {file = "pycryptodome-3.14.0-cp35-abi3-win32.whl", hash = "sha256:2ed4da8f8afe44895c1f49ae1141a55b15d81dc745b5baa7b7a7265d7b40b81e"}, - {file = "pycryptodome-3.14.0-cp35-abi3-win_amd64.whl", hash = "sha256:11167a1f892283e5320feb5e81589fd041a1822b94c047820f00bc03eb98a9f7"}, - {file = "pycryptodome-3.14.0-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:1714ea5f83bcff25e8ae4640e22359d7a0815157a29d9f4eebc2b9e975a3cda0"}, - {file = "pycryptodome-3.14.0-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:3a011b9fe674bd21056613e88a3e660c56f1b47263138ebf420aa3ee4b8b0107"}, - {file = "pycryptodome-3.14.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:3fd50e3682ac3a684ace5b90ba1aef8090a78eeadf38c1ec385aad3a599cfd68"}, - {file = "pycryptodome-3.14.0-pp27-pypy_73-win32.whl", hash = "sha256:08be50d4195edd595df580077bbeec5599d0e5aa0cc468083178ae870e0b29f4"}, - {file = "pycryptodome-3.14.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:16c171dd969c9046b7b304c6ba0c643624dcf18093a66bd30b8b091703f177a2"}, - {file = "pycryptodome-3.14.0-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:89bb56cfd1fb74663842710bc41a6be26dafceb60eb8d432536891aea08a3740"}, - {file = "pycryptodome-3.14.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:c30a98c8718ae93d44680a7038adb484a520319860747ba43b6cd0a20f6b5984"}, - {file = "pycryptodome-3.14.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:e972f566ef7b821c8b958dab64174afa072f8271b779e32444ad7c127b0a84b2"}, - {file = "pycryptodome-3.14.0.tar.gz", hash = "sha256:ceea92a4b8ba6c50d8d70f2efbb4ea14b002dac4160ce4dda33f1b7442f8158a"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:75a3a364fee153e77ed889c957f6f94ec6d234b82e7195b117180dcc9fc16f96"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:aae395f79fa549fb1f6e3dc85cf277f0351e15a22e6547250056c7f0c990d6a5"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f403a3e297a59d94121cb3ee4b1cf41f844332940a62d71f9e4a009cc3533493"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ce7a875694cd6ccd8682017a7c06c6483600f151d8916f2b25cf7a439e600263"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a36ab51674b014ba03da7f98b675fcb8eabd709a2d8e18219f784aba2db73b72"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:50a5346af703330944bea503106cd50c9c2212174cfcb9939db4deb5305a8367"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-win32.whl", hash = "sha256:36e3242c4792e54ed906c53f5d840712793dc68b726ec6baefd8d978c5282d30"}, + {file = "pycryptodome-3.14.1-cp27-cp27m-win_amd64.whl", hash = "sha256:c880a98376939165b7dc504559f60abe234b99e294523a273847f9e7756f4132"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:dcd65355acba9a1d0fc9b923875da35ed50506e339b35436277703d7ace3e222"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:766a8e9832128c70012e0c2b263049506cbf334fb21ff7224e2704102b6ef59e"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:2562de213960693b6d657098505fd4493c45f3429304da67efcbeb61f0edfe89"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d1b7739b68a032ad14c5e51f7e4e1a5f92f3628bba024a2bda1f30c481fc85d8"}, + {file = "pycryptodome-3.14.1-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:27e92c1293afcb8d2639baf7eb43f4baada86e4de0f1fb22312bfc989b95dae2"}, + {file = "pycryptodome-3.14.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:f2772af1c3ef8025c85335f8b828d0193fa1e43256621f613280e2c81bfad423"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux1_i686.whl", hash = "sha256:9ec761a35dbac4a99dcbc5cd557e6e57432ddf3e17af8c3c86b44af9da0189c0"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:e64738207a02a83590df35f59d708bf1e7ea0d6adce712a777be2967e5f7043c"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:e24d4ec4b029611359566c52f31af45c5aecde7ef90bf8f31620fd44c438efe7"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:8b5c28058102e2974b9868d72ae5144128485d466ba8739abd674b77971454cc"}, + {file = "pycryptodome-3.14.1-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:924b6aad5386fb54f2645f22658cb0398b1f25bc1e714a6d1522c75d527deaa5"}, + {file = "pycryptodome-3.14.1-cp35-abi3-win32.whl", hash = "sha256:53dedbd2a6a0b02924718b520a723e88bcf22e37076191eb9b91b79934fb2192"}, + {file = "pycryptodome-3.14.1-cp35-abi3-win_amd64.whl", hash = "sha256:ea56a35fd0d13121417d39a83f291017551fa2c62d6daa6b04af6ece7ed30d84"}, + {file = "pycryptodome-3.14.1-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:028dcbf62d128b4335b61c9fbb7dd8c376594db607ef36d5721ee659719935d5"}, + {file = "pycryptodome-3.14.1-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:69f05aaa90c99ac2f2af72d8d7f185f729721ad7c4be89e9e3d0ab101b0ee875"}, + {file = "pycryptodome-3.14.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:12ef157eb1e01a157ca43eda275fa68f8db0dd2792bc4fe00479ab8f0e6ae075"}, + {file = "pycryptodome-3.14.1-pp27-pypy_73-win32.whl", hash = "sha256:f572a3ff7b6029dd9b904d6be4e0ce9e309dcb847b03e3ac8698d9d23bb36525"}, + {file = "pycryptodome-3.14.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9924248d6920b59c260adcae3ee231cd5af404ac706ad30aa4cd87051bf09c50"}, + {file = "pycryptodome-3.14.1-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:e0c04c41e9ade19fbc0eff6aacea40b831bfcb2c91c266137bcdfd0d7b2f33ba"}, + {file = "pycryptodome-3.14.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:893f32210de74b9f8ac869ed66c97d04e7d351182d6d39ebd3b36d3db8bda65d"}, + {file = "pycryptodome-3.14.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:7fb90a5000cc9c9ff34b4d99f7f039e9c3477700e309ff234eafca7b7471afc0"}, + {file = "pycryptodome-3.14.1.tar.gz", hash = "sha256:e04e40a7f8c1669195536a37979dd87da2c32dbdc73d6fe35f0077b0c17c803b"}, ] pyflakes = [ {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, @@ -2041,8 +2039,8 @@ python-dateutil = [ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] python-slugify = [ - {file = "python-slugify-5.0.2.tar.gz", hash = "sha256:f13383a0b9fcbe649a1892b9c8eb4f8eab1d6d84b84bb7a624317afa98159cab"}, - {file = "python_slugify-5.0.2-py2.py3-none-any.whl", hash = "sha256:6d8c5df75cd4a7c3a2d21e257633de53f52ab0265cd2d1dc62a730e8194a7380"}, + {file = "python-slugify-6.1.1.tar.gz", hash = "sha256:00003397f4e31414e922ce567b3a4da28cf1436a53d332c9aeeb51c7d8c469fd"}, + {file = "python_slugify-6.1.1-py2.py3-none-any.whl", hash = "sha256:8c0016b2d74503eb64761821612d58fcfc729493634b1eb0575d8f5b4aa1fbcf"}, ] python-vagrant = [ {file = "python-vagrant-0.5.15.tar.gz", hash = "sha256:af9a8a9802d382d45dbea96aa3cfbe77c6e6ad65b3fe7b7c799d41ab988179c6"}, @@ -2101,8 +2099,8 @@ pyyaml = [ {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, ] readme-renderer = [ - {file = "readme_renderer-32.0-py3-none-any.whl", hash = "sha256:a50a0f2123a4c1145ac6f420e1a348aafefcc9211c846e3d51df05fe3d865b7d"}, - {file = "readme_renderer-32.0.tar.gz", hash = "sha256:b512beafa6798260c7d5af3e1b1f097e58bfcd9a575da7c4ddd5e037490a5b85"}, + {file = "readme_renderer-33.0-py3-none-any.whl", hash = "sha256:f02cee0c4de9636b5a62b6be50c9742427ba1b956aad1d938bfb087d0d72ccdf"}, + {file = "readme_renderer-33.0.tar.gz", hash = "sha256:e3b53bc84bd6af054e4cc1fe3567dc1ae19f554134221043a3f8c674e22209db"}, ] requests = [ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, @@ -2125,16 +2123,16 @@ rfc3986 = [ {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, ] rich = [ - {file = "rich-11.1.0-py3-none-any.whl", hash = "sha256:365ebcdbfb3aa8d4b0ed2490e0fbf7b886a39d14eb7ea5fb7aece950835e1eed"}, - {file = "rich-11.1.0.tar.gz", hash = "sha256:43e03d8eec12e21beaecc22c828a41c4247356414a12d5879834863d4ad53816"}, + {file = "rich-12.0.0-py3-none-any.whl", hash = "sha256:fdcd2f8d416e152bcf35c659987038d1ae5a7bd336e821ca7551858a4c7e38a9"}, + {file = "rich-12.0.0.tar.gz", hash = "sha256:14bfd0507edc633e021b02c45cbf7ca22e33b513817627b8de3412f047a3e798"}, ] rsa = [ {file = "rsa-4.8-py3-none-any.whl", hash = "sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"}, {file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"}, ] "ruamel.yaml" = [ - {file = "ruamel.yaml-0.17.20-py3-none-any.whl", hash = "sha256:810eef9c46523a3f77479c66267a4708255ebe806a2d540078408c2227f011af"}, - {file = "ruamel.yaml-0.17.20.tar.gz", hash = "sha256:4b8a33c1efb2b443a93fcaafcfa4d2e445f8e8c29c528d9f5cdafb7cc9e4004c"}, + {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, + {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, ] "ruamel.yaml.clib" = [ {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0"}, @@ -2190,21 +2188,29 @@ toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] +toml-sort = [ + {file = "toml-sort-0.19.0.tar.gz", hash = "sha256:5e81f5a9632fa4c7302642c6ea1b76468865adca9a23dee6e129f8ee50c1fb64"}, + {file = "toml_sort-0.19.0-py3-none-any.whl", hash = "sha256:ca7c7100b0bd14faf3056361ddff478411a609fbaabd00c27d48569e62ab55bc"}, +] tomli = [ {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, ] +tomlkit = [ + {file = "tomlkit-0.10.0-py3-none-any.whl", hash = "sha256:cac4aeaff42f18fef6e07831c2c2689a51df76cf2ede07a6a4fa5fcb83558870"}, + {file = "tomlkit-0.10.0.tar.gz", hash = "sha256:d99946c6aed3387c98b89d91fb9edff8f901bf9255901081266a84fb5604adcd"}, +] tqdm = [ - {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, - {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"}, + {file = "tqdm-4.63.0-py2.py3-none-any.whl", hash = "sha256:e643e071046f17139dea55b880dc9b33822ce21613b4a4f5ea57f202833dbc29"}, + {file = "tqdm-4.63.0.tar.gz", hash = "sha256:1d9835ede8e394bb8c9dcbffbca02d717217113adc679236873eeaac5bc0b3cd"}, ] twine = [ {file = "twine-3.8.0-py3-none-any.whl", hash = "sha256:d0550fca9dc19f3d5e8eadfce0c227294df0a2a951251a4385797c8a6198b7c8"}, {file = "twine-3.8.0.tar.gz", hash = "sha256:8efa52658e0ae770686a13b675569328f1fba9837e5de1867bfe5f46a9aefe19"}, ] typing-extensions = [ - {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, - {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, + {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, + {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, ] uritemplate = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, @@ -2219,8 +2225,8 @@ webencodings = [ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] websocket-client = [ - {file = "websocket-client-1.2.3.tar.gz", hash = "sha256:1315816c0acc508997eb3ae03b9d3ff619c9d12d544c9a9b553704b1cc4f6af5"}, - {file = "websocket_client-1.2.3-py3-none-any.whl", hash = "sha256:2eed4cc58e4d65613ed6114af2f380f7910ff416fc8c46947f6e76b6815f56c0"}, + {file = "websocket-client-1.3.1.tar.gz", hash = "sha256:6278a75065395418283f887de7c3beafb3aa68dada5cacbe4b214e8d26da499b"}, + {file = "websocket_client-1.3.1-py3-none-any.whl", hash = "sha256:074e2ed575e7c822fc0940d31c3ac9bb2b1142c303eafcf3e304e6ce035522e8"}, ] xmltodict = [ {file = "xmltodict-0.12.0-py2.py3-none-any.whl", hash = "sha256:8bbcb45cc982f48b2ca8fe7e7827c5d792f217ecf1792626f808bf41c3b86051"}, diff --git a/pyproject.toml b/pyproject.toml index cfcd5973..709efd31 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,14 +1,9 @@ +[build-system] +build-backend = "poetry.core.masonry.api" +requires = ["poetry-core>=1.0.0"] + [tool.poetry] -name = "ansible-rust" -version = "1.0.0" -description = "Installs Rust on nearly any platform" authors = ["Brian Zalewski "] -license = "MIT" -readme = "README.md" -homepage = "https://megabyte.space" -documentation = "https://megabyte.space/docs/ansible/roles" -keywords = ["ansible", "ansible-role", "archlinux", "centos", "debian", "doctor", "fedora", "install", "installdoc", "installdoctor", "language", "macos", "mblabs", "megabytelabs", "modern", "molecule", "packages", "professormanhattan", "programming", "role", "rust", "ubuntu", "washingtondc", "windows"] -include = ["CHANGELOG.md", "LICENSE"] classifiers = [ "Development Status :: 4 - Beta", "Development Status :: 5 - Production/Stable", @@ -48,16 +43,48 @@ classifiers = [ "Topic :: System :: Installation/Setup", "Topic :: Utilities" ] +description = "Installs Rust on nearly any platform" +documentation = "https://megabyte.space/docs/ansible/roles" +homepage = "https://megabyte.space" +include = ["CHANGELOG.md", "LICENSE"] +keywords = [ + "ansible", + "ansible-role", + "archlinux", + "centos", + "debian", + "doctor", + "fedora", + "install", + "installdoc", + "installdoctor", + "language", + "macos", + "mblabs", + "megabytelabs", + "modern", + "molecule", + "packages", + "professormanhattan", + "programming", + "role", + "rust", + "ubuntu", + "washingtondc", + "windows" +] +license = "MIT" +name = "ansible-rust" +readme = "README.md" +version = "1.0.0" [tool.poetry.dependencies] -python = ">=3.10.0,<4.0.0" ansible = "^4.8.0" docker = "^5.0.3" +pip = { version = "^21.3.0", optional = true } +python = ">=3.10.0,<4.0.0" python-vagrant = "^0.5.15" pywinrm = ">=0.3.0" - -# semantic extras -> `poetry install -E semantic` -pip = { version = "^21.3.0", optional = true } setuptools = { version = "^58.2.0", optional = true } twine = { version = "^3.8.0", optional = true } wheel = { version = "^0.37.1", optional = true } @@ -79,24 +106,16 @@ molecule-vagrant = "^0.6.3" pre-commit-hooks = "^4.0.1" proselint = "^0.12.0" pycrypto = "^2.6.1" +toml-sort = "^0.19.0" yamllint = "^1.26.3" [tool.poetry.extras] -semantic = [ - "pip", - "setuptools", - "twine", - "wheel" -] +semantic = ["pip", "setuptools", "twine", "wheel"] [tool.poetry.urls] "Bug Tracker" = "https://gitlab.com/megabyte-labs/ansible-roles/rust/-/issues" -"GitHub" = "https://github.com/ProfessorManhattan/ansible-rust" -"GitLab" = "https://gitlab.com/megabyte-labs/ansible-roles/rust" -"Open Collective" = "https://opencollective.com/megabytelabs" -"Patreon" = "https://www.patreon.com/ProfessorManhattan" +GitHub = "https://github.com/ProfessorManhattan/ansible-rust" +GitLab = "https://gitlab.com/megabyte-labs/ansible-roles/rust" "Give Directly" = "https://givedirectly.org" - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" +"Open Collective" = "https://opencollective.com/megabytelabs" +Patreon = "https://www.patreon.com/ProfessorManhattan" diff --git a/start.sh b/start.sh index baac5090..9f9249f6 100644 --- a/start.sh +++ b/start.sh @@ -91,7 +91,11 @@ if [ "$EUID" -eq 0 ] && [ -z "$INIT_CWD" ] && type useradd &> /dev/null; then # shellcheck disable=SC2016 logger info 'Running as root - creating seperate user named `megabyte` to run script with' echo "megabyte ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers - useradd -m -s "$(which bash)" -c "Megabyte Labs Homebrew Account" megabyte + useradd -m -s "$(which bash)" -c "Megabyte Labs Homebrew Account" megabyte > /dev/null || EXIT_CODE=$? + if [ -n "$EXIT_CODE" ]; then + # shellcheck disable=SC2016 + logger info 'User `megabyte` already exists' + fi ensureRootPackageInstalled "sudo" # shellcheck disable=SC2016 logger info 'Reloading the script with the `megabyte` user' @@ -258,7 +262,12 @@ function installTask() { mkdir -p "$TARGET_BIN_DIR" fi mv "$TMP_DIR/task/task" "$TARGET_DEST" - logger success "Installed Task to $TARGET_DEST" + if type sudo &> /dev/null && sudo -n true; then + sudo mv "$TARGET_DEST" /usr/local/bin/task + logger success "Installed Task to /usr/local/bin/task" + else + logger success "Installed Task to $TARGET_DEST" + fi rm "$CHECKSUM_DESTINATION" rm "$DOWNLOAD_DESTINATION" } @@ -343,7 +352,7 @@ fi if [[ "$OSTYPE" == 'darwin'* ]] || [[ "$OSTYPE" == 'linux-gnu'* ]] || [[ "$OSTYPE" == 'linux-musl'* ]]; then if [ -z "$INIT_CWD" ]; then if ! type brew &> /dev/null; then - if sudo -n true; then + if type sudo &> /dev/null && sudo -n true; then echo | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" else logger warn "Homebrew is not installed. The script will attempt to install Homebrew and you might be prompted for your password." @@ -390,10 +399,12 @@ fi ensureTaskInstalled # @description Run the start logic, if appropriate -if [ -z "$GITLAB_CI" ] && [ -z "$INIT_CWD" ] && [ -f Taskfile.yml ]; then +if [ -z "$CI" ] && [ -z "$INIT_CWD" ] && [ -f Taskfile.yml ]; then # shellcheck disable=SC1091 . "$HOME/.profile" - task start - # shellcheck disable=SC2016 - logger info 'There may have been changes to your PATH variable. You may have to reload your terminal or run:\n\n`. "$HOME/.profile"`' + if task donothing &> /dev/null; then + task start + # shellcheck disable=SC2016 + logger info 'There may have been changes to your PATH variable. You may have to reload your terminal or run:\n\n`. "$HOME/.profile"`' + fi fi