1+ #! /usr/bin/env bash
2+
3+
4+ set -e +o pipefail
5+
6+ # Set up paths first
7+ bin_name=" codacy-cli-v2"
8+
9+ # Determine OS-specific paths
10+ os_name=$( uname)
11+ arch=$( uname -m)
12+
13+ case " $arch " in
14+ " x86_64" )
15+ arch=" amd64"
16+ ;;
17+ " x86" )
18+ arch=" 386"
19+ ;;
20+ " aarch64" |" arm64" )
21+ arch=" arm64"
22+ ;;
23+ esac
24+
25+ if [ -z " $CODACY_CLI_V2_TMP_FOLDER " ]; then
26+ if [ " $( uname) " = " Linux" ]; then
27+ CODACY_CLI_V2_TMP_FOLDER=" $HOME /.cache/codacy/codacy-cli-v2"
28+ elif [ " $( uname) " = " Darwin" ]; then
29+ CODACY_CLI_V2_TMP_FOLDER=" $HOME /Library/Caches/Codacy/codacy-cli-v2"
30+ else
31+ CODACY_CLI_V2_TMP_FOLDER=" .codacy-cli-v2"
32+ fi
33+ fi
34+
35+ version_file=" $CODACY_CLI_V2_TMP_FOLDER /version.yaml"
36+
37+
38+ get_version_from_yaml () {
39+ if [ -f " $version_file " ]; then
40+ local version=$( grep -o ' version: *"[^"]*"' " $version_file " | cut -d' "' -f2)
41+ if [ -n " $version " ]; then
42+ echo " $version "
43+ return 0
44+ fi
45+ fi
46+ return 1
47+ }
48+
49+ get_latest_version () {
50+ local response
51+ if [ -n " $GH_TOKEN " ]; then
52+ response=$( curl -Lq --header " Authorization: Bearer $GH_TOKEN " " https://api.github.com/repos/codacy/codacy-cli-v2/releases/latest" 2> /dev/null)
53+ else
54+ response=$( curl -Lq " https://api.github.com/repos/codacy/codacy-cli-v2/releases/latest" 2> /dev/null)
55+ fi
56+
57+ handle_rate_limit " $response "
58+ local version=$( echo " $response " | grep -m 1 tag_name | cut -d' "' -f4)
59+ echo " $version "
60+ }
61+
62+ handle_rate_limit () {
63+ local response=" $1 "
64+ if echo " $response " | grep -q " API rate limit exceeded" ; then
65+ fatal " Error: GitHub API rate limit exceeded. Please try again later"
66+ fi
67+ }
68+
69+ download_file () {
70+ local url=" $1 "
71+
72+ echo " Downloading from URL: ${url} "
73+ if command -v curl > /dev/null 2>&1 ; then
74+ curl -# -LS " $url " -O
75+ elif command -v wget > /dev/null 2>&1 ; then
76+ wget " $url "
77+ else
78+ fatal " Error: Could not find curl or wget, please install one."
79+ fi
80+ }
81+
82+ download () {
83+ local url=" $1 "
84+ local output_folder=" $2 "
85+
86+ ( cd " $output_folder " && download_file " $url " )
87+ }
88+
89+ download_cli () {
90+ # OS name lower case
91+ suffix=$( echo " $os_name " | tr ' [:upper:]' ' [:lower:]' )
92+
93+ local bin_folder=" $1 "
94+ local bin_path=" $2 "
95+ local version=" $3 "
96+
97+ if [ ! -f " $bin_path " ]; then
98+ echo " 📥 Downloading CLI version $version ..."
99+
100+ remote_file=" codacy-cli-v2_${version} _${suffix} _${arch} .tar.gz"
101+ url=" https://github.com/codacy/codacy-cli-v2/releases/download/${version} /${remote_file} "
102+
103+ download " $url " " $bin_folder "
104+ tar xzfv " ${bin_folder} /${remote_file} " -C " ${bin_folder} "
105+ fi
106+ }
107+
108+ # Warn if CODACY_CLI_V2_VERSION is set and update is requested
109+ if [ -n " $CODACY_CLI_V2_VERSION " ] && [ " $1 " = " update" ]; then
110+ echo " ⚠️ Warning: Performing update with forced version $CODACY_CLI_V2_VERSION "
111+ echo " Unset CODACY_CLI_V2_VERSION to use the latest version"
112+ fi
113+
114+ # Ensure version.yaml exists and is up to date
115+ if [ ! -f " $version_file " ] || [ " $1 " = " update" ]; then
116+ echo " ℹ️ Fetching latest version..."
117+ version=$( get_latest_version)
118+ mkdir -p " $CODACY_CLI_V2_TMP_FOLDER "
119+ echo " version: \" $version \" " > " $version_file "
120+ fi
121+
122+ # Set the version to use
123+ if [ -n " $CODACY_CLI_V2_VERSION " ]; then
124+ version=" $CODACY_CLI_V2_VERSION "
125+ else
126+ version=$( get_version_from_yaml)
127+ fi
128+
129+
130+ # Set up version-specific paths
131+ bin_folder=" ${CODACY_CLI_V2_TMP_FOLDER} /${version} "
132+
133+ mkdir -p " $bin_folder "
134+ bin_path=" $bin_folder " /" $bin_name "
135+
136+ # Download the tool if not already installed
137+ download_cli " $bin_folder " " $bin_path " " $version "
138+ chmod +x " $bin_path "
139+
140+ run_command=" $bin_path "
141+ if [ -z " $run_command " ]; then
142+ fatal " Codacy cli v2 binary could not be found."
143+ fi
144+
145+ if [ " $# " -eq 1 ] && [ " $1 " = " download" ]; then
146+ echo " Codacy cli v2 download succeeded"
147+ else
148+ eval " $run_command $* "
149+ fi
0 commit comments