Skip to content

Commit f2fe9b1

Browse files
committed
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.
1 parent ddd9a51 commit f2fe9b1

15 files changed

+360
-195
lines changed

.github/workflows/ci.yml

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
---
22
name: Workflow for Codecov wrapper
3-
on: # yamllint disable-line rule:truthy
3+
on: # yamllint disable-line rule:truthy
44
- push
55
- pull_request
66
jobs:
7-
run:
7+
test:
88
runs-on: ubuntu-latest
99
steps:
1010
- name: Checkout
1111
uses: actions/checkout@v4
1212
- name: Set up Python 3.10
1313
uses: actions/setup-python@v4
1414
with:
15-
python-version: '3.10'
15+
python-version: "3.10"
1616
- name: Install dependencies
1717
run: pip install -r app/requirements.txt
1818
- name: Run tests and collect coverage
@@ -23,12 +23,76 @@ jobs:
2323
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
2424
CODECOV_FAIL_ON_ERROR: true
2525
CODECOV_FLAGS: flag1,flag2
26-
shellcheck:
26+
27+
test-macos:
2728
runs-on: macos-latest
29+
steps:
30+
- name: Checkout
31+
uses: actions/checkout@v4
32+
- name: Set up Python 3.10
33+
uses: actions/setup-python@v4
34+
with:
35+
python-version: "3.10"
36+
- name: Install dependencies
37+
run: pip install -r app/requirements.txt
38+
- name: Run tests and collect coverage
39+
run: pytest --cov app ${{ env.CODECOV_ATS_TESTS }}
40+
- name: Upload coverage to Codecov
41+
run: ./dist/codecov.sh
42+
env:
43+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
44+
CODECOV_FAIL_ON_ERROR: true
45+
CODECOV_FLAGS: flag1,flag2
46+
47+
test-windows:
48+
runs-on: windows-latest
49+
defaults:
50+
run:
51+
shell: bash
52+
steps:
53+
- name: Checkout
54+
uses: actions/checkout@v4
55+
- name: Set up Python 3.10
56+
uses: actions/setup-python@v4
57+
with:
58+
python-version: "3.10"
59+
- name: Install dependencies
60+
run: pip install -r app/requirements.txt
61+
- name: Run tests and collect coverage
62+
run: pytest --cov app ${{ env.CODECOV_ATS_TESTS }}
63+
- name: Upload coverage to Codecov
64+
run: ./dist/codecov.sh
65+
env:
66+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
67+
CODECOV_FAIL_ON_ERROR: true
68+
CODECOV_FLAGS: flag1,flag2
69+
70+
test-alpine:
71+
runs-on: ubuntu-latest
72+
container:
73+
image: alpine:latest
74+
steps:
75+
- name: Install dependencies
76+
run: apk add --no-cache git curl python3 py3-pip
77+
- name: Checkout
78+
uses: actions/checkout@v4
79+
- name: Install Python dependencies
80+
run: pip install -r app/requirements.txt
81+
- name: Run tests and collect coverage
82+
run: pytest --cov app ${{ env.CODECOV_ATS_TESTS }}
83+
- name: Upload coverage to Codecov
84+
run: ./dist/codecov.sh
85+
env:
86+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
87+
CODECOV_FAIL_ON_ERROR: true
88+
CODECOV_FLAGS: flag1,flag2
89+
90+
shellcheck:
91+
runs-on: ubuntu-latest
2892
steps:
2993
- name: Checkout
3094
uses: actions/checkout@v4
3195
- name: Install shellcheck
32-
run: brew install shellcheck
96+
run: sudo apt-get update && sudo apt-get install -y shellcheck
3397
- name: Run shellcheck
3498
run: shellcheck dist/codecov.sh --severity=error

dist/codecov.sh

