Skip to content

Commit

Permalink
package/ci: adapt to arbitrary unnecessary Codecov breakages.
Browse files Browse the repository at this point in the history
  • Loading branch information
mosra committed Apr 16, 2023
1 parent d1eebad commit 1a66b05
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 4 deletions.
12 changes: 11 additions & 1 deletion package/ci/appveyor-desktop-mingw.bat
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,14 @@ cmake --build . --target install || exit /b
rem Coverage upload
set PATH=C:\msys64\usr\bin;%PATH%
bash %APPVEYOR_BUILD_FOLDER%\package\ci\appveyor-lcov.sh || exit /b
codecov -f coverage.info -X gcov
rem The damn new codecov binary is apparently unable to work with
rem subdirectories on Windows. Nobody cares.
rem https://github.com/codecov/codecov-action/issues/862
cd %APPVEYOR_BUILD_FOLDER%
move build\coverage.info coverage.info || exit /b
rem Official docs say "not needed for public repos", in reality not using the
rem token is "extremely flakey". What's best is that if the upload fails, the
rem damn thing exits with a success error code, and nobody cares:
rem https://github.com/codecov/codecov-circleci-orb/issues/139
rem https://community.codecov.com/t/commit-sha-does-not-match-circle-build/4266
codecov -f ./coverage.info -t c2ea9495-5454-4294-a51d-4cadf575b325 -X gcov || exit /b
8 changes: 5 additions & 3 deletions package/ci/appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,12 @@ install:
# Ninja. `cinst ninja` started 503ing in late November 2019 and wasn't really
# reliable before either. So install by hand, as that's reliable always.
- IF NOT EXIST %APPVEYOR_BUILD_FOLDER%\ninja-win.zip appveyor DownloadFile https://github.com/ninja-build/ninja/releases/download/v1.9.0/ninja-win.zip
- 7z x ninja-win.zip -oC:/tools/ninja
- 7z x ninja-win.zip -oC:/tools
- set PATH=C:/Sys/bin;C:/tools;%PATH%

# Codecov uploader
- IF "%TARGET%" == "desktop" IF "%COMPILER%" == "mingw" appveyor DownloadFile https://uploader.codecov.io/latest/windows/codecov.exe -FileName C:/tools/codecov.exe

- set PATH=C:/Sys/bin;C:/tools/ninja;%PATH%
- IF "%TARGET%" == "desktop" IF "%COMPILER%" == "mingw" pip install codecov
- IF "%TARGET_GLES2%" == "ON" set TARGET_GLES3=OFF
- IF "%TARGET_GLES2%" == "OFF" set TARGET_GLES3=ON

Expand Down
31 changes: 31 additions & 0 deletions package/ci/circleci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
version: 2.1

orbs:
# Version 3.2.4 is the "new" uploader, but it's a 50 MB Node.js *binary* and
# doesn't work on ARM64 Linux (or ARM Macs, or FreeBSD for that matter) and
# nobody seems to care. Issues opened since Septembe 2021:
# https://github.com/codecov/uploader/issues/347
# https://github.com/codecov/uploader/issues/523
# https://github.com/codecov/uploader/issues/849
# The old 1.1.1 still seems to work even though codecov got removed from pip
# on 2023-04-14.
codecov: codecov/codecov@1.1.1

executors:
Expand Down Expand Up @@ -36,6 +44,8 @@ commands:
default: ""
steps:
- run:
# TODO when switching to the new codecov uploader, gpg and git needs to
# be installed as well
name: Update apt and install base packages
# Git is needed always for cloning Corrade and Magnum
command: |
Expand Down Expand Up @@ -213,6 +223,27 @@ commands:
lcov $LCOV_EXTRA_OPTS --extract coverage.info "*/src/Magnum*/*" --output-file coverage.info > /dev/null
lcov $LCOV_EXTRA_OPTS --remove coverage.info "*/Test/*" --output-file coverage.info > /dev/null
lcov $LCOV_EXTRA_OPTS --remove coverage.info "*/build/src/*" --output-file coverage.info > /dev/null
# Official docs say "token not needed for public repos", in reality not
# using the token is "extremely flakey". What's best is that if the upload
# fails, the damn thing exits with a success error code, and nobody cares:
# https://github.com/codecov/codecov-circleci-orb/issues/139
# https://community.codecov.com/t/commit-sha-does-not-match-circle-build/4266
#
# Second best thing is that the codecov/upload helper takes a `token`
# parameter. But the token parameter is an ENVIRONMENT VARIABLE NAME!! So
# one just *can't* pass the token there. It got changed arbitrarily in
# https://github.com/codecov/codecov-circleci-orb/pull/93 "because
# CircleCI docs suggested so", yet all codecov docs suggest just commiting
# that token directly to the YML files because "it's fine". So if it's
# fine, why do I have to suffer like this?!
- run:
name: Set codecov upload token because everything is a dumpster fire
# An icing on the cake is that CircleCI commands don't allow setting
# `environment` for `commands`, only for `jobs`, so I have to do that
# via bash, and because the environment isn't passsed from a run to
# run, use the BASH_ENV hack. Mmm. Technology.
command: |
echo 'export CODECOV_TOKEN=c2ea9495-5454-4294-a51d-4cadf575b325' >> "$BASH_ENV"
- codecov/upload:
file: coverage.info

Expand Down

0 comments on commit 1a66b05

Please sign in to comment.