1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2024-12-12 11:15:00 +02:00
Commit Graph

35 Commits

Author SHA1 Message Date
Jesse Duffield
aaecd6cc40 Add coverage arg for integration tests
This PR captures the code coverage from our unit and integration tests. At the
moment it simply pushes the result to Codacy, a platform that assists with
improving code health. Right now the focus is just getting visibility but I want
to experiment with alerts on PRs when a PR causes a drop in code coverage.

To be clear: I'm not a dogmatist about this: I have no aspirations to get to
100% code coverage, and I don't consider lines-of-code-covered to be a perfect
metric, but it is a pretty good heuristic for how extensive your tests are.

The good news is that our coverage is actually pretty good which was a surprise
to me!

As a conflict of interest statement: I'm in Codacy's 'Pioneers' program which
provides funding and mentorship, and part of the arrangement is to use Codacy's
tooling on lazygit. This is something I'd have been happy to explore even
without being part of the program, and just like with any other static analysis
tool, we can tweak it to fit our use case and values.

## How we're capturing code coverage

This deserves its own section. Basically when you build the lazygit binary you
can specify that you want the binary to capture coverage information when it
runs. Then, if you run the binary with a GOCOVERDIR env var, it will write
coverage information to that directory before exiting.

It's a similar story with unit tests except with those you just specify the
directory inline via `-test.gocoverdir`.

We run both unit tests and integration tests separately in CI, _and_ we run them
parallel with different OS's and git versions. So I've got each step uploading
the coverage files as an artefact, and then in a separate step we combine all
the artefacts together and generate a combined coverage file, which we then
upload to codacy (but in future we can do other things with it like warn in a PR
if code coverage decreases too much).

Another caveat is that when running integration tests, not only do we want to
obtain code coverage from code executed by the test binary, we also want to
obtain code coverage from code executed by the test runner. Otherwise, for each
integration test you add, the setup code (which is run by the test runner, not
the test binary) will be considered un-covered and for a large setup step it may
appear that your PR _decreases_ coverage on net. Go doesn't easily let you
exclude directories from coverage reports so it's better to just track the
coverage from both the runner and the binary.

The binary expects a GOCOVERDIR env var but the test runner expects a
test.gocoverdir positional arg and if you pass the positional arg it will
internally overwrite GOCOVERDIR to some random temp directory and if you then
pass that to the test binary, it doesn't seem to actually write to it by the
time the test finishes. So to get around that we're using LAZYGIT_GOCOVERDIR and
then within the test runner we're mapping that to GOCOVERDIR before running the
test binary. So they both end up writing to the same directory. Coverage data
files are named to avoid conflicts, including something unique to the process,
so we don't need to worry about name collisions between the test runner and the
test binary's coverage files. We then merge the files together purely for the
sake of having fewer artefacts to upload.

## Misc

Initially I was able to have all the instances of '/tmp/code_coverage' confined
to the ci.yml which was good because it was all in one place but now it's spread
across ci.yml and scripts/run_integration_tests.sh and I don't feel great about
that but can't think of a way to make it cleaner.

I believe there's a use case for running scripts/run_integration_tests.sh
outside of CI (so that you can run tests against older git versions locally) so
I've made it that unless you pass the LAZYGIT_GOCOVERDIR env var to that script,
it skips all the code coverage stuff.

On a separate note: it seems that Go's coverage report is based on percentage of
statements executed, whereas codacy cares more about lines of code executed, so
codacy reports a higher percentage (e.g. 82%) than Go's own coverage report
(74%).
2023-11-30 12:58:41 +11:00
Stefan Haller
c465b0f2ff Rename test/results to test/_results
This prevents commands like "go test ./..." from looking into it, and it
prevents VS Code's Problems panel from showing errors about the go files in that
folder.
2023-09-15 18:04:20 +02:00
Jesse Duffield
9cc1d65280 Add demo test variant
We're piggybacking on our existing integration test framework to record  demos that we can include in our docs
2023-07-31 22:33:04 +10:00
Joel Baranick
f8ba899b87 Initial addition of support for worktrees 2023-07-30 18:35:21 +10:00
Jesse Duffield
f7e8b2dd71 cleanup integration test code 2023-02-26 12:54:13 +11:00
Jesse Duffield
8b5d59c238 remove legacy integration tests 2023-02-26 11:34:18 +11:00
Jesse Duffield
186b7197e4 clean up some integration test stuff 2022-12-20 22:54:00 +11:00
Jesse Duffield
903e65ae8d add devcontainer folder 2022-11-13 10:56:22 +11:00
Jesse Duffield
77881a9c7d add new integration test pattern 2022-08-11 21:24:15 +10:00
Jesse Duffield
6e29830f63 ignore some codespaces stuff 2022-05-17 11:55:31 +00:00
Jesse Duffield
2fe286f395 add launch.json 2022-05-17 21:38:37 +10:00
Jesse Duffield
20ec6d98ad refactor integration tests 2022-03-27 14:58:20 +11:00
Jesse Duffield
a34bdf1a04 update linters 2022-03-19 12:12:57 +11:00
Jesse Duffield
1d90e1b565 add submodule integration tests 2022-01-29 00:17:32 +11:00
Jesse Duffield
2008c39516 add tests for dealing with remotes 2021-10-22 21:33:17 +11:00
Davyd McColl
26d5444919 implement quick commit when no files staged, if configured to do so 2020-11-28 10:27:28 +11:00
CI
a9049b4a82 stop using snapshots 2020-10-10 00:23:01 +11:00
Jesse Duffield
485f6d5386 support configurable config 2020-10-10 00:23:01 +11:00
Jesse Duffield
f76196937a support integration testing
WIP
2020-10-10 00:23:01 +11:00
Jesse Duffield
9489a94473 Make merge panel its own panel 2018-12-11 22:02:12 +11:00
Glenn Vriesman
700f8c7e79 REPO: Added TODO entries to the gitignore for jesse 2018-09-09 13:37:38 +02:00
Glenn Vriesman
a8866b158b REPO: Added and modified some ignore statements 2018-09-08 14:25:33 +02:00
Anthony HAMON
fbfa48f0fc update circleci
* define release worflow when a tag is created
* add dep install
* run tests with coverage
* add goreleaser
2018-08-19 20:21:14 +02:00
Glenn Vriesman
2dbd5be24e Removed duplicates 2018-08-18 13:04:44 +02:00
Glenn Vriesman
c091401571 Cleaned the gitignore and added the linux binary 2018-08-18 11:49:37 +02:00
Jesse Duffield
95d2b02664 update gitignore 2018-08-13 23:36:06 +10:00
Jesse Duffield
3bd0246e4d add test repo contents to gitignore 2018-08-13 21:42:31 +10:00
Jesse Duffield
98c22a36fd rearrange test repo generators 2018-08-12 15:54:59 +10:00
Jesse Duffield
5c8f0d4c9d gitignore test repo 2018-08-11 15:23:57 +10:00
Jesse Duffield
dea751280e better handling of branches and untracked files 2018-07-21 15:51:18 +10:00
Jesse Duffield
d413d4319f update gitignore 2018-06-09 19:06:52 +10:00
Jesse Duffield
5ccea4f5d9 ignore notes 2018-06-02 09:03:39 +10:00
Jesse Duffield
103a6fd219 logging durations and more stuff 2018-06-02 08:35:49 +10:00
Jesse Duffield
bb12309c7c Breaking into different files 2018-05-26 13:23:39 +10:00
Jesse Duffield
4b511863f9 improved UI 2018-05-19 17:04:33 +10:00