From 3f45c002166c3b5e3b44042729f7716601dd8d62 Mon Sep 17 00:00:00 2001 From: kvendingoldo Date: Fri, 5 Jan 2024 13:25:20 +0100 Subject: [PATCH 01/32] Initial commit --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..57185b3 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# tenv \ No newline at end of file From e6814537bef56861cdef21ce9115312129f0ecbc Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Sun, 7 Jan 2024 15:03:40 +0100 Subject: [PATCH 02/32] feat: init commit --- .gitignore | 10 ++++++++++ LICENSE | 22 ++++++++++++++++++++++ README.md | 25 ++++++++++++++++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 LICENSE diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3aa3cb7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +versions/ +version +.opentofu-version +.terraform-version +bin/tofu-* +bin/terraform-* +/use-gnupg +/use-gpgv +.*.swp +.idea diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b27740f --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2024 Nikolai Mishin, Alexander Sharov, Anastasiia Kozlova + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 57185b3..e2ed1d0 100644 --- a/README.md +++ b/README.md @@ -1 +1,24 @@ -# tenv \ No newline at end of file +# tenv + +[tenv](https://github.com/tofuutils/tenv) version manager that build on top of [tofuenv](https://github.com/tofuutils/tofuenv) and [tfenv](https://github.com/tfutils/tfenv) and manages [Terraform](https://www.terraform.io/) and [OpenTofu](https://opentofu.org/) binaries + +## Support + +Currently tenv supports the following operating systems: + +- macOS + - 64bit + - Arm (Apple Silicon) +- Linux + - 64bit + - Arm +- Windows (64bit) - only tested in git-bash - currently presumed failing due to symlink issues in git-bash + +## Installation +WIP + +## LICENSE +- [tenv inself](https://github.com/tofuutils/tenv/blob/main/LICENSE) +- [tofuenv](https://github.com/tofuutils/tofuenv/blob/main/LICENSE) +- [tfenv](https://github.com/tfutils/tfenv/blob/master/LICENSE) + - tofuenv uses tfenv's source code From 891e8d2607978ae8609c69d57f1b7406906afcc5 Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Sun, 7 Jan 2024 15:37:47 +0100 Subject: [PATCH 03/32] faet: initial design --- README.md | 2 +- lib/tenv-bashlog.sh | 175 ++++++++++++++++++++++++++++++++++++++++++++ libexec/tenv-help | 16 ++++ 3 files changed, 192 insertions(+), 1 deletion(-) create mode 100755 lib/tenv-bashlog.sh create mode 100755 libexec/tenv-help diff --git a/README.md b/README.md index e2ed1d0..1097ee8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## Support -Currently tenv supports the following operating systems: +Currently, tenv supports the following operating systems: - macOS - 64bit diff --git a/lib/tenv-bashlog.sh b/lib/tenv-bashlog.sh new file mode 100755 index 0000000..6ae2cbe --- /dev/null +++ b/lib/tenv-bashlog.sh @@ -0,0 +1,175 @@ +#!/usr/bin/env bash + +set -uo pipefail; + +function _log_exception() { + ( + BASHLOG_FILE=0; + BASHLOG_JSON=0; + BASHLOG_SYSLOG=0; + + log 'error' "Logging Exception: $*"; + ); +}; +export -f _log_exception; + +function log() { + local syslog="${BASHLOG_SYSLOG:-0}"; + local file="${BASHLOG_FILE:-0}"; + local json="${BASHLOG_JSON:-0}"; + local stdout_extra="${BASHLOG_EXTRA:-0}"; + + if [ "${file}" -eq 1 ] || [ "${json}" -eq 1 ] || [ "${stdout_extra}" -eq 1 ]; then + local date_format="${BASHLOG_DATE_FORMAT:-+%F %T}"; + local date="$(date "${date_format}")"; + local date_s="$(date "+%s")"; + fi + local file_path="${BASHLOG_FILE_PATH:-/tmp/${0##*/}.log}"; + local json_path="${BASHLOG_JSON_PATH:-/tmp/${0##*/}.log.json}"; + + local tag="${BASHLOG_SYSLOG_TAG:-${0##*/})}"; + local facility="${BASHLOG_SYSLOG_FACILITY:-local0}"; + local pid="${$}"; + + local level="${1}"; + local upper="$(echo "${level}" | awk '{print toupper($0)}')"; + local debug_level="${TOFUENV_DEBUG:-0}"; + local stdout_colours="${BASHLOG_COLOURS:-1}"; + + local custom_eval_prefix="${BASHLOG_I_PROMISE_TO_BE_CAREFUL_CUSTOM_EVAL_PREFIX:-""}"; + + shift 1; + + local line="$@"; + + # RFC 5424 + # + # Numerical Severity + # Code + # + # 0 Emergency: system is unusable + # 1 Alert: action must be taken immediately + # 2 Critical: critical conditions + # 3 Error: error conditions + # 4 Warning: warning conditions + # 5 Notice: normal but significant condition + # 6 Informational: informational messages + # 7 Debug: debug-level messages + + local severities_DEBUG=7; + local severities_INFO=6; + local severities_NOTICE=5; # Unused + local severities_WARN=4; + local severities_ERROR=3; + local severities_CRIT=2; # Unused + local severities_ALERT=1; # Unused + local severities_EMERG=0; # Unused + + local severity_var="severities_${upper}"; + local severity="${!severity_var:-3}"; + + if [ "${debug_level}" -gt 0 ] || [ "${severity}" -lt 7 ]; then + + if [ "${syslog}" -eq 1 ]; then + local syslog_line="${upper}: ${line}"; + + logger \ + --id="${pid}" \ + -t "${tag}" \ + -p "${facility}.${severity}" \ + "${syslog_line}" \ + || _log_exception "logger --id=\"${pid}\" -t \"${tag}\" -p \"${facility}.${severity}\" \"${syslog_line}\""; + fi; + + if [ "${file}" -eq 1 ]; then + local file_line="${date} [${upper}] ${line}"; + + if [ -n "${custom_eval_prefix}" ]; then + file_line="$(eval "${custom_eval_prefix}")${file_line}"; + fi; + + echo -e "${file_line}" >> "${file_path}" \ + || _log_exception "echo -e \"${file_line}\" >> \"${file_path}\""; + fi; + + if [ "${json}" -eq 1 ]; then + local json_line="$(printf '{"timestamp":"%s","level":"%s","message":"%s"}' "${date_s}" "${level}" "${line}")"; + echo -e "${json_line}" >> "${json_path}" \ + || _log_exception "echo -e \"${json_line}\" >> \"${json_path}\""; + fi; + + fi; + + local colours_DEBUG='\033[34m' # Blue + local colours_INFO='\033[32m' # Green + local colours_NOTICE='' # Unused + local colours_WARN='\033[33m' # Yellow + local colours_ERROR='\033[31m' # Red + local colours_CRIT='' # Unused + local colours_ALERT='' # Unused + local colours_EMERG='' # Unused + local colours_DEFAULT='\033[0m' # Default + + local norm="${colours_DEFAULT}"; + local colour_var="colours_${upper}"; + local colour="${!colour_var:-\033[31m}"; + + local std_line; + if [ "${debug_level}" -le 1 ]; then + std_line="${line}"; + elif [ "${debug_level}" -ge 2 ]; then + std_line="${0}: ${line}"; + fi; + + if [ "${stdout_extra}" -eq 1 ]; then + std_line="${date} [${upper}] ${std_line}"; + fi; + + if [ -n "${custom_eval_prefix}" ]; then + std_line="$(eval "${custom_eval_prefix}")${std_line}"; + fi; + + if [ "${stdout_colours}" -eq 1 ]; then + std_line="${colour}${std_line}${norm}"; + fi; + + # Standard Output (Pretty) + case "${level}" in + 'info'|'warn') + echo -e "${std_line}"; + ;; + 'debug') + if [ "${debug_level}" -gt 0 ]; then + # We are debugging to STDERR on purpose + # tofuenv relies on STDOUT between libexecs to function + echo -e "${std_line}" >&2; + fi; + ;; + 'error') + echo -e "${std_line}" >&2; + if [ "${debug_level}" -gt 1 ]; then + echo -e "Here's a shell for debugging the current environment. 'exit 0' to resume script from here. Non-zero exit code will abort - parent shell will terminate." >&2; + bash || exit "${?}"; + else + exit 1; + fi; + ;; + *) + log 'error' "Undefined log level trying to log: $*"; + ;; + esac +}; +export -f log; + +declare prev_cmd="null"; +declare this_cmd="null"; +trap 'prev_cmd=${this_cmd:-null}; this_cmd=$BASH_COMMAND' DEBUG \ + && log debug 'DEBUG trap set' \ + || log 'error' 'DEBUG trap failed to set'; + +# This is an option if you want to log every single command executed, +# but it will significantly impact script performance and unit tests will fail + +#trap 'prev_cmd=$this_cmd; this_cmd=$BASH_COMMAND; log debug $this_cmd' DEBUG \ +# && log debug 'DEBUG trap set' \ +# || log 'error' 'DEBUG trap failed to set'; diff --git a/libexec/tenv-help b/libexec/tenv-help new file mode 100755 index 0000000..6b199f4 --- /dev/null +++ b/libexec/tenv-help @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -uo pipefail; + +echo 'Usage: tenv [] + +Commands: + install Install tenv dependencies (tfenv and tofuenv) + uninstall Uninstall tenv dependencies (tfenv and tofuenv) + tofu List of tofuenv commands + tf List of tfenv commands + version-name Print current version of tenv + help Show the tenv help +'; + +exit 0; \ No newline at end of file From 63dca1e979dd45c9446d943741944294fb5ff391 Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Sun, 7 Jan 2024 15:43:40 +0100 Subject: [PATCH 04/32] feat: add tenv init command --- .gitignore | 1 + libexec/tenv-help | 1 + libexec/tenv-init | 5 +++++ 3 files changed, 7 insertions(+) create mode 100755 libexec/tenv-init diff --git a/.gitignore b/.gitignore index 3aa3cb7..82c671b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ bin/terraform-* /use-gpgv .*.swp .idea +.misc \ No newline at end of file diff --git a/libexec/tenv-help b/libexec/tenv-help index 6b199f4..1d1d5aa 100755 --- a/libexec/tenv-help +++ b/libexec/tenv-help @@ -5,6 +5,7 @@ set -uo pipefail; echo 'Usage: tenv [] Commands: + init Update environment to use 'tenv' correctly. install Install tenv dependencies (tfenv and tofuenv) uninstall Uninstall tenv dependencies (tfenv and tofuenv) tofu List of tofuenv commands diff --git a/libexec/tenv-init b/libexec/tenv-init new file mode 100755 index 0000000..93554e1 --- /dev/null +++ b/libexec/tenv-init @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +[ -n "${TENV_DEBUG}" ] && set -x; + +export PATH="${TENV_ROOT}/bin:${PATH}"; From 1b00adfd9c21d77b6b525d1772539915f3ddeff6 Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Sun, 7 Jan 2024 15:54:45 +0100 Subject: [PATCH 05/32] feat: add codebase --- lib/tenv-helpers.sh | 164 +++++++++++++++++++++++++ libexec/tenv-exec | 75 ++++++++++++ libexec/tenv-tf | 7 ++ libexec/tenv-tofu | 5 + libexec/tofuenv-install | 204 ++++++++++++++++++++++++++++++++ libexec/tofuenv-resolve-version | 168 ++++++++++++++++++++++++++ 6 files changed, 623 insertions(+) create mode 100755 lib/tenv-helpers.sh create mode 100755 libexec/tenv-exec create mode 100755 libexec/tenv-tf create mode 100755 libexec/tenv-tofu create mode 100755 libexec/tofuenv-install create mode 100755 libexec/tofuenv-resolve-version diff --git a/lib/tenv-helpers.sh b/lib/tenv-helpers.sh new file mode 100755 index 0000000..1d215c2 --- /dev/null +++ b/lib/tenv-helpers.sh @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +set -uo pipefail; + +if [ -z "${TOFUENV_ROOT:-""}" ]; then + # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac + readlink_f() { + local target_file="${1}"; + local file_name; + + while [ "${target_file}" != "" ]; do + cd "${target_file%/*}" || early_death "Failed to 'cd \$(${target_file%/*})' while trying to determine TOFUENV_ROOT"; + file_name="${target_file##*/}" || early_death "Failed to '\"${target_file##*/}\"' while trying to determine TOFUENV_ROOT"; + target_file="$(readlink "${file_name}")"; + done; + + echo "$(pwd -P)/${file_name}"; + }; + TOFUENV_SHIM=$(readlink_f "${0}") + TOFUENV_ROOT="${TOFUENV_SHIM%/*/*}"; + [ -n "${TOFUENV_ROOT}" ] || early_death "Failed to determine TOFUENV_ROOT"; +else + TOFUENV_ROOT="${TOFUENV_ROOT%/}"; +fi; +export TOFUENV_ROOT; + +if [ -z "${TOFUENV_CONFIG_DIR:-""}" ]; then + TOFUENV_CONFIG_DIR="$TOFUENV_ROOT"; +else + TOFUENV_CONFIG_DIR="${TOFUENV_CONFIG_DIR%/}"; +fi +export TOFUENV_CONFIG_DIR; + +if [ "${TOFUENV_DEBUG:-0}" -gt 0 ]; then + # Only reset DEBUG if TOFUENV_DEBUG is set, and DEBUG is unset or already a number + if [[ "${DEBUG:-0}" =~ ^[0-9]+$ ]] && [ "${DEBUG:-0}" -gt "${TOFUENV_DEBUG:-0}" ]; then + export DEBUG="${TOFUENV_DEBUG:-0}"; + fi; + if [[ "${TOFUENV_DEBUG}" -gt 2 ]]; then + export PS4='+ [${BASH_SOURCE##*/}:${LINENO}] '; + set -x; + fi; +fi; + +function load_bashlog () { + source "${TOFUENV_ROOT}/lib/tofuenv-bashlog.sh"; +}; +export -f load_bashlog; + +if [ "${TOFUENV_DEBUG:-0}" -gt 0 ] ; then + # our shim below cannot be used when debugging is enabled + load_bashlog; +else + # Shim that understands to no-op for debug messages, and defers to + # full bashlog for everything else. + function log () { + if [ "$1" != 'debug' ] ; then + # Loading full bashlog will overwrite the `log` function + load_bashlog; + log "$@"; + fi; + }; + export -f log; +fi; + +# Curl wrapper to switch TLS option for each OS +function curlw () { + local TLS_OPT="--tlsv1.2"; + + # Check if curl is 10.12.6 or above + if [[ -n "$(command -v sw_vers 2>/dev/null)" && ("$(sw_vers)" =~ 10\.12\.([6-9]|[0-9]{2}) || "$(sw_vers)" =~ 10\.1[3-9]) ]]; then + TLS_OPT=""; + fi; + + if [[ ! -z "${TOFUENV_NETRC_PATH:-""}" ]]; then + NETRC_OPT="--netrc-file ${TOFUENV_NETRC_PATH}"; + else + NETRC_OPT=""; + fi; + + if [[ ! -z "${TOFUENV_GITHUB_TOKEN:-""}" ]]; then + AUTHORIZATION_HEADER="Authorization: Bearer ${TOFUENV_GITHUB_TOKEN}"; + else + AUTHORIZATION_HEADER=""; + fi; + curl ${TLS_OPT} -H "${AUTHORIZATION_HEADER}" ${NETRC_OPT} "$@"; +}; +export -f curlw; + +function check_active_version() { + local v="${1}"; + local maybe_chdir=; + if [ -n "${2:-}" ]; then + maybe_chdir="-chdir=${2}"; + fi; + + local active_version="$(${TOFUENV_ROOT}/bin/tofu ${maybe_chdir} version | grep '^OpenTofu')"; + + if ! grep -E "^OpenTofu v${v}((-dev)|( \([a-f0-9]+\)))?( is already installed)?\$" <(echo "${active_version}"); then + log 'debug' "Expected version ${v} but found ${active_version}"; + return 1; + fi; + + log 'debug' "Active version ${v} as expected"; + return 0; +}; +export -f check_active_version; + +function check_installed_version() { + local v="${1}"; + local bin="${TOFUENV_CONFIG_DIR}/versions/${v}/tofu"; + [ -n "$(${bin} version | grep -E "^OpenTofu v${v}((-dev)|( \([a-f0-9]+\)))?$")" ]; +}; +export -f check_installed_version; + +function check_default_version() { + local v="${1}"; + local def="$(cat "${TOFUENV_CONFIG_DIR}/version")"; + [ "${def}" == "${v}" ]; +}; +export -f check_default_version; + +function cleanup() { + log 'info' 'Performing cleanup'; + local pwd="$(pwd)"; + log 'debug' "Deleting ${pwd}/version"; + rm -rf ./version; + log 'debug' "Deleting ${pwd}/versions"; + rm -rf ./versions; + log 'debug' "Deleting ${pwd}/.opentofu-version"; + rm -rf ./.opentofu-version; + log 'debug' "Deleting ${pwd}/latest_allowed.tf"; + rm -rf ./latest_allowed.tf; + log 'debug' "Deleting ${pwd}/min_required.tf"; + rm -rf ./min_required.tf; + log 'debug' "Deleting ${pwd}/chdir-dir"; + rm -rf ./chdir-dir; +}; +export -f cleanup; + +function error_and_proceed() { + errors+=("${1}"); + log 'warn' "Test Failed: ${1}"; +}; +export -f error_and_proceed; + +function check_dependencies() { + if [[ $(uname) == 'Darwin' ]] && [ $(which brew) ]; then + if ! [ $(which ggrep) ]; then + log 'error' 'A metaphysical dichotomy has caused this unit to overload and shut down. GNU Grep is a requirement and your Mac does not have it. Consider "brew install grep"'; + fi; + + shopt -s expand_aliases; + alias grep=ggrep; + fi; +}; +export -f check_dependencies; + +source "$TOFUENV_ROOT/lib/tofuenv-exec.sh"; +source "$TOFUENV_ROOT/lib/tofuenv-min-required.sh"; +source "$TOFUENV_ROOT/lib/tofuenv-version-file.sh"; +source "$TOFUENV_ROOT/lib/tofuenv-version-name.sh"; + +export TOFUENV_HELPERS=1; diff --git a/libexec/tenv-exec b/libexec/tenv-exec new file mode 100755 index 0000000..8dd3d58 --- /dev/null +++ b/libexec/tenv-exec @@ -0,0 +1,75 @@ +#!/usr/bin/env bash +# +# Summary: TODO +# +# Usage: tenv exec [arg1 arg2...] +# +# Runs an executable by first preparing PATH so that the selected OpenTofu +# version's `bin' directory is at the front. +# +# For example, if the currently selected OpenTofu version is 1.6.0: +# tofuenv exec plan +# +# is equivalent to: +# PATH="$TENV_ROOT/versions/1.6.0/bin:$PATH" tofu plan + +set -uo pipefail; + +#################################### +# Ensure we can execute standalone # +#################################### + +function early_death() { + echo "[FATAL] ${0}: ${1}" >&2; + exit 1; +}; + +if [ -z "${TENV_ROOT:-""}" ]; then + # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac + readlink_f() { + local target_file="${1}"; + local file_name; + + while [ "${target_file}" != "" ]; do + cd "$(dirname ${target_file})" || early_death "Failed to 'cd \$(dirname ${target_file})' while trying to determine TENV_ROOT"; + file_name="$(basename "${target_file}")" || early_death "Failed to 'basename \"${target_file}\"' while trying to determine TENV_ROOT"; + target_file="$(readlink "${file_name}")"; + done; + + echo "$(pwd -P)/${file_name}"; + }; + + TENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; + [ -n "${TENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TENV_ROOT"; +else + TENV_ROOT="${TENV_ROOT%/}"; +fi; +export TENV_ROOT; + +if [ -n "${TOFUENV_HELPERS:-""}" ]; then + log 'debug' 'TOFUENV_HELPERS is set, not sourcing helpers again'; +else + [ "${TOFUENV_DEBUG:-0}" -gt 0 ] && echo "[DEBUG] Sourcing helpers from ${TENV_ROOT}/lib/tenv-helpers.sh"; + if source "${TENV_ROOT}/lib/tenv-helpers.sh"; then + log 'debug' 'Helpers sourced successfully'; + else + early_death "Failed to source helpers from ${TENV_ROOT}/lib/tenv-helpers.sh"; + fi; +fi; + +# Ensure libexec and bin are in $PATH +for dir in libexec bin; do + case ":${PATH}:" in + *:${TENV_ROOT}/${dir}:*) log 'debug' "\$PATH already contains '${TENV_ROOT}/${dir}', not adding it again";; + *) + log 'debug' "\$PATH does not contain '${TENV_ROOT}/${dir}', prepending and exporting it now"; + export PATH="${TENV_ROOT}/${dir}:${PATH}"; + ;; + esac; +done; + +##################### +# Begin Script Body # +##################### + +tenv-exec "$@"; diff --git a/libexec/tenv-tf b/libexec/tenv-tf new file mode 100755 index 0000000..cff7ce7 --- /dev/null +++ b/libexec/tenv-tf @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Usage: tenv tf +# Summary: TODO + +set -uo pipefail; + +tfenv \ No newline at end of file diff --git a/libexec/tenv-tofu b/libexec/tenv-tofu new file mode 100755 index 0000000..5332b28 --- /dev/null +++ b/libexec/tenv-tofu @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Usage: tofuenv version-file +# Summary: Detect the file that sets the current tofuenv version + +set -uo pipefail; \ No newline at end of file diff --git a/libexec/tofuenv-install b/libexec/tofuenv-install new file mode 100755 index 0000000..b033cfc --- /dev/null +++ b/libexec/tofuenv-install @@ -0,0 +1,204 @@ +#!/usr/bin/env bash +set -uo pipefail; + +#################################### +# Ensure we can execute standalone # +#################################### + +function early_death() { + echo "[FATAL] ${0}: ${1}" >&2; + exit 1; +}; + +if [ -z "${TENV_ROOT:-""}" ]; then + # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac + readlink_f() { + local target_file="${1}"; + local file_name; + + while [ "${target_file}" != "" ]; do + cd "$(dirname ${target_file})" || early_death "Failed to 'cd \$(dirname ${target_file})' while trying to determine TENV_ROOT"; + file_name="$(basename "${target_file}")" || early_death "Failed to 'basename \"${target_file}\"' while trying to determine TENV_ROOT"; + target_file="$(readlink "${file_name}")"; + done; + + echo "$(pwd -P)/${file_name}"; + }; + + TENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; + [ -n "${TENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TENV_ROOT"; +else + TENV_ROOT="${TENV_ROOT%/}"; +fi; +export TENV_ROOT; + +if [ -n "${TENV_HELPERS:-""}" ]; then + log 'debug' 'TENV_HELPERS is set, not sourcing helpers again'; +else + [ "${TOFUENV_DEBUG:-0}" -gt 0 ] && echo "[DEBUG] Sourcing helpers from ${TENV_ROOT}/lib/tenv-helpers.sh"; + if source "${TENV_ROOT}/lib/tenv-helpers.sh"; then + log 'debug' 'Helpers sourced successfully'; + else + early_death "Failed to source helpers from ${TENV_ROOT}/lib/tenv-helpers.sh"; + fi; +fi; + +# Ensure libexec and bin are in $PATH +for dir in libexec bin; do + case ":${PATH}:" in + *:${TENV_ROOT}/${dir}:*) log 'debug' "\$PATH already contains '${TENV_ROOT}/${dir}', not adding it again";; + *) + log 'debug' "\$PATH does not contain '${TENV_ROOT}/${dir}', prepending and exporting it now"; + export PATH="${TENV_ROOT}/${dir}:${PATH}"; + ;; + esac; +done; + +##################### +# Begin Script Body # +##################### + +[ "${#}" -gt 1 ] && log 'error' 'usage: tenv install []'; + +declare requested="${1:-""}"; + +log debug "Resolving version with: tenv-resolve-version ${requested}"; +declare resolved; +# TODO +resolved="$(tenv-resolve-version ${requested})" || log 'error' "Failed to resolve ${requested} version"; + +declare version="${resolved%%\:*}"; +declare regex="${resolved##*\:}"; + +[ -n "${version}" ] || log 'error' 'Version is not specified. This should not be possible as we default to latest'; + +log 'debug' "Processing install for version ${version}, using regex ${regex}"; + +#if [[ ${version} =~ ${regex:-not} ]]; then +# log 'debug' "Version and regex matched"; +#else +# log 'debug' "Version and regex not matched"; +# if [ "${TOFUENV_SKIP_LIST_REMOTE:-0}" -eq 0 ]; then +# remote_version="$(tofuenv-list-remote | grep -e "${regex}" | head -n 1)"; +# [ -n "${remote_version}" ] && version="${remote_version}" || log 'error' "No ${version} versions matching '${regex}' found in remote"; +# fi; +#fi; + +# ??????? +dst_path="${TENV_CONFIG_DIR}/versions/${version}"; +if [ -f "${dst_path}/tofu" ]; then + echo "OpenTofu v${version} is already installed"; + exit 0; +fi; + + + + + +os="${kernel}_${TOFUENV_ARCH}" + +keybase_bin="$(command -v keybase 2>/dev/null)"; +shasum_bin="$(command -v shasum 2>/dev/null)"; +sha256sum_bin="$(command -v sha256sum 2>/dev/null)"; + +TOFUENV_REMOTE="${TOFUENV_REMOTE:-https://github.com/opentofu/opentofu/releases}"; +version_url="${TOFUENV_REMOTE}/download/v${version}"; + +tarball_name="tofu_${version}_${os}.zip"; + +shasums_name="tofu_${version}_SHA256SUMS"; +shasums_sig="${shasums_name}.sig"; + +log 'info' "Installing OpenTofu v${version}"; + +# Create a local temporary directory for downloads +tmpdir_arg="-t"; + +if mktemp --help 2>&1 | grep -- '--tmpdir' >/dev/null; then + tmpdir_arg="--tmpdir"; +fi; + +download_tmp="$(mktemp -d ${tmpdir_arg} tofuenv_download.XXXXXX)" || log 'error' "Unable to create temporary download directory (mktemp -d ${tmpdir_arg} tofuenv_download.XXXXXX). Working Directory is: $(pwd)"; + +# Clean it up in case of error +trap "rm -rf ${download_tmp}" EXIT; + +declare curl_progress=""; +case "${TOFUENV_CURL_OUTPUT:-2}" in + '2') + log 'debug' 'Setting curl progress bar with "-#"'; + curl_progress="-#"; + ;; + '1') + log 'debug' 'Using default curl output'; + curl_progress=""; + ;; + '0') + log 'debug' 'Running curl silently with "-s"'; + curl_progress="-s"; + ;; + *) + log 'error' 'TOFUENV_CURL_OUTPUT specified, but not with a supported value ([0,1,2])'; + ;; +esac; + +log 'info' "Downloading release tarball from ${version_url}/${tarball_name}"; + +status=$(curlw ${curl_progress} -w "%{http_code}" -f -L -o "${download_tmp}/${tarball_name}" "${version_url}/${tarball_name}"); + +case "${status}" in + 200) log 'debug' "'${requested:-$version}' version download successfully" ;; + 403) log 'error' "GitHub Rate limits exceeded" ;; + 404) log 'error' "No versions matching '${requested:-$version}' found in remote" ;; + *) log 'error' "Unknown error, status code = ${status}" ;; +esac; + +log 'info' "Downloading SHA hash file from ${version_url}/${shasums_name}"; +curlw -s -f -L -o "${download_tmp}/${shasums_name}" "${version_url}/${shasums_name}" || log 'error' 'SHA256 hashes download failed'; + +download_signature() { + log 'info' "Downloading SHA hash signature file from ${version_url}/${shasums_sig}"; + curlw -s -f -L \ + -o "${download_tmp}/${shasums_sig}" \ + "${version_url}/${shasums_sig}" \ + && log 'debug' "SHA256SUMS signature file downloaded successfully to ${download_tmp}/${shasums_sig}" \ + || log 'error' 'SHA256SUMS signature download failed'; +}; + +# If on MacOS with Homebrew, use GNU grep +# This allows keybase login detection to work on Mac, +# and is required to be able to detect tofu version +# from "required_version" setting in "*.tf" files +check_dependencies; + + + + +if [[ -n "${shasum_bin}" && -x "${shasum_bin}" ]]; then + ( + cd "${download_tmp}"; + "${shasum_bin}" \ + -a 256 \ + -s \ + -c <(grep -F "${tarball_name}" "${shasums_name}") + ) || log 'error' 'SHA256 hash does not match!'; +elif [[ -n "${sha256sum_bin}" && -x "${sha256sum_bin}" ]]; then + ( + cd "${download_tmp}"; + "${sha256sum_bin}" \ + -c <(grep -F "${tarball_name}" "${shasums_name}") + ) || log 'error' 'SHA256 hash does not match!'; +else + # Lack of shasum deserves a proper warning + log 'warn' 'No shasum tool available. Skipping SHA256 hash validation'; +fi; + +mkdir -p "${dst_path}" || log 'error' "Failed to make directory ${dst_path}"; + +declare unzip_output; +unzip_output="$(unzip -o "${download_tmp}/${tarball_name}" -d "${dst_path}")" || log 'error' 'Tarball unzip failed'; +while IFS= read -r unzip_line; do + log 'info' "${unzip_line}"; +done < <(printf '%s\n' "${unzip_output}"); + +log 'info' "Installation of tofu v${version} successful. To make this your default version, run 'tofuenv use ${version}'"; diff --git a/libexec/tofuenv-resolve-version b/libexec/tofuenv-resolve-version new file mode 100755 index 0000000..732cfcb --- /dev/null +++ b/libexec/tofuenv-resolve-version @@ -0,0 +1,168 @@ +#!/usr/bin/env bash +# Usage: tofuenv resolve-version [] +# Summary: Resolve the version to action based on the environment and optional input token + +set -uo pipefail; + +#################################### +# Ensure we can execute standalone # +#################################### + +function early_death() { + echo "[FATAL] ${0}: ${1}" >&2; + exit 1; +}; + +if [ -z "${TOFUENV_ROOT:-""}" ]; then + # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac + readlink_f() { + local target_file="${1}"; + local file_name; + + while [ "${target_file}" != "" ]; do + cd "$(dirname ${target_file})" || early_death "Failed to 'cd \$(dirname ${target_file})' while trying to determine TOFUENV_ROOT"; + file_name="$(basename "${target_file}")" || early_death "Failed to 'basename \"${target_file}\"' while trying to determine TOFUENV_ROOT"; + target_file="$(readlink "${file_name}")"; + done; + + echo "$(pwd -P)/${file_name}"; + }; + + TOFUENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; + [ -n "${TOFUENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TOFUENV_ROOT"; +else + TOFUENV_ROOT="${TOFUENV_ROOT%/}"; +fi; +export TOFUENV_ROOT; + +if [ -n "${TOFUENV_HELPERS:-""}" ]; then + log 'debug' 'TOFUENV_HELPERS is set, not sourcing helpers again'; +else + [ "${TOFUENV_DEBUG:-0}" -gt 0 ] && echo "[DEBUG] Sourcing helpers from ${TOFUENV_ROOT}/lib/tofuenv-helpers.sh"; + if source "${TOFUENV_ROOT}/lib/tofuenv-helpers.sh"; then + log 'debug' 'Helpers sourced successfully'; + else + early_death "Failed to source helpers from ${TOFUENV_ROOT}/lib/tofuenv-helpers.sh"; + fi; +fi; + +# Ensure libexec and bin are in $PATH +for dir in libexec bin; do + case ":${PATH}:" in + *:${TOFUENV_ROOT}/${dir}:*) log 'debug' "\$PATH already contains '${TOFUENV_ROOT}/${dir}', not adding it again";; + *) + log 'debug' "\$PATH does not contain '${TOFUENV_ROOT}/${dir}', prepending and exporting it now"; + export PATH="${TOFUENV_ROOT}/${dir}:${PATH}"; + ;; + esac; +done; + +# If on MacOS with Homebrew, use GNU grep +# This allows keybase login detection to work on Mac, +# and is required to be able to detect tofu version +# from "required_version" setting in "*.tf" files +check_dependencies; + +##################### +# Begin Script Body # +##################### + +declare version_requested version regex min_required version_file; + +declare arg="${1:-""}"; + +if [ -z "${arg}" -a -z "${TOFUENV_TOFU_VERSION:-""}" ]; then + version_file="$(tofuenv-version-file)"; + log 'debug' "Version File: ${version_file}"; + + if [ "${version_file}" != "${TOFUENV_CONFIG_DIR}/version" ]; then + log 'debug' "Version File (${version_file}) is not the default \${TOFUENV_CONFIG_DIR}/version (${TOFUENV_CONFIG_DIR}/version)"; + version_requested="$(cat "${version_file}")" \ + || log 'error' "Failed to open ${version_file}"; + + elif [ -f "${version_file}" ]; then + log 'debug' "Version File is the default \${TOFUENV_CONFIG_DIR}/version (${TOFUENV_CONFIG_DIR}/version)"; + version_requested="$(cat "${version_file}")" \ + || log 'error' "Failed to open ${version_file}"; + + # Absolute fallback + if [ -z "${version_requested}" ]; then + log 'debug' 'Version file had no content. Falling back to "latest"'; + version_requested='latest'; + fi; + + else + log 'debug' "Version File is the default \${TOFUENV_CONFIG_DIR}/version (${TOFUENV_CONFIG_DIR}/version) but it doesn't exist"; + log 'debug' 'No version requested on the command line or in the version file search path. Installing "latest"'; + version_requested='latest'; + fi; +elif [ -n "${TOFUENV_TOFU_VERSION:-""}" ]; then + version_requested="${TOFUENV_TOFU_VERSION}"; + log 'debug' "TOFUENV_TOFU_VERSION is set: ${TOFUENV_TOFU_VERSION}"; +else + version_requested="${arg}"; +fi; + +[[ -n "${version_requested:-""}" ]] \ + && log 'debug' "Version Requested: ${version_requested}" \ + || log 'error' 'Version could not be resolved!'; + +# Accept a v-prefixed version, but strip the v. +if [[ "${version_requested}" =~ ^v.*$ ]]; then + log 'debug' "Version Requested is prefixed with a v. Stripping the v."; + version_requested="${version_requested#v*}"; +fi; + +if [[ "${version_requested}" =~ ^min-required$ ]]; then + log 'debug' 'Detecting minimum required version...'; + min_required="$(tofuenv-min-required)" \ + || log 'error' 'tofuenv-min-required failed'; + + if [ -z "${min_required}" ]; then + log 'debug' 'It was not possible to detect a minimum-required version. Do you have a required_version line present?'; + exit; + fi; + + log 'debug' "Minimum required version detected: ${min_required}"; + version_requested="${min_required}"; +fi; + +if [[ "${version_requested}" =~ ^latest-allowed$ ]]; then + log 'debug' 'Detecting latest allowable version...'; + version_spec="$(grep -h required_version "${TOFUENV_DIR:-$(pwd)}"/{*.tf,*.tf.json} 2>/dev/null | { IFS='"' read -r _ ver _; echo "${ver%%,*}"; })"; + version_num="$(echo "${version_spec}" | sed -E 's/[^0-9.]+//')"; + log 'debug' "Using ${version_num} from version spec: ${version_spec}"; + + case "${version_spec}" in + '>'*) + version_requested=latest; + ;; + '<='*) + version_requested="${version_num}"; + ;; + '~>'*) + version_without_rightmost="${version_num%.*}"; + version_requested="latest:^${version_without_rightmost}"; + ;; + *) + log 'error' "Unsupported version spec: '${version_spec}', only >, >=, <=, and ~> are supported."; + ;; + esac; + log 'debug' "Determined the requested version to be: ${version_requested}"; +fi; + +if [[ "${version_requested}" =~ ^latest\:.*$ ]]; then + version="${version_requested%%\:*}"; + regex="${version_requested##*\:}"; + log 'debug' "Version uses latest keyword with regex: ${regex}"; +elif [[ "${version_requested}" =~ ^latest$ ]]; then + version="${version_requested}"; + regex="^[0-9]\+\.[0-9]\+\.[0-9]\+$"; + log 'debug' "Version uses latest keyword alone. Forcing regex to match stable versions only: ${regex}"; +else + version="${version_requested}"; + regex="^${version_requested}$"; + log 'debug' "Version is explicit: ${version}. Regex enforces the version: ${regex}"; +fi; + +echo "${version}:${regex}"; From fdf2120ffe170101754f42a42a5a869252ef712e Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Mon, 8 Jan 2024 12:40:54 +0100 Subject: [PATCH 06/32] feat: migrate tfenv to golang --- .github/workflows/build.yml | 54 ++++++++ .github/workflows/golangci-lint.yml | 28 ++++ .gitignore | 21 ++- .golangci.yml | 38 ++++++ Dockerfile | 17 +++ LICENSE | 22 --- Makefile | 23 ++++ cmd/init.go | 39 ++++++ cmd/root.go | 47 +++++++ cmd/tf.go | 39 ++++++ cmd/tofu.go | 39 ++++++ cmd/uninstallDeps.go | 39 ++++++ cmd/upgradeDeps.go | 54 ++++++++ go.mod | 10 ++ go.sum | 10 ++ lib/tenv-bashlog.sh | 175 ------------------------ lib/tenv-helpers.sh | 164 ---------------------- libexec/tenv-exec | 75 ---------- libexec/tenv-help | 17 --- libexec/tenv-init | 5 - libexec/tenv-tf | 7 - libexec/tenv-tofu | 5 - libexec/tofuenv-install | 204 ---------------------------- libexec/tofuenv-resolve-version | 168 ----------------------- main.go | 12 ++ pkg/utils/abc.go | 14 ++ pkg/utils/github.go | 79 +++++++++++ 27 files changed, 562 insertions(+), 843 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/golangci-lint.yml create mode 100644 .golangci.yml create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 cmd/init.go create mode 100644 cmd/root.go create mode 100644 cmd/tf.go create mode 100644 cmd/tofu.go create mode 100644 cmd/uninstallDeps.go create mode 100644 cmd/upgradeDeps.go create mode 100644 go.mod create mode 100644 go.sum delete mode 100755 lib/tenv-bashlog.sh delete mode 100755 lib/tenv-helpers.sh delete mode 100755 libexec/tenv-exec delete mode 100755 libexec/tenv-help delete mode 100755 libexec/tenv-init delete mode 100755 libexec/tenv-tf delete mode 100755 libexec/tenv-tofu delete mode 100755 libexec/tofuenv-install delete mode 100755 libexec/tofuenv-resolve-version create mode 100644 main.go create mode 100644 pkg/utils/abc.go create mode 100644 pkg/utils/github.go diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..e06bc84 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,54 @@ +name: pipeline + +on: + push: + branches: + - 'main' + - 'release/**' + +env: + registry_url: "registry.hub.docker.com" + image_repo: "kvendingoldo/aws-cognito-backup-lambda" + +jobs: + build: + runs-on: ubuntu-20.04 + outputs: + version: ${{ steps.set_version.outputs.safe_version }} + steps: + - + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + platforms: all + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - + name: Login to Docker registry + uses: docker/login-action@v1 + with: + registry: ${{ env.registry_url }} + username: ${{ secrets.REGISTRY_USER }} + password: ${{ secrets.REGISTRY_PASSWORD }} + - + name: Set application version + id: set_version + uses: kvendingoldo/semver-action@v1.10 + with: + primary_branch: 'main' + - + name: Build and push + uses: docker/build-push-action@v3 + with: + push: true + tags: | + ${{ env.registry_url }}/${{ env.image_repo }}:latest + ${{ env.registry_url }}/${{ env.image_repo }}:${{ steps.set_version.outputs.safe_version }} + - + name: Print image version + run: echo ${{ steps.set_version.outputs.safe_version }} diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml new file mode 100644 index 0000000..4cbb88c --- /dev/null +++ b/.github/workflows/golangci-lint.yml @@ -0,0 +1,28 @@ +name: golangci-lint +on: + push: + tags: + - v* + branches: + - main + pull_request: +permissions: + contents: read +jobs: + golangci: + name: lint + runs-on: ubuntu-20.04 + steps: + - + uses: actions/setup-go@v3 + with: + go-version: 1.18 + - + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - + name: golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + version: v1.48 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 82c671b..00951fe 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,23 @@ bin/terraform-* /use-gpgv .*.swp .idea -.misc \ No newline at end of file +.misc + +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +.idea +.DS_Store \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..1fa0476 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,38 @@ +run: + deadline: 1m + skip-files: + - ".*\\.pb\\.go" + skip-dirs: + - pkg/client + modules-download-mode: readonly + +linters: + enable-all: true + disable-all: false + disable: + - wsl + - wrapcheck + - goerr113 + - gomnd + - exhaustruct + - nestif + - gofumpt + - gochecknoinits + - funlen + - cyclop + - goimports + - gci + - lll + - gocognit + - ifshort # deprecated + - maligned # deprecated + - golint # deprecated + - interfacer #deprecated + - scopelint # deprecated + - exhaustivestruct # deprecated + +linters-settings: + gosimple: + checks: + - all + - '-S1024' # disable the rule S1024 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fbaa0d1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM golang:1.18 AS builder + +ENV CGO_ENABLED=0 \ + GOOS=linux \ + GOARCH=amd64 \ + GIT_TERMINAL_PROMPT=1 + +COPY ./internal ${GOPATH}/src/github.com/kvendingoldo/aws-cognito-backup-lambda/internal +COPY ./go.mod ./go.sum ./main.go ${GOPATH}/src/github.com/kvendingoldo/aws-cognito-backup-lambda/ +WORKDIR ${GOPATH}/src/github.com/kvendingoldo/aws-cognito-backup-lambda +RUN go get ./ +RUN go build -ldflags="-s -w" -o lambda . + +FROM gcr.io/distroless/static:nonroot +COPY --from=builder go/src/github.com/kvendingoldo/aws-cognito-backup-lambda/lambda /app/ +WORKDIR /app +ENTRYPOINT ["/app/lambda"] diff --git a/LICENSE b/LICENSE index b27740f..e69de29 100644 --- a/LICENSE +++ b/LICENSE @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2024 Nikolai Mishin, Alexander Sharov, Anastasiia Kozlova - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..100f5c0 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +##@ General +help: ## Display this help. + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + +fmt: ## Run go fmt against code. + go fmt ./... + +vet: ## Run go vet against code. + go vet ./... + +##@ Build +build: fmt vet ## Build service binary. + go build -o bin/lambda main.go + +run: vet ## Run service from your laptop. + go run ./main.go + +##@ Test +lint: ## Run Go linter + golangci-lint run ./... + +test: ## Run Go tests + go test ./... \ No newline at end of file diff --git a/cmd/init.go b/cmd/init.go new file mode 100644 index 0000000..24c6442 --- /dev/null +++ b/cmd/init.go @@ -0,0 +1,39 @@ +/* +Copyright © 2024 NAME HERE +*/ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +// initCmd represents the init command +var initCmd = &cobra.Command{ + Use: "init", + Short: "Update environment to use 'utils' correctly", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("init called") + }, +} + +func init() { + rootCmd.AddCommand(initCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // initCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // initCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..48d61d7 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,47 @@ +/* +Copyright © 2024 NAME HERE +*/ +package cmd + +import ( + "os" + + "github.com/spf13/cobra" +) + +// rootCmd represents the base command when called without any subcommands +var rootCmd = &cobra.Command{ + Use: "utils", + Short: "A brief description of your application", + Long: `A longer description that spans multiple lines and likely contains +examples and usage of using your application. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + // Uncomment the following line if your bare application + // has an action associated with it: + // Run: func(cmd *cobra.Command, args []string) { }, + Version: `abc`, +} + +// Execute adds all child commands to the root command and sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCmd. +func Execute() { + err := rootCmd.Execute() + if err != nil { + os.Exit(1) + } +} + +func init() { + // Here you will define your flags and configuration settings. + // Cobra supports persistent flags, which, if defined here, + // will be global for your application. + + // rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.utils.yaml)") + + // Cobra also supports local flags, which will only run + // when this action is called directly. + rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tf.go b/cmd/tf.go new file mode 100644 index 0000000..cb76260 --- /dev/null +++ b/cmd/tf.go @@ -0,0 +1,39 @@ +/* +Copyright © 2024 NAME HERE +*/ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +// tfCmd represents the tf command +var tfCmd = &cobra.Command{ + Use: "tf", + Short: "A brief description of your command", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tf called") + }, +} + +func init() { + rootCmd.AddCommand(tfCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // tfCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tofu.go b/cmd/tofu.go new file mode 100644 index 0000000..74b6e74 --- /dev/null +++ b/cmd/tofu.go @@ -0,0 +1,39 @@ +/* +Copyright © 2024 NAME HERE +*/ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +// tofuCmd represents the tofu command +var tofuCmd = &cobra.Command{ + Use: "tofu", + Short: "A brief description of your command", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tofu called") + }, +} + +func init() { + rootCmd.AddCommand(tofuCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // tofuCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/uninstallDeps.go b/cmd/uninstallDeps.go new file mode 100644 index 0000000..63fd035 --- /dev/null +++ b/cmd/uninstallDeps.go @@ -0,0 +1,39 @@ +/* +Copyright © 2024 NAME HERE +*/ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +// uninstallDepsCmd represents the uninstallDeps command +var uninstallDepsCmd = &cobra.Command{ + Use: "uninstallDeps", + Short: "Uninstall utils dependencies (tfenv and tofuenv)", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("uninstallDeps called") + }, +} + +func init() { + rootCmd.AddCommand(uninstallDepsCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // uninstallDepsCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // uninstallDepsCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/upgradeDeps.go b/cmd/upgradeDeps.go new file mode 100644 index 0000000..8d00cc2 --- /dev/null +++ b/cmd/upgradeDeps.go @@ -0,0 +1,54 @@ +/* +Copyright © 2024 NAME HERE +*/ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +// "github.com/opentofuutils/tenv/pkg/utils" + +// upgradeDepsCmd represents the upgradeDeps command +var upgradeDepsCmd = &cobra.Command{ + Use: "upgradeDeps", + Short: "Upgrade utils dependencies (tfenv and tofuenv)", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("upgradeDeps called") + + //destFolder := "./data" + + //tenv.CreateFolder(destFolder) + + // Download the latest release + //if err := DownloadLatestRelease("tfutils", "tfenv", destFolder); err != nil { + // fmt.Println("Error:", err) + // return + //} + + fmt.Println("Latest release downloaded successfully.") + + }, +} + +func init() { + rootCmd.AddCommand(upgradeDepsCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // upgradeDepsCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // upgradeDepsCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..7eda496 --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module github.com/opentofuutils/tenv + +go 1.21 + +require github.com/spf13/cobra v1.8.0 + +require ( + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..d0e8c2c --- /dev/null +++ b/go.sum @@ -0,0 +1,10 @@ +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/lib/tenv-bashlog.sh b/lib/tenv-bashlog.sh deleted file mode 100755 index 6ae2cbe..0000000 --- a/lib/tenv-bashlog.sh +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/env bash - -set -uo pipefail; - -function _log_exception() { - ( - BASHLOG_FILE=0; - BASHLOG_JSON=0; - BASHLOG_SYSLOG=0; - - log 'error' "Logging Exception: $*"; - ); -}; -export -f _log_exception; - -function log() { - local syslog="${BASHLOG_SYSLOG:-0}"; - local file="${BASHLOG_FILE:-0}"; - local json="${BASHLOG_JSON:-0}"; - local stdout_extra="${BASHLOG_EXTRA:-0}"; - - if [ "${file}" -eq 1 ] || [ "${json}" -eq 1 ] || [ "${stdout_extra}" -eq 1 ]; then - local date_format="${BASHLOG_DATE_FORMAT:-+%F %T}"; - local date="$(date "${date_format}")"; - local date_s="$(date "+%s")"; - fi - local file_path="${BASHLOG_FILE_PATH:-/tmp/${0##*/}.log}"; - local json_path="${BASHLOG_JSON_PATH:-/tmp/${0##*/}.log.json}"; - - local tag="${BASHLOG_SYSLOG_TAG:-${0##*/})}"; - local facility="${BASHLOG_SYSLOG_FACILITY:-local0}"; - local pid="${$}"; - - local level="${1}"; - local upper="$(echo "${level}" | awk '{print toupper($0)}')"; - local debug_level="${TOFUENV_DEBUG:-0}"; - local stdout_colours="${BASHLOG_COLOURS:-1}"; - - local custom_eval_prefix="${BASHLOG_I_PROMISE_TO_BE_CAREFUL_CUSTOM_EVAL_PREFIX:-""}"; - - shift 1; - - local line="$@"; - - # RFC 5424 - # - # Numerical Severity - # Code - # - # 0 Emergency: system is unusable - # 1 Alert: action must be taken immediately - # 2 Critical: critical conditions - # 3 Error: error conditions - # 4 Warning: warning conditions - # 5 Notice: normal but significant condition - # 6 Informational: informational messages - # 7 Debug: debug-level messages - - local severities_DEBUG=7; - local severities_INFO=6; - local severities_NOTICE=5; # Unused - local severities_WARN=4; - local severities_ERROR=3; - local severities_CRIT=2; # Unused - local severities_ALERT=1; # Unused - local severities_EMERG=0; # Unused - - local severity_var="severities_${upper}"; - local severity="${!severity_var:-3}"; - - if [ "${debug_level}" -gt 0 ] || [ "${severity}" -lt 7 ]; then - - if [ "${syslog}" -eq 1 ]; then - local syslog_line="${upper}: ${line}"; - - logger \ - --id="${pid}" \ - -t "${tag}" \ - -p "${facility}.${severity}" \ - "${syslog_line}" \ - || _log_exception "logger --id=\"${pid}\" -t \"${tag}\" -p \"${facility}.${severity}\" \"${syslog_line}\""; - fi; - - if [ "${file}" -eq 1 ]; then - local file_line="${date} [${upper}] ${line}"; - - if [ -n "${custom_eval_prefix}" ]; then - file_line="$(eval "${custom_eval_prefix}")${file_line}"; - fi; - - echo -e "${file_line}" >> "${file_path}" \ - || _log_exception "echo -e \"${file_line}\" >> \"${file_path}\""; - fi; - - if [ "${json}" -eq 1 ]; then - local json_line="$(printf '{"timestamp":"%s","level":"%s","message":"%s"}' "${date_s}" "${level}" "${line}")"; - echo -e "${json_line}" >> "${json_path}" \ - || _log_exception "echo -e \"${json_line}\" >> \"${json_path}\""; - fi; - - fi; - - local colours_DEBUG='\033[34m' # Blue - local colours_INFO='\033[32m' # Green - local colours_NOTICE='' # Unused - local colours_WARN='\033[33m' # Yellow - local colours_ERROR='\033[31m' # Red - local colours_CRIT='' # Unused - local colours_ALERT='' # Unused - local colours_EMERG='' # Unused - local colours_DEFAULT='\033[0m' # Default - - local norm="${colours_DEFAULT}"; - local colour_var="colours_${upper}"; - local colour="${!colour_var:-\033[31m}"; - - local std_line; - if [ "${debug_level}" -le 1 ]; then - std_line="${line}"; - elif [ "${debug_level}" -ge 2 ]; then - std_line="${0}: ${line}"; - fi; - - if [ "${stdout_extra}" -eq 1 ]; then - std_line="${date} [${upper}] ${std_line}"; - fi; - - if [ -n "${custom_eval_prefix}" ]; then - std_line="$(eval "${custom_eval_prefix}")${std_line}"; - fi; - - if [ "${stdout_colours}" -eq 1 ]; then - std_line="${colour}${std_line}${norm}"; - fi; - - # Standard Output (Pretty) - case "${level}" in - 'info'|'warn') - echo -e "${std_line}"; - ;; - 'debug') - if [ "${debug_level}" -gt 0 ]; then - # We are debugging to STDERR on purpose - # tofuenv relies on STDOUT between libexecs to function - echo -e "${std_line}" >&2; - fi; - ;; - 'error') - echo -e "${std_line}" >&2; - if [ "${debug_level}" -gt 1 ]; then - echo -e "Here's a shell for debugging the current environment. 'exit 0' to resume script from here. Non-zero exit code will abort - parent shell will terminate." >&2; - bash || exit "${?}"; - else - exit 1; - fi; - ;; - *) - log 'error' "Undefined log level trying to log: $*"; - ;; - esac -}; -export -f log; - -declare prev_cmd="null"; -declare this_cmd="null"; -trap 'prev_cmd=${this_cmd:-null}; this_cmd=$BASH_COMMAND' DEBUG \ - && log debug 'DEBUG trap set' \ - || log 'error' 'DEBUG trap failed to set'; - -# This is an option if you want to log every single command executed, -# but it will significantly impact script performance and unit tests will fail - -#trap 'prev_cmd=$this_cmd; this_cmd=$BASH_COMMAND; log debug $this_cmd' DEBUG \ -# && log debug 'DEBUG trap set' \ -# || log 'error' 'DEBUG trap failed to set'; diff --git a/lib/tenv-helpers.sh b/lib/tenv-helpers.sh deleted file mode 100755 index 1d215c2..0000000 --- a/lib/tenv-helpers.sh +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -set -uo pipefail; - -if [ -z "${TOFUENV_ROOT:-""}" ]; then - # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac - readlink_f() { - local target_file="${1}"; - local file_name; - - while [ "${target_file}" != "" ]; do - cd "${target_file%/*}" || early_death "Failed to 'cd \$(${target_file%/*})' while trying to determine TOFUENV_ROOT"; - file_name="${target_file##*/}" || early_death "Failed to '\"${target_file##*/}\"' while trying to determine TOFUENV_ROOT"; - target_file="$(readlink "${file_name}")"; - done; - - echo "$(pwd -P)/${file_name}"; - }; - TOFUENV_SHIM=$(readlink_f "${0}") - TOFUENV_ROOT="${TOFUENV_SHIM%/*/*}"; - [ -n "${TOFUENV_ROOT}" ] || early_death "Failed to determine TOFUENV_ROOT"; -else - TOFUENV_ROOT="${TOFUENV_ROOT%/}"; -fi; -export TOFUENV_ROOT; - -if [ -z "${TOFUENV_CONFIG_DIR:-""}" ]; then - TOFUENV_CONFIG_DIR="$TOFUENV_ROOT"; -else - TOFUENV_CONFIG_DIR="${TOFUENV_CONFIG_DIR%/}"; -fi -export TOFUENV_CONFIG_DIR; - -if [ "${TOFUENV_DEBUG:-0}" -gt 0 ]; then - # Only reset DEBUG if TOFUENV_DEBUG is set, and DEBUG is unset or already a number - if [[ "${DEBUG:-0}" =~ ^[0-9]+$ ]] && [ "${DEBUG:-0}" -gt "${TOFUENV_DEBUG:-0}" ]; then - export DEBUG="${TOFUENV_DEBUG:-0}"; - fi; - if [[ "${TOFUENV_DEBUG}" -gt 2 ]]; then - export PS4='+ [${BASH_SOURCE##*/}:${LINENO}] '; - set -x; - fi; -fi; - -function load_bashlog () { - source "${TOFUENV_ROOT}/lib/tofuenv-bashlog.sh"; -}; -export -f load_bashlog; - -if [ "${TOFUENV_DEBUG:-0}" -gt 0 ] ; then - # our shim below cannot be used when debugging is enabled - load_bashlog; -else - # Shim that understands to no-op for debug messages, and defers to - # full bashlog for everything else. - function log () { - if [ "$1" != 'debug' ] ; then - # Loading full bashlog will overwrite the `log` function - load_bashlog; - log "$@"; - fi; - }; - export -f log; -fi; - -# Curl wrapper to switch TLS option for each OS -function curlw () { - local TLS_OPT="--tlsv1.2"; - - # Check if curl is 10.12.6 or above - if [[ -n "$(command -v sw_vers 2>/dev/null)" && ("$(sw_vers)" =~ 10\.12\.([6-9]|[0-9]{2}) || "$(sw_vers)" =~ 10\.1[3-9]) ]]; then - TLS_OPT=""; - fi; - - if [[ ! -z "${TOFUENV_NETRC_PATH:-""}" ]]; then - NETRC_OPT="--netrc-file ${TOFUENV_NETRC_PATH}"; - else - NETRC_OPT=""; - fi; - - if [[ ! -z "${TOFUENV_GITHUB_TOKEN:-""}" ]]; then - AUTHORIZATION_HEADER="Authorization: Bearer ${TOFUENV_GITHUB_TOKEN}"; - else - AUTHORIZATION_HEADER=""; - fi; - curl ${TLS_OPT} -H "${AUTHORIZATION_HEADER}" ${NETRC_OPT} "$@"; -}; -export -f curlw; - -function check_active_version() { - local v="${1}"; - local maybe_chdir=; - if [ -n "${2:-}" ]; then - maybe_chdir="-chdir=${2}"; - fi; - - local active_version="$(${TOFUENV_ROOT}/bin/tofu ${maybe_chdir} version | grep '^OpenTofu')"; - - if ! grep -E "^OpenTofu v${v}((-dev)|( \([a-f0-9]+\)))?( is already installed)?\$" <(echo "${active_version}"); then - log 'debug' "Expected version ${v} but found ${active_version}"; - return 1; - fi; - - log 'debug' "Active version ${v} as expected"; - return 0; -}; -export -f check_active_version; - -function check_installed_version() { - local v="${1}"; - local bin="${TOFUENV_CONFIG_DIR}/versions/${v}/tofu"; - [ -n "$(${bin} version | grep -E "^OpenTofu v${v}((-dev)|( \([a-f0-9]+\)))?$")" ]; -}; -export -f check_installed_version; - -function check_default_version() { - local v="${1}"; - local def="$(cat "${TOFUENV_CONFIG_DIR}/version")"; - [ "${def}" == "${v}" ]; -}; -export -f check_default_version; - -function cleanup() { - log 'info' 'Performing cleanup'; - local pwd="$(pwd)"; - log 'debug' "Deleting ${pwd}/version"; - rm -rf ./version; - log 'debug' "Deleting ${pwd}/versions"; - rm -rf ./versions; - log 'debug' "Deleting ${pwd}/.opentofu-version"; - rm -rf ./.opentofu-version; - log 'debug' "Deleting ${pwd}/latest_allowed.tf"; - rm -rf ./latest_allowed.tf; - log 'debug' "Deleting ${pwd}/min_required.tf"; - rm -rf ./min_required.tf; - log 'debug' "Deleting ${pwd}/chdir-dir"; - rm -rf ./chdir-dir; -}; -export -f cleanup; - -function error_and_proceed() { - errors+=("${1}"); - log 'warn' "Test Failed: ${1}"; -}; -export -f error_and_proceed; - -function check_dependencies() { - if [[ $(uname) == 'Darwin' ]] && [ $(which brew) ]; then - if ! [ $(which ggrep) ]; then - log 'error' 'A metaphysical dichotomy has caused this unit to overload and shut down. GNU Grep is a requirement and your Mac does not have it. Consider "brew install grep"'; - fi; - - shopt -s expand_aliases; - alias grep=ggrep; - fi; -}; -export -f check_dependencies; - -source "$TOFUENV_ROOT/lib/tofuenv-exec.sh"; -source "$TOFUENV_ROOT/lib/tofuenv-min-required.sh"; -source "$TOFUENV_ROOT/lib/tofuenv-version-file.sh"; -source "$TOFUENV_ROOT/lib/tofuenv-version-name.sh"; - -export TOFUENV_HELPERS=1; diff --git a/libexec/tenv-exec b/libexec/tenv-exec deleted file mode 100755 index 8dd3d58..0000000 --- a/libexec/tenv-exec +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash -# -# Summary: TODO -# -# Usage: tenv exec [arg1 arg2...] -# -# Runs an executable by first preparing PATH so that the selected OpenTofu -# version's `bin' directory is at the front. -# -# For example, if the currently selected OpenTofu version is 1.6.0: -# tofuenv exec plan -# -# is equivalent to: -# PATH="$TENV_ROOT/versions/1.6.0/bin:$PATH" tofu plan - -set -uo pipefail; - -#################################### -# Ensure we can execute standalone # -#################################### - -function early_death() { - echo "[FATAL] ${0}: ${1}" >&2; - exit 1; -}; - -if [ -z "${TENV_ROOT:-""}" ]; then - # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac - readlink_f() { - local target_file="${1}"; - local file_name; - - while [ "${target_file}" != "" ]; do - cd "$(dirname ${target_file})" || early_death "Failed to 'cd \$(dirname ${target_file})' while trying to determine TENV_ROOT"; - file_name="$(basename "${target_file}")" || early_death "Failed to 'basename \"${target_file}\"' while trying to determine TENV_ROOT"; - target_file="$(readlink "${file_name}")"; - done; - - echo "$(pwd -P)/${file_name}"; - }; - - TENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n "${TENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TENV_ROOT"; -else - TENV_ROOT="${TENV_ROOT%/}"; -fi; -export TENV_ROOT; - -if [ -n "${TOFUENV_HELPERS:-""}" ]; then - log 'debug' 'TOFUENV_HELPERS is set, not sourcing helpers again'; -else - [ "${TOFUENV_DEBUG:-0}" -gt 0 ] && echo "[DEBUG] Sourcing helpers from ${TENV_ROOT}/lib/tenv-helpers.sh"; - if source "${TENV_ROOT}/lib/tenv-helpers.sh"; then - log 'debug' 'Helpers sourced successfully'; - else - early_death "Failed to source helpers from ${TENV_ROOT}/lib/tenv-helpers.sh"; - fi; -fi; - -# Ensure libexec and bin are in $PATH -for dir in libexec bin; do - case ":${PATH}:" in - *:${TENV_ROOT}/${dir}:*) log 'debug' "\$PATH already contains '${TENV_ROOT}/${dir}', not adding it again";; - *) - log 'debug' "\$PATH does not contain '${TENV_ROOT}/${dir}', prepending and exporting it now"; - export PATH="${TENV_ROOT}/${dir}:${PATH}"; - ;; - esac; -done; - -##################### -# Begin Script Body # -##################### - -tenv-exec "$@"; diff --git a/libexec/tenv-help b/libexec/tenv-help deleted file mode 100755 index 1d1d5aa..0000000 --- a/libexec/tenv-help +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -set -uo pipefail; - -echo 'Usage: tenv [] - -Commands: - init Update environment to use 'tenv' correctly. - install Install tenv dependencies (tfenv and tofuenv) - uninstall Uninstall tenv dependencies (tfenv and tofuenv) - tofu List of tofuenv commands - tf List of tfenv commands - version-name Print current version of tenv - help Show the tenv help -'; - -exit 0; \ No newline at end of file diff --git a/libexec/tenv-init b/libexec/tenv-init deleted file mode 100755 index 93554e1..0000000 --- a/libexec/tenv-init +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -[ -n "${TENV_DEBUG}" ] && set -x; - -export PATH="${TENV_ROOT}/bin:${PATH}"; diff --git a/libexec/tenv-tf b/libexec/tenv-tf deleted file mode 100755 index cff7ce7..0000000 --- a/libexec/tenv-tf +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -# Usage: tenv tf -# Summary: TODO - -set -uo pipefail; - -tfenv \ No newline at end of file diff --git a/libexec/tenv-tofu b/libexec/tenv-tofu deleted file mode 100755 index 5332b28..0000000 --- a/libexec/tenv-tofu +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -# Usage: tofuenv version-file -# Summary: Detect the file that sets the current tofuenv version - -set -uo pipefail; \ No newline at end of file diff --git a/libexec/tofuenv-install b/libexec/tofuenv-install deleted file mode 100755 index b033cfc..0000000 --- a/libexec/tofuenv-install +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env bash -set -uo pipefail; - -#################################### -# Ensure we can execute standalone # -#################################### - -function early_death() { - echo "[FATAL] ${0}: ${1}" >&2; - exit 1; -}; - -if [ -z "${TENV_ROOT:-""}" ]; then - # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac - readlink_f() { - local target_file="${1}"; - local file_name; - - while [ "${target_file}" != "" ]; do - cd "$(dirname ${target_file})" || early_death "Failed to 'cd \$(dirname ${target_file})' while trying to determine TENV_ROOT"; - file_name="$(basename "${target_file}")" || early_death "Failed to 'basename \"${target_file}\"' while trying to determine TENV_ROOT"; - target_file="$(readlink "${file_name}")"; - done; - - echo "$(pwd -P)/${file_name}"; - }; - - TENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n "${TENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TENV_ROOT"; -else - TENV_ROOT="${TENV_ROOT%/}"; -fi; -export TENV_ROOT; - -if [ -n "${TENV_HELPERS:-""}" ]; then - log 'debug' 'TENV_HELPERS is set, not sourcing helpers again'; -else - [ "${TOFUENV_DEBUG:-0}" -gt 0 ] && echo "[DEBUG] Sourcing helpers from ${TENV_ROOT}/lib/tenv-helpers.sh"; - if source "${TENV_ROOT}/lib/tenv-helpers.sh"; then - log 'debug' 'Helpers sourced successfully'; - else - early_death "Failed to source helpers from ${TENV_ROOT}/lib/tenv-helpers.sh"; - fi; -fi; - -# Ensure libexec and bin are in $PATH -for dir in libexec bin; do - case ":${PATH}:" in - *:${TENV_ROOT}/${dir}:*) log 'debug' "\$PATH already contains '${TENV_ROOT}/${dir}', not adding it again";; - *) - log 'debug' "\$PATH does not contain '${TENV_ROOT}/${dir}', prepending and exporting it now"; - export PATH="${TENV_ROOT}/${dir}:${PATH}"; - ;; - esac; -done; - -##################### -# Begin Script Body # -##################### - -[ "${#}" -gt 1 ] && log 'error' 'usage: tenv install []'; - -declare requested="${1:-""}"; - -log debug "Resolving version with: tenv-resolve-version ${requested}"; -declare resolved; -# TODO -resolved="$(tenv-resolve-version ${requested})" || log 'error' "Failed to resolve ${requested} version"; - -declare version="${resolved%%\:*}"; -declare regex="${resolved##*\:}"; - -[ -n "${version}" ] || log 'error' 'Version is not specified. This should not be possible as we default to latest'; - -log 'debug' "Processing install for version ${version}, using regex ${regex}"; - -#if [[ ${version} =~ ${regex:-not} ]]; then -# log 'debug' "Version and regex matched"; -#else -# log 'debug' "Version and regex not matched"; -# if [ "${TOFUENV_SKIP_LIST_REMOTE:-0}" -eq 0 ]; then -# remote_version="$(tofuenv-list-remote | grep -e "${regex}" | head -n 1)"; -# [ -n "${remote_version}" ] && version="${remote_version}" || log 'error' "No ${version} versions matching '${regex}' found in remote"; -# fi; -#fi; - -# ??????? -dst_path="${TENV_CONFIG_DIR}/versions/${version}"; -if [ -f "${dst_path}/tofu" ]; then - echo "OpenTofu v${version} is already installed"; - exit 0; -fi; - - - - - -os="${kernel}_${TOFUENV_ARCH}" - -keybase_bin="$(command -v keybase 2>/dev/null)"; -shasum_bin="$(command -v shasum 2>/dev/null)"; -sha256sum_bin="$(command -v sha256sum 2>/dev/null)"; - -TOFUENV_REMOTE="${TOFUENV_REMOTE:-https://github.com/opentofu/opentofu/releases}"; -version_url="${TOFUENV_REMOTE}/download/v${version}"; - -tarball_name="tofu_${version}_${os}.zip"; - -shasums_name="tofu_${version}_SHA256SUMS"; -shasums_sig="${shasums_name}.sig"; - -log 'info' "Installing OpenTofu v${version}"; - -# Create a local temporary directory for downloads -tmpdir_arg="-t"; - -if mktemp --help 2>&1 | grep -- '--tmpdir' >/dev/null; then - tmpdir_arg="--tmpdir"; -fi; - -download_tmp="$(mktemp -d ${tmpdir_arg} tofuenv_download.XXXXXX)" || log 'error' "Unable to create temporary download directory (mktemp -d ${tmpdir_arg} tofuenv_download.XXXXXX). Working Directory is: $(pwd)"; - -# Clean it up in case of error -trap "rm -rf ${download_tmp}" EXIT; - -declare curl_progress=""; -case "${TOFUENV_CURL_OUTPUT:-2}" in - '2') - log 'debug' 'Setting curl progress bar with "-#"'; - curl_progress="-#"; - ;; - '1') - log 'debug' 'Using default curl output'; - curl_progress=""; - ;; - '0') - log 'debug' 'Running curl silently with "-s"'; - curl_progress="-s"; - ;; - *) - log 'error' 'TOFUENV_CURL_OUTPUT specified, but not with a supported value ([0,1,2])'; - ;; -esac; - -log 'info' "Downloading release tarball from ${version_url}/${tarball_name}"; - -status=$(curlw ${curl_progress} -w "%{http_code}" -f -L -o "${download_tmp}/${tarball_name}" "${version_url}/${tarball_name}"); - -case "${status}" in - 200) log 'debug' "'${requested:-$version}' version download successfully" ;; - 403) log 'error' "GitHub Rate limits exceeded" ;; - 404) log 'error' "No versions matching '${requested:-$version}' found in remote" ;; - *) log 'error' "Unknown error, status code = ${status}" ;; -esac; - -log 'info' "Downloading SHA hash file from ${version_url}/${shasums_name}"; -curlw -s -f -L -o "${download_tmp}/${shasums_name}" "${version_url}/${shasums_name}" || log 'error' 'SHA256 hashes download failed'; - -download_signature() { - log 'info' "Downloading SHA hash signature file from ${version_url}/${shasums_sig}"; - curlw -s -f -L \ - -o "${download_tmp}/${shasums_sig}" \ - "${version_url}/${shasums_sig}" \ - && log 'debug' "SHA256SUMS signature file downloaded successfully to ${download_tmp}/${shasums_sig}" \ - || log 'error' 'SHA256SUMS signature download failed'; -}; - -# If on MacOS with Homebrew, use GNU grep -# This allows keybase login detection to work on Mac, -# and is required to be able to detect tofu version -# from "required_version" setting in "*.tf" files -check_dependencies; - - - - -if [[ -n "${shasum_bin}" && -x "${shasum_bin}" ]]; then - ( - cd "${download_tmp}"; - "${shasum_bin}" \ - -a 256 \ - -s \ - -c <(grep -F "${tarball_name}" "${shasums_name}") - ) || log 'error' 'SHA256 hash does not match!'; -elif [[ -n "${sha256sum_bin}" && -x "${sha256sum_bin}" ]]; then - ( - cd "${download_tmp}"; - "${sha256sum_bin}" \ - -c <(grep -F "${tarball_name}" "${shasums_name}") - ) || log 'error' 'SHA256 hash does not match!'; -else - # Lack of shasum deserves a proper warning - log 'warn' 'No shasum tool available. Skipping SHA256 hash validation'; -fi; - -mkdir -p "${dst_path}" || log 'error' "Failed to make directory ${dst_path}"; - -declare unzip_output; -unzip_output="$(unzip -o "${download_tmp}/${tarball_name}" -d "${dst_path}")" || log 'error' 'Tarball unzip failed'; -while IFS= read -r unzip_line; do - log 'info' "${unzip_line}"; -done < <(printf '%s\n' "${unzip_output}"); - -log 'info' "Installation of tofu v${version} successful. To make this your default version, run 'tofuenv use ${version}'"; diff --git a/libexec/tofuenv-resolve-version b/libexec/tofuenv-resolve-version deleted file mode 100755 index 732cfcb..0000000 --- a/libexec/tofuenv-resolve-version +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env bash -# Usage: tofuenv resolve-version [] -# Summary: Resolve the version to action based on the environment and optional input token - -set -uo pipefail; - -#################################### -# Ensure we can execute standalone # -#################################### - -function early_death() { - echo "[FATAL] ${0}: ${1}" >&2; - exit 1; -}; - -if [ -z "${TOFUENV_ROOT:-""}" ]; then - # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac - readlink_f() { - local target_file="${1}"; - local file_name; - - while [ "${target_file}" != "" ]; do - cd "$(dirname ${target_file})" || early_death "Failed to 'cd \$(dirname ${target_file})' while trying to determine TOFUENV_ROOT"; - file_name="$(basename "${target_file}")" || early_death "Failed to 'basename \"${target_file}\"' while trying to determine TOFUENV_ROOT"; - target_file="$(readlink "${file_name}")"; - done; - - echo "$(pwd -P)/${file_name}"; - }; - - TOFUENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n "${TOFUENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TOFUENV_ROOT"; -else - TOFUENV_ROOT="${TOFUENV_ROOT%/}"; -fi; -export TOFUENV_ROOT; - -if [ -n "${TOFUENV_HELPERS:-""}" ]; then - log 'debug' 'TOFUENV_HELPERS is set, not sourcing helpers again'; -else - [ "${TOFUENV_DEBUG:-0}" -gt 0 ] && echo "[DEBUG] Sourcing helpers from ${TOFUENV_ROOT}/lib/tofuenv-helpers.sh"; - if source "${TOFUENV_ROOT}/lib/tofuenv-helpers.sh"; then - log 'debug' 'Helpers sourced successfully'; - else - early_death "Failed to source helpers from ${TOFUENV_ROOT}/lib/tofuenv-helpers.sh"; - fi; -fi; - -# Ensure libexec and bin are in $PATH -for dir in libexec bin; do - case ":${PATH}:" in - *:${TOFUENV_ROOT}/${dir}:*) log 'debug' "\$PATH already contains '${TOFUENV_ROOT}/${dir}', not adding it again";; - *) - log 'debug' "\$PATH does not contain '${TOFUENV_ROOT}/${dir}', prepending and exporting it now"; - export PATH="${TOFUENV_ROOT}/${dir}:${PATH}"; - ;; - esac; -done; - -# If on MacOS with Homebrew, use GNU grep -# This allows keybase login detection to work on Mac, -# and is required to be able to detect tofu version -# from "required_version" setting in "*.tf" files -check_dependencies; - -##################### -# Begin Script Body # -##################### - -declare version_requested version regex min_required version_file; - -declare arg="${1:-""}"; - -if [ -z "${arg}" -a -z "${TOFUENV_TOFU_VERSION:-""}" ]; then - version_file="$(tofuenv-version-file)"; - log 'debug' "Version File: ${version_file}"; - - if [ "${version_file}" != "${TOFUENV_CONFIG_DIR}/version" ]; then - log 'debug' "Version File (${version_file}) is not the default \${TOFUENV_CONFIG_DIR}/version (${TOFUENV_CONFIG_DIR}/version)"; - version_requested="$(cat "${version_file}")" \ - || log 'error' "Failed to open ${version_file}"; - - elif [ -f "${version_file}" ]; then - log 'debug' "Version File is the default \${TOFUENV_CONFIG_DIR}/version (${TOFUENV_CONFIG_DIR}/version)"; - version_requested="$(cat "${version_file}")" \ - || log 'error' "Failed to open ${version_file}"; - - # Absolute fallback - if [ -z "${version_requested}" ]; then - log 'debug' 'Version file had no content. Falling back to "latest"'; - version_requested='latest'; - fi; - - else - log 'debug' "Version File is the default \${TOFUENV_CONFIG_DIR}/version (${TOFUENV_CONFIG_DIR}/version) but it doesn't exist"; - log 'debug' 'No version requested on the command line or in the version file search path. Installing "latest"'; - version_requested='latest'; - fi; -elif [ -n "${TOFUENV_TOFU_VERSION:-""}" ]; then - version_requested="${TOFUENV_TOFU_VERSION}"; - log 'debug' "TOFUENV_TOFU_VERSION is set: ${TOFUENV_TOFU_VERSION}"; -else - version_requested="${arg}"; -fi; - -[[ -n "${version_requested:-""}" ]] \ - && log 'debug' "Version Requested: ${version_requested}" \ - || log 'error' 'Version could not be resolved!'; - -# Accept a v-prefixed version, but strip the v. -if [[ "${version_requested}" =~ ^v.*$ ]]; then - log 'debug' "Version Requested is prefixed with a v. Stripping the v."; - version_requested="${version_requested#v*}"; -fi; - -if [[ "${version_requested}" =~ ^min-required$ ]]; then - log 'debug' 'Detecting minimum required version...'; - min_required="$(tofuenv-min-required)" \ - || log 'error' 'tofuenv-min-required failed'; - - if [ -z "${min_required}" ]; then - log 'debug' 'It was not possible to detect a minimum-required version. Do you have a required_version line present?'; - exit; - fi; - - log 'debug' "Minimum required version detected: ${min_required}"; - version_requested="${min_required}"; -fi; - -if [[ "${version_requested}" =~ ^latest-allowed$ ]]; then - log 'debug' 'Detecting latest allowable version...'; - version_spec="$(grep -h required_version "${TOFUENV_DIR:-$(pwd)}"/{*.tf,*.tf.json} 2>/dev/null | { IFS='"' read -r _ ver _; echo "${ver%%,*}"; })"; - version_num="$(echo "${version_spec}" | sed -E 's/[^0-9.]+//')"; - log 'debug' "Using ${version_num} from version spec: ${version_spec}"; - - case "${version_spec}" in - '>'*) - version_requested=latest; - ;; - '<='*) - version_requested="${version_num}"; - ;; - '~>'*) - version_without_rightmost="${version_num%.*}"; - version_requested="latest:^${version_without_rightmost}"; - ;; - *) - log 'error' "Unsupported version spec: '${version_spec}', only >, >=, <=, and ~> are supported."; - ;; - esac; - log 'debug' "Determined the requested version to be: ${version_requested}"; -fi; - -if [[ "${version_requested}" =~ ^latest\:.*$ ]]; then - version="${version_requested%%\:*}"; - regex="${version_requested##*\:}"; - log 'debug' "Version uses latest keyword with regex: ${regex}"; -elif [[ "${version_requested}" =~ ^latest$ ]]; then - version="${version_requested}"; - regex="^[0-9]\+\.[0-9]\+\.[0-9]\+$"; - log 'debug' "Version uses latest keyword alone. Forcing regex to match stable versions only: ${regex}"; -else - version="${version_requested}"; - regex="^${version_requested}$"; - log 'debug' "Version is explicit: ${version}. Regex enforces the version: ${regex}"; -fi; - -echo "${version}:${regex}"; diff --git a/main.go b/main.go new file mode 100644 index 0000000..2fa68e3 --- /dev/null +++ b/main.go @@ -0,0 +1,12 @@ +/* +Copyright © 2024 NAME HERE +*/ +package main + +import ( + "github.com/opentofuutils/tenv/cmd" +) + +func main() { + cmd.Execute() +} diff --git a/pkg/utils/abc.go b/pkg/utils/abc.go new file mode 100644 index 0000000..d680916 --- /dev/null +++ b/pkg/utils/abc.go @@ -0,0 +1,14 @@ +package main + +import "os" + +func CreateFolder(name string) error { + // Check if the destination folder exists, create it if not + if _, err := os.Stat(name); os.IsNotExist(err) { + if err := os.Mkdir(name, 0755); err != nil { + return err + } + } + + return nil +} diff --git a/pkg/utils/github.go b/pkg/utils/github.go new file mode 100644 index 0000000..ac2d124 --- /dev/null +++ b/pkg/utils/github.go @@ -0,0 +1,79 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + "os" + "os/exec" +) + +func DownloadLatestRelease(owner, repo, destFolder string) error { + // Use GitHub API to get the latest release information + apiURL := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases/latest", owner, repo) + resp, err := http.Get(apiURL) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("failed to fetch release information, status code: %d", resp.StatusCode) + } + + // Parse the response JSON to get the download URL for the latest release + var releaseInfo map[string]interface{} + if err := json.NewDecoder(resp.Body).Decode(&releaseInfo); err != nil { + return err + } + + assets, ok := releaseInfo["assets"].([]interface{}) + if !ok || len(assets) == 0 { + return fmt.Errorf("no assets found for the latest release") + } + + latestAsset := assets[0].(map[string]interface{}) + latestAssetName := latestAsset["name"].(string) + //latestAssetURL := latestAsset["browser_download_url"].(string) + + // Download the latest release zip file + downloadPath := fmt.Sprintf("%s/%s", destFolder, latestAssetName) + //if err := downloadFile(latestAssetURL, downloadPath); err != nil { + // return err + //} + + // Unzip the downloaded file to the destination folder + if err := unzipFile(downloadPath, destFolder); err != nil { + return err + } + + return nil +} + +//func downloadFile(url, dest string) error { +// resp, err := http.Get(url) +// if err != nil { +// return err +// } +// defer resp.Body.Close() +// +// if resp.StatusCode != http.StatusOK { +// return fmt.Errorf("failed to download file, status code: %d", resp.StatusCode) +// } +// +// out, err := os.Create(dest) +// if err != nil { +// return err +// } +// defer out.Close() +// +// _, err = io.Copy(out, resp.Body) +// return err +//} + +func unzipFile(src, dest string) error { + cmd := exec.Command("unzip", "-o", src, "-d", dest) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() +} From 32b458f20b755eefb37bb9f812d9d74924c81667 Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Mon, 8 Jan 2024 15:09:25 +0100 Subject: [PATCH 07/32] feat: implement new commands --- .gitignore | 6 +- cmd/init.go | 2 +- cmd/root.go | 4 +- cmd/tofu.go | 32 ++- cmd/uninstallDeps.go | 17 +- cmd/upgradeDeps.go | 29 +-- go.mod | 30 +++ go.sum | 307 ++++++++++++++++++++++++++ pkg/github/main.go | 59 +++++ pkg/misc/arhive.go | 74 +++++++ pkg/misc/env.go | 14 ++ pkg/{utils/abc.go => misc/folders.go} | 17 +- pkg/misc/prepare.go | 44 ++++ pkg/utils/github.go | 79 ------- 14 files changed, 611 insertions(+), 103 deletions(-) create mode 100644 pkg/github/main.go create mode 100644 pkg/misc/arhive.go create mode 100644 pkg/misc/env.go rename pkg/{utils/abc.go => misc/folders.go} (54%) create mode 100644 pkg/misc/prepare.go delete mode 100644 pkg/utils/github.go diff --git a/.gitignore b/.gitignore index 00951fe..2e06a68 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,8 @@ bin/terraform-* # vendor/ .idea -.DS_Store \ No newline at end of file +.DS_Store +./main +./bin +./root +main \ No newline at end of file diff --git a/cmd/init.go b/cmd/init.go index 24c6442..a143223 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -12,7 +12,7 @@ import ( // initCmd represents the init command var initCmd = &cobra.Command{ Use: "init", - Short: "Update environment to use 'utils' correctly", + Short: "Update environment to use 'github' correctly", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your command. For example: diff --git a/cmd/root.go b/cmd/root.go index 48d61d7..1bd153e 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -11,7 +11,7 @@ import ( // rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ - Use: "utils", + Use: "github", Short: "A brief description of your application", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your application. For example: @@ -39,7 +39,7 @@ func init() { // Cobra supports persistent flags, which, if defined here, // will be global for your application. - // rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.utils.yaml)") + // rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.github.yaml)") // Cobra also supports local flags, which will only run // when this action is called directly. diff --git a/cmd/tofu.go b/cmd/tofu.go index 74b6e74..ad91d2a 100644 --- a/cmd/tofu.go +++ b/cmd/tofu.go @@ -4,9 +4,11 @@ Copyright © 2024 NAME HERE package cmd import ( + "bytes" "fmt" - + "github.com/opentofuutils/tenv/pkg/misc" "github.com/spf13/cobra" + "os/exec" ) // tofuCmd represents the tofu command @@ -20,7 +22,33 @@ Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { - fmt.Println("tofu called") + //fmt.Println("tofu called") + + rootDir := misc.GetEnv(misc.RootEnv, "") + binDir := fmt.Sprintf("%s/bin", rootDir) + tofuExec := fmt.Sprintf("%s/tofu/bin/tofuenv", binDir) + tofuExec = "/Users/asharov/go/src/github.com/opentofuutils/tenv/root/bin/tofuenv/tofuutils-tofuenv-e0bec88/bin/tofuenv" + //fmt.Println(tofuExec) + + exec := exec.Command(tofuExec, args...) + var out bytes.Buffer + var stderr bytes.Buffer + exec.Stdout = &out + exec.Stderr = &stderr + err := exec.Run() + + if err != nil { + fmt.Println(stderr.String()) + return + } + fmt.Println("Result: " + out.String()) + + //out, _ := exec.Command(tofuExec, args...).Output() + ////if err != nil { + //// fmt.Println(err) + ////} + //fmt.Println(string(out)) + }, } diff --git a/cmd/uninstallDeps.go b/cmd/uninstallDeps.go index 63fd035..981a7a7 100644 --- a/cmd/uninstallDeps.go +++ b/cmd/uninstallDeps.go @@ -5,6 +5,9 @@ package cmd import ( "fmt" + "github.com/opentofuutils/tenv/pkg/misc" + log "github.com/sirupsen/logrus" + "os" "github.com/spf13/cobra" ) @@ -12,7 +15,7 @@ import ( // uninstallDepsCmd represents the uninstallDeps command var uninstallDepsCmd = &cobra.Command{ Use: "uninstallDeps", - Short: "Uninstall utils dependencies (tfenv and tofuenv)", + Short: "Uninstall tenv dependencies (tfenv and tofuenv)", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your command. For example: @@ -20,7 +23,17 @@ Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { - fmt.Println("uninstallDeps called") + log.Info("Starting to uninstall tenv tools") + + rootDir := misc.GetEnv(misc.RootEnv, "") + binDir := fmt.Sprintf("%s/bin", rootDir) + + err := os.RemoveAll(binDir) + if err != nil { + log.Error("Error removing bin directory:", err) + } + + log.Info("tenv tools uninstalled successfully") }, } diff --git a/cmd/upgradeDeps.go b/cmd/upgradeDeps.go index 8d00cc2..6722d30 100644 --- a/cmd/upgradeDeps.go +++ b/cmd/upgradeDeps.go @@ -4,17 +4,17 @@ Copyright © 2024 NAME HERE package cmd import ( - "fmt" - + "github.com/opentofuutils/tenv/pkg/misc" + log "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) -// "github.com/opentofuutils/tenv/pkg/utils" +// "github.com/opentofuutils/tenv/pkg/github" // upgradeDepsCmd represents the upgradeDeps command var upgradeDepsCmd = &cobra.Command{ Use: "upgradeDeps", - Short: "Upgrade utils dependencies (tfenv and tofuenv)", + Short: "Upgrade github dependencies (tfenv and tofuenv)", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your command. For example: @@ -22,20 +22,21 @@ Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { - fmt.Println("upgradeDeps called") - - //destFolder := "./data" + log.Info("Starting to upgrade tenv tools") - //tenv.CreateFolder(destFolder) + rootDir := misc.GetEnv(misc.RootEnv, "") - // Download the latest release - //if err := DownloadLatestRelease("tfutils", "tfenv", destFolder); err != nil { - // fmt.Println("Error:", err) - // return - //} + err := misc.PrepareTool("tfutils", "tfenv", rootDir) + if err != nil { + return + } - fmt.Println("Latest release downloaded successfully.") + err = misc.PrepareTool("opentofuutils", "tofuenv", rootDir) + if err != nil { + return + } + log.Info("tenv tools upgraded successfully") }, } diff --git a/go.mod b/go.mod index 7eda496..ac2c659 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,36 @@ go 1.21 require github.com/spf13/cobra v1.8.0 require ( + github.com/andybalholm/brotli v1.0.6 // indirect + github.com/arduino/go-paths-helper v1.2.0 // indirect + github.com/bodgit/plumbing v1.2.0 // indirect + github.com/bodgit/sevenzip v1.3.0 // indirect + github.com/bodgit/windows v1.0.0 // indirect + github.com/codeclysm/extract/v3 v3.1.1 // indirect + github.com/connesc/cipherio v0.2.1 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/h2non/filetype v1.1.3 // indirect + github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/pgzip v1.2.6 // indirect + github.com/mholt/archiver/v3 v3.5.1 // indirect + github.com/nwaples/rardecode v1.1.3 // indirect + github.com/nwaples/rardecode/v2 v2.0.0-beta.2 // indirect + github.com/pierrec/lz4/v4 v4.1.19 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/testify v1.7.1 // indirect + github.com/therootcompany/xz v1.0.1 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect + go4.org v0.0.0-20200411211856-f5505b9728dd // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect + golang.org/x/text v0.3.8 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index d0e8c2c..d0c691f 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,317 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= +github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/arduino/go-paths-helper v1.2.0 h1:qDW93PR5IZUN/jzO4rCtexiwF8P4OIcOmcSgAYLZfY4= +github.com/arduino/go-paths-helper v1.2.0/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck= +github.com/bodgit/plumbing v1.2.0 h1:gg4haxoKphLjml+tgnecR4yLBV5zo4HAZGCtAh3xCzM= +github.com/bodgit/plumbing v1.2.0/go.mod h1:b9TeRi7Hvc6Y05rjm8VML3+47n4XTZPtQ/5ghqic2n8= +github.com/bodgit/sevenzip v1.3.0 h1:1ljgELgtHqvgIp8W8kgeEGHIWP4ch3xGI8uOBZgLVKY= +github.com/bodgit/sevenzip v1.3.0/go.mod h1:omwNcgZTEooWM8gA/IJ2Nk/+ZQ94+GsytRzOJJ8FBlM= +github.com/bodgit/windows v1.0.0 h1:rLQ/XjsleZvx4fR1tB/UxQrK+SJ2OFHzfPjLWWOhDIA= +github.com/bodgit/windows v1.0.0/go.mod h1:a6JLwrB4KrTR5hBpp8FI9/9W9jJfeQ2h4XDXU74ZCdM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/codeclysm/extract/v3 v3.1.1 h1:iHZtdEAwSTqPrd+1n4jfhr1qBhUWtHlMTjT90+fJVXg= +github.com/codeclysm/extract/v3 v3.1.1/go.mod h1:ZJi80UG2JtfHqJI+lgJSCACttZi++dHxfWuPaMhlOfQ= +github.com/connesc/cipherio v0.2.1 h1:FGtpTPMbKNNWByNrr9aEBtaJtXjqOzkIXNYJp6OEycw= +github.com/connesc/cipherio v0.2.1/go.mod h1:ukY0MWJDFnJEbXMQtOcn2VmTpRfzcTz4OoVrWGGJZcA= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 h1:iFaUwBSo5Svw6L7HYpRu/0lE3e0BaElwnNO1qkNQxBY= +github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= +github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 h1:rhqTjzJlm7EbkELJDKMTU7udov+Se0xZkWmugr6zGok= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0= +github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= +github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo= +github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= +github.com/mholt/archiver/v4 v4.0.0-alpha.8 h1:tRGQuDVPh66WCOelqe6LIGh0gwmfwxUrSSDunscGsRM= +github.com/mholt/archiver/v4 v4.0.0-alpha.8/go.mod h1:5f7FUYGXdJWUjESffJaYR4R60VhnHxb2X3T1teMyv5A= +github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ= +github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= +github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nwaples/rardecode/v2 v2.0.0-beta.2 h1:e3mzJFJs4k83GXBEiTaQ5HgSc/kOK8q0rDaRO0MPaOk= +github.com/nwaples/rardecode/v2 v2.0.0-beta.2/go.mod h1:yntwv/HfMc/Hbvtq9I19D1n58te3h6KsqCf3GxyfBGY= +github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4= +github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= +github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU= +go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/github/main.go b/pkg/github/main.go new file mode 100644 index 0000000..c4e0701 --- /dev/null +++ b/pkg/github/main.go @@ -0,0 +1,59 @@ +package github + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "os" +) + +func DownloadLatestRelease(owner, repo, destPath string) error { + // Use GitHub API to get the latest release information + apiURL := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases/latest", owner, repo) + resp, err := http.Get(apiURL) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("failed to fetch release information, status code: %d", resp.StatusCode) + } + + // Parse the response JSON to get the download URL for the latest release + var releaseInfo map[string]interface{} + if err := json.NewDecoder(resp.Body).Decode(&releaseInfo); err != nil { + return err + } + + zipball_url := releaseInfo["tarball_url"].(string) + + // Download the latest release zip file + if err := DownloadFile(zipball_url, destPath); err != nil { + return err + } + + return nil +} + +func DownloadFile(url, dest string) error { + resp, err := http.Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("failed to download file, status code: %d", resp.StatusCode) + } + + out, err := os.Create(dest) + if err != nil { + return err + } + defer out.Close() + + _, err = io.Copy(out, resp.Body) + return err +} diff --git a/pkg/misc/arhive.go b/pkg/misc/arhive.go new file mode 100644 index 0000000..f3d4577 --- /dev/null +++ b/pkg/misc/arhive.go @@ -0,0 +1,74 @@ +package misc + +import ( + "archive/tar" + "compress/gzip" + "io" + "os" + "path/filepath" + "strings" +) + +func UnTarGz(source, destination string) error { + // Open the source file + file, err := os.Open(source) + if err != nil { + return err + } + defer file.Close() + + // Create a gzip reader + gzipReader, err := gzip.NewReader(file) + if err != nil { + return err + } + defer gzipReader.Close() + + // Create a tar reader + tarReader := tar.NewReader(gzipReader) + + // Iterate through the tar archive and extract files + for { + header, err := tarReader.Next() + + if err == io.EOF { + // End of tar archive + break + } + + if err != nil { + return err + } + + // Construct the destination path for the current file without the top-level directory + target := filepath.Join(destination, strings.TrimPrefix(header.Name, filepath.Base(source)+"/")) + + switch header.Typeflag { + case tar.TypeDir: + // Create directories + if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil { + return err + } + + case tar.TypeReg, tar.TypeRegA: + // Create regular files + file, err := os.Create(target) + if err != nil { + return err + } + defer file.Close() + + // Copy file contents + if _, err := io.Copy(file, tarReader); err != nil { + return err + } + + // Set file permissions + if err := os.Chmod(target, os.FileMode(header.Mode)); err != nil { + return err + } + } + } + + return nil +} diff --git a/pkg/misc/env.go b/pkg/misc/env.go new file mode 100644 index 0000000..ea92b7b --- /dev/null +++ b/pkg/misc/env.go @@ -0,0 +1,14 @@ +package misc + +import "os" + +const ( + RootEnv = "TENV_ROOT_PATH" +) + +func GetEnv(key, fallback string) string { + if value, ok := os.LookupEnv(key); ok { + return value + } + return fallback +} diff --git a/pkg/utils/abc.go b/pkg/misc/folders.go similarity index 54% rename from pkg/utils/abc.go rename to pkg/misc/folders.go index d680916..ddf3b9f 100644 --- a/pkg/utils/abc.go +++ b/pkg/misc/folders.go @@ -1,6 +1,9 @@ -package main +package misc -import "os" +import ( + "fmt" + "os" +) func CreateFolder(name string) error { // Check if the destination folder exists, create it if not @@ -12,3 +15,13 @@ func CreateFolder(name string) error { return nil } + +func DeleteFolder(path string) error { + err := os.RemoveAll(path) + if err != nil { + return err + } + + fmt.Printf("Deleted folder: %s\n", path) + return nil +} diff --git a/pkg/misc/prepare.go b/pkg/misc/prepare.go new file mode 100644 index 0000000..d94d9f4 --- /dev/null +++ b/pkg/misc/prepare.go @@ -0,0 +1,44 @@ +package misc + +import ( + "fmt" + "github.com/opentofuutils/tenv/pkg/github" + log "github.com/sirupsen/logrus" + "os" +) + +func PrepareTool(owner, repo, rootDir string) error { + binDir := fmt.Sprintf("%s/bin", rootDir) + miscDir := fmt.Sprintf("%s/misc", rootDir) + + // Create temporary directory where tarballs will be stored + err := CreateFolder(miscDir) + if err != nil { + return err + } + defer func() { + // Clean up: Remove the temporary directory when done + err := os.RemoveAll(miscDir) + if err != nil { + log.Error("Error removing temporary directory:", err) + } + }() + + tarballPath := fmt.Sprintf("%s/%s-%s", miscDir, owner, repo) + if err := github.DownloadLatestRelease(owner, repo, tarballPath); err != nil { + fmt.Println("Error:", err) + return err + } + log.Info(fmt.Sprintf("Latest %s release owned by %s downloaded successfully", repo, owner)) + + err = UnTarGz(tarballPath, fmt.Sprintf("%s/%s", binDir, repo)) + if err != nil { + log.Warn("Error:", err) + } else { + log.Info("Archive untarred successfully.") + } + + log.Info(fmt.Sprintf("Latest %s release owned by %s prepared successfully", repo, owner)) + + return nil +} diff --git a/pkg/utils/github.go b/pkg/utils/github.go deleted file mode 100644 index ac2d124..0000000 --- a/pkg/utils/github.go +++ /dev/null @@ -1,79 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "net/http" - "os" - "os/exec" -) - -func DownloadLatestRelease(owner, repo, destFolder string) error { - // Use GitHub API to get the latest release information - apiURL := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases/latest", owner, repo) - resp, err := http.Get(apiURL) - if err != nil { - return err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("failed to fetch release information, status code: %d", resp.StatusCode) - } - - // Parse the response JSON to get the download URL for the latest release - var releaseInfo map[string]interface{} - if err := json.NewDecoder(resp.Body).Decode(&releaseInfo); err != nil { - return err - } - - assets, ok := releaseInfo["assets"].([]interface{}) - if !ok || len(assets) == 0 { - return fmt.Errorf("no assets found for the latest release") - } - - latestAsset := assets[0].(map[string]interface{}) - latestAssetName := latestAsset["name"].(string) - //latestAssetURL := latestAsset["browser_download_url"].(string) - - // Download the latest release zip file - downloadPath := fmt.Sprintf("%s/%s", destFolder, latestAssetName) - //if err := downloadFile(latestAssetURL, downloadPath); err != nil { - // return err - //} - - // Unzip the downloaded file to the destination folder - if err := unzipFile(downloadPath, destFolder); err != nil { - return err - } - - return nil -} - -//func downloadFile(url, dest string) error { -// resp, err := http.Get(url) -// if err != nil { -// return err -// } -// defer resp.Body.Close() -// -// if resp.StatusCode != http.StatusOK { -// return fmt.Errorf("failed to download file, status code: %d", resp.StatusCode) -// } -// -// out, err := os.Create(dest) -// if err != nil { -// return err -// } -// defer out.Close() -// -// _, err = io.Copy(out, resp.Body) -// return err -//} - -func unzipFile(src, dest string) error { - cmd := exec.Command("unzip", "-o", src, "-d", dest) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - return cmd.Run() -} From 528056b1ab83e30b046570ab64c28a4f8e765a8a Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Mon, 8 Jan 2024 15:14:40 +0100 Subject: [PATCH 08/32] feat: add LICENCE --- LICENSE | 21 +++++++++++++++++++++ cmd/init.go | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index e69de29..5601e82 100644 --- a/LICENSE +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2024 Nikolai Mishin, Alexander Sharov, Anastasiia Kozlova + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/cmd/init.go b/cmd/init.go index a143223..00daffa 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -12,7 +12,7 @@ import ( // initCmd represents the init command var initCmd = &cobra.Command{ Use: "init", - Short: "Update environment to use 'github' correctly", + Short: "Update environment to use 'tenv' correctly", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your command. For example: From 69a9b0fe89fae5283f48e4e02d98c60ed1157c9f Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Mon, 8 Jan 2024 16:58:26 +0100 Subject: [PATCH 09/32] feat: implement CheckToolInstalled function --- .gitignore | 1 + cmd/tofu.go | 13 +++++++---- main.go | 38 ++++++++++++++++++++++++++++++++ pkg/misc/arhive.go | 12 ++++++++-- pkg/misc/path.go | 32 +++++++++++++++++++++++++++ pkg/misc/{prepare.go => tool.go} | 15 ++++++++++--- 6 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 pkg/misc/path.go rename pkg/misc/{prepare.go => tool.go} (78%) diff --git a/.gitignore b/.gitignore index 2e06a68..4e7747d 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,5 @@ bin/terraform-* ./main ./bin ./root +root/ main \ No newline at end of file diff --git a/cmd/tofu.go b/cmd/tofu.go index ad91d2a..184b831 100644 --- a/cmd/tofu.go +++ b/cmd/tofu.go @@ -7,6 +7,7 @@ import ( "bytes" "fmt" "github.com/opentofuutils/tenv/pkg/misc" + log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "os/exec" ) @@ -22,12 +23,16 @@ Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { + + if !misc.CheckToolInstalled("tofuenv") { + log.Error("tofuenv is not installed. Please, execute 'tenv upgrade-deps' to use 'tenv tofu' commands") + return + } + //fmt.Println("tofu called") - rootDir := misc.GetEnv(misc.RootEnv, "") - binDir := fmt.Sprintf("%s/bin", rootDir) - tofuExec := fmt.Sprintf("%s/tofu/bin/tofuenv", binDir) - tofuExec = "/Users/asharov/go/src/github.com/opentofuutils/tenv/root/bin/tofuenv/tofuutils-tofuenv-e0bec88/bin/tofuenv" + tofuExec := misc.GetPath("tofuenv_exec") + fmt.Println(tofuExec) //fmt.Println(tofuExec) exec := exec.Command(tofuExec, args...) diff --git a/main.go b/main.go index 2fa68e3..55b4193 100644 --- a/main.go +++ b/main.go @@ -5,8 +5,46 @@ package main import ( "github.com/opentofuutils/tenv/cmd" + log "github.com/sirupsen/logrus" + "os" ) +func init() { + log.SetReportCaller(false) + + var formatter log.Formatter + + if formatterType, ok := os.LookupEnv("FORMATTER_TYPE"); ok { + if formatterType == "JSON" { + formatter = &log.JSONFormatter{PrettyPrint: false} + } + + if formatterType == "TEXT" { + formatter = &log.TextFormatter{DisableColors: false} + } + } + + if formatter == nil { + formatter = &log.TextFormatter{DisableColors: false} + } + + log.SetFormatter(formatter) + + var logLevel log.Level + var err error + + if ll, ok := os.LookupEnv("LOG_LEVEL"); ok { + logLevel, err = log.ParseLevel(ll) + if err != nil { + logLevel = log.DebugLevel + } + } else { + logLevel = log.DebugLevel + } + + log.SetLevel(logLevel) +} + func main() { cmd.Execute() } diff --git a/pkg/misc/arhive.go b/pkg/misc/arhive.go index f3d4577..c4431b9 100644 --- a/pkg/misc/arhive.go +++ b/pkg/misc/arhive.go @@ -9,7 +9,7 @@ import ( "strings" ) -func UnTarGz(source, destination string) error { +func ExtractTarGz(source, destination string) error { // Open the source file file, err := os.Open(source) if err != nil { @@ -27,6 +27,9 @@ func UnTarGz(source, destination string) error { // Create a tar reader tarReader := tar.NewReader(gzipReader) + // Track the top-level directory name + var topLevelDir string + // Iterate through the tar archive and extract files for { header, err := tarReader.Next() @@ -40,8 +43,13 @@ func UnTarGz(source, destination string) error { return err } + // If this is the first entry, capture the top-level directory name + if topLevelDir == "" && header.Name != "pax_global_header" { + topLevelDir = filepath.Base(header.Name) + } + // Construct the destination path for the current file without the top-level directory - target := filepath.Join(destination, strings.TrimPrefix(header.Name, filepath.Base(source)+"/")) + target := filepath.Join(destination, strings.TrimPrefix(header.Name, topLevelDir+"/")) switch header.Typeflag { case tar.TypeDir: diff --git a/pkg/misc/path.go b/pkg/misc/path.go new file mode 100644 index 0000000..2dfa7a5 --- /dev/null +++ b/pkg/misc/path.go @@ -0,0 +1,32 @@ +package misc + +import ( + "fmt" + log "github.com/sirupsen/logrus" +) + +func GetPath(name string) string { + rootDir := GetEnv(RootEnv, "") + + switch name { + case "root_dir": + return rootDir + case "bin_dir": + return fmt.Sprintf("%s/bin", rootDir) + case "misc_dir": + return fmt.Sprintf("%s/misc", rootDir) + case "tfenv_dir": + return fmt.Sprintf("%s/bin/tfenv", rootDir) + case "tofuenv_dir": + return fmt.Sprintf("%s/bin/tofuenv", rootDir) + case "tfenv_exec": + return fmt.Sprintf("%s/bin/tfenv/bin/tfenv", rootDir) + case "tofuenv_exec": + return fmt.Sprintf("%s/bin/tofuenv/bin/tofuenv", rootDir) + + default: + log.Warn("Unknown day") + return "" + } + +} diff --git a/pkg/misc/prepare.go b/pkg/misc/tool.go similarity index 78% rename from pkg/misc/prepare.go rename to pkg/misc/tool.go index d94d9f4..f112e0e 100644 --- a/pkg/misc/prepare.go +++ b/pkg/misc/tool.go @@ -4,12 +4,21 @@ import ( "fmt" "github.com/opentofuutils/tenv/pkg/github" log "github.com/sirupsen/logrus" + "os" ) +func CheckToolInstalled(name string) bool { + + path := GetPath("tofuenv_exec") + _, err := os.Stat(path) + + return !os.IsExist(err) +} + func PrepareTool(owner, repo, rootDir string) error { - binDir := fmt.Sprintf("%s/bin", rootDir) - miscDir := fmt.Sprintf("%s/misc", rootDir) + binDir := GetPath("bin_dir") + miscDir := GetPath("misc_dir") // Create temporary directory where tarballs will be stored err := CreateFolder(miscDir) @@ -31,7 +40,7 @@ func PrepareTool(owner, repo, rootDir string) error { } log.Info(fmt.Sprintf("Latest %s release owned by %s downloaded successfully", repo, owner)) - err = UnTarGz(tarballPath, fmt.Sprintf("%s/%s", binDir, repo)) + err = ExtractTarGz(tarballPath, fmt.Sprintf("%s/%s", binDir, repo)) if err != nil { log.Warn("Error:", err) } else { From e7cff10a2ce26eefb5100ac0dd1fc6d503695456 Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Mon, 8 Jan 2024 17:32:22 +0100 Subject: [PATCH 10/32] feat: add github actions --- .github/.goreleaser.yml | 12 ++++++ .github/ISSUE_TEMPLATE/bug_report.md | 30 +++++++++++++ .github/ISSUE_TEMPLATE/custom.md | 0 .github/ISSUE_TEMPLATE/feature_request.md | 19 +++++++++ .github/dependabot.yml | 12 ++++++ .github/pull_request_template.md | 3 ++ .github/workflows/codespell.yml | 27 ++++++++++++ .github/workflows/release.yml | 52 +++++++++++++++++++++++ cmd/init.go | 2 +- cmd/root.go | 2 +- cmd/tf.go | 27 ++++++++++-- cmd/tofu.go | 20 ++------- cmd/uninstallDeps.go | 14 ++---- cmd/upgradeDeps.go | 2 +- pkg/github/main.go | 3 ++ pkg/misc/arhive.go | 3 ++ pkg/misc/env.go | 3 ++ pkg/misc/folders.go | 7 ++- pkg/misc/tool.go | 4 +- 19 files changed, 206 insertions(+), 36 deletions(-) create mode 100644 .github/.goreleaser.yml create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/custom.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/dependabot.yml create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/codespell.yml create mode 100644 .github/workflows/release.yml diff --git a/.github/.goreleaser.yml b/.github/.goreleaser.yml new file mode 100644 index 0000000..50be17e --- /dev/null +++ b/.github/.goreleaser.yml @@ -0,0 +1,12 @@ +version: 1 + +builds: + - skip: true + env: + - CGO_ENABLED=0 + +changelog: + sort: asc + filters: + exclude: + - '^test:' diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..17fb538 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,30 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: 'issue: bug' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Environment (please complete the following information):** +- OS: [e.g. iOS] +- tofuenv version [e.g. 0.8.0] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 0000000..e69de29 diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..01a471e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the issue is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..8a92f46 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +--- +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + timezone: "Europe/London" + time: "09:00" + day: "monday" + commit-message: + prefix: "ci:" \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..6f25749 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml new file mode 100644 index 0000000..646fa70 --- /dev/null +++ b/.github/workflows/codespell.yml @@ -0,0 +1,27 @@ +--- +name: Codespell + +on: + push: + branches: + - 'main' + pull_request: + branches: + - 'main' + workflow_dispatch: + +jobs: + codespell: + name: 'Check for spelling errors' + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Codespell + uses: codespell-project/actions-codespell@v2 + with: + skip: .git,*.png,*.woff,*.woff2,*.eot,*.ttf,*.jpg,*.ico,*.svg,*.gpg,.*asc + check_filenames: true + check_hidden: true \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2bf4f04 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,52 @@ +--- +name: 'Release' + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+*' + +permissions: + contents: write + +jobs: + goreleaser: + name: 'Release the latest tag' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up Go + uses: actions/setup-go@v5 + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v5 + with: + distribution: goreleaser + version: latest + args: release --clean -f ${{ vars.GORELEASER_CONFIG_PATH }} + env: + GITHUB_TOKEN: ${{ secrets.TOFUENV_GITHUB_TOKEN }} + - name: Download artifacts + uses: robinraju/release-downloader@v1.8 + with: + tag: ${{ github.ref_name }} + tarBall: true + zipBall: true + - name: Check contents + run: ls -la + - name: Generate checksum + uses: jmgilman/actions-generate-checksum@v1 + with: + patterns: | + *.zip + *.tar.gz + method: sha256 + output: checksums_${{ github.ref_name }}.txt + - name: Upload checksum to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.TOFUENV_GITHUB_TOKEN }} + file: checksums_${{ github.ref_name }}.txt + tag: ${{ github.ref_name }} diff --git a/cmd/init.go b/cmd/init.go index 00daffa..d171eac 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -1,5 +1,5 @@ /* -Copyright © 2024 NAME HERE +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ package cmd diff --git a/cmd/root.go b/cmd/root.go index 1bd153e..1aefda6 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,5 +1,5 @@ /* -Copyright © 2024 NAME HERE +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ package cmd diff --git a/cmd/tf.go b/cmd/tf.go index cb76260..3df4e59 100644 --- a/cmd/tf.go +++ b/cmd/tf.go @@ -1,12 +1,15 @@ /* -Copyright © 2024 NAME HERE +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ package cmd import ( + "bytes" "fmt" - + "github.com/opentofuutils/tenv/pkg/misc" + log "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "os/exec" ) // tfCmd represents the tf command @@ -20,7 +23,25 @@ Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { - fmt.Println("tf called") + if !misc.CheckToolInstalled("tfenv") { + log.Error("tfenv is not installed. Please, execute 'tenv upgrade-deps' to use 'tenv tf' commands") + return + } + + toolExec := misc.GetPath("tfenv_exec") + + exec := exec.Command(toolExec, args...) + var out bytes.Buffer + var stderr bytes.Buffer + exec.Stdout = &out + exec.Stderr = &stderr + err := exec.Run() + + if err != nil { + fmt.Println(stderr.String()) + return + } + fmt.Println(out.String()) }, } diff --git a/cmd/tofu.go b/cmd/tofu.go index 184b831..d723970 100644 --- a/cmd/tofu.go +++ b/cmd/tofu.go @@ -1,5 +1,5 @@ /* -Copyright © 2024 NAME HERE +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ package cmd @@ -23,19 +23,14 @@ Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { - if !misc.CheckToolInstalled("tofuenv") { log.Error("tofuenv is not installed. Please, execute 'tenv upgrade-deps' to use 'tenv tofu' commands") return } - //fmt.Println("tofu called") - - tofuExec := misc.GetPath("tofuenv_exec") - fmt.Println(tofuExec) - //fmt.Println(tofuExec) + toolExec := misc.GetPath("tofuenv_exec") - exec := exec.Command(tofuExec, args...) + exec := exec.Command(toolExec, args...) var out bytes.Buffer var stderr bytes.Buffer exec.Stdout = &out @@ -46,14 +41,7 @@ to quickly create a Cobra application.`, fmt.Println(stderr.String()) return } - fmt.Println("Result: " + out.String()) - - //out, _ := exec.Command(tofuExec, args...).Output() - ////if err != nil { - //// fmt.Println(err) - ////} - //fmt.Println(string(out)) - + fmt.Println(out.String()) }, } diff --git a/cmd/uninstallDeps.go b/cmd/uninstallDeps.go index 981a7a7..2c32ac1 100644 --- a/cmd/uninstallDeps.go +++ b/cmd/uninstallDeps.go @@ -1,14 +1,11 @@ /* -Copyright © 2024 NAME HERE +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ package cmd import ( - "fmt" "github.com/opentofuutils/tenv/pkg/misc" log "github.com/sirupsen/logrus" - "os" - "github.com/spf13/cobra" ) @@ -25,15 +22,12 @@ to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { log.Info("Starting to uninstall tenv tools") - rootDir := misc.GetEnv(misc.RootEnv, "") - binDir := fmt.Sprintf("%s/bin", rootDir) - - err := os.RemoveAll(binDir) + err := misc.DeleteFolder(misc.GetPath("bin_dir")) if err != nil { - log.Error("Error removing bin directory:", err) + log.Error("Error removing dependencies directory:", err) } - log.Info("tenv tools uninstalled successfully") + log.Info("tenv dependencies have been uninstalled successfully") }, } diff --git a/cmd/upgradeDeps.go b/cmd/upgradeDeps.go index 6722d30..bd47636 100644 --- a/cmd/upgradeDeps.go +++ b/cmd/upgradeDeps.go @@ -1,5 +1,5 @@ /* -Copyright © 2024 NAME HERE +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ package cmd diff --git a/pkg/github/main.go b/pkg/github/main.go index c4e0701..263a1c6 100644 --- a/pkg/github/main.go +++ b/pkg/github/main.go @@ -1,3 +1,6 @@ +/* +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova +*/ package github import ( diff --git a/pkg/misc/arhive.go b/pkg/misc/arhive.go index c4431b9..a9130a8 100644 --- a/pkg/misc/arhive.go +++ b/pkg/misc/arhive.go @@ -1,3 +1,6 @@ +/* +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova +*/ package misc import ( diff --git a/pkg/misc/env.go b/pkg/misc/env.go index ea92b7b..0a785e5 100644 --- a/pkg/misc/env.go +++ b/pkg/misc/env.go @@ -1,3 +1,6 @@ +/* +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova +*/ package misc import "os" diff --git a/pkg/misc/folders.go b/pkg/misc/folders.go index ddf3b9f..621de1d 100644 --- a/pkg/misc/folders.go +++ b/pkg/misc/folders.go @@ -1,7 +1,10 @@ +/* +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova +*/ package misc import ( - "fmt" + log "github.com/sirupsen/logrus" "os" ) @@ -22,6 +25,6 @@ func DeleteFolder(path string) error { return err } - fmt.Printf("Deleted folder: %s\n", path) + log.Debug("Deleted folder: %s\n", path) return nil } diff --git a/pkg/misc/tool.go b/pkg/misc/tool.go index f112e0e..a952688 100644 --- a/pkg/misc/tool.go +++ b/pkg/misc/tool.go @@ -25,9 +25,9 @@ func PrepareTool(owner, repo, rootDir string) error { if err != nil { return err } + defer func() { - // Clean up: Remove the temporary directory when done - err := os.RemoveAll(miscDir) + err = DeleteFolder(miscDir) if err != nil { log.Error("Error removing temporary directory:", err) } From 05f55c60b55d2dd0cebf8c9af0d355f58875c12a Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Mon, 8 Jan 2024 17:38:28 +0100 Subject: [PATCH 11/32] feat: improve dockerfile --- Dockerfile | 18 +++++++++++------- README.md | 6 ++++++ cmd/init.go | 2 +- cmd/root.go | 2 +- cmd/upgradeDeps.go | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index fbaa0d1..abc522d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,21 @@ -FROM golang:1.18 AS builder +# +# Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova +# +FROM golang:1.21 AS builder ENV CGO_ENABLED=0 \ GOOS=linux \ GOARCH=amd64 \ GIT_TERMINAL_PROMPT=1 -COPY ./internal ${GOPATH}/src/github.com/kvendingoldo/aws-cognito-backup-lambda/internal -COPY ./go.mod ./go.sum ./main.go ${GOPATH}/src/github.com/kvendingoldo/aws-cognito-backup-lambda/ -WORKDIR ${GOPATH}/src/github.com/kvendingoldo/aws-cognito-backup-lambda +COPY ./pkg ${GOPATH}/src/github.com/opentofuutils/tenv/pkg +COPY ./cmd ${GOPATH}/src/github.com/opentofuutils/tenv/cmd +COPY ./go.mod ./go.sum ./main.go ${GOPATH}/src/github.com/opentofuutils/tenv/ +WORKDIR ${GOPATH}/src/github.com/opentofuutils/tenv RUN go get ./ -RUN go build -ldflags="-s -w" -o lambda . +RUN go build -ldflags="-s -w" -o tenv . FROM gcr.io/distroless/static:nonroot -COPY --from=builder go/src/github.com/kvendingoldo/aws-cognito-backup-lambda/lambda /app/ +COPY --from=builder go/src/github.com/opentofuutils/tenv/tenv /app/ WORKDIR /app -ENTRYPOINT ["/app/lambda"] +ENTRYPOINT ["/app/tenv"] \ No newline at end of file diff --git a/README.md b/README.md index 1097ee8..f233fc3 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,12 @@ Currently, tenv supports the following operating systems: ## Installation WIP +## Environment variables +TENV_ROOT_PATH + +TENV_TOFUENV_VERSION +TENV_TFENV_VERSION + ## LICENSE - [tenv inself](https://github.com/tofuutils/tenv/blob/main/LICENSE) - [tofuenv](https://github.com/tofuutils/tofuenv/blob/main/LICENSE) diff --git a/cmd/init.go b/cmd/init.go index d171eac..6e3611b 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -12,7 +12,7 @@ import ( // initCmd represents the init command var initCmd = &cobra.Command{ Use: "init", - Short: "Update environment to use 'tenv' correctly", + Short: "Update environment to use tenv correctly", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your command. For example: diff --git a/cmd/root.go b/cmd/root.go index 1aefda6..908a1c9 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -11,7 +11,7 @@ import ( // rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ - Use: "github", + Use: "tenv", Short: "A brief description of your application", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your application. For example: diff --git a/cmd/upgradeDeps.go b/cmd/upgradeDeps.go index bd47636..7f6a33c 100644 --- a/cmd/upgradeDeps.go +++ b/cmd/upgradeDeps.go @@ -14,7 +14,7 @@ import ( // upgradeDepsCmd represents the upgradeDeps command var upgradeDepsCmd = &cobra.Command{ Use: "upgradeDeps", - Short: "Upgrade github dependencies (tfenv and tofuenv)", + Short: "Upgrade tenv dependencies (tfenv and tofuenv)", Long: `A longer description that spans multiple lines and likely contains examples and usage of using your command. For example: From b2f4a7e88f806c143b15b1e0c1e9e260544a064a Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Mon, 8 Jan 2024 17:54:26 +0100 Subject: [PATCH 12/32] feat: update docs --- cmd/init.go | 19 +++-------------- cmd/root.go | 23 ++++++++++++-------- cmd/tf.go | 10 +++------ cmd/tofu.go | 10 +++------ cmd/uninstallDeps.go | 8 ++----- cmd/upgradeDeps.go | 8 ++----- pkg/consts/text/text.go | 47 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 74 insertions(+), 51 deletions(-) create mode 100644 pkg/consts/text/text.go diff --git a/cmd/init.go b/cmd/init.go index 6e3611b..c71b9e9 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -5,6 +5,7 @@ package cmd import ( "fmt" + "github.com/opentofuutils/tenv/pkg/consts/text" "github.com/spf13/cobra" ) @@ -13,27 +14,13 @@ import ( var initCmd = &cobra.Command{ Use: "init", Short: "Update environment to use tenv correctly", - Long: `A longer description that spans multiple lines and likely contains examples -and usage of using your command. For example: - -Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, + Long: text.InitCmdLongText + text.SubCmdHelpText, Run: func(cmd *cobra.Command, args []string) { fmt.Println("init called") + //export PATH="${TOFUENV_ROOT}/bin:${PATH}"; }, } func init() { rootCmd.AddCommand(initCmd) - - // Here you will define your flags and configuration settings. - - // Cobra supports Persistent Flags which will work for this command - // and all subcommands, e.g.: - // initCmd.PersistentFlags().String("foo", "", "A help for foo") - - // Cobra supports local flags which will only run when this command - // is called directly, e.g.: - // initCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") } diff --git a/cmd/root.go b/cmd/root.go index 908a1c9..c3bbbd0 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -4,25 +4,30 @@ Copyright © 2024 Alexander Sharov , Nikolai Mishin , Nikolai Mishin , Nikolai Mishin Date: Mon, 8 Jan 2024 19:12:39 +0100 Subject: [PATCH 13/32] ref: make a small refactoring --- .github/workflows/build.yml | 4 ++-- .gitignore | 6 +----- README.md | 1 - cmd/init.go | 5 ++--- cmd/root.go | 12 ++++++++--- cmd/tf.go | 7 ++++--- cmd/tofu.go | 7 ++++--- cmd/uninstallDeps.go | 4 ++-- cmd/upgradeDeps.go | 9 +++++---- main.go | 2 +- pkg/consts/text/text.go | 12 +++++------ pkg/{misc => tool}/tool.go | 20 ++++++++++--------- .../arhive.go => utils/archive/archive.go} | 2 +- pkg/{misc => utils/env}/env.go | 2 +- pkg/{misc => utils/fs}/folders.go | 2 +- pkg/{misc => utils/fs}/path.go | 5 +++-- .../main.go => utils/github/github.go} | 4 ++-- 17 files changed, 55 insertions(+), 49 deletions(-) rename pkg/{misc => tool}/tool.go (66%) rename pkg/{misc/arhive.go => utils/archive/archive.go} (99%) rename pkg/{misc => utils/env}/env.go (96%) rename pkg/{misc => utils/fs}/folders.go (97%) rename pkg/{misc => utils/fs}/path.go (86%) rename pkg/{github/main.go => utils/github/github.go} (92%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e06bc84..80f2c57 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,11 +8,11 @@ on: env: registry_url: "registry.hub.docker.com" - image_repo: "kvendingoldo/aws-cognito-backup-lambda" + image_repo: "tofuutils/tenv" jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 outputs: version: ${{ steps.set_version.outputs.safe_version }} steps: diff --git a/.gitignore b/.gitignore index 4e7747d..73ff7df 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ bin/terraform-* /use-gpgv .*.swp .idea +.DS_Store .misc # Binaries for programs and plugins @@ -23,11 +24,6 @@ bin/terraform-* # Output of the go coverage tool, specifically when used with LiteIDE *.out -# Dependency directories (remove the comment below to include it) -# vendor/ - -.idea -.DS_Store ./main ./bin ./root diff --git a/README.md b/README.md index f233fc3..6e74fa1 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ WIP ## Environment variables TENV_ROOT_PATH - TENV_TOFUENV_VERSION TENV_TFENV_VERSION diff --git a/cmd/init.go b/cmd/init.go index c71b9e9..787503c 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -4,9 +4,8 @@ Copyright © 2024 Alexander Sharov , Nikolai Mishin +Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ package main diff --git a/pkg/consts/text/text.go b/pkg/consts/text/text.go index cf72c53..1feb267 100644 --- a/pkg/consts/text/text.go +++ b/pkg/consts/text/text.go @@ -3,18 +3,18 @@ package text const RootLongText = `A compact CLI that manages OpenTofu / Terraform version via tfenv/tofuenv wrappers Authors: Alexander Sharov (kvendingoldo@gmail.com), Nikolai Mishin (sanduku.default@gmail.com), Anastasiia Kozlova (anastasiia.kozlova245@gmail.com) -Contributed at https://github.com/tfutils/tfenv +Contributed at https://github.com/tofuutils/tenv ` const EmptyArgsText = `Error: please use --help|-h to explore tenv commands` const AdditionalText = `A compact CLI that manages OpenTofu / Terraform version via tfenv/tofuenv wrappers -Authors: Alexander Sharov (kvendingoldo@gmail.com), Nikolai Mishin (sanduku.default@gmail.com(, Anastasiia Kozlova (anastasiia.kozlova245@gmail.com) +Authors: Alexander Sharov (kvendingoldo@gmail.com), Nikolai Mishin (sanduku.default@gmail.com), Anastasiia Kozlova (anastasiia.kozlova245@gmail.com) Contributed at https://github.com/tfutils/tfenv Usages: - tenv TODO - tenv TODO + tenv tf + tenv init Flags: --help display command help & instructions` @@ -37,11 +37,11 @@ const TofuCmdLongText = `This command let you manage OpenTofu version via tofuen Usages: tenv tofu list-remote ` -const UninstallDepsCmdLongText = `This command uninstall all tenv dependencies +const UninstallDepsCmdLongText = `This command uninstall all tenv dependencies (tfenv and tofuenv) Usages: tenv uninstallDeps ` -const UpgradeDepsCmdLongText = `This command upgrade all tenv dependencies +const UpgradeDepsCmdLongText = `This command upgrade all tenv dependencies: download tfenv, tofuenv and configure their environment variables Usages: tenv upgradeDeps ` diff --git a/pkg/misc/tool.go b/pkg/tool/tool.go similarity index 66% rename from pkg/misc/tool.go rename to pkg/tool/tool.go index a952688..3c0ae4f 100644 --- a/pkg/misc/tool.go +++ b/pkg/tool/tool.go @@ -1,8 +1,10 @@ -package misc +package tool import ( "fmt" - "github.com/opentofuutils/tenv/pkg/github" + "github.com/opentofuutils/tenv/pkg/utils/archive" + "github.com/opentofuutils/tenv/pkg/utils/fs" + "github.com/opentofuutils/tenv/pkg/utils/github" log "github.com/sirupsen/logrus" "os" @@ -10,24 +12,24 @@ import ( func CheckToolInstalled(name string) bool { - path := GetPath("tofuenv_exec") + path := fs.GetPath("tofuenv_exec") _, err := os.Stat(path) return !os.IsExist(err) } func PrepareTool(owner, repo, rootDir string) error { - binDir := GetPath("bin_dir") - miscDir := GetPath("misc_dir") + binDir := fs.GetPath("bin_dir") + miscDir := fs.GetPath("misc_dir") // Create temporary directory where tarballs will be stored - err := CreateFolder(miscDir) + err := fs.CreateFolder(miscDir) if err != nil { return err } defer func() { - err = DeleteFolder(miscDir) + err = fs.DeleteFolder(miscDir) if err != nil { log.Error("Error removing temporary directory:", err) } @@ -35,12 +37,12 @@ func PrepareTool(owner, repo, rootDir string) error { tarballPath := fmt.Sprintf("%s/%s-%s", miscDir, owner, repo) if err := github.DownloadLatestRelease(owner, repo, tarballPath); err != nil { - fmt.Println("Error:", err) + log.Error("Error:", err) return err } log.Info(fmt.Sprintf("Latest %s release owned by %s downloaded successfully", repo, owner)) - err = ExtractTarGz(tarballPath, fmt.Sprintf("%s/%s", binDir, repo)) + err = archive.ExtractTarGz(tarballPath, fmt.Sprintf("%s/%s", binDir, repo)) if err != nil { log.Warn("Error:", err) } else { diff --git a/pkg/misc/arhive.go b/pkg/utils/archive/archive.go similarity index 99% rename from pkg/misc/arhive.go rename to pkg/utils/archive/archive.go index a9130a8..c54310a 100644 --- a/pkg/misc/arhive.go +++ b/pkg/utils/archive/archive.go @@ -1,7 +1,7 @@ /* Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ -package misc +package archive import ( "archive/tar" diff --git a/pkg/misc/env.go b/pkg/utils/env/env.go similarity index 96% rename from pkg/misc/env.go rename to pkg/utils/env/env.go index 0a785e5..88349d1 100644 --- a/pkg/misc/env.go +++ b/pkg/utils/env/env.go @@ -1,7 +1,7 @@ /* Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ -package misc +package env import "os" diff --git a/pkg/misc/folders.go b/pkg/utils/fs/folders.go similarity index 97% rename from pkg/misc/folders.go rename to pkg/utils/fs/folders.go index 621de1d..72f28b3 100644 --- a/pkg/misc/folders.go +++ b/pkg/utils/fs/folders.go @@ -1,7 +1,7 @@ /* Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova */ -package misc +package fs import ( log "github.com/sirupsen/logrus" diff --git a/pkg/misc/path.go b/pkg/utils/fs/path.go similarity index 86% rename from pkg/misc/path.go rename to pkg/utils/fs/path.go index 2dfa7a5..d50162f 100644 --- a/pkg/misc/path.go +++ b/pkg/utils/fs/path.go @@ -1,12 +1,13 @@ -package misc +package fs import ( "fmt" + "github.com/opentofuutils/tenv/pkg/utils/env" log "github.com/sirupsen/logrus" ) func GetPath(name string) string { - rootDir := GetEnv(RootEnv, "") + rootDir := env.GetEnv(env.RootEnv, "") switch name { case "root_dir": diff --git a/pkg/github/main.go b/pkg/utils/github/github.go similarity index 92% rename from pkg/github/main.go rename to pkg/utils/github/github.go index 263a1c6..1a7a873 100644 --- a/pkg/github/main.go +++ b/pkg/utils/github/github.go @@ -30,10 +30,10 @@ func DownloadLatestRelease(owner, repo, destPath string) error { return err } - zipball_url := releaseInfo["tarball_url"].(string) + tarball_url := releaseInfo["tarball_url"].(string) // Download the latest release zip file - if err := DownloadFile(zipball_url, destPath); err != nil { + if err := DownloadFile(tarball_url, destPath); err != nil { return err } From fc771be3682b5e6cf8ed9da3282b68aa68f1004d Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Mon, 8 Jan 2024 19:20:37 +0100 Subject: [PATCH 14/32] feat: add docs --- .github/CONTRIBUTING.md | 1 + CHANGELOG.md | 0 CODE_OF_CONDUCT.md | 76 ++++++++++++++++++++++++++++++++++++++++ README.md | 19 +++++++++- assets/logo.jpeg | Bin 0 -> 45411 bytes cmd/root.go | 8 +++-- 6 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 .github/CONTRIBUTING.md create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 assets/logo.jpeg diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..a48c585 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1 @@ +See [contributing quick start](todo) on our website. \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..2b49986 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at info@golangci.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq \ No newline at end of file diff --git a/README.md b/README.md index 6e74fa1..7e1501b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ -# tenv +

