diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 69147dc..ecf916f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,10 @@ --- name: Workflow for Codecov wrapper -on: # yamllint disable-line rule:truthy +on: # yamllint disable-line rule:truthy - push - pull_request jobs: - run: + test-linux: runs-on: ubuntu-latest steps: - name: Checkout @@ -12,7 +12,7 @@ jobs: - name: Set up Python 3.10 uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: "3.10" - name: Install dependencies run: pip install -r app/requirements.txt - name: Run tests and collect coverage @@ -23,12 +23,90 @@ jobs: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_FAIL_ON_ERROR: true CODECOV_FLAGS: flag1,flag2 - shellcheck: + CODECOV_NAME: 'Ubuntu: Test''s "CI & Build" Job' + + test-macos: runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Python 3.10 + uses: actions/setup-python@v4 + with: + python-version: "3.10" + - name: Install dependencies + run: pip install -r app/requirements.txt + - name: Run tests and collect coverage + run: pytest --cov app ${{ env.CODECOV_ATS_TESTS }} + - name: Upload coverage to Codecov + run: ./dist/codecov.sh + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + CODECOV_FAIL_ON_ERROR: true + CODECOV_FLAGS: flag1,flag2 + CODECOV_NAME: 'macOS: Test''s "CI & Build" Job' + + test-windows: + runs-on: windows-latest + defaults: + run: + shell: bash + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Python 3.10 + uses: actions/setup-python@v4 + with: + python-version: "3.10" + - name: Install dependencies + run: pip install -r app/requirements.txt + - name: Run tests and collect coverage + run: pytest --cov app ${{ env.CODECOV_ATS_TESTS }} + - name: Upload coverage to Codecov + run: ./dist/codecov.sh + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + CODECOV_FAIL_ON_ERROR: true + CODECOV_FLAGS: flag1,flag2 + CODECOV_NAME: 'Windows: Test''s "CI & Build" Job' + + test-alpine: + runs-on: ubuntu-latest + container: + image: alpine:latest + steps: + - name: Install dependencies + run: apk add --no-cache git curl python3 py3-pip gnupg + - name: Checkout + uses: actions/checkout@v4 + - name: Create virtual environment + run: python -m venv .venv + - name: Install Python dependencies + run: | + source .venv/bin/activate + pip install -r app/requirements.txt + - name: Run tests and collect coverage + run: | + source .venv/bin/activate + pytest --cov app ${{ env.CODECOV_ATS_TESTS }} + - name: Upload coverage to Codecov + run: | + source .venv/bin/activate + ./dist/codecov.sh + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + CODECOV_FAIL_ON_ERROR: true + CODECOV_FLAGS: flag1,flag2 + CODECOV_NAME: 'Alpine: Test''s "CI & Build" Job' + CODECOV_GIT_SERVICE: github + CODECOV_VERBOSE: true + + shellcheck: + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install shellcheck - run: brew install shellcheck + run: sudo apt-get update && sudo apt-get install -y shellcheck - name: Run shellcheck run: shellcheck dist/codecov.sh --severity=error diff --git a/dist/codecov.sh b/dist/codecov.sh index e446731..e396771 100755 --- a/dist/codecov.sh +++ b/dist/codecov.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh set +u say() { echo -e "$1" @@ -32,6 +32,12 @@ write_bool_args() { echo "-$(lower $1)" fi } +quote_arg() { + escaped=$(printf '%s\n' "$1" | sed "s/'/'\\\\''/g") + printf "'%s'" "$escaped" +} +add_cli_arg() { [ -n "$1" ] && CODECOV_CLI_ARGS="${CODECOV_CLI_ARGS:+$CODECOV_CLI_ARGS }$(quote_arg "$1")"; } +add_arg() { [ -n "$1" ] && CODECOV_ARGS="${CODECOV_ARGS:+$CODECOV_ARGS }$(quote_arg "$1")"; } b="\033[0;36m" # variables/constants g="\033[0;32m" # info/debug r="\033[0;31m" # errors @@ -50,7 +56,7 @@ say " _____ _ \\_____\\___/ \\__,_|\\___|\\___\\___/ \\_/ $r Wrapper-$CODECOV_WRAPPER_VERSION$x " -if [[ "$CODECOV_CLI_TYPE" != "codecov-cli" && "$CODECOV_CLI_TYPE" != "sentry-prevent-cli" ]]; then +if [ "$CODECOV_CLI_TYPE" != "codecov-cli" ] && [ "$CODECOV_CLI_TYPE" != "sentry-prevent-cli" ]; then echo "Invalid CODECOV_CLI_TYPE: '$CODECOV_CLI_TYPE'. Must be 'codecov-cli' or 'sentry-prevent-cli'" exit 1 fi @@ -63,9 +69,9 @@ then else exit_if_error "Could not find binary file $CODECOV_BINARY" fi -elif [ "$CODECOV_USE_PYPI" == "true" ]; +elif [ "$CODECOV_USE_PYPI" = "true" ]; then - if ! pip install "${CODECOV_CLI_TYPE}$([ "$CODECOV_VERSION" == "latest" ] && echo "" || echo "==$CODECOV_VERSION")"; then + if ! pip install "${CODECOV_CLI_TYPE}$([ "$CODECOV_VERSION" = "latest" ] && echo "" || echo "==$CODECOV_VERSION")"; then exit_if_error "Could not install via pypi." exit fi @@ -77,18 +83,18 @@ else else CODECOV_OS="windows" family=$(uname -s | tr '[:upper:]' '[:lower:]') - [[ $family == "darwin" ]] && CODECOV_OS="macos" - [[ $family == "linux" ]] && CODECOV_OS="linux" - [[ $CODECOV_OS == "linux" ]] && \ + [ "$family" = "darwin" ] && CODECOV_OS="macos" + [ "$family" = "linux" ] && CODECOV_OS="linux" + [ "$CODECOV_OS" = "linux" ] && \ osID=$(grep -e "^ID=" /etc/os-release | cut -c4-) - [[ $osID == "alpine" ]] && CODECOV_OS="alpine" - [[ $(arch) == "aarch64" && $family == "linux" ]] && CODECOV_OS+="-arm64" + [ "$osID" = "alpine" ] && CODECOV_OS="alpine" + [ "$(arch)" = "aarch64" ] && [ "$family" = "linux" ] && CODECOV_OS="${CODECOV_OS}-arm64" say "$g==>$x Detected $b${CODECOV_OS}$x" fi CODECOV_FILENAME="${CODECOV_CLI_TYPE%-cli}" - [[ $CODECOV_OS == "windows" ]] && CODECOV_FILENAME+=".exe" + [ "$CODECOV_OS" = "windows" ] && CODECOV_FILENAME="${CODECOV_FILENAME}.exe" CODECOV_COMMAND="./$CODECOV_FILENAME" - [[ $CODECOV_OS == "macos" ]] && \ + [ "$CODECOV_OS" = "macos" ] && \ ! command -v gpg 2>&1 >/dev/null && \ HOMEBREW_NO_AUTO_UPDATE=1 brew install gpg CODECOV_URL="${CODECOV_CLI_URL:-https://cli.codecov.io}" @@ -140,98 +146,139 @@ if [ "$CODECOV_DOWNLOAD_ONLY" = "true" ]; then say "$g==>$x ${CODECOV_CLI_TYPE} download only called. Exiting..." fi -CODECOV_CLI_ARGS=() -CODECOV_CLI_ARGS+=( $(k_arg AUTO_LOAD_PARAMS_FROM) $(v_arg AUTO_LOAD_PARAMS_FROM)) -CODECOV_CLI_ARGS+=( $(k_arg ENTERPRISE_URL) $(v_arg ENTERPRISE_URL)) +CODECOV_CLI_ARGS="" +add_cli_arg "$(k_arg AUTO_LOAD_PARAMS_FROM)" +add_cli_arg "$(v_arg AUTO_LOAD_PARAMS_FROM)" +add_cli_arg "$(k_arg ENTERPRISE_URL)" +add_cli_arg "$(v_arg ENTERPRISE_URL)" if [ -n "$CODECOV_YML_PATH" ] then - CODECOV_CLI_ARGS+=( "--codecov-yml-path" ) - CODECOV_CLI_ARGS+=( "$CODECOV_YML_PATH" ) + add_cli_arg "--codecov-yml-path" + add_cli_arg "$CODECOV_YML_PATH" fi -CODECOV_CLI_ARGS+=( $(write_bool_args CODECOV_DISABLE_TELEM) ) -CODECOV_CLI_ARGS+=( $(write_bool_args CODECOV_VERBOSE) ) -CODECOV_ARGS=() -if [ "$CODECOV_RUN_CMD" == "upload-coverage" ]; then +add_cli_arg "$(write_bool_args CODECOV_DISABLE_TELEM)" +add_cli_arg "$(write_bool_args CODECOV_VERBOSE)" +CODECOV_ARGS="" +if [ "$CODECOV_RUN_CMD" = "upload-coverage" ]; then # Args for create commit -CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) ) -CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE)) -CODECOV_ARGS+=( $(k_arg PARENT_SHA) $(v_arg PARENT_SHA)) -CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR)) -CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA)) -CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG)) +add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)" +add_arg "$(k_arg GIT_SERVICE)" +add_arg "$(v_arg GIT_SERVICE)" +add_arg "$(k_arg PARENT_SHA)" +add_arg "$(v_arg PARENT_SHA)" +add_arg "$(k_arg PR)" +add_arg "$(v_arg PR)" +add_arg "$(k_arg SHA)" +add_arg "$(v_arg SHA)" +add_arg "$(k_arg SLUG)" +add_arg "$(v_arg SLUG)" # Args for create report -CODECOV_ARGS+=( $(k_arg CODE) $(v_arg CODE)) +add_arg "$(k_arg CODE)" +add_arg "$(v_arg CODE)" # Args for do upload -CODECOV_ARGS+=( $(k_arg ENV) $(v_arg ENV)) +add_arg "$(k_arg ENV)" +add_arg "$(v_arg ENV)" OLDIFS=$IFS;IFS=, -CODECOV_ARGS+=( $(k_arg BRANCH) $(v_arg BRANCH)) -CODECOV_ARGS+=( $(k_arg BUILD) $(v_arg BUILD)) -CODECOV_ARGS+=( $(k_arg BUILD_URL) $(v_arg BUILD_URL)) -CODECOV_ARGS+=( $(k_arg DIR) $(v_arg DIR)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_DISABLE_FILE_FIXES) ) -CODECOV_ARGS+=( $(write_bool_args CODECOV_DISABLE_SEARCH) ) -CODECOV_ARGS+=( $(write_bool_args CODECOV_DRY_RUN) ) +add_arg "$(k_arg BRANCH)" +add_arg "$(v_arg BRANCH)" +add_arg "$(k_arg BUILD)" +add_arg "$(v_arg BUILD)" +add_arg "$(k_arg BUILD_URL)" +add_arg "$(v_arg BUILD_URL)" +add_arg "$(k_arg DIR)" +add_arg "$(v_arg DIR)" +add_arg "$(write_bool_args CODECOV_DISABLE_FILE_FIXES)" +add_arg "$(write_bool_args CODECOV_DISABLE_SEARCH)" +add_arg "$(write_bool_args CODECOV_DRY_RUN)" if [ -n "$CODECOV_EXCLUDES" ]; then for directory in $CODECOV_EXCLUDES; do - CODECOV_ARGS+=( "--exclude" "$directory" ) + add_arg "--exclude" + add_arg "$directory" done fi if [ -n "$CODECOV_FILES" ]; then for file in $CODECOV_FILES; do - CODECOV_ARGS+=( "--file" "$file" ) + add_arg "--file" + add_arg "$file" done fi if [ -n "$CODECOV_FLAGS" ]; then for flag in $CODECOV_FLAGS; do - CODECOV_ARGS+=( "--flag" "$flag" ) + add_arg "--flag" + add_arg "$flag" done fi -CODECOV_ARGS+=( $(k_arg GCOV_ARGS) $(v_arg GCOV_ARGS)) -CODECOV_ARGS+=( $(k_arg GCOV_EXECUTABLE) $(v_arg GCOV_EXECUTABLE)) -CODECOV_ARGS+=( $(k_arg GCOV_IGNORE) $(v_arg GCOV_IGNORE)) -CODECOV_ARGS+=( $(k_arg GCOV_INCLUDE) $(v_arg GCOV_INCLUDE)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_HANDLE_NO_REPORTS_FOUND) ) -CODECOV_ARGS+=( $(write_bool_args CODECOV_RECURSE_SUBMODULES) ) -CODECOV_ARGS+=( $(k_arg JOB_CODE) $(v_arg JOB_CODE)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_LEGACY) ) +add_arg "$(k_arg GCOV_ARGS)" +add_arg "$(v_arg GCOV_ARGS)" +add_arg "$(k_arg GCOV_EXECUTABLE)" +add_arg "$(v_arg GCOV_EXECUTABLE)" +add_arg "$(k_arg GCOV_IGNORE)" +add_arg "$(v_arg GCOV_IGNORE)" +add_arg "$(k_arg GCOV_INCLUDE)" +add_arg "$(v_arg GCOV_INCLUDE)" +add_arg "$(write_bool_args CODECOV_HANDLE_NO_REPORTS_FOUND)" +add_arg "$(write_bool_args CODECOV_RECURSE_SUBMODULES)" +add_arg "$(k_arg JOB_CODE)" +add_arg "$(v_arg JOB_CODE)" +add_arg "$(write_bool_args CODECOV_LEGACY)" if [ -n "$CODECOV_NAME" ]; then - CODECOV_ARGS+=( "--name" "$CODECOV_NAME" ) + add_arg "--name" + add_arg "$CODECOV_NAME" fi -CODECOV_ARGS+=( $(k_arg NETWORK_FILTER) $(v_arg NETWORK_FILTER)) -CODECOV_ARGS+=( $(k_arg NETWORK_PREFIX) $(v_arg NETWORK_PREFIX)) -CODECOV_ARGS+=( $(k_arg NETWORK_ROOT_FOLDER) $(v_arg NETWORK_ROOT_FOLDER)) +add_arg "$(k_arg NETWORK_FILTER)" +add_arg "$(v_arg NETWORK_FILTER)" +add_arg "$(k_arg NETWORK_PREFIX)" +add_arg "$(v_arg NETWORK_PREFIX)" +add_arg "$(k_arg NETWORK_ROOT_FOLDER)" +add_arg "$(v_arg NETWORK_ROOT_FOLDER)" if [ -n "$CODECOV_PLUGINS" ]; then for plugin in $CODECOV_PLUGINS; do - CODECOV_ARGS+=( "--plugin" "$plugin" ) + add_arg "--plugin" + add_arg "$plugin" done fi -CODECOV_ARGS+=( $(k_arg REPORT_TYPE) $(v_arg REPORT_TYPE)) -CODECOV_ARGS+=( $(k_arg SWIFT_PROJECT) $(v_arg SWIFT_PROJECT)) +add_arg "$(k_arg REPORT_TYPE)" +add_arg "$(v_arg REPORT_TYPE)" +add_arg "$(k_arg SWIFT_PROJECT)" +add_arg "$(v_arg SWIFT_PROJECT)" IFS=$OLDIFS -elif [ "$CODECOV_RUN_CMD" == "empty-upload" ]; then -CODECOV_ARGS+=( $(k_arg BRANCH) $(v_arg BRANCH)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) ) -CODECOV_ARGS+=( $(write_bool_args CODECOV_FORCE) ) -CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE)) -CODECOV_ARGS+=( $(k_arg PARENT_SHA) $(v_arg PARENT_SHA)) -CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR)) -CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA)) -CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG)) -elif [ "$CODECOV_RUN_CMD" == "pr-base-picking" ]; then -CODECOV_ARGS+=( $(k_arg BASE_SHA) $(v_arg BASE_SHA)) -CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR)) -CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG)) -CODECOV_ARGS+=( $(k_arg SERVICE) $(v_arg SERVICE)) -elif [ "$CODECOV_RUN_CMD" == "send-notifications" ]; then -CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) ) -CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE)) -CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG)) +elif [ "$CODECOV_RUN_CMD" = "empty-upload" ]; then +add_arg "$(k_arg BRANCH)" +add_arg "$(v_arg BRANCH)" +add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)" +add_arg "$(write_bool_args CODECOV_FORCE)" +add_arg "$(k_arg GIT_SERVICE)" +add_arg "$(v_arg GIT_SERVICE)" +add_arg "$(k_arg PARENT_SHA)" +add_arg "$(v_arg PARENT_SHA)" +add_arg "$(k_arg PR)" +add_arg "$(v_arg PR)" +add_arg "$(k_arg SHA)" +add_arg "$(v_arg SHA)" +add_arg "$(k_arg SLUG)" +add_arg "$(v_arg SLUG)" +elif [ "$CODECOV_RUN_CMD" = "pr-base-picking" ]; then +add_arg "$(k_arg BASE_SHA)" +add_arg "$(v_arg BASE_SHA)" +add_arg "$(k_arg PR)" +add_arg "$(v_arg PR)" +add_arg "$(k_arg SLUG)" +add_arg "$(v_arg SLUG)" +add_arg "$(k_arg SERVICE)" +add_arg "$(v_arg SERVICE)" +elif [ "$CODECOV_RUN_CMD" = "send-notifications" ]; then +add_arg "$(k_arg SHA)" +add_arg "$(v_arg SHA)" +add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)" +add_arg "$(k_arg GIT_SERVICE)" +add_arg "$(v_arg GIT_SERVICE)" +add_arg "$(k_arg SLUG)" +add_arg "$(v_arg SLUG)" else exit_if_error "Invalid run command specified: $CODECOV_RUN_CMD" exit @@ -246,19 +293,19 @@ else fi say "$g ->$x Token length: ${#token}" token_str="" -token_arg=() +token_arg="" if [ -n "$token" ]; then - token_str+=" -t " - token_arg+=( " -t " "$token") + token_str=" -t " + token_arg=" -t $token" fi say "$g==>$x Running $CODECOV_RUN_CMD" -say " $b$CODECOV_COMMAND $(echo "${CODECOV_CLI_ARGS[@]}") $CODECOV_RUN_CMD$token_str $(echo "${CODECOV_ARGS[@]}")$x" -if ! $CODECOV_COMMAND \ - ${CODECOV_CLI_ARGS[*]} \ - ${CODECOV_RUN_CMD} \ - ${token_arg[*]} \ - "${CODECOV_ARGS[@]}"; -then +say " $b$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD$token_str $CODECOV_ARGS$x" +if [ -n "$token" ]; then + eval "$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD $token_arg $CODECOV_ARGS" +else + eval "$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD $CODECOV_ARGS" +fi +if [ $? -ne 0 ]; then exit_if_error "Failed to run $CODECOV_RUN_CMD" fi diff --git a/env b/env index 4ae701c..eb06aba 100644 --- a/env +++ b/env @@ -5,21 +5,30 @@ CODECOV_BINARY_LOCATION CODECOV_CLI_ARGS CODECOV_CLI_TYPE CODECOV_COMMAND +CODECOV_DISABLE_FILE_FIXES +CODECOV_DISABLE_SEARCH +CODECOV_DISABLE_TELEM CODECOV_DOWNLOAD_ONLY +CODECOV_DRY_RUN CODECOV_EXCLUDES CODECOV_FAIL_ON_ERROR CODECOV_FILENAME CODECOV_FILES CODECOV_FLAGS +CODECOV_FORCE +CODECOV_HANDLE_NO_REPORTS_FOUND +CODECOV_LEGACY CODECOV_NAME CODECOV_OS CODECOV_PLUGINS +CODECOV_RECURSE_SUBMODULES CODECOV_RUN_CMD CODECOV_SKIP_VALIDATION CODECOV_TOKEN CODECOV_TOKEN_VAR CODECOV_URL CODECOV_USE_PYPI +CODECOV_VERBOSE CODECOV_VERSION CODECOV_WRAPPER_VERSION CODECOV_YML_PATH diff --git a/package.py b/package.py index e0450fb..d1042eb 100644 --- a/package.py +++ b/package.py @@ -2,16 +2,16 @@ import re import stat +SH_LINE = "#!/bin/sh\n" -BASH_LINE = '#!/usr/bin/env bash\n' def package_scripts(source_dir, source_root, outfile): cwd = os.getcwd() lines = _parse(os.path.join(cwd, source_dir, source_root)) cc_vars = set() - with open(outfile, 'w') as f: - f.write(BASH_LINE) + with open(outfile, "w") as f: + f.write(SH_LINE) for line in lines: cc_vars.add(_get_vars(line)) f.write(line) @@ -19,29 +19,26 @@ def package_scripts(source_dir, source_root, outfile): st = os.stat(outfile) os.chmod(outfile, st.st_mode | stat.S_IEXEC) - with open('env', 'w') as f: + with open("env", "w") as f: sorted_vars = sorted(list(cc_vars)) for var in sorted_vars: - f.write(f'{var}\n') + f.write(f"{var}\n") + def _get_vars(line): - matcher = r'(CODECOV_[\w_]+)' + matcher = r"(CODECOV_[\w_]+)" matches = re.search(matcher, line) if matches and matches.groups(): return matches.groups()[0] - matcher = r'v_arg ([\w_]+)' - matches = re.search(matcher, line) - if matches and matches.groups(): - return f"CC_{matches.groups()[0]}" + return "" - return '' def _parse(file): lines = [] - with open(file, 'r') as f: + with open(file, "r") as f: for line in f.readlines(): - if line == BASH_LINE or line == '\n': + if line == "\n" or line == SH_LINE: continue script = _get_script_from_line(line) @@ -51,11 +48,13 @@ def _parse(file): lines.append(line) return lines + def _get_script_from_line(line): - matcher = r'\s*\. \.\/(\S+\.sh)$' #. ./version.sh + matcher = r"\s*\. \.\/(\S+\.sh)$" # . ./version.sh matches = re.match(matcher, line) if matches: return matches.groups()[0] -if __name__=="__main__": - package_scripts('scripts', 'run.sh', 'dist/codecov.sh') + +if __name__ == "__main__": + package_scripts("scripts", "run.sh", "dist/codecov.sh") diff --git a/scripts/download.sh b/scripts/download.sh old mode 100755 new mode 100644 index 50ea8ca..af4c86f --- a/scripts/download.sh +++ b/scripts/download.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh if [ -n "$CODECOV_BINARY" ]; then @@ -9,9 +9,9 @@ then else exit_if_error "Could not find binary file $CODECOV_BINARY" fi -elif [ "$CODECOV_USE_PYPI" == "true" ]; +elif [ "$CODECOV_USE_PYPI" = "true" ]; then - if ! pip install "${CODECOV_CLI_TYPE}$([ "$CODECOV_VERSION" == "latest" ] && echo "" || echo "==$CODECOV_VERSION")"; then + if ! pip install "${CODECOV_CLI_TYPE}$([ "$CODECOV_VERSION" = "latest" ] && echo "" || echo "==$CODECOV_VERSION")"; then exit_if_error "Could not install via pypi." exit fi @@ -23,19 +23,19 @@ else else CODECOV_OS="windows" family=$(uname -s | tr '[:upper:]' '[:lower:]') - [[ $family == "darwin" ]] && CODECOV_OS="macos" - [[ $family == "linux" ]] && CODECOV_OS="linux" - [[ $CODECOV_OS == "linux" ]] && \ + [ "$family" = "darwin" ] && CODECOV_OS="macos" + [ "$family" = "linux" ] && CODECOV_OS="linux" + [ "$CODECOV_OS" = "linux" ] && \ osID=$(grep -e "^ID=" /etc/os-release | cut -c4-) - [[ $osID == "alpine" ]] && CODECOV_OS="alpine" - [[ $(arch) == "aarch64" && $family == "linux" ]] && CODECOV_OS+="-arm64" + [ "$osID" = "alpine" ] && CODECOV_OS="alpine" + [ "$(arch)" = "aarch64" ] && [ "$family" = "linux" ] && CODECOV_OS="${CODECOV_OS}-arm64" say "$g==>$x Detected $b${CODECOV_OS}$x" fi CODECOV_FILENAME="${CODECOV_CLI_TYPE%-cli}" - [[ $CODECOV_OS == "windows" ]] && CODECOV_FILENAME+=".exe" + [ "$CODECOV_OS" = "windows" ] && CODECOV_FILENAME="${CODECOV_FILENAME}.exe" CODECOV_COMMAND="./$CODECOV_FILENAME" - [[ $CODECOV_OS == "macos" ]] && \ + [ "$CODECOV_OS" = "macos" ] && \ ! command -v gpg 2>&1 >/dev/null && \ HOMEBREW_NO_AUTO_UPDATE=1 brew install gpg CODECOV_URL="${CODECOV_CLI_URL:-https://cli.codecov.io}" diff --git a/scripts/run.sh b/scripts/run.sh old mode 100755 new mode 100644 index eeb1f61..15444fb --- a/scripts/run.sh +++ b/scripts/run.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh . ./set_funcs.sh . ./set_defaults.sh diff --git a/scripts/run_command.sh b/scripts/run_command.sh old mode 100755 new mode 100644 index 3695912..0d86e5b --- a/scripts/run_command.sh +++ b/scripts/run_command.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh unset NODE_OPTIONS # github.com/codecov/uploader/issues/475 @@ -11,20 +11,22 @@ else fi say "$g ->$x Token length: ${#token}" token_str="" -token_arg=() +token_arg="" if [ -n "$token" ]; then - token_str+=" -t " - token_arg+=( " -t " "$token") + token_str=" -t " + token_arg=" -t $token" fi say "$g==>$x Running $CODECOV_RUN_CMD" -say " $b$CODECOV_COMMAND $(echo "${CODECOV_CLI_ARGS[@]}") $CODECOV_RUN_CMD$token_str $(echo "${CODECOV_ARGS[@]}")$x" -if ! $CODECOV_COMMAND \ - ${CODECOV_CLI_ARGS[*]} \ - ${CODECOV_RUN_CMD} \ - ${token_arg[*]} \ - "${CODECOV_ARGS[@]}"; -then +say " $b$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD$token_str $CODECOV_ARGS$x" + +if [ -n "$token" ]; then + eval "$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD $token_arg $CODECOV_ARGS" +else + eval "$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD $CODECOV_ARGS" +fi + +if [ $? -ne 0 ]; then exit_if_error "Failed to run $CODECOV_RUN_CMD" fi diff --git a/scripts/set_args.sh b/scripts/set_args.sh old mode 100755 new mode 100644 index 2d35bb3..43ebe4f --- a/scripts/set_args.sh +++ b/scripts/set_args.sh @@ -1,25 +1,29 @@ -#!/usr/bin/env bash +#!/bin/sh -CODECOV_CLI_ARGS=() +CODECOV_CLI_ARGS="" +add_cli_arg "$(k_arg AUTO_LOAD_PARAMS_FROM)" +add_cli_arg "$(v_arg AUTO_LOAD_PARAMS_FROM)" +add_cli_arg "$(k_arg ENTERPRISE_URL)" +add_cli_arg "$(v_arg ENTERPRISE_URL)" -CODECOV_CLI_ARGS+=( $(k_arg AUTO_LOAD_PARAMS_FROM) $(v_arg AUTO_LOAD_PARAMS_FROM)) -CODECOV_CLI_ARGS+=( $(k_arg ENTERPRISE_URL) $(v_arg ENTERPRISE_URL)) if [ -n "$CODECOV_YML_PATH" ] then - CODECOV_CLI_ARGS+=( "--codecov-yml-path" ) - CODECOV_CLI_ARGS+=( "$CODECOV_YML_PATH" ) + add_cli_arg "--codecov-yml-path" + add_cli_arg "$CODECOV_YML_PATH" fi -CODECOV_CLI_ARGS+=( $(write_bool_args CODECOV_DISABLE_TELEM) ) -CODECOV_CLI_ARGS+=( $(write_bool_args CODECOV_VERBOSE) ) -CODECOV_ARGS=() -if [ "$CODECOV_RUN_CMD" == "upload-coverage" ]; then +add_cli_arg "$(write_bool_args CODECOV_DISABLE_TELEM)" +add_cli_arg "$(write_bool_args CODECOV_VERBOSE)" + +CODECOV_ARGS="" + +if [ "$CODECOV_RUN_CMD" = "upload-coverage" ]; then . ./set_upload_coverage_args.sh -elif [ "$CODECOV_RUN_CMD" == "empty-upload" ]; then +elif [ "$CODECOV_RUN_CMD" = "empty-upload" ]; then . ./set_empty_upload_args.sh -elif [ "$CODECOV_RUN_CMD" == "pr-base-picking" ]; then +elif [ "$CODECOV_RUN_CMD" = "pr-base-picking" ]; then . ./set_pr_base_picking_args.sh -elif [ "$CODECOV_RUN_CMD" == "send-notifications" ]; then +elif [ "$CODECOV_RUN_CMD" = "send-notifications" ]; then . ./set_send_notifications_args.sh else exit_if_error "Invalid run command specified: $CODECOV_RUN_CMD" diff --git a/scripts/set_defaults.sh b/scripts/set_defaults.sh old mode 100755 new mode 100644 index 64c9352..e59e7b8 --- a/scripts/set_defaults.sh +++ b/scripts/set_defaults.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh CODECOV_WRAPPER_VERSION="0.2.6" CODECOV_VERSION="${CODECOV_VERSION:-latest}" @@ -15,7 +15,7 @@ say " _____ _ $r Wrapper-$CODECOV_WRAPPER_VERSION$x " -if [[ "$CODECOV_CLI_TYPE" != "codecov-cli" && "$CODECOV_CLI_TYPE" != "sentry-prevent-cli" ]]; then +if [ "$CODECOV_CLI_TYPE" != "codecov-cli" ] && [ "$CODECOV_CLI_TYPE" != "sentry-prevent-cli" ]; then echo "Invalid CODECOV_CLI_TYPE: '$CODECOV_CLI_TYPE'. Must be 'codecov-cli' or 'sentry-prevent-cli'" exit 1 fi diff --git a/scripts/set_empty_upload_args.sh b/scripts/set_empty_upload_args.sh old mode 100755 new mode 100644 index 8a62b3a..a228ac4 --- a/scripts/set_empty_upload_args.sh +++ b/scripts/set_empty_upload_args.sh @@ -1,10 +1,16 @@ -#!/usr/bin/env bash +#!/bin/sh -CODECOV_ARGS+=( $(k_arg BRANCH) $(v_arg BRANCH)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) ) -CODECOV_ARGS+=( $(write_bool_args CODECOV_FORCE) ) -CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE)) -CODECOV_ARGS+=( $(k_arg PARENT_SHA) $(v_arg PARENT_SHA)) -CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR)) -CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA)) -CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG)) +add_arg "$(k_arg BRANCH)" +add_arg "$(v_arg BRANCH)" +add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)" +add_arg "$(write_bool_args CODECOV_FORCE)" +add_arg "$(k_arg GIT_SERVICE)" +add_arg "$(v_arg GIT_SERVICE)" +add_arg "$(k_arg PARENT_SHA)" +add_arg "$(v_arg PARENT_SHA)" +add_arg "$(k_arg PR)" +add_arg "$(v_arg PR)" +add_arg "$(k_arg SHA)" +add_arg "$(v_arg SHA)" +add_arg "$(k_arg SLUG)" +add_arg "$(v_arg SLUG)" diff --git a/scripts/set_funcs.sh b/scripts/set_funcs.sh old mode 100755 new mode 100644 index 4ab640e..be08a97 --- a/scripts/set_funcs.sh +++ b/scripts/set_funcs.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh set +u say() { @@ -39,6 +39,13 @@ write_bool_args() { fi } +quote_arg() { + escaped=$(printf '%s\n' "$1" | sed "s/'/'\\\\''/g") + printf "'%s'" "$escaped" +} +add_cli_arg() { [ -n "$1" ] && CODECOV_CLI_ARGS="${CODECOV_CLI_ARGS:+$CODECOV_CLI_ARGS }$(quote_arg "$1")"; } +add_arg() { [ -n "$1" ] && CODECOV_ARGS="${CODECOV_ARGS:+$CODECOV_ARGS }$(quote_arg "$1")"; } + b="\033[0;36m" # variables/constants g="\033[0;32m" # info/debug r="\033[0;31m" # errors diff --git a/scripts/set_pr_base_picking_args.sh b/scripts/set_pr_base_picking_args.sh old mode 100755 new mode 100644 index bd69294..e436b1e --- a/scripts/set_pr_base_picking_args.sh +++ b/scripts/set_pr_base_picking_args.sh @@ -1,6 +1,10 @@ -#!/usr/bin/env bash +#!/bin/sh -CODECOV_ARGS+=( $(k_arg BASE_SHA) $(v_arg BASE_SHA)) -CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR)) -CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG)) -CODECOV_ARGS+=( $(k_arg SERVICE) $(v_arg SERVICE)) +add_arg "$(k_arg BASE_SHA)" +add_arg "$(v_arg BASE_SHA)" +add_arg "$(k_arg PR)" +add_arg "$(v_arg PR)" +add_arg "$(k_arg SLUG)" +add_arg "$(v_arg SLUG)" +add_arg "$(k_arg SERVICE)" +add_arg "$(v_arg SERVICE)" diff --git a/scripts/set_send_notifications_args.sh b/scripts/set_send_notifications_args.sh old mode 100755 new mode 100644 index 3430d18..fa49db8 --- a/scripts/set_send_notifications_args.sh +++ b/scripts/set_send_notifications_args.sh @@ -1,6 +1,9 @@ -#!/usr/bin/env bash +#!/bin/sh -CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) ) -CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE)) -CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG)) +add_arg "$(k_arg SHA)" +add_arg "$(v_arg SHA)" +add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)" +add_arg "$(k_arg GIT_SERVICE)" +add_arg "$(v_arg GIT_SERVICE)" +add_arg "$(k_arg SLUG)" +add_arg "$(v_arg SLUG)" diff --git a/scripts/set_upload_coverage_args.sh b/scripts/set_upload_coverage_args.sh old mode 100755 new mode 100644 index d2b7f34..f9608c1 --- a/scripts/set_upload_coverage_args.sh +++ b/scripts/set_upload_coverage_args.sh @@ -1,74 +1,99 @@ -#!/usr/bin/env bash +#!/bin/sh -# Args for create commit -CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) ) -CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE)) -CODECOV_ARGS+=( $(k_arg PARENT_SHA) $(v_arg PARENT_SHA)) -CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR)) -CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA)) -CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG)) +add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)" +add_arg "$(k_arg GIT_SERVICE)" +add_arg "$(v_arg GIT_SERVICE)" +add_arg "$(k_arg PARENT_SHA)" +add_arg "$(v_arg PARENT_SHA)" +add_arg "$(k_arg PR)" +add_arg "$(v_arg PR)" +add_arg "$(k_arg SHA)" +add_arg "$(v_arg SHA)" +add_arg "$(k_arg SLUG)" +add_arg "$(v_arg SLUG)" -# Args for create report -CODECOV_ARGS+=( $(k_arg CODE) $(v_arg CODE)) +add_arg "$(k_arg CODE)" +add_arg "$(v_arg CODE)" -# Args for do upload -CODECOV_ARGS+=( $(k_arg ENV) $(v_arg ENV)) +add_arg "$(k_arg ENV)" +add_arg "$(v_arg ENV)" OLDIFS=$IFS;IFS=, -CODECOV_ARGS+=( $(k_arg BRANCH) $(v_arg BRANCH)) -CODECOV_ARGS+=( $(k_arg BUILD) $(v_arg BUILD)) -CODECOV_ARGS+=( $(k_arg BUILD_URL) $(v_arg BUILD_URL)) -CODECOV_ARGS+=( $(k_arg DIR) $(v_arg DIR)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_DISABLE_FILE_FIXES) ) -CODECOV_ARGS+=( $(write_bool_args CODECOV_DISABLE_SEARCH) ) -CODECOV_ARGS+=( $(write_bool_args CODECOV_DRY_RUN) ) +add_arg "$(k_arg BRANCH)" +add_arg "$(v_arg BRANCH)" +add_arg "$(k_arg BUILD)" +add_arg "$(v_arg BUILD)" +add_arg "$(k_arg BUILD_URL)" +add_arg "$(v_arg BUILD_URL)" +add_arg "$(k_arg DIR)" +add_arg "$(v_arg DIR)" +add_arg "$(write_bool_args CODECOV_DISABLE_FILE_FIXES)" +add_arg "$(write_bool_args CODECOV_DISABLE_SEARCH)" +add_arg "$(write_bool_args CODECOV_DRY_RUN)" if [ -n "$CODECOV_EXCLUDES" ]; then for directory in $CODECOV_EXCLUDES; do - CODECOV_ARGS+=( "--exclude" "$directory" ) + add_arg "--exclude" + add_arg "$directory" done fi if [ -n "$CODECOV_FILES" ]; then for file in $CODECOV_FILES; do - CODECOV_ARGS+=( "--file" "$file" ) + add_arg "--file" + add_arg "$file" done fi if [ -n "$CODECOV_FLAGS" ]; then for flag in $CODECOV_FLAGS; do - CODECOV_ARGS+=( "--flag" "$flag" ) + add_arg "--flag" + add_arg "$flag" done fi -CODECOV_ARGS+=( $(k_arg GCOV_ARGS) $(v_arg GCOV_ARGS)) -CODECOV_ARGS+=( $(k_arg GCOV_EXECUTABLE) $(v_arg GCOV_EXECUTABLE)) -CODECOV_ARGS+=( $(k_arg GCOV_IGNORE) $(v_arg GCOV_IGNORE)) -CODECOV_ARGS+=( $(k_arg GCOV_INCLUDE) $(v_arg GCOV_INCLUDE)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_HANDLE_NO_REPORTS_FOUND) ) -CODECOV_ARGS+=( $(write_bool_args CODECOV_RECURSE_SUBMODULES) ) -CODECOV_ARGS+=( $(k_arg JOB_CODE) $(v_arg JOB_CODE)) -CODECOV_ARGS+=( $(write_bool_args CODECOV_LEGACY) ) +add_arg "$(k_arg GCOV_ARGS)" +add_arg "$(v_arg GCOV_ARGS)" +add_arg "$(k_arg GCOV_EXECUTABLE)" +add_arg "$(v_arg GCOV_EXECUTABLE)" +add_arg "$(k_arg GCOV_IGNORE)" +add_arg "$(v_arg GCOV_IGNORE)" +add_arg "$(k_arg GCOV_INCLUDE)" +add_arg "$(v_arg GCOV_INCLUDE)" +add_arg "$(write_bool_args CODECOV_HANDLE_NO_REPORTS_FOUND)" +add_arg "$(write_bool_args CODECOV_RECURSE_SUBMODULES)" +add_arg "$(k_arg JOB_CODE)" +add_arg "$(v_arg JOB_CODE)" +add_arg "$(write_bool_args CODECOV_LEGACY)" + if [ -n "$CODECOV_NAME" ]; then - CODECOV_ARGS+=( "--name" "$CODECOV_NAME" ) + add_arg "--name" + add_arg "$CODECOV_NAME" fi -CODECOV_ARGS+=( $(k_arg NETWORK_FILTER) $(v_arg NETWORK_FILTER)) -CODECOV_ARGS+=( $(k_arg NETWORK_PREFIX) $(v_arg NETWORK_PREFIX)) -CODECOV_ARGS+=( $(k_arg NETWORK_ROOT_FOLDER) $(v_arg NETWORK_ROOT_FOLDER)) + +add_arg "$(k_arg NETWORK_FILTER)" +add_arg "$(v_arg NETWORK_FILTER)" +add_arg "$(k_arg NETWORK_PREFIX)" +add_arg "$(v_arg NETWORK_PREFIX)" +add_arg "$(k_arg NETWORK_ROOT_FOLDER)" +add_arg "$(v_arg NETWORK_ROOT_FOLDER)" if [ -n "$CODECOV_PLUGINS" ]; then for plugin in $CODECOV_PLUGINS; do - CODECOV_ARGS+=( "--plugin" "$plugin" ) + add_arg "--plugin" + add_arg "$plugin" done fi -CODECOV_ARGS+=( $(k_arg REPORT_TYPE) $(v_arg REPORT_TYPE)) -CODECOV_ARGS+=( $(k_arg SWIFT_PROJECT) $(v_arg SWIFT_PROJECT)) +add_arg "$(k_arg REPORT_TYPE)" +add_arg "$(v_arg REPORT_TYPE)" +add_arg "$(k_arg SWIFT_PROJECT)" +add_arg "$(v_arg SWIFT_PROJECT)" IFS=$OLDIFS diff --git a/scripts/validate.sh b/scripts/validate.sh old mode 100755 new mode 100644 index f39517f..2700d30 --- a/scripts/validate.sh +++ b/scripts/validate.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh if [ "$CODECOV_SKIP_VALIDATION" == "true" ] || [ -n "$CODECOV_BINARY" ] || [ "$CODECOV_USE_PYPI" == "true" ]; then @@ -6,7 +6,6 @@ then else echo "$(curl -s https://keybase.io/codecovsecurity/pgp_keys.asc)" | \ gpg --no-default-keyring --import - # One-time step say "$g==>$x Verifying GPG signature integrity" sha_url="https://cli.codecov.io" sha_url="${sha_url}/${CODECOV_VERSION}/${CODECOV_OS}"