summaryrefslogtreecommitdiffstats
path: root/scripts
AgeCommit message (Collapse)Author
2024-01-16Fix exit code of run_integration_tests.sh when capturing code coverage dataStefan Haller
2023-11-30Add coverage arg for integration testsJesse Duffield
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-09-29Use go:generate for generating cheatsheetsStefan Haller
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-07-31Add demo test variantJesse Duffield
We're piggybacking on our existing integration test framework to record demos that we can include in our docs
2023-07-10Add script to run integration testsStefan Haller
2023-04-29enforce lowercase filenamesJesse Duffield
2023-03-24remove old integration test recording codeJesse Duffield
2022-10-15Use lazycore utils: Clamp and GetLazyRootDirectoryGustavo Andrioli
2022-10-09add bump lazycore scriptJesse Duffield
2022-08-13update commentsJesse Duffield
2022-01-23better bisect scriptJesse Duffield
2022-01-17add git bisect run scriptJesse Duffield
2022-01-08bump gocuiJesse Duffield
2022-01-04add cheatsheet check scriptJesse Duffield
2022-01-04make it clear that keybinding cheat sheets are auto-generatedJesse Duffield
2022-01-04update testsJesse Duffield
2021-10-23add more suggestionsJesse Duffield
2021-06-16Fix a format issueCristian Betivu
2021-06-15fix up cheatsheetJesse Duffield
2021-02-09update cheatsheetJesse Duffield
2021-02-08add secureexec file for getting around windows checking for a binary first ↵Jesse Duffield
in the current dir
2020-10-10type i18nJesse Duffield
2020-10-02update keybindingsJesse Duffield
2020-09-26add in-built logging support for a better dev experienceJesse Duffield
2020-07-18Decouple escaping from quittingv0.20.10Jesse Duffield
When a user is not entering text into a prompt, the 'q' key should immediately quit the application. On the other hand, the 'esc' key should cancel/close/go-back to the previous context. If we're at the surface level (nothing to cancel/close) and the user hits the escape key, the default behaviour is to close the app, however we now have a `quitOnTopLevelReturn` config key to override this. I actually think from the beginning we should have made this config option default to false rather than true which is the default this PR gives it, but I don't want to anger too many people familiar with the existing behaviour.
2020-03-09big golangci-lint cleanupJesse Duffield
2020-02-29fix cheatsheet script to support different contextsJesse Duffield
2019-11-10simplify how the context system worksJesse Duffield
2019-07-27Swallow errors entirely, instead of assigning and ignoring themChristian Muehlhaeuser
2019-05-12Add alternatives for scroll actions to context mapSuhas Karanth
2019-05-12Add field Alternative to gui.BindingSuhas Karanth
Document and use alternative keybinding for generating cheatsheet. Add alt keybinding fn+up/down for scroll up/down actions. Also run `go run scripts/generate_cheatsheet.go`.
2019-03-22organise keybindings betterJesse Duffield
2019-03-18generate the cheatsheet for each supported languageskanehira
2019-03-02extend cheatsheet generator to contain context based keybindingsJesse Duffield
2019-03-02update i18nJesse Duffield
2019-02-16introduce panel contexts and more work on rebasingJesse Duffield
2019-01-17run go fmt against generatorDawid Dziurla
2019-01-17add script generating keybindings cheatsheetDawid Dziurla
2018-12-18bump modules and add bump_modules scriptJesse Duffield
2018-11-24fix 'main' redefinition in scripts/ dirDenis Isaev
2018-09-05change menu keybinding from ? to xDawid Dziurla
2018-09-05workaround to include menu keybinding in cheatsheetDawid Dziurla
2018-09-05include global keybindings in menuDawid Dziurla
2018-09-05help -> menuDawid Dziurla
2018-09-03apply very important fmtDawid Dziurla
2018-09-03add generate_cheatsheet scriptDawid Dziurla
script is generating markdown document with small cheatsheet in selected language
2018-08-11show output line by line in deploy scriptJesse Duffield
2018-08-10Obtain branches in a more robust way. Begin refactor work on gitcommandsJesse Duffield