Commit graph

156 commits

Author SHA1 Message Date
Jesse Duffield b353d2a55a Allow closing issues via github actions
This provides some basic admin permissions without needing to go all the
way up to a collaborator.
2025-04-26 14:42:21 +10:00
Jesse Duffield f7eb9113f3 Skip date check when release worfklow is manually invoked 2025-04-14 18:24:45 +10:00
Stefan Haller ad813503fb Bump minimum required git version to 2.22
Versions older than 2.22 have issues with "git cherry-pick --continue" and
"git cherry-pick --skip" that are difficult to work around.
2025-04-09 10:40:52 +02:00
Kevin Radloff be7583dd40 Update to go 1.24 2025-03-08 14:53:54 -05:00
Stefan Haller f7fd5217cb Fix release schedule again
There's no way to tell cron to run a job on the first Saturday of a month, so we
tell it to run every Saturday, and manually check whether it's the first week of
the month. This is not ideal because we'll get notifications about failed
releases three times a month, but it's better than nothing for now.
2025-03-06 10:04:15 +01:00
Jesse Duffield 471f72e607 Fix release script once again 2025-02-25 22:18:59 +11:00
Jesse Duffield f5cd02b54f Fix release script 2025-02-25 22:07:11 +11:00
Jesse Duffield fcf48c4f08 Improve release workflow
1) the cron schedule was wrong: it was doing every saturday, rather than
the first saturday of each month.
2) It wasn't triggering a deploy despite pushing a tag because clearly
github doesn't want that to happen.

Now it triggers a deploy, and it also allows triggering from the UI,
letting you specify minor/patch bump and whether to ignore blocking
PRs/issues. As such I'm removing support for the old method of pushing
the tag. The new way is the only way.
2025-02-24 07:18:45 +11:00
Jesse Duffield a81f9ea97c Fix auto-release schedule
It was previously on each saturday
2025-02-22 23:03:42 +11:00
Jesse Duffield 57220ba478 Use personal access token to push tag
Github actions refuses to trigger a workflow from another workflow, but
if you use your own personal access token (in this case,
GITHUB_API_TOKEN), it should work.
2025-02-15 15:54:47 +11:00
Jesse Duffield 269d89ea51 Fix issue where latest tag wasn't obtained early enough in auto-release script 2025-02-15 15:36:54 +11:00
Jesse Duffield 977a01172f Automatically cut release each month 2025-01-11 15:44:00 +11:00
Eng Zer Jun 181b00b758
ci: update upload-artifact and download-artifact actions to v4
v3 of `actions/upload-artifact` and `actions/download-artifact` will be
fully deprecated by 5 December 2024. Jobs that are scheduled to run
during the brownout periods will also fail. See [1][2].

[1]: https://github.blog/changelog/2024-04-16-deprecation-notice-v3-of-the-artifact-actions/
[2]: https://github.blog/changelog/2024-11-05-notice-of-breaking-changes-for-github-actions/

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2024-11-16 00:42:08 +08:00
Jesse Duffield 0d633896ae Add performance improvements section to release notes 2024-09-18 21:06:02 +10:00
Yaroslav Halchenko 56be1a4950 Add github action to codespell master on push and PRs
Signed-off-by: Yaroslav Halchenko <debian@onerussian.com>
2024-08-27 18:03:00 +02:00
Stefan Haller 457c4c248d Upgrade golangci-lint-action to latest version 2024-08-27 10:33:06 +02:00
Stefan Haller 8c553dcde9 Upgrade golang-ci to 1.60 2024-08-27 10:33:06 +02:00
Jesse Duffield addfa2f961 Improve fixup commits script
This script is failing currently on
https://github.com/jesseduffield/lazygit/pull/3631 because that fork's
master branch is 300 commits behind our own, but the feature branch is
up to date.

The thing is, we don't actually need to involve the master branch. All
we care about is the feature branch's own commits, so this commit simply
fetches those commits and checks them.
2024-08-24 09:27:02 +10:00
Stefan Haller 463cf35e64 Make checkout action work with forks 2024-07-13 14:39:28 +02:00
Stefan Haller 1919a2d2d6 Reapply "Check for fixup commits on CI"
This reverts commit f2db9fa3f9.
2024-07-13 14:08:44 +02:00
Jesse Duffield f2db9fa3f9 Revert "Check for fixup commits on CI"
This reverts commit 7652d579f5.

Not working on forks, and I don't have time to fix right now
2024-07-13 14:54:20 +10:00
Jesse Duffield 7652d579f5 Check for fixup commits on CI
I keep merging PRs that still have fixup commits on them! This will make
it impossible to do so
2024-07-13 13:41:47 +10:00
kyu08 ac30aee1b8 Bump actions/checkout, actions/setup-go, actions/cache/restore, actions/cache/save 2024-07-06 21:17:29 +10:00
Stefan Haller 38ec4e646f Pin golangci version to 1.58
It is annoying when CI builds suddenly start to fail because the linter was
updated and finds new things to complain about.