Lines changed: 125 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env bash
1+
#!/bin/sh
22
set +u
33
say() {
44
echo -e "$1"
@@ -32,6 +32,8 @@ write_bool_args() {
3232
echo "-$(lower $1)"
3333
fi
3434
}
35+
add_cli_arg() { [ -n "$1" ] && CODECOV_CLI_ARGS="${CODECOV_CLI_ARGS:+$CODECOV_CLI_ARGS }$1"; }
36+
add_arg() { [ -n "$1" ] && CODECOV_ARGS="${CODECOV_ARGS:+$CODECOV_ARGS }$1"; }
3537
b="\033[0;36m" # variables/constants
3638
g="\033[0;32m" # info/debug
3739
r="\033[0;31m" # errors
@@ -50,7 +52,7 @@ say " _____ _
5052
\\_____\\___/ \\__,_|\\___|\\___\\___/ \\_/
5153
$r Wrapper-$CODECOV_WRAPPER_VERSION$x
5254
"
53-
if [[ "$CODECOV_CLI_TYPE" != "codecov-cli" && "$CODECOV_CLI_TYPE" != "sentry-prevent-cli" ]]; then
55+
if [ "$CODECOV_CLI_TYPE" != "codecov-cli" ] && [ "$CODECOV_CLI_TYPE" != "sentry-prevent-cli" ]; then
5456
echo "Invalid CODECOV_CLI_TYPE: '$CODECOV_CLI_TYPE'. Must be 'codecov-cli' or 'sentry-prevent-cli'"
5557
exit 1
5658
fi
@@ -63,9 +65,9 @@ then
6365
else
6466
exit_if_error "Could not find binary file $CODECOV_BINARY"
6567
fi
66-
elif [ "$CODECOV_USE_PYPI" == "true" ];
68+
elif [ "$CODECOV_USE_PYPI" = "true" ];
6769
then
68-
if ! pip install "${CODECOV_CLI_TYPE}$([ "$CODECOV_VERSION" == "latest" ] && echo "" || echo "==$CODECOV_VERSION")"; then
70+
if ! pip install "${CODECOV_CLI_TYPE}$([ "$CODECOV_VERSION" = "latest" ] && echo "" || echo "==$CODECOV_VERSION")"; then
6971
exit_if_error "Could not install via pypi."
7072
exit
7173
fi
@@ -77,18 +79,18 @@ else
7779
else
7880
CODECOV_OS="windows"
7981
family=$(uname -s | tr '[:upper:]' '[:lower:]')
80-
[[ $family == "darwin" ]] && CODECOV_OS="macos"
81-
[[ $family == "linux" ]] && CODECOV_OS="linux"
82-
[[ $CODECOV_OS == "linux" ]] && \
82+
[ "$family" = "darwin" ] && CODECOV_OS="macos"
83+
[ "$family" = "linux" ] && CODECOV_OS="linux"
84+
[ "$CODECOV_OS" = "linux" ] && \
8385
osID=$(grep -e "^ID=" /etc/os-release | cut -c4-)
84-
[[ $osID == "alpine" ]] && CODECOV_OS="alpine"
85-
[[ $(arch) == "aarch64" && $family == "linux" ]] && CODECOV_OS+="-arm64"
86+
[ "$osID" = "alpine" ] && CODECOV_OS="alpine"
87+
[ "$(arch)" = "aarch64" ] && [ "$family" = "linux" ] && CODECOV_OS="${CODECOV_OS}-arm64"
8688
say "$g==>$x Detected $b${CODECOV_OS}$x"
8789
fi
8890
CODECOV_FILENAME="${CODECOV_CLI_TYPE%-cli}"
89-
[[ $CODECOV_OS == "windows" ]] && CODECOV_FILENAME+=".exe"
91+
[ "$CODECOV_OS" = "windows" ] && CODECOV_FILENAME="${CODECOV_FILENAME}.exe"
9092
CODECOV_COMMAND="./$CODECOV_FILENAME"
91-
[[ $CODECOV_OS == "macos" ]] && \
93+
[ "$CODECOV_OS" = "macos" ] && \
9294
! command -v gpg 2>&1 >/dev/null && \
9395
HOMEBREW_NO_AUTO_UPDATE=1 brew install gpg
9496
CODECOV_URL="${CODECOV_CLI_URL:-https://cli.codecov.io}"
@@ -140,98 +142,139 @@ if [ "$CODECOV_DOWNLOAD_ONLY" = "true" ];
140142
then
141143
say "$g==>$x ${CODECOV_CLI_TYPE} download only called. Exiting..."
142144
fi
143-
CODECOV_CLI_ARGS=()
144-
CODECOV_CLI_ARGS+=( $(k_arg AUTO_LOAD_PARAMS_FROM) $(v_arg AUTO_LOAD_PARAMS_FROM))
145-
CODECOV_CLI_ARGS+=( $(k_arg ENTERPRISE_URL) $(v_arg ENTERPRISE_URL))
145+
CODECOV_CLI_ARGS=""
146+
add_cli_arg "$(k_arg AUTO_LOAD_PARAMS_FROM)"
147+
add_cli_arg "$(v_arg AUTO_LOAD_PARAMS_FROM)"
148+
add_cli_arg "$(k_arg ENTERPRISE_URL)"
149+
add_cli_arg "$(v_arg ENTERPRISE_URL)"
146150
if [ -n "$CODECOV_YML_PATH" ]
147151
then
148-
CODECOV_CLI_ARGS+=( "--codecov-yml-path" )
149-
CODECOV_CLI_ARGS+=( "$CODECOV_YML_PATH" )
152+
add_cli_arg "--codecov-yml-path"
153+
add_cli_arg "$CODECOV_YML_PATH"
150154
fi
151-
CODECOV_CLI_ARGS+=( $(write_bool_args CODECOV_DISABLE_TELEM) )
152-
CODECOV_CLI_ARGS+=( $(write_bool_args CODECOV_VERBOSE) )
153-
CODECOV_ARGS=()
154-
if [ "$CODECOV_RUN_CMD" == "upload-coverage" ]; then
155+
add_cli_arg "$(write_bool_args CODECOV_DISABLE_TELEM)"
156+
add_cli_arg "$(write_bool_args CODECOV_VERBOSE)"
157+
CODECOV_ARGS=""
158+
if [ "$CODECOV_RUN_CMD" = "upload-coverage" ]; then
155159
# Args for create commit
156-
CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) )
157-
CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE))
158-
CODECOV_ARGS+=( $(k_arg PARENT_SHA) $(v_arg PARENT_SHA))
159-
CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR))
160-
CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA))
161-
CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG))
160+
add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)"
161+
add_arg "$(k_arg GIT_SERVICE)"
162+
add_arg "$(v_arg GIT_SERVICE)"
163+
add_arg "$(k_arg PARENT_SHA)"
164+
add_arg "$(v_arg PARENT_SHA)"
165+
add_arg "$(k_arg PR)"
166+
add_arg "$(v_arg PR)"
167+
add_arg "$(k_arg SHA)"
168+
add_arg "$(v_arg SHA)"
169+
add_arg "$(k_arg SLUG)"
170+
add_arg "$(v_arg SLUG)"
162171
# Args for create report
163-
CODECOV_ARGS+=( $(k_arg CODE) $(v_arg CODE))
172+
add_arg "$(k_arg CODE)"
173+
add_arg "$(v_arg CODE)"
164174
# Args for do upload
165-
CODECOV_ARGS+=( $(k_arg ENV) $(v_arg ENV))
175+
add_arg "$(k_arg ENV)"
176+
add_arg "$(v_arg ENV)"
166177
OLDIFS=$IFS;IFS=,
167-
CODECOV_ARGS+=( $(k_arg BRANCH) $(v_arg BRANCH))
168-
CODECOV_ARGS+=( $(k_arg BUILD) $(v_arg BUILD))
169-
CODECOV_ARGS+=( $(k_arg BUILD_URL) $(v_arg BUILD_URL))
170-
CODECOV_ARGS+=( $(k_arg DIR) $(v_arg DIR))
171-
CODECOV_ARGS+=( $(write_bool_args CODECOV_DISABLE_FILE_FIXES) )
172-
CODECOV_ARGS+=( $(write_bool_args CODECOV_DISABLE_SEARCH) )
173-
CODECOV_ARGS+=( $(write_bool_args CODECOV_DRY_RUN) )
178+
add_arg "$(k_arg BRANCH)"
179+
add_arg "$(v_arg BRANCH)"
180+
add_arg "$(k_arg BUILD)"
181+
add_arg "$(v_arg BUILD)"
182+
add_arg "$(k_arg BUILD_URL)"
183+
add_arg "$(v_arg BUILD_URL)"
184+
add_arg "$(k_arg DIR)"
185+
add_arg "$(v_arg DIR)"
186+
add_arg "$(write_bool_args CODECOV_DISABLE_FILE_FIXES)"
187+
add_arg "$(write_bool_args CODECOV_DISABLE_SEARCH)"
188+
add_arg "$(write_bool_args CODECOV_DRY_RUN)"
174189
if [ -n "$CODECOV_EXCLUDES" ];
175190
then
176191
for directory in $CODECOV_EXCLUDES; do
177-
CODECOV_ARGS+=( "--exclude" "$directory" )
192+
add_arg "--exclude"
193+
add_arg "$directory"
178194
done
179195
fi
180196
if [ -n "$CODECOV_FILES" ];
181197
then
182198
for file in $CODECOV_FILES; do
183-
CODECOV_ARGS+=( "--file" "$file" )
199+
add_arg "--file"
200+
add_arg "$file"
184201
done
185202
fi
186203
if [ -n "$CODECOV_FLAGS" ];
187204
then
188205
for flag in $CODECOV_FLAGS; do
189-
CODECOV_ARGS+=( "--flag" "$flag" )
206+
add_arg "--flag"
207+
add_arg "$flag"
190208
done
191209
fi
192-
CODECOV_ARGS+=( $(k_arg GCOV_ARGS) $(v_arg GCOV_ARGS))
193-
CODECOV_ARGS+=( $(k_arg GCOV_EXECUTABLE) $(v_arg GCOV_EXECUTABLE))
194-
CODECOV_ARGS+=( $(k_arg GCOV_IGNORE) $(v_arg GCOV_IGNORE))
195-
CODECOV_ARGS+=( $(k_arg GCOV_INCLUDE) $(v_arg GCOV_INCLUDE))
196-
CODECOV_ARGS+=( $(write_bool_args CODECOV_HANDLE_NO_REPORTS_FOUND) )
197-
CODECOV_ARGS+=( $(write_bool_args CODECOV_RECURSE_SUBMODULES) )
198-
CODECOV_ARGS+=( $(k_arg JOB_CODE) $(v_arg JOB_CODE))
199-
CODECOV_ARGS+=( $(write_bool_args CODECOV_LEGACY) )
210+
add_arg "$(k_arg GCOV_ARGS)"
211+
add_arg "$(v_arg GCOV_ARGS)"
212+
add_arg "$(k_arg GCOV_EXECUTABLE)"
213+
add_arg "$(v_arg GCOV_EXECUTABLE)"
214+
add_arg "$(k_arg GCOV_IGNORE)"
215+
add_arg "$(v_arg GCOV_IGNORE)"
216+
add_arg "$(k_arg GCOV_INCLUDE)"
217+
add_arg "$(v_arg GCOV_INCLUDE)"
218+
add_arg "$(write_bool_args CODECOV_HANDLE_NO_REPORTS_FOUND)"
219+
add_arg "$(write_bool_args CODECOV_RECURSE_SUBMODULES)"
220+
add_arg "$(k_arg JOB_CODE)"
221+
add_arg "$(v_arg JOB_CODE)"
222+
add_arg "$(write_bool_args CODECOV_LEGACY)"
200223
if [ -n "$CODECOV_NAME" ];
201224
then
202-
CODECOV_ARGS+=( "--name" "$CODECOV_NAME" )
225+
add_arg "--name"
226+
add_arg "$CODECOV_NAME"
203227
fi
204-
CODECOV_ARGS+=( $(k_arg NETWORK_FILTER) $(v_arg NETWORK_FILTER))
205-
CODECOV_ARGS+=( $(k_arg NETWORK_PREFIX) $(v_arg NETWORK_PREFIX))
206-
CODECOV_ARGS+=( $(k_arg NETWORK_ROOT_FOLDER) $(v_arg NETWORK_ROOT_FOLDER))
228+
add_arg "$(k_arg NETWORK_FILTER)"
229+
add_arg "$(v_arg NETWORK_FILTER)"
230+
add_arg "$(k_arg NETWORK_PREFIX)"
231+
add_arg "$(v_arg NETWORK_PREFIX)"
232+
add_arg "$(k_arg NETWORK_ROOT_FOLDER)"
233+
add_arg "$(v_arg NETWORK_ROOT_FOLDER)"
207234
if [ -n "$CODECOV_PLUGINS" ];
208235
then
209236
for plugin in $CODECOV_PLUGINS; do
210-
CODECOV_ARGS+=( "--plugin" "$plugin" )
237+
add_arg "--plugin"
238+
add_arg "$plugin"
211239
done
212240
fi
213-
CODECOV_ARGS+=( $(k_arg REPORT_TYPE) $(v_arg REPORT_TYPE))
214-
CODECOV_ARGS+=( $(k_arg SWIFT_PROJECT) $(v_arg SWIFT_PROJECT))
241+
add_arg "$(k_arg REPORT_TYPE)"
242+
add_arg "$(v_arg REPORT_TYPE)"
243+
add_arg "$(k_arg SWIFT_PROJECT)"
244+
add_arg "$(v_arg SWIFT_PROJECT)"
215245
IFS=$OLDIFS
216-
elif [ "$CODECOV_RUN_CMD" == "empty-upload" ]; then
217-
CODECOV_ARGS+=( $(k_arg BRANCH) $(v_arg BRANCH))
218-
CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) )
219-
CODECOV_ARGS+=( $(write_bool_args CODECOV_FORCE) )
220-
CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE))
221-
CODECOV_ARGS+=( $(k_arg PARENT_SHA) $(v_arg PARENT_SHA))
222-
CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR))
223-
CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA))
224-
CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG))
225-
elif [ "$CODECOV_RUN_CMD" == "pr-base-picking" ]; then
226-
CODECOV_ARGS+=( $(k_arg BASE_SHA) $(v_arg BASE_SHA))
227-
CODECOV_ARGS+=( $(k_arg PR) $(v_arg PR))
228-
CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG))
229-
CODECOV_ARGS+=( $(k_arg SERVICE) $(v_arg SERVICE))
230-
elif [ "$CODECOV_RUN_CMD" == "send-notifications" ]; then
231-
CODECOV_ARGS+=( $(k_arg SHA) $(v_arg SHA))
232-
CODECOV_ARGS+=( $(write_bool_args CODECOV_FAIL_ON_ERROR) )
233-
CODECOV_ARGS+=( $(k_arg GIT_SERVICE) $(v_arg GIT_SERVICE))
234-
CODECOV_ARGS+=( $(k_arg SLUG) $(v_arg SLUG))
246+
elif [ "$CODECOV_RUN_CMD" = "empty-upload" ]; then
247+
add_arg "$(k_arg BRANCH)"
248+
add_arg "$(v_arg BRANCH)"
249+
add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)"
250+
add_arg "$(write_bool_args CODECOV_FORCE)"
251+
add_arg "$(k_arg GIT_SERVICE)"
252+
add_arg "$(v_arg GIT_SERVICE)"
253+
add_arg "$(k_arg PARENT_SHA)"
254+
add_arg "$(v_arg PARENT_SHA)"
255+
add_arg "$(k_arg PR)"
256+
add_arg "$(v_arg PR)"
257+
add_arg "$(k_arg SHA)"
258+
add_arg "$(v_arg SHA)"
259+
add_arg "$(k_arg SLUG)"
260+
add_arg "$(v_arg SLUG)"
261+
elif [ "$CODECOV_RUN_CMD" = "pr-base-picking" ]; then
262+
add_arg "$(k_arg BASE_SHA)"
263+
add_arg "$(v_arg BASE_SHA)"
264+
add_arg "$(k_arg PR)"
265+
add_arg "$(v_arg PR)"
266+
add_arg "$(k_arg SLUG)"
267+
add_arg "$(v_arg SLUG)"
268+
add_arg "$(k_arg SERVICE)"
269+
add_arg "$(v_arg SERVICE)"
270+
elif [ "$CODECOV_RUN_CMD" = "send-notifications" ]; then
271+
add_arg "$(k_arg SHA)"
272+
add_arg "$(v_arg SHA)"
273+
add_arg "$(write_bool_args CODECOV_FAIL_ON_ERROR)"
274+
add_arg "$(k_arg GIT_SERVICE)"
275+
add_arg "$(v_arg GIT_SERVICE)"
276+
add_arg "$(k_arg SLUG)"
277+
add_arg "$(v_arg SLUG)"
235278
else
236279
exit_if_error "Invalid run command specified: $CODECOV_RUN_CMD"
237280
exit
@@ -246,19 +289,19 @@ else
246289
fi
247290
say "$g ->$x Token length: ${#token}"
248291
token_str=""
249-
token_arg=()
292+
token_arg=""
250293
if [ -n "$token" ];
251294
then
252-
token_str+=" -t <redacted>"
253-
token_arg+=( " -t " "$token")
295+
token_str=" -t <redacted>"
296+
token_arg=" -t $token"
254297
fi
255298
say "$g==>$x Running $CODECOV_RUN_CMD"
256-
say " $b$CODECOV_COMMAND $(echo "${CODECOV_CLI_ARGS[@]}") $CODECOV_RUN_CMD$token_str $(echo "${CODECOV_ARGS[@]}")$x"
257-
if ! $CODECOV_COMMAND \
258-
${CODECOV_CLI_ARGS[*]} \
259-
${CODECOV_RUN_CMD} \
260-
${token_arg[*]} \
261-
"${CODECOV_ARGS[@]}";
262-
then
299+
say " $b$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD$token_str $CODECOV_ARGS$x"
300+
if [ -n "$token" ]; then
301+
eval "$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD $token_arg $CODECOV_ARGS"
302+
else
303+
eval "$CODECOV_COMMAND $CODECOV_CLI_ARGS $CODECOV_RUN_CMD $CODECOV_ARGS"
304+
fi
305+
if [ $? -ne 0 ]; then
263306
exit_if_error "Failed to run $CODECOV_RUN_CMD"
264307
fi

0 commit comments

Comments
 (0)