From f2fe9b184eacfc92fb08d62f4f51ba62b15955b4 Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Mon, 9 Jun 2025 18:42:10 -0400 Subject: [PATCH 1/9] feat: support ash (alpine) rewrote the scripts to use features that are available in both ash and bash. I think the largest change is the switch to no longer use bash arrays, and the use of [ over [[, although it seems alpine-latest has some [[ executable although i'm not sure if that would exist on older alpine versions we'd want to support. --- .github/workflows/ci.yml | 74 ++++++++- dist/codecov.sh | 207 +++++++++++++++---------- env | 9 ++ package.py | 31 ++-- scripts/download.sh | 20 +-- scripts/run.sh | 2 +- scripts/run_command.sh | 24 +-- scripts/set_args.sh | 30 ++-- scripts/set_defaults.sh | 4 +- scripts/set_empty_upload_args.sh | 24 +-- scripts/set_funcs.sh | 5 +- scripts/set_pr_base_picking_args.sh | 14 +- scripts/set_send_notifications_args.sh | 13 +- scripts/set_upload_coverage_args.sh | 96 ++++++++---- scripts/validate.sh | 2 +- 15 files changed, 360 insertions(+), 195 deletions(-) mode change 100755 => 100644 scripts/download.sh mode change 100755 => 100644 scripts/run.sh mode change 100755 => 100644 scripts/run_command.sh mode change 100755 => 100644 scripts/set_args.sh mode change 100755 => 100644 scripts/set_defaults.sh mode change 100755 => 100644 scripts/set_empty_upload_args.sh mode change 100755 => 100644 scripts/set_funcs.sh mode change 100755 => 100644 scripts/set_pr_base_picking_args.sh mode change 100755 => 100644 scripts/set_send_notifications_args.sh mode change 100755 => 100644 scripts/set_upload_coverage_args.sh mode change 100755 => 100644 scripts/validate.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 69147dc..3e4da89 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: 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,76 @@ jobs: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_FAIL_ON_ERROR: true CODECOV_FLAGS: flag1,flag2 - shellcheck: + + 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 + + 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 + + test-alpine: + runs-on: ubuntu-latest + container: + image: alpine:latest + steps: + - name: Install dependencies + run: apk add --no-cache git curl python3 py3-pip + - name: Checkout + uses: actions/checkout@v4 + - name: Install Python 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 + + 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..b06254c 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,8 @@ write_bool_args() { echo "-$(lower $1)" fi } +add_cli_arg() { [ -n "$1" ] && CODECOV_CLI_ARGS="${CODECOV_CLI_ARGS:+$CODECOV_CLI_ARGS }$1"; } +add_arg() { [ -n "$1" ] && CODECOV_ARGS="${CODECOV_ARGS:+$CODECOV_ARGS }$1"; } b="\033[0;36m" # variables/constants g="\033[0;32m" # info/debug r="\033[0;31m" # errors @@ -50,7 +52,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 +65,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 +79,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 +142,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 +289,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..363d3d9 --- 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,9 @@ write_bool_args() { fi } +add_cli_arg() { [ -n "$1" ] && CODECOV_CLI_ARGS="${CODECOV_CLI_ARGS:+$CODECOV_CLI_ARGS }$1"; } +add_arg() { [ -n "$1" ] && CODECOV_ARGS="${CODECOV_ARGS:+$CODECOV_ARGS }$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..6ed03fe --- a/scripts/set_upload_coverage_args.sh +++ b/scripts/set_upload_coverage_args.sh @@ -1,74 +1,102 @@ -#!/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..fae7f18 --- 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 From ac0389e0caf4332565ea47c09a2c949b7aa0c08f Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Tue, 10 Jun 2025 11:38:02 -0400 Subject: [PATCH 2/9] fix: handle spaces and quotes in args the previous iteration was not properly handling spaces in arguments that users would pass and in the eval that runs the codecov command, those args would get split by their spaces, so now we quote the arguments and we escape whatever quotes they may contain. --- .github/workflows/ci.yml | 4 ++++ dist/codecov.sh | 8 ++++++-- scripts/set_funcs.sh | 8 ++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3e4da89..a560804 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,7 @@ jobs: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_FAIL_ON_ERROR: true CODECOV_FLAGS: flag1,flag2 + CODECOV_NAME: 'Ubuntu: Test''s "CI & Build" Job' test-macos: runs-on: macos-latest @@ -43,6 +44,7 @@ jobs: 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 @@ -66,6 +68,7 @@ jobs: 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 @@ -86,6 +89,7 @@ jobs: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_FAIL_ON_ERROR: true CODECOV_FLAGS: flag1,flag2 + CODECOV_NAME: 'Alpine: Test''s "CI & Build" Job' shellcheck: runs-on: ubuntu-latest diff --git a/dist/codecov.sh b/dist/codecov.sh index b06254c..e396771 100755 --- a/dist/codecov.sh +++ b/dist/codecov.sh @@ -32,8 +32,12 @@ write_bool_args() { echo "-$(lower $1)" fi } -add_cli_arg() { [ -n "$1" ] && CODECOV_CLI_ARGS="${CODECOV_CLI_ARGS:+$CODECOV_CLI_ARGS }$1"; } -add_arg() { [ -n "$1" ] && CODECOV_ARGS="${CODECOV_ARGS:+$CODECOV_ARGS }$1"; } +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_funcs.sh b/scripts/set_funcs.sh index 363d3d9..be08a97 100644 --- a/scripts/set_funcs.sh +++ b/scripts/set_funcs.sh @@ -39,8 +39,12 @@ write_bool_args() { fi } -add_cli_arg() { [ -n "$1" ] && CODECOV_CLI_ARGS="${CODECOV_CLI_ARGS:+$CODECOV_CLI_ARGS }$1"; } -add_arg() { [ -n "$1" ] && CODECOV_ARGS="${CODECOV_ARGS:+$CODECOV_ARGS }$1"; } +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 From e2a56dcc858756789055b56e6cec4cc9921e4c3f Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Tue, 10 Jun 2025 11:47:17 -0400 Subject: [PATCH 3/9] fix --- .github/workflows/ci.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a560804..c6b815e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -79,10 +79,16 @@ jobs: run: apk add --no-cache git curl python3 py3-pip - name: Checkout uses: actions/checkout@v4 + - name: Create virtual environment + run: python -m venv .venv - name: Install Python dependencies - run: pip install -r app/requirements.txt + run: | + source .venv/bin/activate + pip install -r app/requirements.txt - name: Run tests and collect coverage - run: pytest --cov app ${{ env.CODECOV_ATS_TESTS }} + run: | + source .venv/bin/activate + pytest --cov app ${{ env.CODECOV_ATS_TESTS }} - name: Upload coverage to Codecov run: ./dist/codecov.sh env: From c2cd5f0670cdf454b0d96e5d47743487a405a57b Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Tue, 10 Jun 2025 11:49:54 -0400 Subject: [PATCH 4/9] fix --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6b815e..353448f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,7 +76,7 @@ jobs: image: alpine:latest steps: - name: Install dependencies - run: apk add --no-cache git curl python3 py3-pip + run: apk add --no-cache git curl python3 py3-pip gnupg - name: Checkout uses: actions/checkout@v4 - name: Create virtual environment From 6f27e35b051665a359dfa31f506443d18dbafa2c Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Tue, 10 Jun 2025 11:52:04 -0400 Subject: [PATCH 5/9] fix --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 353448f..74e31fc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -90,7 +90,9 @@ jobs: source .venv/bin/activate pytest --cov app ${{ env.CODECOV_ATS_TESTS }} - name: Upload coverage to Codecov - run: ./dist/codecov.sh + run: | + source .venv/bin/activate + ./dist/codecov.sh env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} CODECOV_FAIL_ON_ERROR: true From af0ab748364453e3eba28feb2b0521e1e8bbc605 Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Tue, 10 Jun 2025 11:56:39 -0400 Subject: [PATCH 6/9] fix --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 74e31fc..3ef4498 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,6 +98,7 @@ jobs: CODECOV_FAIL_ON_ERROR: true CODECOV_FLAGS: flag1,flag2 CODECOV_NAME: 'Alpine: Test''s "CI & Build" Job' + GITHUB_ACTIONS: true shellcheck: runs-on: ubuntu-latest From 935a80c5e57001dae4591254be2648b4aaab589f Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Tue, 10 Jun 2025 12:10:20 -0400 Subject: [PATCH 7/9] fix --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3ef4498..866d02c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -99,6 +99,7 @@ jobs: CODECOV_FLAGS: flag1,flag2 CODECOV_NAME: 'Alpine: Test''s "CI & Build" Job' GITHUB_ACTIONS: true + CODECOV_VERBOSE: true shellcheck: runs-on: ubuntu-latest From e4d1479afb894e122b64bbe43be54fe1c3c463a4 Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Tue, 10 Jun 2025 12:29:37 -0400 Subject: [PATCH 8/9] fix --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 866d02c..ef55c8b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,7 +98,7 @@ jobs: CODECOV_FAIL_ON_ERROR: true CODECOV_FLAGS: flag1,flag2 CODECOV_NAME: 'Alpine: Test''s "CI & Build" Job' - GITHUB_ACTIONS: true + CODECOV_GIT_SERVICE: github CODECOV_VERBOSE: true shellcheck: From 06e26d265e71d975433a3a44f8010d3595b4e8c4 Mon Sep 17 00:00:00 2001 From: joseph-sentry Date: Thu, 12 Jun 2025 10:50:24 -0400 Subject: [PATCH 9/9] chore: fix some stuff --- .github/workflows/ci.yml | 2 +- scripts/set_upload_coverage_args.sh | 3 --- scripts/validate.sh | 1 - 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ef55c8b..ecf916f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,7 +4,7 @@ on: # yamllint disable-line rule:truthy - push - pull_request jobs: - test: + test-linux: runs-on: ubuntu-latest steps: - name: Checkout diff --git a/scripts/set_upload_coverage_args.sh b/scripts/set_upload_coverage_args.sh index 6ed03fe..f9608c1 100644 --- a/scripts/set_upload_coverage_args.sh +++ b/scripts/set_upload_coverage_args.sh @@ -1,6 +1,5 @@ #!/bin/sh -# Args for create commit add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)" add_arg "$(k_arg GIT_SERVICE)" add_arg "$(v_arg GIT_SERVICE)" @@ -13,11 +12,9 @@ add_arg "$(v_arg SHA)" add_arg "$(k_arg SLUG)" add_arg "$(v_arg SLUG)" -# Args for create report add_arg "$(k_arg CODE)" add_arg "$(v_arg CODE)" -# Args for do upload add_arg "$(k_arg ENV)" add_arg "$(v_arg ENV)" diff --git a/scripts/validate.sh b/scripts/validate.sh index fae7f18..2700d30 100644 --- a/scripts/validate.sh +++ b/scripts/validate.sh @@ -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}"