gitea/modules/setting
Jason Song 33cc5837a6
Support compression for Actions logs (#31761)
Support compression for Actions logs to save storage space and
bandwidth. Inspired by
https://github.com/go-gitea/gitea/issues/24256#issuecomment-1521153015

The biggest challenge is that the compression format should support
[seekable](https://github.com/facebook/zstd/blob/dev/contrib/seekable_format/zstd_seekable_compression_format.md).
So when users are viewing a part of the log lines, Gitea doesn't need to
download the whole compressed file and decompress it.

That means gzip cannot help here. And I did research, there aren't too
many choices, like bgzip and xz, but I think zstd is the most popular
one. It has an implementation in Golang with
[zstd](https://github.com/klauspost/compress/tree/master/zstd) and
[zstd-seekable-format-go](https://github.com/SaveTheRbtz/zstd-seekable-format-go),
and what is better is that it has good compatibility: a seekable format
zstd file can be read by a regular zstd reader.

This PR introduces a new package `zstd` to combine and wrap the two
packages, to provide a unified and easy-to-use API.

And a new setting `LOG_COMPRESSION` is added to the config, although I
don't see any reason why not to use compression, I think's it's a good
idea to keep the default with `none` to be consistent with old versions.

`LOG_COMPRESSION` takes effect for only new log files, it adds `.zst` as
an extension to the file name, so Gitea can determine if it needs
decompression according to the file name when reading. Old files will
keep the format since it's not worth converting them, as they will be
cleared after #31735.

<img width="541" alt="image"
src="https://github.com/user-attachments/assets/e9598764-a4e0-4b68-8c2b-f769265183c9">
2024-08-09 10:10:30 +08:00
..
config
actions_test.go
actions.go Support compression for Actions logs (#31761) 2024-08-09 10:10:30 +08:00
admin.go Allow disabling authentication related user features (#31535) 2024-07-09 17:36:31 +00:00
api.go Refactor the setting to make unit test easier (#22405) 2023-02-20 00:12:01 +08:00
asset_dynamic.go Use a general approach to access custom/static/builtin assets (#24022) 2023-04-12 18:16:45 +08:00
asset_static.go
attachment_test.go Fix all possible setting error related storages and added some tests (#23911) 2023-06-14 11:42:38 +08:00
attachment.go
cache.go Always enable caches (#28527) 2023-12-19 09:29:05 +00:00
camo.go Refactor the setting to make unit test easier (#22405) 2023-02-20 00:12:01 +08:00
config_env_test.go Fix environment-to-ini inherited key bug (#27543) 2023-10-10 01:10:37 +08:00
config_env.go Enable unparam linter (#31277) 2024-06-11 18:47:45 +00:00
config_provider_test.go Fix INI parsing for value with trailing slash (#26995) 2023-09-10 16:15:51 +00:00
config_provider.go Initial support for colorblindness-friendly themes (#30625) 2024-04-24 00:18:41 +08:00
config.go
cors.go
cron_test.go
cron.go Replace interface{} with any (#25686) 2023-07-04 18:36:08 +00:00
database_sqlite.go
database_test.go Fix incorrect PostgreSQL connection string for Unix sockets (#28865) 2024-01-20 16:04:47 +00:00
database.go
federation.go Refactor the setting to make unit test easier (#22405) 2023-02-20 00:12:01 +08:00
git_test.go Use [git.config] for reflog cleaning up (#24958) 2023-05-28 01:07:14 +00:00
git.go
glob.go Improve grep search (#30843) 2024-05-03 09:13:48 +00:00
global.go
highlight.go Refactor the setting to make unit test easier (#22405) 2023-02-20 00:12:01 +08:00
i18n.go Refactor the setting to make unit test easier (#22405) 2023-02-20 00:12:01 +08:00
incoming_email.go Resolve lint for unused parameter and unnecessary type arguments (#30750) 2024-04-29 08:47:56 +00:00
indexer_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
indexer.go
lfs_test.go Display deprecated warning in admin panel pages as well as in the log file (#26094) 2023-07-26 03:53:37 +00:00
lfs.go
log_test.go Replace interface{} with any (#25686) 2023-07-04 18:36:08 +00:00
log.go Refactor "dump" sub-command (#30240) 2024-04-03 02:16:46 +00:00
mailer_test.go Remove unnecessary code (#24610) 2023-05-10 04:57:06 +00:00
mailer.go
markup.go Add .livemd as a markdown extension (#22730) 2023-04-26 11:22:54 -04:00
metrics.go Refactor the setting to make unit test easier (#22405) 2023-02-20 00:12:01 +08:00
migrations.go
mime_type_map.go
mirror.go
oauth2_test.go Always load or generate oauth2 jwt secret (#30942) 2024-05-14 14:21:38 +00:00
oauth2.go
other.go Add [other].SHOW_FOOTER_POWERED_BY setting to hide Powered by (#30253) 2024-04-03 16:01:50 +00:00
packages_test.go Fix all possible setting error related storages and added some tests (#23911) 2023-06-14 11:42:38 +08:00
packages.go Add signature support for the RPM module (#27069) 2024-08-06 09:03:33 -04:00
path_test.go
path.go Do not allow different storage configurations to point to the same directory (#30169) 2024-03-31 03:03:24 +00:00
picture.go Fix all possible setting error related storages and added some tests (#23911) 2023-06-14 11:42:38 +08:00
project.go
proxy.go
queue.go
repository_archive_test.go Fix all possible setting error related storages and added some tests (#23911) 2023-06-14 11:42:38 +08:00
repository_archive.go
repository.go
security.go Remember login for a month by default (#30150) 2024-03-28 03:13:42 +00:00
server.go Fix duplicate sub-path for avatars (#31365) 2024-06-15 11:43:57 +08:00
service_test.go Fix allowed user types setting problem (#26200) 2023-07-28 12:15:39 -04:00
service.go Add reverseproxy auth for API back with default disabled (#26703) 2023-09-07 08:31:46 +00:00
session.go Refactor startup deprecation messages (#30305) 2024-04-07 01:11:25 +00:00
setting_test.go Implement FSFE REUSE for golang files (#21840) 2022-11-27 18:20:29 +00:00
setting.go Fix duplicate sub-path for avatars (#31365) 2024-06-15 11:43:57 +08:00
ssh.go Expanded minimum RSA Keylength to 3072 (#26604) 2023-08-28 00:53:16 +00:00
storage_test.go
storage.go Enable unparam linter (#31277) 2024-06-11 18:47:45 +00:00
task.go
time.go
ui.go Add MAX_ROWS option for CSV rendering (#30268) 2024-06-06 16:06:59 +08:00
webhook.go Refactor the setting to make unit test easier (#22405) 2023-02-20 00:12:01 +08:00