Find a file
Michael Hanke d927cc5336 Elevate external markup renderer interface for annexed file content (#36)
Previously, an external renderer that matched on an annexed file would
only see its content streamed via `STDIN`, or a temporary file with a copy
of its content would be generated and passed-by-filepath (with
`IS_INPUT_FILE=true`). Whether that happens, is also subject to
`MAX_DISPLAY_FILE_SIZE` (which defaults to 8MB).

This was problematic, because annexed files tend to be large. Moreover,
if present, they already exist as write-protected files on the
file-system. Creating a copy is both expensive and serves no particular
purpose.

This commit changes how external renderers are called.

1) With `IS_INPUT_FILE=true`, the renderer is passed the true location
   of an annex key, if present, and an empty path, if not.
2) The original, repository-relative path of the rendering target is
   made available to the renderer via the `GITEA_RELATIVE_PATH`
   environment variable.

To achieve a lean implementation, the `Blob` of the rendering target
is passed on to the `RenderContext` (because the implementation of
the annex-related functionality is centered on this dtype.

This change makes it less costly to increase `MAX_DISPLAY_FILE_SIZE`,
in order to make large, annexed files eligible for markup rendering,
because no content copies will be made any longer.

External renderers can now use the original file path, with the full
original filename, including extensions, for decision making. For
example, to detect particular compression formats based in a file name
extension, or to alter the rendering based on contextual information
encoded in the file path (e.g., a multi-file data structure with a
particular organization pattern).

Apart from the additional environment variable, there is no change to
the handling of renderers that take their input via `STDIN` (i.e.,
`IS_INPUT_FILE=false`).

Fixes #35.

Reviewed-on: https://codeberg.org/matrss/forgejo-aneksajo/pulls/36
Reviewed-by: matrss <matrss@noreply.codeberg.org>
Co-authored-by: Michael Hanke <michael.hanke@gmail.com>
Co-committed-by: Michael Hanke <michael.hanke@gmail.com>
2024-11-06 13:11:30 +01:00
.devcontainer Update golang packages 2024-08-21 09:58:16 +00:00
.forgejo Fix failing tests 2024-11-06 13:09:22 +01:00
assets chore(build): use a stable mirror for go-libravatar 2024-09-14 09:58:49 +02:00
build Forgejo v9.0 is GPLv3+ 2024-08-22 09:09:29 +02:00
cmd Error if git-annex is enabled but missing (#16) 2024-11-06 13:10:56 +01:00
contrib Update module github.com/google/go-github/v63 to v64 2024-08-24 16:05:36 +00:00
custom/conf git-annex: add configuration setting [annex].ENABLED 2024-11-06 13:09:22 +01:00
docker fix(Dockerfile.rootless): revert to default path for app.ini 2024-04-26 21:30:10 +02:00
models fix: use buffered iterate for debian searchpackages 2024-10-27 00:10:02 +00:00
modules Elevate external markup renderer interface for annexed file content (#36) 2024-11-06 13:11:30 +01:00
options Improve views for annexed but missing files (#28) 2024-11-06 13:11:30 +01:00
public link to security policy in security.txt 2024-10-22 16:51:21 +00:00
release-notes Merge pull request '[v9.0/forgejo] use constant time check for internal token' (#5724) from bp-v9.0/forgejo-53231ba into v9.0/forgejo 2024-10-28 08:03:48 +00:00
releases/images [DOCS] RELEASE-NOTES.md 2024-02-05 14:44:32 +01:00
routers Elevate external markup renderer interface for annexed file content (#36) 2024-11-06 13:11:30 +01:00
services Git-annex web uploads (#21) 2024-11-06 13:10:56 +01:00
templates Improve views for annexed but missing files (#28) 2024-11-06 13:11:30 +01:00
tests Change the icon for annexed files to file-binary (#29) 2024-11-06 13:11:30 +01:00
tools Adjust codespell config + make it fix few typos which sneaked in since addition of codespell support (#4857) 2024-08-08 16:07:35 +00:00
web_src Change the icon for annexed files to file-binary (#29) 2024-11-06 13:11:30 +01:00
.air.toml Reduce air verbosity (#31417) 2024-06-23 12:30:09 +02:00
.deadcode-out [DEADCODE] update 2024-09-14 18:58:51 +02:00
.dockerignore Add /public/assets/img/webpack to ignore files again (#30451) 2024-04-15 20:01:36 +02:00
.editorconfig fixed indentation style in editorconfig for go.mod 2024-05-14 00:24:18 +02:00
.envrc Enable direnv (#31672) 2024-07-28 07:18:24 +02:00
.eslintrc.yaml chore: migrate eslint config 2024-09-25 08:34:57 +02:00
.gitattributes Add interface{} to any replacement to make fmt, exclude *.pb.go (#30461) 2024-04-15 20:01:36 +02:00
.gitignore Enable direnv (#31672) 2024-07-28 07:18:24 +02:00
.gitmodules cleanup(tests): remove manual testing submodule 2024-04-21 10:13:51 +02:00
.gitpod.yml Remove sqlite-viewer and using database client (#31223) 2024-06-09 11:13:39 +02:00
.golangci.yml style: reenable switch check 2024-08-18 15:19:01 +02:00
.ignore Add /options/license and /options/gitignore to .ignore (#30219) 2024-04-07 15:40:31 +02:00
.mailmap Add .mailmap with aliases for Unknwon (github.com/Unknwon) 2024-08-14 08:26:16 -04:00
.markdownlint.yaml Update JS dependencies (#28537) 2023-12-30 05:29:03 +00:00
.npmrc Upgrade to npm lockfile v3 and explicitely set it (#23561) 2023-03-18 19:38:10 +01:00
.release-notes-assistant.yaml feat(release-notes-assistant): diff of the change in preview 2024-07-25 22:32:14 +02:00
.spectral.yaml Add spectral linter for Swagger (#20321) 2022-07-11 18:07:16 -05:00
.yamllint.yaml fully replace drone with actions (#27556) 2023-10-11 06:39:32 +00:00
BSDmakefile Fix build errors on BSD (in BSDMakefile) (#27594) 2023-10-13 15:38:27 +00:00
build.go User/Org Feed render description as per web (#23887) 2023-04-04 04:39:47 +01:00
CODEOWNERS chore(CODEOWNERS): @earl-warren watches over all PRs 2024-08-20 08:24:48 +02:00
CONTRIBUTING.md docs: replace Developer Guide link with the new Contributor Guide one. 2024-08-26 13:22:39 +03:00
DCO Remove address from DCO (#22595) 2023-01-24 18:52:38 +00:00
Dockerfile Add git-annex to docker image 2024-11-06 13:10:56 +01:00
Dockerfile.rootless Add git-annex also to the rootless container (#24) 2024-11-06 13:10:56 +01:00
flake.lock Fix update flake (#31626) 2024-07-14 11:35:15 +02:00
flake.nix Fix update flake (#31626) 2024-07-14 11:35:15 +02:00
go.mod Update dependency go to v1.23.2 2024-10-15 00:07:24 +00:00
go.sum Update module github.com/minio/minio-go/v7 to v7.0.77 2024-09-29 12:03:27 +00:00
LICENSE Forgejo v9.0 is GPLv3+ 2024-08-22 09:09:29 +02:00
main.go [RELEASE] decouple the release name from the version number 2024-02-17 15:27:35 +01:00
Makefile git-annex tests 2024-11-06 13:08:26 +01:00
package-lock.json Fix name in package-lock.json 2024-11-06 13:07:33 +01:00
package.json Update dependency mermaid to v11.3.0 2024-10-19 20:03:44 +00:00
playwright.config.js Parallelize playwright tests 2024-09-11 16:53:51 +02:00
poetry.lock Lock file maintenance 2024-09-25 10:15:02 +02:00
poetry.toml Clean up pyproject.toml and package.json, fix poetry options (#25327) 2023-06-18 18:13:08 +00:00
pyproject.toml Update dependency djlint to v1.35.2 2024-08-30 02:04:02 +00:00
README.md Forgejo v9.0 is GPLv3+ 2024-08-22 09:09:29 +02:00
release-notes-assistant.sh fix(release-notes-assistant): categorize multiline drafts & cleanup 2024-08-01 20:56:34 +02:00
RELEASE-NOTES.md docs: add links to the v7.0.9 & v8.0.3 release notes 2024-09-06 14:44:43 +02:00
renovate.json chore(renovate): disable renovate self-updates on release branches 2024-09-16 08:39:26 +02:00
stylelint.config.js Merge pull request 'Port "Enable declaration-block-no-redundant-longhand-properties (#30950)' (#3769) from beowulf/gitea-port-pull-30950 into forgejo 2024-05-14 22:23:54 +00:00
tailwind.config.js fix: Do not scan all Go files for tailwind classes 2024-08-24 15:45:50 +02:00
vitest.config.js feat(ui): add more emoji and code block rendering in issues 2024-09-24 14:20:33 +02:00
webpack.config.js chore: Fix import 2024-09-01 00:11:09 +02:00

Welcome to Forgejo

Hi there! Tired of big platforms playing monopoly? Providing Git hosting for your project, friends, company or community? Forgejo (/for'd͡ʒe.jo/ inspired by forĝejo the Esperanto word for forge) has you covered with its intuitive interface, light and easy hosting and a lot of builtin functionality.

Forgejo was created in 2022 because we think that the project should be owned by an independent community. If you second that, then Forgejo is for you! Our promise: Independent Free/Libre Software forever!

What does Forgejo offer?

If you like any of the following, Forgejo is literally meant for you:

  • Lightweight: Forgejo can easily be hosted on nearly every machine. Running on a Raspberry? Small cloud instance? No problem!
  • Project management: Besides Git hosting, Forgejo offers issues, pull requests, wikis, kanban boards and much more to coordinate with your team.
  • Publishing: Have something to share? Use releases to host your software for download, or use the package registry to publish it for docker, npm and many other package managers.
  • Customizable: Want to change your look? Change some settings? There are many config switches to make Forgejo work exactly like you want.
  • Powerful: Organizations & team permissions, CI integration, Code Search, LDAP, OAuth and much more. If you have advanced needs, Forgejo has you covered.
  • Privacy: From update checker to default settings: Forgejo is built to be privacy first for you and your crew.
  • Federation: (WIP) We are actively working to connect software forges with each other through ActivityPub, and create a collaborative network of personal instances.

Learn more

Dive into the documentation, subscribe to releases and blog post on our website, find us on the Fediverse or hop into our Matrix room if you have any questions or want to get involved.

License

Forgejo is distributed under the terms of the GPL version 3.0 or any later version.

The agreement for this license was documented in June 2023 and implemented during the development of Forgejo v9.0. All Forgejo versions before v9.0 are distributed under the MIT license.

Get involved

If you are interested in making Forgejo better, either by reporting a bug or by changing the governance, please take a look at the contribution guide.