Updating the linter and fixing the code accordingly should be a dedicated
activity.
2024-05-29 13:42:11 +02:00
Jesse Duffield 9124d8dbaa Bump go version to 1.22 2024-05-19 16:38:21 +10:00
Jesse Duffield e09b38153c Attempt #2 at preventing codacy coverage step from running on forks 2024-05-19 14:36:25 +10:00
Jesse Duffield 36e7524146 Only run code coverage report on non-fork branches
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-05-19 14:05:30 +10:00
Jesse Duffield 5d13e3cf76 exclude sponsors PRs from release notes 2024-04-16 09:23:37 +10:00
SachinVin ba0c00b5d1 sponsors.yml: Create PR instead of trying to push to a protected branch 2024-04-13 22:59:55 +05:30
Stefan Haller 57ac9c2189 Bump required go version to 1.21
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.
2024-02-16 13:51:15 +01:00
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
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
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
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 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
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
Jesse Duffield dafac52a4c see if this fixes CI linting 2022-01-15 15:34:01 +11:00
Jesse Duffield e524e39842 move lint into ci yaml 2022-01-04 11:12:04 +11:00
Jesse Duffield e8a1a4ffc0 add cheatsheet check script 2022-01-04 11:12:04 +11:00
Ryooooooga 9619d3447f Run tests on Windows 2021-10-17 11:00:20 +11:00
mjarkk 3db40a79fe Sperate gh action build step 2021-07-28 15:40:06 +02:00
Dawid Dziurla f92fcfbb47
cd: remove ppa job
Deprecated
2021-05-07 00:08:22 +02:00
Daniel Bast b726dcc770 Switch to Go 1.16 to support macOS arm64 2021-02-23 03:04:49 -08:00
Dawid Dziurla d7c9243880
workflows: setup git before PPA repo updating 2020-12-24 10:32:50 +01:00
Dawid Dziurla f3aacbd253
workflows: split CD into separate jobs 2020-12-24 09:51:50 +01:00
Dawid Dziurla 6faed08d9d workflows: clean up linting 2020-11-16 10:02:57 +11:00
Sean Stiglitz 62b200a4be Add GolangCI action. 2020-11-16 10:02:57 +11:00
Dawid Dziurla f7bab5fdc0
workflows: update apt cache before installing pkgs 2020-11-05 11:47:21 +01:00
Dawid Dziurla d2ea5dd8b7
workflows: don't sign commit 2020-10-14 00:01:19 +02:00
Dawid Dziurla e0381b5920
workflows: run CD on Ubuntu 20.04
So we can get newer git-buildpackage
2020-10-13 23:51:40 +02:00
Dawid Dziurla 1dc837527f
workflows: update PPA repo as part of CD process 2020-10-13 13:43:14 +02:00
Dawid Dziurla bd8f198beb
workflows: run CI on master or pull request only 2020-08-25 09:18:29 +02:00
Dawid Dziurla f05adb4f99
workflows: match every branch
Previously, branches with `/` in the name wasn't being matched
2020-08-25 09:16:13 +02:00
Dawid Dziurla 6291c53966
workflows: update bumping action to v3 2020-05-13 13:36:59 +02:00
Dawid Dziurla b85048f616
workflows: update CI triggers
So it would run on pull requests from forks
2020-05-04 20:03:27 +02:00
Dawid Dziurla 674b14802e
workflows: update homebrew bumping action 2020-04-02 23:43:26 +02:00
Jesse Duffield 96c7741ba0 add workflow for auto-merging 2020-03-28 13:22:30 +11:00
Dawid Dziurla 19719becf5 workflows: run goreleaser as a build step for CI 2020-03-25 21:26:15 +11:00
Dawid Dziurla e64057b803 workflows: install gox in separate step in /tmp directory
avoid Go trying to add a dependency to go.mod file
2020-03-25 21:26:15 +11:00
Dawid Dziurla c06c0b7133 workflows: git fetch --unshallow before goreleaser step 2020-03-22 21:49:41 +11:00
Dawid Dziurla 60085cf679 workflows: use get-tag action 2020-03-22 21:31:53 +11:00
Dawid Dziurla b5c4f78e9d Remove redundant semicolon 2020-03-21 12:55:44 +11:00
Dawid Dziurla 59b0e2d70a Add GOBIN to PATH 2020-03-21 12:55:44 +11:00
Dawid Dziurla 39bd1a4628 Wording 2020-03-21 12:55:44 +11:00
Dawid Dziurla 1c1445c896 Cache builds 2020-03-21 12:55:44 +11:00
Dawid Dziurla 1e8ade2431 Use setup-go Action instead of container 2020-03-21 12:55:44 +11:00
Dawid Dziurla a990fbc3eb Don't run codecov or golangci Actions 2020-03-21 12:55:44 +11:00
Dawid Dziurla e5574e7fe5 Continue if lint step fails 2020-03-21 12:55:44 +11:00
Dawid Dziurla 6c8a924fad Run 4 builds in parallel 2020-03-21 12:55:44 +11:00