+ golangci-lint logo +

tenv

+

Terraform/OpenTofu version manager

+

+ [tenv](https://github.com/tofuutils/tenv) version manager that build on top of [tofuenv](https://github.com/tofuutils/tofuenv) and [tfenv](https://github.com/tfutils/tfenv) and manages [Terraform](https://www.terraform.io/) and [OpenTofu](https://opentofu.org/) binaries @@ -22,6 +27,18 @@ TENV_ROOT_PATH TENV_TOFUENV_VERSION TENV_TFENV_VERSION +## Contributors + +This project exists thanks to all the people who contribute. [How to contribute](todo). + +### Core Team + +
+About core team + +The tenv Core Team is a group of contributors that have demonstrated a lasting enthusiasm for the project and community. +The tenv Core Team has GitHub admin privileges on the repo. + ## LICENSE - [tenv inself](https://github.com/tofuutils/tenv/blob/main/LICENSE) - [tofuenv](https://github.com/tofuutils/tofuenv/blob/main/LICENSE) diff --git a/assets/logo.jpeg b/assets/logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..203f2a3cdee2086eca4f4c11fea6fb5033732eea GIT binary patch literal 45411 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

`PXpnTc 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 Date: Mon, 8 Jan 2024 18:21:33 +0000 Subject: [PATCH 15/32] ci: bump docker/setup-buildx-action from 1 to 3 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 3. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v3) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 80f2c57..bc2c312 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: platforms: all - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v3 - name: Login to Docker registry uses: docker/login-action@v1 From 4966769228058f39a049394fdb82ce79e16d372d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:21:35 +0000 Subject: [PATCH 16/32] ci: bump kvendingoldo/semver-action from 1.10 to 1.19 Bumps [kvendingoldo/semver-action](https://github.com/kvendingoldo/semver-action) from 1.10 to 1.19. - [Release notes](https://github.com/kvendingoldo/semver-action/releases) - [Commits](https://github.com/kvendingoldo/semver-action/compare/v1.10...v1.19) --- updated-dependencies: - dependency-name: kvendingoldo/semver-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 80f2c57..e7fc67d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,7 +38,7 @@ jobs: - name: Set application version id: set_version - uses: kvendingoldo/semver-action@v1.10 + uses: kvendingoldo/semver-action@v1.19 with: primary_branch: 'main' - From 50c13237f2d2f4165a3c2282ef16b53acd21717d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:21:38 +0000 Subject: [PATCH 17/32] ci: bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- .github/workflows/golangci-lint.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 80f2c57..270f001 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,7 +17,7 @@ jobs: version: ${{ steps.set_version.outputs.safe_version }} steps: - - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 4cbb88c..1f5b725 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -18,7 +18,7 @@ jobs: with: go-version: 1.18 - - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - From f906db6554266be959066cbd875da1d712d11342 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:21:41 +0000 Subject: [PATCH 18/32] ci: bump docker/setup-qemu-action from 1 to 3 Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 1 to 3. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v1...v3) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 80f2c57..52c9e86 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: fetch-depth: 0 - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v3 with: platforms: all - From 7000795a7bbd02683b4bc157ce31b5de88513009 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 18:21:44 +0000 Subject: [PATCH 19/32] ci: bump docker/login-action from 1 to 3 Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 3. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v1...v3) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 80f2c57..cc18a9b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,7 +30,7 @@ jobs: uses: docker/setup-buildx-action@v1 - name: Login to Docker registry - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: registry: ${{ env.registry_url }} username: ${{ secrets.REGISTRY_USER }} From a6a33bc04e29e63eb7867d1905916e0e6dd06705 Mon Sep 17 00:00:00 2001 From: anastasiiakozlova245 Date: Tue, 9 Jan 2024 21:43:31 +0100 Subject: [PATCH 20/32] feat: update goreleaser settings for release ci --- .github/.goreleaser.yml | 41 ++++++++++++++++++++++++++++++++--- .github/workflows/release.yml | 22 ------------------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/.github/.goreleaser.yml b/.github/.goreleaser.yml index 50be17e..33e4318 100644 --- a/.github/.goreleaser.yml +++ b/.github/.goreleaser.yml @@ -1,12 +1,47 @@ version: 1 +before: + hooks: + # You may remove this if you don't use go modules. + - go get ./ + builds: - - skip: true - env: + - env: - CGO_ENABLED=0 + binary: tenv + ldflags: + - -s -w + goos: + - linux + - windows + - darwin + ignore: + - goos: darwin + goarch: 386 + +archives: + - format: tar.gz + # this name template makes the OS and Arch compatible with the results of `uname`. + name_template: >- + {{ .ProjectName }}_ + {{ .Tag }}_ + {{- title .Os }}_ + {{- if eq .Arch "amd64" }}x86_64 + {{- else if eq .Arch "386" }}i386 + {{- else }}{{ .Arch }}{{ end }} + {{- if .Arm }}v{{ .Arm }}{{ end }} + # use zip for windows archives + format_overrides: + - goos: windows + format: zip changelog: sort: asc filters: exclude: - - '^test:' + - "^docs:" + - "^test:" + +checksum: + name_template: "{{ .ProjectName }}_{{ .Tag }}_checksums.txt" + algorithm: sha256 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2bf4f04..7f4d754 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -28,25 +28,3 @@ jobs: args: release --clean -f ${{ vars.GORELEASER_CONFIG_PATH }} env: GITHUB_TOKEN: ${{ secrets.TOFUENV_GITHUB_TOKEN }} - - name: Download artifacts - uses: robinraju/release-downloader@v1.8 - with: - tag: ${{ github.ref_name }} - tarBall: true - zipBall: true - - name: Check contents - run: ls -la - - name: Generate checksum - uses: jmgilman/actions-generate-checksum@v1 - with: - patterns: | - *.zip - *.tar.gz - method: sha256 - output: checksums_${{ github.ref_name }}.txt - - name: Upload checksum to release - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.TOFUENV_GITHUB_TOKEN }} - file: checksums_${{ github.ref_name }}.txt - tag: ${{ github.ref_name }} From 5d14a4ce401ac86bfa5c68dc3e6b80495df1d49a Mon Sep 17 00:00:00 2001 From: anastasiiakozlova245 Date: Tue, 9 Jan 2024 22:08:04 +0100 Subject: [PATCH 21/32] feat: update secret name --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7f4d754..86c552e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,4 +27,4 @@ jobs: version: latest args: release --clean -f ${{ vars.GORELEASER_CONFIG_PATH }} env: - GITHUB_TOKEN: ${{ secrets.TOFUENV_GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.TENV_GITHUB_TOKEN }} From 285a5b9d4e7810a63535afd813af6f209fb12f27 Mon Sep 17 00:00:00 2001 From: anastasiiakozlova245 Date: Tue, 9 Jan 2024 22:14:25 +0100 Subject: [PATCH 22/32] feat: remove docs prefix from changelog ignore --- .github/.goreleaser.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/.goreleaser.yml b/.github/.goreleaser.yml index 33e4318..0d5e46c 100644 --- a/.github/.goreleaser.yml +++ b/.github/.goreleaser.yml @@ -39,7 +39,6 @@ changelog: sort: asc filters: exclude: - - "^docs:" - "^test:" checksum: From cf1f4ba4972c1ed3d505df6c5ca05252a55d1f7d Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Thu, 11 Jan 2024 17:44:11 +0100 Subject: [PATCH 23/32] feat: add basic CLI layout for tenv --- Dockerfile | 14 ++- LICENSE | 222 +++++++++++++++++++++++++++++++---- Makefile | 16 +++ cmd/init.go | 25 ---- cmd/root.go | 62 ---------- main.go => cmd/tenv/main.go | 26 +++- cmd/tenv/root.go | 60 ++++++++++ cmd/tenv/root_tf.go | 55 +++++++++ cmd/tenv/root_tofu.go | 55 +++++++++ cmd/tenv/tf_install.go | 47 ++++++++ cmd/tenv/tf_list.go | 47 ++++++++ cmd/tenv/tf_list_remote.go | 47 ++++++++ cmd/tenv/tf_pin.go | 47 ++++++++ cmd/tenv/tf_uninstall.go | 47 ++++++++ cmd/tenv/tf_use.go | 47 ++++++++ cmd/tenv/tofu_install.go | 47 ++++++++ cmd/tenv/tofu_list.go | 47 ++++++++ cmd/tenv/tofu_list_remote.go | 47 ++++++++ cmd/tenv/tofu_pin.go | 47 ++++++++ cmd/tenv/tofu_uninstall.go | 47 ++++++++ cmd/tenv/tofu_use.go | 47 ++++++++ cmd/terraform/terraform.go | 18 +++ cmd/tf.go | 57 --------- cmd/tofu.go | 57 --------- cmd/tofu/tofu.tf.go | 18 +++ cmd/uninstallDeps.go | 42 ------- cmd/upgradeDeps.go | 52 -------- pkg/consts/text/text.go | 17 +++ pkg/tool/tool.go | 17 +++ pkg/utils/archive/archive.go | 18 ++- pkg/utils/env/env.go | 18 ++- pkg/utils/fs/folders.go | 18 ++- pkg/utils/fs/path.go | 17 +++ pkg/utils/github/github.go | 18 ++- 34 files changed, 1137 insertions(+), 329 deletions(-) delete mode 100644 cmd/init.go delete mode 100644 cmd/root.go rename main.go => cmd/tenv/main.go (52%) create mode 100644 cmd/tenv/root.go create mode 100644 cmd/tenv/root_tf.go create mode 100644 cmd/tenv/root_tofu.go create mode 100644 cmd/tenv/tf_install.go create mode 100644 cmd/tenv/tf_list.go create mode 100644 cmd/tenv/tf_list_remote.go create mode 100644 cmd/tenv/tf_pin.go create mode 100644 cmd/tenv/tf_uninstall.go create mode 100644 cmd/tenv/tf_use.go create mode 100644 cmd/tenv/tofu_install.go create mode 100644 cmd/tenv/tofu_list.go create mode 100644 cmd/tenv/tofu_list_remote.go create mode 100644 cmd/tenv/tofu_pin.go create mode 100644 cmd/tenv/tofu_uninstall.go create mode 100644 cmd/tenv/tofu_use.go create mode 100644 cmd/terraform/terraform.go delete mode 100644 cmd/tf.go delete mode 100644 cmd/tofu.go create mode 100644 cmd/tofu/tofu.tf.go delete mode 100644 cmd/uninstallDeps.go delete mode 100644 cmd/upgradeDeps.go diff --git a/Dockerfile b/Dockerfile index abc522d..c26ce9c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,17 @@ # -# Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova +# Copyright 2024 opentofuutils authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # FROM golang:1.21 AS builder diff --git a/LICENSE b/LICENSE index 5601e82..2b8f6d5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,201 @@ -The MIT License (MIT) - -Copyright (c) 2024 Nikolai Mishin, Alexander Sharov, Anastasiia Kozlova - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2024 opentofuutils authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/Makefile b/Makefile index 100f5c0..5bc0e9d 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,19 @@ +# +# Copyright 2024 opentofuutils authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ##@ General help: ## Display this help. @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) diff --git a/cmd/init.go b/cmd/init.go deleted file mode 100644 index 787503c..0000000 --- a/cmd/init.go +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ -package cmd - -import ( - "github.com/opentofuutils/tenv/pkg/consts/text" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" -) - -// initCmd represents the init command -var initCmd = &cobra.Command{ - Use: "init", - Short: "Update environment to use tenv correctly", - Long: text.InitCmdLongText + text.SubCmdHelpText, - Run: func(cmd *cobra.Command, args []string) { - log.Info("Starting to init tenv") - //export PATH="${TOFUENV_ROOT}/bin:${PATH}"; - }, -} - -func init() { - rootCmd.AddCommand(initCmd) -} diff --git a/cmd/root.go b/cmd/root.go deleted file mode 100644 index 53996e3..0000000 --- a/cmd/root.go +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ -package cmd - -import ( - "fmt" - "github.com/opentofuutils/tenv/pkg/consts/text" - "os" - - "github.com/spf13/cobra" -) - -var ( - version string = "v0.1" - - //nolint:stylecheck - build string = "0" - - //nolint:stylecheck - commit string = "sha" -) - -// rootCmd represents the base command when called without any subcommands -var rootCmd = &cobra.Command{ - Use: "tenv", - Short: "TENV CLI version " + version, - Long: text.RootLongText, - - // Uncomment the following line if your bare application - // has an action associated with it: - Run: func(cmd *cobra.Command, args []string) { - if len(args) == 0 { - fmt.Println(text.EmptyArgsText) - os.Exit(1) - } else { - fmt.Fprintln(os.Stderr, text.AdditionalText) - } - }, -} - -// Execute adds all child commands to the root command and sets flags appropriately. -// This is called by main.main(). It only needs to happen once to the rootCmd. -func Execute() { - err := rootCmd.Execute() - if err != nil { - os.Exit(1) - } -} - -func init() { - // Here you will define your flags and configuration settings. - // Cobra supports persistent flags, which, if defined here, - // will be global for your application. - - // rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.github.yaml)") - - // Cobra also supports local flags, which will only run - // when this action is called directly. - - //rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") -} diff --git a/main.go b/cmd/tenv/main.go similarity index 52% rename from main.go rename to cmd/tenv/main.go index d14e9c7..1aac4a9 100644 --- a/main.go +++ b/cmd/tenv/main.go @@ -1,10 +1,24 @@ /* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ package main import ( - "github.com/opentofuutils/tenv/cmd" + "fmt" log "github.com/sirupsen/logrus" "os" ) @@ -46,5 +60,9 @@ func init() { } func main() { - cmd.Execute() + fmt.Println("test") + err := rootCmd.Execute() + if err != nil { + os.Exit(1) + } } diff --git a/cmd/tenv/root.go b/cmd/tenv/root.go new file mode 100644 index 0000000..42475ae --- /dev/null +++ b/cmd/tenv/root.go @@ -0,0 +1,60 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "os" + + "github.com/spf13/cobra" +) + +// rootCmd represents the base command when called without any subcommands +var rootCmd = &cobra.Command{ + Use: "tenv", + Short: "A brief description of your application", + Long: `A longer description that spans multiple lines and likely contains +examples and usage of using your application. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + // Uncomment the following line if your bare application + // has an action associated with it: + // Run: func(cmd *cobra.Command, args []string) { }, +} + +// Execute adds all child commands to the root command and sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCmd. +func Execute() { + err := rootCmd.Execute() + if err != nil { + os.Exit(1) + } +} + +func init() { + // Here you will define your flags and configuration settings. + // Cobra supports persistent flags, which, if defined here, + // will be global for your application. + + // rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.tenv.yaml)") + + // Cobra also supports local flags, which will only run + // when this action is called directly. + rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/root_tf.go b/cmd/tenv/root_tf.go new file mode 100644 index 0000000..8ebc8e0 --- /dev/null +++ b/cmd/tenv/root_tf.go @@ -0,0 +1,55 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "github.com/spf13/cobra" + "os" +) + +// tfInitCmd represents the tfInit command +var tfCmd = &cobra.Command{ + Use: "tf", + Short: "A brief description of your command", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: func(cmd *cobra.Command, args []string) { + if len(args) == 0 { + cmd.Help() + os.Exit(0) + } + }, +} + +func init() { + rootCmd.AddCommand(tfCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfInitCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // tfInitCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/root_tofu.go b/cmd/tenv/root_tofu.go new file mode 100644 index 0000000..4bd93d9 --- /dev/null +++ b/cmd/tenv/root_tofu.go @@ -0,0 +1,55 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "github.com/spf13/cobra" + "os" +) + +// tofuInitCmd represents the tofuInit command +var tofuCmd = &cobra.Command{ + Use: "tofu", + Short: "A brief description of your command", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: func(cmd *cobra.Command, args []string) { + if len(args) == 0 { + cmd.Help() + os.Exit(0) + } + }, +} + +func init() { + rootCmd.AddCommand(tofuCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuInitCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // tofuInitCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tf_install.go b/cmd/tenv/tf_install.go new file mode 100644 index 0000000..13fe837 --- /dev/null +++ b/cmd/tenv/tf_install.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tfInstallCmd represents the tfList command +var tfInstallCmd = &cobra.Command{ + Use: "install", + Short: "Install a specific version of Terraform", + Long: "Install a specific version of Terraform", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tfList called") + }, +} + +func init() { + tfCmd.AddCommand(tfInstallCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfInstallCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tfInstallCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tf_list.go b/cmd/tenv/tf_list.go new file mode 100644 index 0000000..83e9926 --- /dev/null +++ b/cmd/tenv/tf_list.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tfListCmd represents the tfList command +var tfListCmd = &cobra.Command{ + Use: "list", + Short: "List all installed Terraform versions.", + Long: "List all installed Terraform versions, sorted in ascending version order.", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tfList called") + }, +} + +func init() { + tfCmd.AddCommand(tfListCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfListCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tfListCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tf_list_remote.go b/cmd/tenv/tf_list_remote.go new file mode 100644 index 0000000..0bc4d12 --- /dev/null +++ b/cmd/tenv/tf_list_remote.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tfListRemoteCmd represents the tfList command +var tfListRemoteCmd = &cobra.Command{ + Use: "list-remote", + Short: "List all installable Terraform versions.", + Long: "List all installable Terraform versions, sorted in ascending version order.", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tfList called") + }, +} + +func init() { + tfCmd.AddCommand(tfListRemoteCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfListRemoteCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tfListRemoteCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tf_pin.go b/cmd/tenv/tf_pin.go new file mode 100644 index 0000000..6edce9e --- /dev/null +++ b/cmd/tenv/tf_pin.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tfPinCmd represents the tfList command +var tfPinCmd = &cobra.Command{ + Use: "pin", + Short: "Write the current active version to ./.terraform-version", + Long: "Write the current active version to ./.terraform-version", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tfList called") + }, +} + +func init() { + tfCmd.AddCommand(tfPinCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfPinCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tfPinCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tf_uninstall.go b/cmd/tenv/tf_uninstall.go new file mode 100644 index 0000000..bddff83 --- /dev/null +++ b/cmd/tenv/tf_uninstall.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tfUninstallCmd represents the tfList command +var tfUninstallCmd = &cobra.Command{ + Use: "uninstall", + Short: "Uninstall a specific version of Terraform", + Long: "Uninstall a specific version of Terraform", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tfList called") + }, +} + +func init() { + tfCmd.AddCommand(tfUninstallCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfUninstallCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tfUninstallCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tf_use.go b/cmd/tenv/tf_use.go new file mode 100644 index 0000000..6fd915f --- /dev/null +++ b/cmd/tenv/tf_use.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tfUseCmd represents the tfList command +var tfUseCmd = &cobra.Command{ + Use: "use", + Short: "Switch the default Terraform version to use.", + Long: `Switch the default Terraform version to use.`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tfList called") + }, +} + +func init() { + tfCmd.AddCommand(tfUseCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfUseCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tfUseCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tofu_install.go b/cmd/tenv/tofu_install.go new file mode 100644 index 0000000..fac7264 --- /dev/null +++ b/cmd/tenv/tofu_install.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tofuInstallCmd represents the tofuList command +var tofuInstallCmd = &cobra.Command{ + Use: "install", + Short: "Install a specific version of OpenTofu", + Long: "Install a specific version of OpenTofu", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tofuList called") + }, +} + +func init() { + tofuCmd.AddCommand(tofuInstallCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuInstallCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tofuInstallCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tofu_list.go b/cmd/tenv/tofu_list.go new file mode 100644 index 0000000..2d5ba0f --- /dev/null +++ b/cmd/tenv/tofu_list.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tofuListCmd represents the tofuList command +var tofuListCmd = &cobra.Command{ + Use: "list", + Short: "List all installed OpenTofu versions.", + Long: "List all installed OpenTofu versions, sorted in ascending version order.", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tofuList called") + }, +} + +func init() { + tofuCmd.AddCommand(tofuListCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuListCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tofuListCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tofu_list_remote.go b/cmd/tenv/tofu_list_remote.go new file mode 100644 index 0000000..13b1c36 --- /dev/null +++ b/cmd/tenv/tofu_list_remote.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tofuListRemoteCmd represents the tofuList command +var tofuListRemoteCmd = &cobra.Command{ + Use: "list-remote", + Short: "List all installable OpenTofu versions.", + Long: "List all installable OpenTofu versions, sorted in ascending version order.", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tofuList called") + }, +} + +func init() { + tofuCmd.AddCommand(tofuListRemoteCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuListRemoteCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tofuListRemoteCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tofu_pin.go b/cmd/tenv/tofu_pin.go new file mode 100644 index 0000000..1ce6b75 --- /dev/null +++ b/cmd/tenv/tofu_pin.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tofuPinCmd represents the tofuList command +var tofuPinCmd = &cobra.Command{ + Use: "pin", + Short: "Write the current active version to ./.opentofu-version", + Long: "Write the current active version to ./.opentofu-version", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tofuList called") + }, +} + +func init() { + tofuCmd.AddCommand(tofuPinCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuPinCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tofuPinCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tofu_uninstall.go b/cmd/tenv/tofu_uninstall.go new file mode 100644 index 0000000..ce31743 --- /dev/null +++ b/cmd/tenv/tofu_uninstall.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tofuUninstallCmd represents the tofuList command +var tofuUninstallCmd = &cobra.Command{ + Use: "uninstall", + Short: "Uninstall a specific version of OpenTofu", + Long: "Uninstall a specific version of OpenTofu", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tofuList called") + }, +} + +func init() { + tofuCmd.AddCommand(tofuUninstallCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuUninstallCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tofuUninstallCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tofu_use.go b/cmd/tenv/tofu_use.go new file mode 100644 index 0000000..4d12b28 --- /dev/null +++ b/cmd/tenv/tofu_use.go @@ -0,0 +1,47 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +// tofuUseCmd represents the tofuList command +var tofuUseCmd = &cobra.Command{ + Use: "use", + Short: "Switch the default OpenTofu version to use.", + Long: `Switch the default OpenTofu version to use.`, + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tofuList called") + }, +} + +func init() { + tofuCmd.AddCommand(tofuUseCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuUseCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tofuUseCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/terraform/terraform.go b/cmd/terraform/terraform.go new file mode 100644 index 0000000..d6d592d --- /dev/null +++ b/cmd/terraform/terraform.go @@ -0,0 +1,18 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main diff --git a/cmd/tf.go b/cmd/tf.go deleted file mode 100644 index ece1b9e..0000000 --- a/cmd/tf.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ -package cmd - -import ( - "bytes" - "fmt" - "github.com/opentofuutils/tenv/pkg/consts/text" - "github.com/opentofuutils/tenv/pkg/tool" - "github.com/opentofuutils/tenv/pkg/utils/fs" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" - "os/exec" -) - -// tfCmd represents the tf command -var tfCmd = &cobra.Command{ - Use: "tf", - Short: "Use tfenv wrapper to manager Terraform versions", - Long: text.TfCmdLongText + text.SubCmdHelpText, - Run: func(cmd *cobra.Command, args []string) { - if !tool.CheckToolInstalled("tfenv") { - log.Error("tfenv is not installed. Please, execute 'tenv upgrade-deps' to use 'tenv tf' commands") - return - } - - toolExec := fs.GetPath("tfenv_exec") - - exec := exec.Command(toolExec, args...) - var out bytes.Buffer - var stderr bytes.Buffer - exec.Stdout = &out - exec.Stderr = &stderr - err := exec.Run() - - if err != nil { - fmt.Println(stderr.String()) - return - } - fmt.Println(out.String()) - }, -} - -func init() { - rootCmd.AddCommand(tfCmd) - - // Here you will define your flags and configuration settings. - - // Cobra supports Persistent Flags which will work for this command - // and all subcommands, e.g.: - // tfCmd.PersistentFlags().String("foo", "", "A help for foo") - - // Cobra supports local flags which will only run when this command - // is called directly, e.g.: - // tfCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") -} diff --git a/cmd/tofu.go b/cmd/tofu.go deleted file mode 100644 index 66a0172..0000000 --- a/cmd/tofu.go +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ -package cmd - -import ( - "bytes" - "fmt" - "github.com/opentofuutils/tenv/pkg/consts/text" - "github.com/opentofuutils/tenv/pkg/tool" - "github.com/opentofuutils/tenv/pkg/utils/fs" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" - "os/exec" -) - -// tofuCmd represents the tofu command -var tofuCmd = &cobra.Command{ - Use: "tofu", - Short: "Use tofuenv wrapper to manager OpenTofu versions", - Long: text.TofuCmdLongText + text.SubCmdHelpText, - Run: func(cmd *cobra.Command, args []string) { - if !tool.CheckToolInstalled("tofuenv") { - log.Error("tofuenv is not installed. Please, execute 'tenv upgrade-deps' to use 'tenv tofu' commands") - return - } - - toolExec := fs.GetPath("tofuenv_exec") - - exec := exec.Command(toolExec, args...) - var out bytes.Buffer - var stderr bytes.Buffer - exec.Stdout = &out - exec.Stderr = &stderr - err := exec.Run() - - if err != nil { - fmt.Println(stderr.String()) - return - } - fmt.Println(out.String()) - }, -} - -func init() { - rootCmd.AddCommand(tofuCmd) - - // Here you will define your flags and configuration settings. - - // Cobra supports Persistent Flags which will work for this command - // and all subcommands, e.g.: - // tofuCmd.PersistentFlags().String("foo", "", "A help for foo") - - // Cobra supports local flags which will only run when this command - // is called directly, e.g.: - // tofuCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") -} diff --git a/cmd/tofu/tofu.tf.go b/cmd/tofu/tofu.tf.go new file mode 100644 index 0000000..d6d592d --- /dev/null +++ b/cmd/tofu/tofu.tf.go @@ -0,0 +1,18 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main diff --git a/cmd/uninstallDeps.go b/cmd/uninstallDeps.go deleted file mode 100644 index ce9b723..0000000 --- a/cmd/uninstallDeps.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ -package cmd - -import ( - "github.com/opentofuutils/tenv/pkg/consts/text" - "github.com/opentofuutils/tenv/pkg/utils/fs" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" -) - -// uninstallDepsCmd represents the uninstallDeps command -var uninstallDepsCmd = &cobra.Command{ - Use: "uninstallDeps", - Short: "Uninstall tenv dependencies (tfenv and tofuenv)", - Long: text.UninstallDepsCmdLongText + text.SubCmdHelpText, - Run: func(cmd *cobra.Command, args []string) { - log.Info("Starting to uninstall tenv tools") - - err := fs.DeleteFolder(fs.GetPath("bin_dir")) - if err != nil { - log.Error("Error removing dependencies directory:", err) - } - - log.Info("tenv dependencies have been uninstalled successfully") - }, -} - -func init() { - rootCmd.AddCommand(uninstallDepsCmd) - - // Here you will define your flags and configuration settings. - - // Cobra supports Persistent Flags which will work for this command - // and all subcommands, e.g.: - // uninstallDepsCmd.PersistentFlags().String("foo", "", "A help for foo") - - // Cobra supports local flags which will only run when this command - // is called directly, e.g.: - // uninstallDepsCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") -} diff --git a/cmd/upgradeDeps.go b/cmd/upgradeDeps.go deleted file mode 100644 index 851c75a..0000000 --- a/cmd/upgradeDeps.go +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ -package cmd - -import ( - "github.com/opentofuutils/tenv/pkg/consts/text" - "github.com/opentofuutils/tenv/pkg/tool" - "github.com/opentofuutils/tenv/pkg/utils/env" - log "github.com/sirupsen/logrus" - "github.com/spf13/cobra" -) - -// "github.com/opentofuutils/tenv/pkg/github" - -// upgradeDepsCmd represents the upgradeDeps command -var upgradeDepsCmd = &cobra.Command{ - Use: "upgradeDeps", - Short: "Upgrade tenv dependencies (tfenv and tofuenv)", - Long: text.UpgradeDepsCmdLongText + text.SubCmdHelpText, - Run: func(cmd *cobra.Command, args []string) { - log.Info("Starting to upgrade tenv tools") - - rootDir := env.GetEnv(env.RootEnv, "") - - err := tool.PrepareTool("tfutils", "tfenv", rootDir) - if err != nil { - return - } - - err = tool.PrepareTool("opentofuutils", "tofuenv", rootDir) - if err != nil { - return - } - - log.Info("tenv tools upgraded successfully") - }, -} - -func init() { - rootCmd.AddCommand(upgradeDepsCmd) - - // Here you will define your flags and configuration settings. - - // Cobra supports Persistent Flags which will work for this command - // and all subcommands, e.g.: - // upgradeDepsCmd.PersistentFlags().String("foo", "", "A help for foo") - - // Cobra supports local flags which will only run when this command - // is called directly, e.g.: - // upgradeDepsCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") -} diff --git a/pkg/consts/text/text.go b/pkg/consts/text/text.go index 1feb267..1870d17 100644 --- a/pkg/consts/text/text.go +++ b/pkg/consts/text/text.go @@ -1,3 +1,20 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ package text const RootLongText = `A compact CLI that manages OpenTofu / Terraform version via tfenv/tofuenv wrappers diff --git a/pkg/tool/tool.go b/pkg/tool/tool.go index 3c0ae4f..f76b241 100644 --- a/pkg/tool/tool.go +++ b/pkg/tool/tool.go @@ -1,3 +1,20 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ package tool import ( diff --git a/pkg/utils/archive/archive.go b/pkg/utils/archive/archive.go index c54310a..773b392 100644 --- a/pkg/utils/archive/archive.go +++ b/pkg/utils/archive/archive.go @@ -1,6 +1,20 @@ /* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ package archive import ( diff --git a/pkg/utils/env/env.go b/pkg/utils/env/env.go index 88349d1..d5e08ae 100644 --- a/pkg/utils/env/env.go +++ b/pkg/utils/env/env.go @@ -1,6 +1,20 @@ /* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ package env import "os" diff --git a/pkg/utils/fs/folders.go b/pkg/utils/fs/folders.go index 72f28b3..ec5faa0 100644 --- a/pkg/utils/fs/folders.go +++ b/pkg/utils/fs/folders.go @@ -1,6 +1,20 @@ /* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ package fs import ( diff --git a/pkg/utils/fs/path.go b/pkg/utils/fs/path.go index d50162f..4f0bf04 100644 --- a/pkg/utils/fs/path.go +++ b/pkg/utils/fs/path.go @@ -1,3 +1,20 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ package fs import ( diff --git a/pkg/utils/github/github.go b/pkg/utils/github/github.go index 1a7a873..84a0e8f 100644 --- a/pkg/utils/github/github.go +++ b/pkg/utils/github/github.go @@ -1,6 +1,20 @@ /* -Copyright © 2024 Alexander Sharov , Nikolai Mishin , Anastasiia Kozlova -*/ + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ package github import ( From c383548bb4727c00b2fcd10b095d18dfc267b387 Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Thu, 11 Jan 2024 22:35:59 +0100 Subject: [PATCH 24/32] feat: add command structure --- README.md | 3 +-- cmd/tenv/main.go | 12 ++++++++-- cmd/tenv/root.go | 11 +++------ cmd/tenv/root_tf.go | 8 ++----- cmd/tenv/root_tofu.go | 8 ++----- cmd/tenv/root_version.go | 51 ++++++++++++++++++++++++++++++++++++++++ cmd/tenv/tf_version.go | 46 ++++++++++++++++++++++++++++++++++++ cmd/tenv/tofu_install.go | 2 +- cmd/tenv/tofu_version.go | 46 ++++++++++++++++++++++++++++++++++++ 9 files changed, 162 insertions(+), 25 deletions(-) create mode 100644 cmd/tenv/root_version.go create mode 100644 cmd/tenv/tf_version.go create mode 100644 cmd/tenv/tofu_version.go diff --git a/README.md b/README.md index 7e1501b..3811d15 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,7 @@ WIP ## Environment variables TENV_ROOT_PATH -TENV_TOFUENV_VERSION -TENV_TFENV_VERSION +TFENV_TOFU_REVERSE_REMOTE ## Contributors diff --git a/cmd/tenv/main.go b/cmd/tenv/main.go index 1aac4a9..7fd9c28 100644 --- a/cmd/tenv/main.go +++ b/cmd/tenv/main.go @@ -18,11 +18,20 @@ package main import ( - "fmt" log "github.com/sirupsen/logrus" "os" ) +var ( + version string = "v0.1" + + //nolint:stylecheck + build string = "0" + + //nolint:stylecheck + commit string = "sha" +) + func init() { log.SetReportCaller(false) @@ -60,7 +69,6 @@ func init() { } func main() { - fmt.Println("test") err := rootCmd.Execute() if err != nil { os.Exit(1) diff --git a/cmd/tenv/root.go b/cmd/tenv/root.go index 42475ae..605e9ea 100644 --- a/cmd/tenv/root.go +++ b/cmd/tenv/root.go @@ -26,13 +26,8 @@ import ( // rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ Use: "tenv", - Short: "A brief description of your application", - Long: `A longer description that spans multiple lines and likely contains -examples and usage of using your application. For example: - -Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, + Short: "TENV CLI version " + version, + Long: `A compact CLI that manages OpenTofu / Terraform versions`, // Uncomment the following line if your bare application // has an action associated with it: // Run: func(cmd *cobra.Command, args []string) { }, @@ -56,5 +51,5 @@ func init() { // Cobra also supports local flags, which will only run // when this action is called directly. - rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") + // rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") } diff --git a/cmd/tenv/root_tf.go b/cmd/tenv/root_tf.go index 8ebc8e0..52a0b33 100644 --- a/cmd/tenv/root_tf.go +++ b/cmd/tenv/root_tf.go @@ -25,13 +25,9 @@ import ( // tfInitCmd represents the tfInit command var tfCmd = &cobra.Command{ Use: "tf", - Short: "A brief description of your command", - Long: `A longer description that spans multiple lines and likely contains examples -and usage of using your command. For example: + Short: "Subcommand that manages Terraform binaries", + Long: `Subcommand that manages Terraform binaries`, -Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { if len(args) == 0 { cmd.Help() diff --git a/cmd/tenv/root_tofu.go b/cmd/tenv/root_tofu.go index 4bd93d9..5309667 100644 --- a/cmd/tenv/root_tofu.go +++ b/cmd/tenv/root_tofu.go @@ -25,13 +25,9 @@ import ( // tofuInitCmd represents the tofuInit command var tofuCmd = &cobra.Command{ Use: "tofu", - Short: "A brief description of your command", - Long: `A longer description that spans multiple lines and likely contains examples -and usage of using your command. For example: + Short: "Subcommand that manages OpenTofu binaries", + Long: `Subcommand that manages OpenTofu binaries`, -Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, Run: func(cmd *cobra.Command, args []string) { if len(args) == 0 { cmd.Help() diff --git a/cmd/tenv/root_version.go b/cmd/tenv/root_version.go new file mode 100644 index 0000000..8728951 --- /dev/null +++ b/cmd/tenv/root_version.go @@ -0,0 +1,51 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "github.com/spf13/cobra" + "os" +) + +// tfInitCmd represents the tfInit command +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Print tenv current version", + Long: `Print tenv current version`, + + Run: func(cmd *cobra.Command, args []string) { + if len(args) == 0 { + cmd.Help() + os.Exit(0) + } + }, +} + +func init() { + rootCmd.AddCommand(versionCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tfInitCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // tfInitCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tf_version.go b/cmd/tenv/tf_version.go new file mode 100644 index 0000000..3a6a08d --- /dev/null +++ b/cmd/tenv/tf_version.go @@ -0,0 +1,46 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var tfVersionCmd = &cobra.Command{ + Use: "version", + Short: "Print current version Terraform", + Long: "Print current version Terraform", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tfVersionCmd called") + }, +} + +func init() { + tfCmd.AddCommand(tfVersionCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuInstallCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + tofuInstallCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/cmd/tenv/tofu_install.go b/cmd/tenv/tofu_install.go index fac7264..7166494 100644 --- a/cmd/tenv/tofu_install.go +++ b/cmd/tenv/tofu_install.go @@ -43,5 +43,5 @@ func init() { // Cobra supports local flags which will only run when this command // is called directly, e.g.: - tofuInstallCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") + // tofuInstallCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") } diff --git a/cmd/tenv/tofu_version.go b/cmd/tenv/tofu_version.go new file mode 100644 index 0000000..e7d2507 --- /dev/null +++ b/cmd/tenv/tofu_version.go @@ -0,0 +1,46 @@ +/* + * + * Copyright 2024 opentofuutils authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package main + +import ( + "fmt" + "github.com/spf13/cobra" +) + +var tofuVersionCmd = &cobra.Command{ + Use: "version", + Short: "Print current version OpenTofu", + Long: "Print current version OpenTofu", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("tofuVersionCmd called") + }, +} + +func init() { + tofuCmd.AddCommand(tofuVersionCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // tofuInstallCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // tofuInstallCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} From 096332a337a59cd235a7fc53820a9e55397ab966 Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Fri, 12 Jan 2024 00:04:16 +0100 Subject: [PATCH 25/32] feat: add support of list-remote command --- cmd/tenv/tf_list_remote.go | 14 +++++++++++- cmd/tenv/tofu_list_remote.go | 14 +++++++++++- go.mod | 12 +++++++++-- go.sum | 41 ++++++++++++++++++++++++++++++++++++ pkg/common/list_remote.tf.go | 22 +++++++++++++++++++ pkg/github/github.go | 19 +++++++++++++++++ tofuenv/tofuenv.go | 25 ++++++++++++++++++++++ 7 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 pkg/common/list_remote.tf.go create mode 100644 pkg/github/github.go create mode 100644 tofuenv/tofuenv.go diff --git a/cmd/tenv/tf_list_remote.go b/cmd/tenv/tf_list_remote.go index 0bc4d12..8dde1df 100644 --- a/cmd/tenv/tf_list_remote.go +++ b/cmd/tenv/tf_list_remote.go @@ -19,6 +19,8 @@ package main import ( "fmt" + "github.com/opentofuutils/tenv/pkg/common" + "github.com/opentofuutils/tenv/pkg/github" "github.com/spf13/cobra" ) @@ -28,7 +30,17 @@ var tfListRemoteCmd = &cobra.Command{ Short: "List all installable Terraform versions.", Long: "List all installable Terraform versions, sorted in ascending version order.", Run: func(cmd *cobra.Command, args []string) { - fmt.Println("tfList called") + client, err := github.GetClient() + if err != nil { + } + + versions, err := common.ListRemote(client, "hashicorp", "terraform") + if err != nil { + } + + for _, version := range versions { + fmt.Println(version) + } }, } diff --git a/cmd/tenv/tofu_list_remote.go b/cmd/tenv/tofu_list_remote.go index 13b1c36..6271b2f 100644 --- a/cmd/tenv/tofu_list_remote.go +++ b/cmd/tenv/tofu_list_remote.go @@ -19,6 +19,8 @@ package main import ( "fmt" + "github.com/opentofuutils/tenv/pkg/common" + "github.com/opentofuutils/tenv/pkg/github" "github.com/spf13/cobra" ) @@ -28,7 +30,17 @@ var tofuListRemoteCmd = &cobra.Command{ Short: "List all installable OpenTofu versions.", Long: "List all installable OpenTofu versions, sorted in ascending version order.", Run: func(cmd *cobra.Command, args []string) { - fmt.Println("tofuList called") + client, err := github.GetClient() + if err != nil { + } + + versions, err := common.ListRemote(client, "opentofu", "opentofu") + if err != nil { + } + + for _, version := range versions { + fmt.Println(version) + } }, } diff --git a/go.mod b/go.mod index ac2c659..9274ce0 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,11 @@ require ( github.com/connesc/cipherio v0.2.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect + github.com/google/go-github v17.0.0+incompatible // indirect + github.com/google/go-github/v58 v58.0.0 // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/h2non/filetype v1.1.3 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -34,7 +38,11 @@ require ( github.com/ulikunitz/xz v0.5.11 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect go4.org v0.0.0-20200411211856-f5505b9728dd // indirect - golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect - golang.org/x/text v0.3.8 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/oauth2 v0.16.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/protobuf v1.32.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index d0c691f..cc07452 100644 --- a/go.sum +++ b/go.sum @@ -65,6 +65,10 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -74,7 +78,16 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-github/v58 v58.0.0 h1:Una7GGERlF/37XfkPwpzYJe0Vp4dt2k1kCjlxwjIvzw= +github.com/google/go-github/v58 v58.0.0/go.mod h1:k4hxDKEfoWpSqFlc8LTpGd9fu2KrV1YAa6Hi6FmDNY4= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -155,6 +168,7 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -165,6 +179,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -190,6 +205,7 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKG golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -204,17 +220,24 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -228,16 +251,27 @@ golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -264,6 +298,7 @@ golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -280,6 +315,8 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -300,6 +337,10 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= diff --git a/pkg/common/list_remote.tf.go b/pkg/common/list_remote.tf.go new file mode 100644 index 0000000..35698a9 --- /dev/null +++ b/pkg/common/list_remote.tf.go @@ -0,0 +1,22 @@ +package common + +import ( + "context" + "github.com/google/go-github/v58/github" +) + +func ListRemote(client *github.Client, owner, repo string) ([]string, error) { + ctx := context.Background() + + gitHubReleases, _, err := client.Repositories.ListReleases(ctx, owner, repo, nil) + if err != nil { + return nil, err + } + + var releases []string + for _, release := range gitHubReleases { + releases = append(releases, *release.TagName) + } + + return releases, nil +} diff --git a/pkg/github/github.go b/pkg/github/github.go new file mode 100644 index 0000000..5a9d145 --- /dev/null +++ b/pkg/github/github.go @@ -0,0 +1,19 @@ +package github + +import ( + "context" + "github.com/google/go-github/v58/github" + "golang.org/x/oauth2" +) + +func GetClient() (*github.Client, error) { + ctx := context.Background() + + // Set up authentication using a personal access token + //ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token}) + tc := oauth2.NewClient(ctx, nil) + + client := github.NewClient(tc) + + return client, nil +} diff --git a/tofuenv/tofuenv.go b/tofuenv/tofuenv.go new file mode 100644 index 0000000..2650e67 --- /dev/null +++ b/tofuenv/tofuenv.go @@ -0,0 +1,25 @@ +package main + +import ( + "context" + "github.com/google/go-github/v58/github" + "golang.org/x/oauth2" +) + +func ListRemote(owner, repo string) ([]string, error) { + tc := oauth2.NewClient(ctx, nil) + githubClient := github.NewClient(tc) + + // Get releases for the specified repository + gitHubReleases, _, err := githubClient.Repositories.ListReleases(context.Background(), owner, repo, nil) + if err != nil { + return nil, err + } + + var releases []string + for _, release := range gitHubReleases { + releases = append(releases, *release.TagName) + } + + return releases, nil +} From e2f8d39e628675816813abe75d2b41a78d919afc Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Fri, 12 Jan 2024 00:48:00 +0100 Subject: [PATCH 26/32] feat: delete useless code, add tf install, tofu install commands --- cmd/tenv/tf_install.go | 6 +- cmd/tenv/tofu_install.go | 13 ++- .../{list_remote.tf.go => list_remote.go} | 0 pkg/tf/install.go | 38 +++++++ pkg/tofu/install.go | 51 +++++++++ pkg/tool/tool.go | 72 ------------ pkg/utils/archive/archive.go | 107 +++++------------- pkg/utils/fs/path.go | 50 -------- pkg/utils/github/github.go | 76 ------------- 9 files changed, 135 insertions(+), 278 deletions(-) rename pkg/common/{list_remote.tf.go => list_remote.go} (100%) create mode 100644 pkg/tf/install.go create mode 100644 pkg/tofu/install.go delete mode 100644 pkg/tool/tool.go delete mode 100644 pkg/utils/fs/path.go delete mode 100644 pkg/utils/github/github.go diff --git a/cmd/tenv/tf_install.go b/cmd/tenv/tf_install.go index 13fe837..ae821f0 100644 --- a/cmd/tenv/tf_install.go +++ b/cmd/tenv/tf_install.go @@ -18,7 +18,7 @@ package main import ( - "fmt" + "github.com/opentofuutils/tenv/pkg/tf" "github.com/spf13/cobra" ) @@ -28,7 +28,9 @@ var tfInstallCmd = &cobra.Command{ Short: "Install a specific version of Terraform", Long: "Install a specific version of Terraform", Run: func(cmd *cobra.Command, args []string) { - fmt.Println("tfList called") + err := tf.InstallSpecificVersion("1.6.6") + if err != nil { + } }, } diff --git a/cmd/tenv/tofu_install.go b/cmd/tenv/tofu_install.go index 7166494..7ebd9e0 100644 --- a/cmd/tenv/tofu_install.go +++ b/cmd/tenv/tofu_install.go @@ -18,7 +18,8 @@ package main import ( - "fmt" + "github.com/opentofuutils/tenv/pkg/github" + "github.com/opentofuutils/tenv/pkg/tofu" "github.com/spf13/cobra" ) @@ -28,7 +29,15 @@ var tofuInstallCmd = &cobra.Command{ Short: "Install a specific version of OpenTofu", Long: "Install a specific version of OpenTofu", Run: func(cmd *cobra.Command, args []string) { - fmt.Println("tofuList called") + client, err := github.GetClient() + if err != nil { + } + + err = tofu.InstallSpecificVersion( + client, "opentofu", "opentofu", "1.6.0", + ) + if err != nil { + } }, } diff --git a/pkg/common/list_remote.tf.go b/pkg/common/list_remote.go similarity index 100% rename from pkg/common/list_remote.tf.go rename to pkg/common/list_remote.go diff --git a/pkg/tf/install.go b/pkg/tf/install.go new file mode 100644 index 0000000..3074828 --- /dev/null +++ b/pkg/tf/install.go @@ -0,0 +1,38 @@ +package tf + +import ( + "fmt" + "github.com/opentofuutils/tenv/pkg/utils/archive" + "net/http" + "os" + "path" + "runtime" +) + +func InstallSpecificVersion(version string) error { + installPath := "./" + entries, err := os.ReadDir(installPath) + if err != nil { + return err + } + + for _, entry := range entries { + if entry.IsDir() && version == entry.Name() { + return nil + } + } + + url := fmt.Sprintf("https://releases.hashicorp.com/terraform/%s/terraform_%s_%s_%s.zip", version, version, runtime.GOOS, runtime.GOARCH) + fmt.Println(url) + + response, err := http.Get(url) + if err != nil { + return err + } + defer response.Body.Close() + + targetPath := path.Join("./", version) + fmt.Println(targetPath) + err = archive.ExtractZipToDir(response.Body, targetPath) + return nil +} diff --git a/pkg/tofu/install.go b/pkg/tofu/install.go new file mode 100644 index 0000000..064d809 --- /dev/null +++ b/pkg/tofu/install.go @@ -0,0 +1,51 @@ +package tofu + +import ( + "context" + "fmt" + "github.com/google/go-github/v58/github" + "github.com/opentofuutils/tenv/pkg/utils/archive" + "net/http" + "os" + "path" + "runtime" +) + +func InstallSpecificVersion(client *github.Client, owner, repo, version string) error { + installPath := "./" + entries, err := os.ReadDir(installPath) + if err != nil { + return err + } + + for _, entry := range entries { + if entry.IsDir() && version == entry.Name() { + return nil + } + } + + release, _, err := client.Repositories.GetReleaseByTag(context.Background(), owner, repo, fmt.Sprintf("v%s", version)) + + expectedAsset := fmt.Sprintf("tofu_%s_%s_%s.zip", version, runtime.GOOS, runtime.GOARCH) + fmt.Println(expectedAsset) + + var assetUrl string + for _, asset := range release.Assets { + if *asset.Name == expectedAsset { + assetUrl = *asset.BrowserDownloadURL + break + } + + } + + response, err := http.Get(assetUrl) + if err != nil { + return err + } + defer response.Body.Close() + + targetPath := path.Join("./", version) + fmt.Println(targetPath) + err = archive.ExtractZipToDir(response.Body, targetPath) + return nil +} diff --git a/pkg/tool/tool.go b/pkg/tool/tool.go deleted file mode 100644 index f76b241..0000000 --- a/pkg/tool/tool.go +++ /dev/null @@ -1,72 +0,0 @@ -/* - * - * Copyright 2024 opentofuutils authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package tool - -import ( - "fmt" - "github.com/opentofuutils/tenv/pkg/utils/archive" - "github.com/opentofuutils/tenv/pkg/utils/fs" - "github.com/opentofuutils/tenv/pkg/utils/github" - log "github.com/sirupsen/logrus" - - "os" -) - -func CheckToolInstalled(name string) bool { - - path := fs.GetPath("tofuenv_exec") - _, err := os.Stat(path) - - return !os.IsExist(err) -} - -func PrepareTool(owner, repo, rootDir string) error { - binDir := fs.GetPath("bin_dir") - miscDir := fs.GetPath("misc_dir") - - // Create temporary directory where tarballs will be stored - err := fs.CreateFolder(miscDir) - if err != nil { - return err - } - - defer func() { - err = fs.DeleteFolder(miscDir) - if err != nil { - log.Error("Error removing temporary directory:", err) - } - }() - - tarballPath := fmt.Sprintf("%s/%s-%s", miscDir, owner, repo) - if err := github.DownloadLatestRelease(owner, repo, tarballPath); err != nil { - log.Error("Error:", err) - return err - } - log.Info(fmt.Sprintf("Latest %s release owned by %s downloaded successfully", repo, owner)) - - err = archive.ExtractTarGz(tarballPath, fmt.Sprintf("%s/%s", binDir, repo)) - if err != nil { - log.Warn("Error:", err) - } else { - log.Info("Archive untarred successfully.") - } - - log.Info(fmt.Sprintf("Latest %s release owned by %s prepared successfully", repo, owner)) - - return nil -} diff --git a/pkg/utils/archive/archive.go b/pkg/utils/archive/archive.go index 773b392..1b88562 100644 --- a/pkg/utils/archive/archive.go +++ b/pkg/utils/archive/archive.go @@ -1,99 +1,54 @@ -/* - * - * Copyright 2024 opentofuutils authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ package archive import ( - "archive/tar" - "compress/gzip" + "archive/zip" + "bytes" "io" "os" - "path/filepath" - "strings" + "path" ) -func ExtractTarGz(source, destination string) error { - // Open the source file - file, err := os.Open(source) +func ExtractZipToDir(zipBodyReader io.Reader, dirPath string) error { + err := os.MkdirAll(dirPath, 0755) if err != nil { return err } - defer file.Close() - // Create a gzip reader - gzipReader, err := gzip.NewReader(file) + zipBody, err := io.ReadAll(zipBodyReader) if err != nil { return err } - defer gzipReader.Close() - // Create a tar reader - tarReader := tar.NewReader(gzipReader) - - // Track the top-level directory name - var topLevelDir string - - // Iterate through the tar archive and extract files - for { - header, err := tarReader.Next() - - if err == io.EOF { - // End of tar archive - break - } + byteReader := bytes.NewReader(zipBody) + zipReader, err := zip.NewReader(byteReader, int64(len(zipBody))) + if err != nil { + return err + } - if err != nil { + for _, file := range zipReader.File { + if err = copyZipFileToDir(file, dirPath); err != nil { return err } + } + return nil +} - // If this is the first entry, capture the top-level directory name - if topLevelDir == "" && header.Name != "pax_global_header" { - topLevelDir = filepath.Base(header.Name) - } - - // Construct the destination path for the current file without the top-level directory - target := filepath.Join(destination, strings.TrimPrefix(header.Name, topLevelDir+"/")) - - switch header.Typeflag { - case tar.TypeDir: - // Create directories - if err := os.MkdirAll(target, os.FileMode(header.Mode)); err != nil { - return err - } - - case tar.TypeReg, tar.TypeRegA: - // Create regular files - file, err := os.Create(target) - if err != nil { - return err - } - defer file.Close() - - // Copy file contents - if _, err := io.Copy(file, tarReader); err != nil { - return err - } +func copyZipFileToDir(zipFile *zip.File, dirPath string) error { + destPath := path.Join(dirPath, zipFile.Name) + if destPath[len(destPath)-1] == '/' { + // trailing slash indicates a directory + return os.MkdirAll(destPath, 0755) + } - // Set file permissions - if err := os.Chmod(target, os.FileMode(header.Mode)); err != nil { - return err - } - } + reader, err := zipFile.Open() + if err != nil { + return err } + defer reader.Close() - return nil + data, err := io.ReadAll(reader) + if err != nil { + return err + } + return os.WriteFile(destPath, data, zipFile.Mode()) } diff --git a/pkg/utils/fs/path.go b/pkg/utils/fs/path.go deleted file mode 100644 index 4f0bf04..0000000 --- a/pkg/utils/fs/path.go +++ /dev/null @@ -1,50 +0,0 @@ -/* - * - * Copyright 2024 opentofuutils authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package fs - -import ( - "fmt" - "github.com/opentofuutils/tenv/pkg/utils/env" - log "github.com/sirupsen/logrus" -) - -func GetPath(name string) string { - rootDir := env.GetEnv(env.RootEnv, "") - - switch name { - case "root_dir": - return rootDir - case "bin_dir": - return fmt.Sprintf("%s/bin", rootDir) - case "misc_dir": - return fmt.Sprintf("%s/misc", rootDir) - case "tfenv_dir": - return fmt.Sprintf("%s/bin/tfenv", rootDir) - case "tofuenv_dir": - return fmt.Sprintf("%s/bin/tofuenv", rootDir) - case "tfenv_exec": - return fmt.Sprintf("%s/bin/tfenv/bin/tfenv", rootDir) - case "tofuenv_exec": - return fmt.Sprintf("%s/bin/tofuenv/bin/tofuenv", rootDir) - - default: - log.Warn("Unknown day") - return "" - } - -} diff --git a/pkg/utils/github/github.go b/pkg/utils/github/github.go deleted file mode 100644 index 84a0e8f..0000000 --- a/pkg/utils/github/github.go +++ /dev/null @@ -1,76 +0,0 @@ -/* - * - * Copyright 2024 opentofuutils authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package github - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "os" -) - -func DownloadLatestRelease(owner, repo, destPath string) error { - // Use GitHub API to get the latest release information - apiURL := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases/latest", owner, repo) - resp, err := http.Get(apiURL) - if err != nil { - return err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("failed to fetch release information, status code: %d", resp.StatusCode) - } - - // Parse the response JSON to get the download URL for the latest release - var releaseInfo map[string]interface{} - if err := json.NewDecoder(resp.Body).Decode(&releaseInfo); err != nil { - return err - } - - tarball_url := releaseInfo["tarball_url"].(string) - - // Download the latest release zip file - if err := DownloadFile(tarball_url, destPath); err != nil { - return err - } - - return nil -} - -func DownloadFile(url, dest string) error { - resp, err := http.Get(url) - if err != nil { - return err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("failed to download file, status code: %d", resp.StatusCode) - } - - out, err := os.Create(dest) - if err != nil { - return err - } - defer out.Close() - - _, err = io.Copy(out, resp.Body) - return err -} From 2b894e3a815a133a11bf12505ed024795a5269fe Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Fri, 12 Jan 2024 00:55:42 +0100 Subject: [PATCH 27/32] feat: restructure code --- cmd/tenv/tf_install.go | 4 ++-- cmd/tenv/tofu_install.go | 4 ++-- tofuenv/tofuenv.go => common/list-remote.go | 23 ++++++++++++++++++++- {pkg/tf => tfenv}/install.go | 3 +-- {pkg/tofu => tofuenv}/install.go | 2 +- 5 files changed, 28 insertions(+), 8 deletions(-) rename tofuenv/tofuenv.go => common/list-remote.go (78%) rename {pkg/tf => tfenv}/install.go (96%) rename {pkg/tofu => tofuenv}/install.go (98%) diff --git a/cmd/tenv/tf_install.go b/cmd/tenv/tf_install.go index ae821f0..c4d563b 100644 --- a/cmd/tenv/tf_install.go +++ b/cmd/tenv/tf_install.go @@ -18,7 +18,7 @@ package main import ( - "github.com/opentofuutils/tenv/pkg/tf" + "github.com/opentofuutils/tenv/tfenv" "github.com/spf13/cobra" ) @@ -28,7 +28,7 @@ var tfInstallCmd = &cobra.Command{ Short: "Install a specific version of Terraform", Long: "Install a specific version of Terraform", Run: func(cmd *cobra.Command, args []string) { - err := tf.InstallSpecificVersion("1.6.6") + err := tfenv.InstallSpecificVersion("1.6.6") if err != nil { } }, diff --git a/cmd/tenv/tofu_install.go b/cmd/tenv/tofu_install.go index 7ebd9e0..3598002 100644 --- a/cmd/tenv/tofu_install.go +++ b/cmd/tenv/tofu_install.go @@ -19,7 +19,7 @@ package main import ( "github.com/opentofuutils/tenv/pkg/github" - "github.com/opentofuutils/tenv/pkg/tofu" + main2 "github.com/opentofuutils/tenv/tofuenv" "github.com/spf13/cobra" ) @@ -33,7 +33,7 @@ var tofuInstallCmd = &cobra.Command{ if err != nil { } - err = tofu.InstallSpecificVersion( + err = main2.InstallSpecificVersion( client, "opentofu", "opentofu", "1.6.0", ) if err != nil { diff --git a/tofuenv/tofuenv.go b/common/list-remote.go similarity index 78% rename from tofuenv/tofuenv.go rename to common/list-remote.go index 2650e67..28010a9 100644 --- a/tofuenv/tofuenv.go +++ b/common/list-remote.go @@ -1,4 +1,4 @@ -package main +package common import ( "context" @@ -23,3 +23,24 @@ func ListRemote(owner, repo string) ([]string, error) { return releases, nil } + +func List() { +} + +func Use() { +} + +func Install() { +} + +func Uninstall() { +} + +func VersionName() { +} + +func Init() { +} + +func Pin() { +} diff --git a/pkg/tf/install.go b/tfenv/install.go similarity index 96% rename from pkg/tf/install.go rename to tfenv/install.go index 3074828..6428adf 100644 --- a/pkg/tf/install.go +++ b/tfenv/install.go @@ -1,4 +1,4 @@ -package tf +package tfenv import ( "fmt" @@ -23,7 +23,6 @@ func InstallSpecificVersion(version string) error { } url := fmt.Sprintf("https://releases.hashicorp.com/terraform/%s/terraform_%s_%s_%s.zip", version, version, runtime.GOOS, runtime.GOARCH) - fmt.Println(url) response, err := http.Get(url) if err != nil { diff --git a/pkg/tofu/install.go b/tofuenv/install.go similarity index 98% rename from pkg/tofu/install.go rename to tofuenv/install.go index 064d809..60b5f1c 100644 --- a/pkg/tofu/install.go +++ b/tofuenv/install.go @@ -1,4 +1,4 @@ -package tofu +package tofuenv import ( "context" From 72bb866c6dbf483b0df12e3b1b16400a20ec78bf Mon Sep 17 00:00:00 2001 From: Alexander Sharov Date: Sat, 13 Jan 2024 19:21:22 +0100 Subject: [PATCH 28/32] feat: update README.md --- README.md | 7 ++----- assets/logo.png | Bin 0 -> 511673 bytes 2 files changed, 2 insertions(+), 5 deletions(-) create mode 100644 assets/logo.png diff --git a/README.md b/README.md index 3811d15..24485c8 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,9 @@

- golangci-lint logo + golangci-lint logo

tenv

-

Terraform/OpenTofu version manager

+

Terraform and OpenTofu version manager version written in Go.

- -[tenv](https://github.com/tofuutils/tenv) version manager that build on top of [tofuenv](https://github.com/tofuutils/tofuenv) and [tfenv](https://github.com/tfutils/tfenv) and manages [Terraform](https://www.terraform.io/) and [OpenTofu](https://opentofu.org/) binaries - ## Support Currently, tenv supports the following operating systems: diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a70c32d870953667fe08507ed8e7e1f5e1211efe GIT binary patch literal 511673 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�cJmKdC6gWu5+pY;~wQG@6s9QAIj+8X|qsR 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
&N`0VGo1MW^FR~EaAFwph+F@r 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

@ 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

&x2*9zWPOM+PPCmuHrseVSZ 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.E7JL&JG0!BK+jC~*`;YT*Lqy( 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 IK#So219Vd+a{vGU literal 0 HcmV?d00001 From 4387e959187016d699b80cd512156976c5a346e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 09:19:20 +0000 Subject: [PATCH 29/32] ci: bump docker/build-push-action from 3 to 5 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3 to 5. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v3...v5) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b3b8815..fcb0467 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,7 +43,7 @@ jobs: primary_branch: 'main' - name: Build and push - uses: docker/build-push-action@v3 + uses: docker/build-push-action@v5 with: push: true tags: | From bef8a742d206824dfe83a328dc5b69c59b04eb0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 09:19:24 +0000 Subject: [PATCH 30/32] ci: bump actions/setup-go from 3 to 5 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 3 to 5. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v3...v5) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/golangci-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 1f5b725..2a4f309 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-20.04 steps: - - uses: actions/setup-go@v3 + uses: actions/setup-go@v5 with: go-version: 1.18 - From b957802482d851793872fd2b4f2d1d8b5507eb81 Mon Sep 17 00:00:00 2001 From: Nikolai Mishin Date: Tue, 16 Jan 2024 22:28:07 +0100 Subject: [PATCH 31/32] Rename from opentofuutils to tofuutils --- Dockerfile | 12 ++++++------ LICENSE | 2 +- Makefile | 2 +- cmd/tenv/main.go | 2 +- cmd/tenv/root.go | 2 +- cmd/tenv/root_tf.go | 2 +- cmd/tenv/root_tofu.go | 2 +- cmd/tenv/root_version.go | 2 +- cmd/tenv/tf_install.go | 4 ++-- cmd/tenv/tf_list.go | 2 +- cmd/tenv/tf_list_remote.go | 6 +++--- cmd/tenv/tf_pin.go | 2 +- cmd/tenv/tf_uninstall.go | 2 +- cmd/tenv/tf_use.go | 2 +- cmd/tenv/tf_version.go | 2 +- cmd/tenv/tofu_install.go | 6 +++--- cmd/tenv/tofu_list.go | 2 +- cmd/tenv/tofu_list_remote.go | 6 +++--- cmd/tenv/tofu_pin.go | 2 +- cmd/tenv/tofu_uninstall.go | 2 +- cmd/tenv/tofu_use.go | 2 +- cmd/tenv/tofu_version.go | 2 +- cmd/terraform/terraform.go | 2 +- cmd/tofu/tofu.tf.go | 2 +- 24 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Dockerfile b/Dockerfile index c26ce9c..6501c69 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # -# Copyright 2024 opentofuutils authors. +# Copyright 2024 tofuutils authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,14 +20,14 @@ ENV CGO_ENABLED=0 \ GOARCH=amd64 \ GIT_TERMINAL_PROMPT=1 -COPY ./pkg ${GOPATH}/src/github.com/opentofuutils/tenv/pkg -COPY ./cmd ${GOPATH}/src/github.com/opentofuutils/tenv/cmd -COPY ./go.mod ./go.sum ./main.go ${GOPATH}/src/github.com/opentofuutils/tenv/ -WORKDIR ${GOPATH}/src/github.com/opentofuutils/tenv +COPY ./pkg ${GOPATH}/src/github.com/tofuutils/tenv/pkg +COPY ./cmd ${GOPATH}/src/github.com/tofuutils/tenv/cmd +COPY ./go.mod ./go.sum ./main.go ${GOPATH}/src/github.com/tofuutils/tenv/ +WORKDIR ${GOPATH}/src/github.com/tofuutils/tenv RUN go get ./ RUN go build -ldflags="-s -w" -o tenv . FROM gcr.io/distroless/static:nonroot -COPY --from=builder go/src/github.com/opentofuutils/tenv/tenv /app/ +COPY --from=builder go/src/github.com/tofuutils/tenv/tenv /app/ WORKDIR /app ENTRYPOINT ["/app/tenv"] \ No newline at end of file diff --git a/LICENSE b/LICENSE index 2b8f6d5..ae6fc8b 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2024 opentofuutils authors. + Copyright 2024 tofuutils authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Makefile b/Makefile index 5bc0e9d..a38b1ec 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # -# Copyright 2024 opentofuutils authors. +# Copyright 2024 tofuutils authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/cmd/tenv/main.go b/cmd/tenv/main.go index 7fd9c28..0865550 100644 --- a/cmd/tenv/main.go +++ b/cmd/tenv/main.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/root.go b/cmd/tenv/root.go index 605e9ea..8eb4170 100644 --- a/cmd/tenv/root.go +++ b/cmd/tenv/root.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/root_tf.go b/cmd/tenv/root_tf.go index 52a0b33..2be65d7 100644 --- a/cmd/tenv/root_tf.go +++ b/cmd/tenv/root_tf.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/root_tofu.go b/cmd/tenv/root_tofu.go index 5309667..f471233 100644 --- a/cmd/tenv/root_tofu.go +++ b/cmd/tenv/root_tofu.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/root_version.go b/cmd/tenv/root_version.go index 8728951..e12ac11 100644 --- a/cmd/tenv/root_version.go +++ b/cmd/tenv/root_version.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tf_install.go b/cmd/tenv/tf_install.go index c4d563b..92d1772 100644 --- a/cmd/tenv/tf_install.go +++ b/cmd/tenv/tf_install.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ package main import ( - "github.com/opentofuutils/tenv/tfenv" + "github.com/tofuutils/tenv/tfenv" "github.com/spf13/cobra" ) diff --git a/cmd/tenv/tf_list.go b/cmd/tenv/tf_list.go index 83e9926..57e0db3 100644 --- a/cmd/tenv/tf_list.go +++ b/cmd/tenv/tf_list.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tf_list_remote.go b/cmd/tenv/tf_list_remote.go index 8dde1df..0b6ac1e 100644 --- a/cmd/tenv/tf_list_remote.go +++ b/cmd/tenv/tf_list_remote.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,8 +19,8 @@ package main import ( "fmt" - "github.com/opentofuutils/tenv/pkg/common" - "github.com/opentofuutils/tenv/pkg/github" + "github.com/tofuutils/tenv/pkg/common" + "github.com/tofuutils/tenv/pkg/github" "github.com/spf13/cobra" ) diff --git a/cmd/tenv/tf_pin.go b/cmd/tenv/tf_pin.go index 6edce9e..58c4afb 100644 --- a/cmd/tenv/tf_pin.go +++ b/cmd/tenv/tf_pin.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tf_uninstall.go b/cmd/tenv/tf_uninstall.go index bddff83..f3f366b 100644 --- a/cmd/tenv/tf_uninstall.go +++ b/cmd/tenv/tf_uninstall.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tf_use.go b/cmd/tenv/tf_use.go index 6fd915f..7d6ca98 100644 --- a/cmd/tenv/tf_use.go +++ b/cmd/tenv/tf_use.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tf_version.go b/cmd/tenv/tf_version.go index 3a6a08d..f772738 100644 --- a/cmd/tenv/tf_version.go +++ b/cmd/tenv/tf_version.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tofu_install.go b/cmd/tenv/tofu_install.go index 3598002..bf25b92 100644 --- a/cmd/tenv/tofu_install.go +++ b/cmd/tenv/tofu_install.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,8 @@ package main import ( - "github.com/opentofuutils/tenv/pkg/github" - main2 "github.com/opentofuutils/tenv/tofuenv" + "github.com/tofuutils/tenv/pkg/github" + main2 "github.com/tofuutils/tenv/tofuenv" "github.com/spf13/cobra" ) diff --git a/cmd/tenv/tofu_list.go b/cmd/tenv/tofu_list.go index 2d5ba0f..a3a9a13 100644 --- a/cmd/tenv/tofu_list.go +++ b/cmd/tenv/tofu_list.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tofu_list_remote.go b/cmd/tenv/tofu_list_remote.go index 6271b2f..231e36b 100644 --- a/cmd/tenv/tofu_list_remote.go +++ b/cmd/tenv/tofu_list_remote.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,8 +19,8 @@ package main import ( "fmt" - "github.com/opentofuutils/tenv/pkg/common" - "github.com/opentofuutils/tenv/pkg/github" + "github.com/tofuutils/tenv/pkg/common" + "github.com/tofuutils/tenv/pkg/github" "github.com/spf13/cobra" ) diff --git a/cmd/tenv/tofu_pin.go b/cmd/tenv/tofu_pin.go index 1ce6b75..e84d65b 100644 --- a/cmd/tenv/tofu_pin.go +++ b/cmd/tenv/tofu_pin.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tofu_uninstall.go b/cmd/tenv/tofu_uninstall.go index ce31743..f525390 100644 --- a/cmd/tenv/tofu_uninstall.go +++ b/cmd/tenv/tofu_uninstall.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tofu_use.go b/cmd/tenv/tofu_use.go index 4d12b28..c0319e6 100644 --- a/cmd/tenv/tofu_use.go +++ b/cmd/tenv/tofu_use.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tenv/tofu_version.go b/cmd/tenv/tofu_version.go index e7d2507..893de61 100644 --- a/cmd/tenv/tofu_version.go +++ b/cmd/tenv/tofu_version.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/terraform/terraform.go b/cmd/terraform/terraform.go index d6d592d..5d7dbc0 100644 --- a/cmd/terraform/terraform.go +++ b/cmd/terraform/terraform.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/cmd/tofu/tofu.tf.go b/cmd/tofu/tofu.tf.go index d6d592d..5d7dbc0 100644 --- a/cmd/tofu/tofu.tf.go +++ b/cmd/tofu/tofu.tf.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 2b6787b96d2427f4c6ca995c1c95f625c2a89dfe Mon Sep 17 00:00:00 2001 From: Nikolai Mishin Date: Tue, 16 Jan 2024 23:29:05 +0100 Subject: [PATCH 32/32] Rename from opentofuutils to tofuutils --- go.mod | 2 +- pkg/consts/text/text.go | 2 +- pkg/utils/env/env.go | 2 +- pkg/utils/fs/folders.go | 5 +++-- tfenv/install.go | 3 ++- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 9274ce0..037e124 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/opentofuutils/tenv +module github.com/tofuutils/tenv go 1.21 diff --git a/pkg/consts/text/text.go b/pkg/consts/text/text.go index 1870d17..1f8effb 100644 --- a/pkg/consts/text/text.go +++ b/pkg/consts/text/text.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/pkg/utils/env/env.go b/pkg/utils/env/env.go index d5e08ae..44a79eb 100644 --- a/pkg/utils/env/env.go +++ b/pkg/utils/env/env.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/pkg/utils/fs/folders.go b/pkg/utils/fs/folders.go index ec5faa0..5a3af81 100644 --- a/pkg/utils/fs/folders.go +++ b/pkg/utils/fs/folders.go @@ -1,6 +1,6 @@ /* * - * Copyright 2024 opentofuutils authors. + * Copyright 2024 tofuutils authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,9 @@ package fs import ( - log "github.com/sirupsen/logrus" "os" + + log "github.com/sirupsen/logrus" ) func CreateFolder(name string) error { diff --git a/tfenv/install.go b/tfenv/install.go index 6428adf..2520c98 100644 --- a/tfenv/install.go +++ b/tfenv/install.go @@ -2,11 +2,12 @@ package tfenv import ( "fmt" - "github.com/opentofuutils/tenv/pkg/utils/archive" "net/http" "os" "path" "runtime" + + "github.com/tofuutils/tenv/pkg/utils/archive" ) func InstallSpecificVersion(version string) error {

U#-a}(1O*ucgrn3e!yKw#41xo{# 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