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

98 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
1b4e76797f Add "go mod tidy" check to CI
This should catch errors like this earlier.
2023-11-18 16:03:51 +01:00
Jesse Duffield
0dda8b58d1 Update PR template to use go generate command 2023-09-30 19:45:55 +10:00
Stefan Haller
7af371701d Use go:generate for generating cheatsheets
This has several benefits:
- it's less code
- we're using the same mechanism to generate all our auto-generated files, so if
  someone wants to add a new one, it's clear which pattern to follow
- we can re-generate all generated files with a single command
  ("go generate ./...", or "make generate")
- we only need a single check on CI to check that all files are up to date (see
  previous commit)
2023-09-29 20:38:29 +02:00
Stefan Haller
5ccc95b76f Generalize the CI check for the test list to all auto-generated files
At the moment, test_list.go is the only file that we generate using go:generate.
We will add another one in the next commit though, and we might add even more in
the future; it's useful to have a single check on CI that checks them all.
2023-09-29 20:20:09 +02:00
Jesse Duffield
473f86fcaa Add instruction in PR template to start PRs with an imperative
This spares me effort when it comes to making release notes.

Yes, sometimes it may be easier to start a message without an imperative e.g. 'When X happens, do Y'
but I don't want to overwhelm the contributor with details.
2023-08-28 19:46:45 +10:00
kyu08
a65d3119c0 upgrade golangci/golangci-lint-action to v3.7.0 2023-08-21 18:11:33 +09:00
kyu08
51ecf4089b upgrade actions/setup-go to v4 and remove actions/cache for go cache 2023-08-21 18:10:52 +09:00
kyu08
0c0fe8997b upgrade goreleaser/goreleaser-action to v4 2023-08-21 18:09:59 +09:00
kyu08
f86309dd03 upgrade JamesIves/github-sponsors-readme-action to v1.2.2 2023-08-21 18:09:33 +09:00
Stefan Haller
c877a8528f Don't run the check-required-label check on master
master doesn't have a label, so CI for master currently always fails.
2023-08-07 08:41:13 +02:00
Jesse Duffield
975d2bedb6 Remove secureexec package
From the go 1.19 release notes:

Command and LookPath no longer allow results from a PATH search to be found relative to the current directory. This removes a common source of security problems but may also break existing programs that depend on using, say, exec.Command("prog") to run a binary named prog (or, on Windows, prog.exe) in the current directory. See the os/exec package documentation for information about how best to update such programs.
2023-07-30 19:59:51 +10:00
Jesse Duffield
39c900c7e7 Fix goreleaser 2023-07-21 09:03:47 +10:00
Jesse Duffield
b168fc8cdd Add missing label to label checker 2023-07-20 17:31:40 +10:00
Jesse Duffield
1af6dff64e Update release notes config and add CI check 2023-07-20 17:15:10 +10:00
Jesse Duffield
effda8291b Add release config for generating release notes
After going and adding labels for all of these I found out that 'improvement' should be 'enhancement' and 'bugfix' should be 'bug'
but I don't know how to bulk update them (and I can't rename because the desired labels already exist).

I'll work that out later, this is good enough for now
2023-07-19 23:37:34 +10:00
Stefan Haller
d71f5d951e Run integration tests with various git versions
We pick a few interesting ones in the range of supported versions.

