summaryrefslogtreecommitdiffstats
path: root/.github
AgeCommit message (Collapse)Author
34 hoursBump go version to 1.22Jesse Duffield
36 hoursAttempt #2 at preventing codacy coverage step from running on forksJesse Duffield
37 hoursOnly run code coverage report on non-fork branchesJesse Duffield
Codacy's coverage report feature requires the use of a secret key, which is only available on the main repo and is not available on forks. So, the step has been always failing on any forks. This commit ensures that we only run it on non-forks. This greatly diminishes the value of the coverage reports. I've talked to one of the Codacy people and advised that they should just have an API key for coverage reports which is not a secret, like what bugsnag does.
2024-04-16exclude sponsors PRs from release notesJesse Duffield
2024-04-13sponsors.yml: Create PR instead of trying to push to a protected branchSachinVin
2024-02-16Bump required go version to 1.21Stefan Haller
We'll need this to use the slices.Sort function in the next commit. It would also be possible to use sort.Ints instead, but it's slower.
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-11-18Add "go mod tidy" check to CIStefan Haller
This should catch errors like this earlier.
2023-09-30Update PR template to use go generate commandJesse Duffield
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-09-29Generalize the CI check for the test list to all auto-generated filesStefan Haller
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-08-28Add instruction in PR template to start PRs with an imperativeJesse Duffield
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-21upgrade golangci/golangci-lint-action to v3.7.0kyu08
2023-08-21upgrade actions/setup-go to v4 and remove actions/cache for go cachekyu08
2023-08-21upgrade goreleaser/goreleaser-action to v4kyu08
2023-08-21upgrade JamesIves/github-sponsors-readme-action to v1.2.2kyu08
2023-08-07Don't run the check-required-label check on masterStefan Haller
master doesn't have a label, so CI for master currently always fails.
2023-07-30Remove secureexec packageJesse Duffield
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-21Fix goreleaserv0.39.1Jesse Duffield
2023-07-20Add missing label to label checkerJesse Duffield
2023-07-20Update release notes config and add CI checkJesse Duffield
2023-07-19Add release config for generating release notespre-release-0.39-2Jesse Duffield
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-10Run integration tests with various git versionsStefan Haller
We pick a few interesting ones in the range of supported versions. Based on work by Ryooooooga <eial5q265e5@gmail.com>.
2023-07-10Update checkout and cache action versionsStefan Haller
2023-07-09Remove retry logic in integration testsJesse Duffield
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-05-30Remove UffizziJesse Duffield
We've given Uffizzi a go but haven't found utility in it, so we're removing it.
2023-04-29enforce lowercase filenamesJesse Duffield
2023-04-13Add CI job to check that the test list is up to dateStefan Haller
2023-03-18Uffizzi PR: Update Uffizzi Workflows (#2502)Shruti Chaturvedi
2023-02-26remove legacy integration testsJesse Duffield
2023-02-25give CI longer wait times before failing assertionsJesse Duffield
2023-01-26Merge pull request #2262 from daramayis/uffizziJesse Duffield
2023-01-10feat: uffizzi integrationAramayis
2022-11-12fix broken CI (see ↵Jesse Duffield
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-08-16better PR templateJesse Duffield
2022-08-15formattingJesse Duffield
2022-08-15add PR templateJesse Duffield
2022-08-15fail on vendor directory mismatchJesse Duffield
try this or this more
2022-08-14build integration binaries on CI to ensure they compileJesse Duffield
2022-08-14better CLI interfaceJesse Duffield
2022-08-13remove buggy-ass actionJesse Duffield
2022-08-13fix CIJesse Duffield
2022-08-08better bug report templateJesse Duffield
2022-08-08even betterJesse Duffield
2022-08-08new feature request templateJesse Duffield
2022-08-01add build info when building from sourceJesse Duffield
2022-07-30Add link to the installation instructionsLuka Markušić
2022-07-28Update bug_report.mdLuka Markušić
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-18ci: change not to run `Generate Sponsors` action on the fork repositoryRyooooooga
2022-06-11fix ciJesse Duffield