Based on work by Ryooooooga <eial5q265e5@gmail.com>.
2023-07-10 15:09:27 +02:00
Stefan Haller
adce8ad398 Update checkout and cache action versions 2023-07-10 15:09:17 +02:00
Jesse Duffield
c7a3b69eb9 Remove retry logic in integration tests
I want to see how we go removing all retry logic within a test. Lazygit should be trusted to tell us when it's no longer busy,
and if it that proves false we should fix the issue in the code rather than being lenient in the tests
2023-07-09 20:57:18 +10:00
Jesse Duffield
01b3e8e8bb Remove Uffizzi
We've given Uffizzi a go but haven't found  utility in it, so we're removing it.
2023-05-30 17:54:09 +10:00
Jesse Duffield
aec46942a8 enforce lowercase filenames 2023-04-29 13:05:05 +10:00
Stefan Haller
b1a56249f5 Add CI job to check that the test list is up to date 2023-04-13 19:17:08 +02:00
Shruti Chaturvedi
81ea3107ed
Uffizzi PR: Update Uffizzi Workflows (#2502) 2023-03-18 11:33:07 +11:00
Jesse Duffield
8b5d59c238 remove legacy integration tests 2023-02-26 11:34:18 +11:00
Jesse Duffield
9c645088bf give CI longer wait times before failing assertions 2023-02-25 21:37:16 +11:00
Jesse Duffield
89a09be6a0
Merge pull request #2262 from daramayis/uffizzi 2023-01-26 11:51:17 +11:00
Aramayis
b90af5461a feat: uffizzi integration 2023-01-10 19:29:45 +04:00
Jesse Duffield
52316e628e fix broken CI (see https://vielmetti.typepad.com/logbook/2022/10/git-security-fixes-lead-to-fatal-transport-file-not-allowed-error-in-ci-systems-cve-2022-39253.html)
try this

WIP
2022-11-12 10:53:12 +11:00
Jesse Duffield
ef82f39431 better PR template 2022-08-16 08:08:39 +10:00
Jesse Duffield
fbe54512a8 formatting 2022-08-15 20:10:25 +10:00
Jesse Duffield
7fd0e55b7f add PR template 2022-08-15 20:09:17 +10:00
Jesse Duffield
a94c703afb fail on vendor directory mismatch
try this

or this

more
2022-08-15 19:55:27 +10:00
Jesse Duffield
502723421b build integration binaries on CI to ensure they compile 2022-08-14 17:20:52 +10:00
Jesse Duffield
5173d7f5e1 better CLI interface 2022-08-14 17:20:52 +10:00
Jesse Duffield
de84b6c4b9 remove buggy-ass action 2022-08-13 13:55:09 +10:00
Jesse Duffield
610eddfe05 fix CI 2022-08-13 13:55:09 +10:00
Jesse Duffield
fc49068a6f better bug report template 2022-08-08 18:53:22 +10:00
Jesse Duffield
95297f72a3 even better 2022-08-08 18:50:48 +10:00
Jesse Duffield
121872ac27 new feature request template 2022-08-08 18:46:11 +10:00
Jesse Duffield
86ac309e08 add build info when building from source 2022-08-01 20:16:50 +10:00
Luka Markušić
085904d209 Add link to the installation instructions 2022-07-30 08:46:53 +02:00
Luka Markušić
017d44ff17
Update bug_report.md
Add the `please try updating` tidbit to the bug report because that's one of the most common answers (and it cuts down debugging time)
2022-07-28 21:17:15 +02:00
Ryooooooga
04772154b7 ci: change not to run Generate Sponsors action on the fork repository 2022-07-18 21:51:32 +09:00
Jesse Duffield
2fc77796b1 fix ci 2022-06-11 13:20:49 +10:00
Jesse Duffield
3d61893589 add more cache paths 2022-06-11 13:11:56 +10:00
Jesse Duffield
02c5559704 run integration tests in parallel and properly cache windows build 2022-06-11 13:06:29 +10:00
Jesse Duffield
96147bc11a add sponsors thingo 2022-05-11 23:11:24 +10:00
Dawid Dziurla
96f8201626
workflows: bump brew formula on Ubuntu 2022-05-07 11:59:40 +02:00
Jesse Duffield
a34bdf1a04 update linters 2022-03-19 12:12:57 +11:00
Luka Markušić
a2fd3541d5 'git-rev parse' should be 'git rev-parse' 2022-01-31 18:07:35 +01:00