feat(issue-search): support query syntax #9109

Merged
Gusted merged 5 commits from snematoda/issue-search-syntax-filters into forgejo 2025-11-19 16:05:44 +01:00 AGit
Member

List of currently supported filters:

  • is:open (or -is:closed)
  • is:closed (or -is:open)
  • is:all
  • author:<username>
  • assignee:<username>
  • review:<username>
  • mentions:<username>
  • modified:[>|<]<date>, where <date> is the last update date.
  • sort:<by>:[asc|desc], where <by> is among
    • created
    • comments
    • updated
    • deadline

Release notes

  • Features
    • PR: feat(issue-search): support query syntax
List of currently supported filters: - `is:open` (or `-is:closed`) - `is:closed` (or `-is:open`) - `is:all` - `author:<username>` - `assignee:<username>` - `review:<username>` - `mentions:<username>` - `modified:[>|<]<date>`, where `<date>` is the last update date. - `sort:<by>:[asc|desc]`, where `<by>` is among - created - comments - updated - deadline <!--start release-notes-assistant--> ## Release notes <!--URL:https://codeberg.org/forgejo/forgejo--> - Features - [PR](https://codeberg.org/forgejo/forgejo/pulls/9109): <!--number 9109 --><!--line 0 --><!--description ZmVhdChpc3N1ZS1zZWFyY2gpOiBzdXBwb3J0IHF1ZXJ5IHN5bnRheA==-->feat(issue-search): support query syntax<!--description--> <!--end release-notes-assistant-->
snematoda force-pushed snematoda/issue-search-syntax-filters from dfe7b8bb0e
Some checks failed
testing / frontend-checks (pull_request) Successful in 1m9s
testing / backend-checks (pull_request) Failing after 1m23s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
issue-labels / backporting (pull_request_target) Has been skipped
requirements / merge-conditions (pull_request) Failing after 3s
issue-labels / cascade (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Has been skipped
to 264b618df4
Some checks failed
requirements / merge-conditions (pull_request) Failing after 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m57s
testing / backend-checks (pull_request) Failing after 2m8s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
2025-09-01 14:29:27 +02:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from 264b618df4
Some checks failed
requirements / merge-conditions (pull_request) Failing after 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m57s
testing / backend-checks (pull_request) Failing after 2m8s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
to 6c014113fa
Some checks failed
requirements / merge-conditions (pull_request) Failing after 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m52s
testing / backend-checks (pull_request) Failing after 2m3s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
2025-09-01 14:34:42 +02:00
Compare
Owner

Thank you very much. Would it make sense to allow differentiating closed and merged PRs? E.g.

is:closed includes closed issues, closed PRs and merged PRs
is:merged includes merged PRs
is:rejected includes PRs which are closed without merging

I don't know if the term "rejected" sits right with me. Maybe -is:merged and is:closed together is good enough until we have evidence this is a common need.

Thank you very much. Would it make sense to allow differentiating closed and merged PRs? E.g. is:closed includes closed issues, closed PRs and merged PRs is:merged includes merged PRs is:rejected includes PRs which are closed without merging I don't know if the term "rejected" sits right with me. Maybe `-is:merged` and `is:closed` together is good enough until we have evidence this is a common need.
Author
Member

@fnetX wrote in #9109 (comment):

Thank you very much. Would it make sense to allow differentiating closed and merged PRs? E.g.

is:closed includes closed issues, closed PRs and merged PRs is:merged includes merged PRs is:rejected includes PRs which are closed without merging

I don't know if the term "rejected" sits right with me. Maybe -is:merged and is:closed together is good enough until we have evidence this is a common need.

is:merged and -is:merged sounds like a fine addition!

Unfortunately, there is no field indicating the status among IndexerData... I would prefer taking on that challenge on a different PR as a part 2 of this one ;)

@fnetX wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6844114: > Thank you very much. Would it make sense to allow differentiating closed and merged PRs? E.g. > > is:closed includes closed issues, closed PRs and merged PRs is:merged includes merged PRs is:rejected includes PRs which are closed without merging > > I don't know if the term "rejected" sits right with me. Maybe `-is:merged` and `is:closed` together is good enough until we have evidence this is a common need. `is:merged` and `-is:merged` sounds like a fine addition! Unfortunately, there is no field indicating the status among `IndexerData`... I would prefer taking on that challenge on a different PR as a part 2 of this one ;)
Owner

Further, I'm a little concerned that "before" and "after" refer to the updated dates. Changing the behaviour afterwards might also be bad. Is another platform doing it this way?

I could imagine that something like the following variants could be more intuitive:

  • modified:<2025-03-28 and modified:>2025-03-28
  • modified:*-2025-03-28, modified:2025-03-28-* and modified:2025-03-28-2025-04-19 for a range (although the double usage of hypen is unfortunate here)

In the future, the same behaviour could be added for created:, closed:, merged: or something like this if we want.

Further, I'm a little concerned that "before" and "after" refer to the updated dates. Changing the behaviour afterwards might also be bad. Is another platform doing it this way? I could imagine that something like the following variants could be more intuitive: * `modified:<2025-03-28` and `modified:>2025-03-28` * `modified:*-2025-03-28`, `modified:2025-03-28-*` and `modified:2025-03-28-2025-04-19` for a range (although the double usage of hypen is unfortunate here) In the future, the same behaviour could be added for `created:`, `closed:`, `merged:` or something like this if we want.
Member

@snematoda wrote in #9109 (comment):

  • is:open / -is:closed
  • is:closed / -is:open
  • is:all

What's the purpose of all those variations? I don't really see the need. And I do expect people to get confused (what should -is:open is:all is:open do?)
I'd say:

  • only keep is:open and is:closed
  • if no is: is present, show all entries
  • if both are present, show all
    • given that they are mutually exclusive states, an "and" combination wouldn't make sense
  • so only if one of two is present, filter for that state

Unless you're planning to add more fine-grained statuses, like is:locked. Exclusion does make sense once you have more than two states.

@snematoda wrote in #9109 (comment):

  • sort:<by>, where <by> is among latest/oldest/recentupdate/leastupdate/mostcomment/nearduedate/farduedate

Having a different set of prefixes (recent/least, near/far, ...) for every field is rather confusing. I think sort:<by>:asc or sort:asc:<by> would be more intuitive and easier to remember. It also avoids ambiguities like "does leastupdate mean 'least amount of updates' or 'least recently updated'".

@snematoda wrote in #9109 (comment):

  • after:<date>/before:<date>, where <date> is the update date (not the created date)

You could copy Bleve's syntax to support more than one date field:

  • created:>2016
  • updated:<2025-08-01

Other potential fields:

  • participated:<user>
  • type:issue/type:pr
  • label:bug/confirmed
  • due-in:10d

As for what sparked this, additional things that Bleve/Elasticsearch are capable of:

  • Field searches, e.g. different search terms for title and description
  • regular expressions
  • boosting: give a certain field higher priority
  • boolean operators for all search terms
@snematoda wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issue-2279722: > * `is:open` / `-is:closed` > * `is:closed` / `-is:open` > * `is:all` What's the purpose of all those variations? I don't really see the need. And I do expect people to get confused (what should `-is:open is:all is:open` do?) I'd say: - only keep `is:open` and `is:closed` - if no `is:` is present, show all entries - if both are present, show all - given that they are mutually exclusive states, an "and" combination wouldn't make sense - so only if one of two is present, filter for that state Unless you're planning to add more fine-grained statuses, like `is:locked`. Exclusion does make sense once you have more than two states. @snematoda wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issue-2279722: > * `sort:<by>`, where `<by>` is among `latest`/`oldest`/`recentupdate`/`leastupdate`/`mostcomment`/`nearduedate`/`farduedate` Having a different set of prefixes (`recent`/`least`, `near`/`far`, ...) for every field is rather confusing. I think `sort:<by>:asc` or `sort:asc:<by>` would be more intuitive and easier to remember. It also avoids ambiguities like "does `leastupdate` mean 'least amount of updates' or 'least recently updated'". @snematoda wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issue-2279722: > * `after:<date>`/`before:<date>`, where `<date>` is the update date (not the created date) You could copy Bleve's syntax to support more than one date field: - `created:>2016` - `updated:<2025-08-01` --- Other potential fields: - `participated:<user>` - `type:issue`/`type:pr` - `label:bug/confirmed` - `due-in:10d` --- As for what sparked this, additional things that Bleve/Elasticsearch are capable of: - Field searches, e.g. different search terms for `title` and `description` - regular expressions - boosting: give a certain field higher priority - boolean operators for all search terms
Author
Member

@fnetX wrote in #9109 (comment):

Further, I'm a little concerned that "before" and "after" refer to the updated dates. Changing the behaviour afterwards might also be bad. Is another platform doing it this way?

I could imagine that something like the following variants could be more intuitive:

* `modified:<2025-03-28` and `modified:>2025-03-28`

That looks much more clearer! Will change!

* `modified:*-2025-03-28`, `modified:2025-03-28-*` and `modified:2025-03-28-2025-04-19` for a range (although the double usage of hypen is unfortunate here)

Wouldn't, modified:>2025-03-28 modified:<2025-04-19 suffice in this case :)

@fnetX wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6844789: > Further, I'm a little concerned that "before" and "after" refer to the updated dates. Changing the behaviour afterwards might also be bad. Is another platform doing it this way? > > I could imagine that something like the following variants could be more intuitive: > > * `modified:<2025-03-28` and `modified:>2025-03-28` That looks much more clearer! Will change! > > * `modified:*-2025-03-28`, `modified:2025-03-28-*` and `modified:2025-03-28-2025-04-19` for a range (although the double usage of hypen is unfortunate here) > Wouldn't, `modified:>2025-03-28 modified:<2025-04-19` suffice in this case :)
Author
Member

@sclu1034 wrote in #9109 (comment):

What's the purpose of all those variations? I don't really see the need. And I do expect people to get confused (what should -is:open is:all is:open do?)

Currently for this case only the last one would be considered... in the above example it would be is:open...

  • only keep is:open and is:closed

  • if no is: is present, show all entries

One issue with this, is that the dropdowns and switches are still present, the query syntax works along with them.
I'm afraid whether showing all the entries would conflict with the current default of showing only the open requestes unless a specific option is specified...

  • if both are present, show all

    • given that they are mutually exclusive states, an "and" combination wouldn't make sense
  • so only if one of two is present, filter for that state

is:open is:closed => is:all does sound logical :)
Will change, i still prefer retaining is:all... not really a must but it's much shorter to type ;)

@sclu1034 wrote in #9109 (comment):

Having a different set of prefixes (recent/least, near/far, ...) for every field is rather confusing. I think sort:<by>:asc or sort:asc:<by> would be more intuitive and easier to remember. It also avoids ambiguities like "does leastupdate mean 'least amount of updates' or 'least recently updated'".

Sound great, Will change!

You could copy Bleve's syntax to support more than one date field:

* `created:>2016`

* `updated:<2025-08-01`

Similar to the is:merged suggestion above, the creation date is sadly not stored on the indexer... so i'll put created: on the part 2 pile :)

@sclu1034 wrote in #9109 (comment):

  • type:issue/type:pr

The search box is still divided into two so it does not make much sense to add these filters now... Might be best to them when a unified search box is added :D

@sclu1034 wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6844849: > What's the purpose of all those variations? I don't really see the need. And I do expect people to get confused (what should `-is:open is:all is:open` do?) Currently for this case only the last one would be considered... in the above example it would be `is:open`... > * only keep `is:open` and `is:closed` > > * if no `is:` is present, show all entries > One issue with this, is that the dropdowns and switches are still present, the query syntax works along with them. I'm afraid whether showing all the entries would conflict with the current default of showing only the open requestes unless a specific option is specified... > * if both are present, show all > > * given that they are mutually exclusive states, an "and" combination wouldn't make sense > > * so only if one of two is present, filter for that state `is:open is:closed` => `is:all` does sound logical :) Will change, i still prefer retaining `is:all`... not really a must but it's much shorter to type ;) @sclu1034 wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6844849: > Having a different set of prefixes (`recent`/`least`, `near`/`far`, ...) for every field is rather confusing. I think `sort:<by>:asc` or `sort:asc:<by>` would be more intuitive and easier to remember. It also avoids ambiguities like "does `leastupdate` mean 'least amount of updates' or 'least recently updated'". Sound great, Will change! > You could copy Bleve's syntax to support more than one date field: > > * `created:>2016` > > * `updated:<2025-08-01` Similar to the `is:merged` suggestion above, the creation date is sadly not stored on the indexer... so i'll put `created:` on the part 2 pile :) @sclu1034 wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6844849: > * `type:issue`/`type:pr` The search box is still divided into two so it does not make much sense to add these filters now... Might be best to them when a unified search box is added :D
feat(issue-search): replace after: and before: with modified:
Some checks failed
issue-labels / release-notes (pull_request_target) Has been skipped
requirements / merge-conditions (pull_request) Failing after 20s
testing / frontend-checks (pull_request) Successful in 1m29s
testing / backend-checks (pull_request) Failing after 2m16s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
37ec57fbce
Member

@snematoda wrote in #9109 (comment):

I'm afraid whether showing all the entries would conflict with the current default of showing only the open requestes unless a specific option is specified...

The default query could be adjusted to include whatever is needed to be in sync with the default state of the switches/dropdown. GitHub, similarly, has is:open in their default query string.

@snematoda wrote in #9109 (comment):

is:open is:closed => is:all does sound logical :)
Will change, i still prefer retaining is:all... not really a must but it's much shorter to type ;)

It only really makes sense as an exception as long as open and close are the only two states. If others like is:merged or is:locked are planned (even just for a future addition), I would keep is:open and is:close mutually exclusive to make sure they fit in when the rest is added.

@snematoda wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6845494: > I'm afraid whether showing all the entries would conflict with the current default of showing only the open requestes unless a specific option is specified... The default query could be adjusted to include whatever is needed to be in sync with the default state of the switches/dropdown. GitHub, similarly, has `is:open` in their default query string. @snematoda wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6845494: > `is:open is:closed` => `is:all` does sound logical :) > Will change, i still prefer retaining `is:all`... not really a must but it's much shorter to type ;) It only really makes sense as an exception as long as `open` and `close` are the only two states. If others like `is:merged` or `is:locked` are planned (even just for a future addition), I would keep `is:open` and `is:close` mutually exclusive to make sure they fit in when the rest is added.
enh(issue-search): replace sort filters with negation
Some checks failed
requirements / merge-conditions (pull_request) Failing after 3s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m28s
testing / backend-checks (pull_request) Failing after 1m33s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
57eae7718c
Current syntax, [-]?sort:<by>
Where, <by> is one of,
- created
- comments
- updated
- deadline

+sort:<by>, sort:<by> => asc
-sort:<by> => desc
@ -116,0 +162,4 @@
// [-]sort:<by>,
// for example, sort:created / -sort:comments
case token.IsOf("sort:"):
o.SortBy = parseSortBy(token.Term[5:], token.Kind != BoolOptNot)
Member

Using - for the sort direction is really confusing in my opinion. Especially when the same symbol is already used for a completely different meaning in the same query.

Does an extra part in the string, like sort:asc:<by>, not work?

Using `-` for the sort direction is really confusing in my opinion. Especially when the same symbol is already used for a completely different meaning in the same query. Does an extra part in the string, like `sort:asc:<by>`, not work?
Author
Member

I suppose that works much better :)

I suppose that works much better :)
snematoda marked this conversation as resolved
Author
Member

Removed after: and before: in favor of modified: :)


Current syntax for sort:

+sort:<by>, sort:<by> => asc
-sort:<by> => desc

Where, <by> is one of,

  • created
  • comments
  • updated
  • deadline
  • [...] => score

It only really makes sense as an exception as long as open and close are the only two states. If others like is:merged or is:locked are planned (even just for a future addition), I would keep is:open and is:close mutually exclusive to make sure they fit in when the rest is added.

while not on the current short term i do hope to follow up the PR... perhaps it's best left as-is...


The default query could be adjusted to include whatever is needed to be in sync with the default state of the switches/dropdown. GitHub, similarly, has is:open in their default query string.

A fair idea, but a bit of a sticky solution imho as it does require a bit of client side js :)

Removed `after:` and `before:` in favor of `modified:` :) --- ~~Current syntax for sort:~~ ~~`+sort:<by>`, `sort:<by>` => asc~~ ~~`-sort:<by>` => desc~~ ~~Where, `<by>` is one of,~~ - ~~created~~ - ~~comments~~ - ~~updated~~ - ~~deadline~~ - ~~[...] => score~~ --- > It only really makes sense as an exception as long as `open` and `close` are the only two states. If others like `is:merged` or `is:locked` are planned (even just for a future addition), I would keep `is:open` and `is:close` mutually exclusive to make sure they fit in when the rest is added. while not on the current short term i do hope to follow up the PR... perhaps it's best left as-is... --- > The default query could be adjusted to include whatever is needed to be in sync with the default state of the switches/dropdown. GitHub, similarly, has is:open in their default query string. A fair idea, but a bit of a sticky solution imho as it does require a bit of client side js :)
enh: refactor sort to use :asc/:desc instead
Some checks failed
requirements / merge-conditions (pull_request) Failing after 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m4s
testing / backend-checks (pull_request) Failing after 1m49s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
c7f0b74dd4
Member

@snematoda wrote in #9109 (comment):

A fair idea, but a bit of a sticky solution imho as it does require a bit of client side js :)

Populating the value attribute in the template should be enough.

@snematoda wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6846106: > A fair idea, but a bit of a sticky solution imho as it does require a bit of client side js :) Populating the `value` attribute in the template should be enough.
test(issue-search): add test for sort: in qstring
Some checks failed
requirements / merge-conditions (pull_request) Failing after 3s
testing / frontend-checks (pull_request) Successful in 1m6s
testing / backend-checks (pull_request) Failing after 1m46s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
Integration tests for the release process / release-simulation (pull_request) Successful in 5m2s
6b768391ee
Author
Member

@sclu1034 wrote in #9109 (comment):

@snematoda wrote in #9109 (comment):

A fair idea, but a bit of a sticky solution imho as it does require a bit of client side js :)

Populating the value attribute in the template should be enough.

gave it a go yesterday, i just couldn't get it to a state i was happy with... :/
dropping it for now...

@sclu1034 wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-6849304: > @snematoda wrote in #9109 (comment): > > > A fair idea, but a bit of a sticky solution imho as it does require a bit of client side js :) > > Populating the `value` attribute in the template should be enough. gave it a go yesterday, i just couldn't get it to a state i was happy with... :/ dropping it for now...
test(issue-search): add integration tests for query filters
Some checks failed
testing / frontend-checks (pull_request) Successful in 59s
testing / backend-checks (pull_request) Failing after 2m6s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
requirements / merge-conditions (pull_request) Failing after 2s
issue-labels / backporting (pull_request_target) Has been skipped
issue-labels / cascade (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Has been skipped
Integration tests for the release process / release-simulation (pull_request) Successful in 5m20s
a232daed6c
fix RemoveAllStr and added tests
Some checks failed
requirements / merge-conditions (pull_request) Failing after 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 59s
testing / backend-checks (pull_request) Failing after 2m5s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
Integration tests for the release process / release-simulation (pull_request) Successful in 5m27s
9279f7e8de
added more integration tests
Some checks are pending
Integration tests for the release process / release-simulation (pull_request) Blocked by required conditions
requirements / merge-conditions (pull_request) Blocked by required conditions
testing / backend-checks (pull_request) Blocked by required conditions
testing / frontend-checks (pull_request) Blocked by required conditions
testing / test-unit (pull_request) Blocked by required conditions
testing / test-e2e (pull_request) Blocked by required conditions
testing / test-remote-cacher (redis) (pull_request) Blocked by required conditions
testing / test-remote-cacher (valkey) (pull_request) Blocked by required conditions
testing / test-remote-cacher (garnet) (pull_request) Blocked by required conditions
testing / test-remote-cacher (redict) (pull_request) Blocked by required conditions
testing / test-mysql (pull_request) Blocked by required conditions
testing / test-pgsql (pull_request) Blocked by required conditions
testing / test-sqlite (pull_request) Blocked by required conditions
testing / security-check (pull_request) Blocked by required conditions
issue-labels / backporting (pull_request_target) Has been skipped
milestone / set (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Has been skipped
913b6e3e14
Owner

For some reason, the latest CI runs are broken. According to https://codeberg.org/forgejo/forgejo/actions?workflow=&actor=0&status=5, they have been pushed by Ghost, but why does it prevent them from running? I can't kick them manually.

image

For some reason, the latest CI runs are broken. According to https://codeberg.org/forgejo/forgejo/actions?workflow=&actor=0&status=5, they have been pushed by Ghost, but why does it prevent them from running? I can't kick them manually. ![image](/attachments/7fdde0c6-3736-408f-991a-1e41fe83713b)
Author
Member

@fnetX wrote in #9109 (comment):

For some reason, the latest CI runs are broken. According to https://codeberg.org/forgejo/forgejo/actions?workflow=&actor=0&status=5, they have been pushed by Ghost, but why does it prevent them from running? I can't kick them manually.

image

My bad 🙈... #9371 has the relevant details...

@fnetX wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-7362421: > For some reason, the latest CI runs are broken. According to https://codeberg.org/forgejo/forgejo/actions?workflow=&actor=0&status=5, they have been pushed by Ghost, but why does it prevent them from running? I can't kick them manually. > > [![image](/attachments/7fdde0c6-3736-408f-991a-1e41fe83713b)](/forgejo/forgejo/attachments/7fdde0c6-3736-408f-991a-1e41fe83713b) My bad 🙈... #9371 has the relevant details...
snematoda force-pushed snematoda/issue-search-syntax-filters from b7e8e3e918
Some checks failed
requirements / merge-conditions (pull_request) Failing after 3s
issue-labels / backporting (pull_request_target) Has been skipped
issue-labels / cascade (pull_request_target) Has been skipped
issue-labels / release-notes (pull_request_target) Has been skipped
Integration tests for the release process / release-simulation (pull_request) Successful in 4m54s
to 174718f786
Some checks failed
requirements / merge-conditions (pull_request) Successful in 2s
testing / frontend-checks (pull_request) Successful in 1m4s
testing / backend-checks (pull_request) Failing after 1m24s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
2025-10-02 06:51:02 +02:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from 6ba2a7738b
Some checks failed
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m45s
testing / backend-checks (pull_request) Successful in 5m11s
testing / test-unit (pull_request) Failing after 9m9s
testing / test-mysql (pull_request) Failing after 23m22s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-e2e (pull_request) Successful in 25m58s
testing / test-sqlite (pull_request) Failing after 28m35s
testing / test-pgsql (pull_request) Failing after 32m42s
testing / security-check (pull_request) Has been skipped
to 45817a26e5
Some checks failed
testing / frontend-checks (pull_request) Successful in 1m17s
testing / backend-checks (pull_request) Successful in 3m13s
testing / test-unit (pull_request) Failing after 5m54s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Failing after 19m57s
testing / test-e2e (pull_request) Successful in 22m27s
testing / test-sqlite (pull_request) Failing after 26m21s
testing / test-pgsql (pull_request) Failing after 30m22s
testing / security-check (pull_request) Has been skipped
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Has been skipped
2025-10-04 17:38:17 +02:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from 45817a26e5
Some checks failed
testing / frontend-checks (pull_request) Successful in 1m17s
testing / backend-checks (pull_request) Successful in 3m13s
testing / test-unit (pull_request) Failing after 5m54s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Failing after 19m57s
testing / test-e2e (pull_request) Successful in 22m27s
testing / test-sqlite (pull_request) Failing after 26m21s
testing / test-pgsql (pull_request) Failing after 30m22s
testing / security-check (pull_request) Has been skipped
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Has been skipped
to 5663459550
Some checks failed
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m2s
testing / backend-checks (pull_request) Successful in 6m4s
Integration tests for the release process / release-simulation (pull_request) Successful in 6m41s
testing / test-unit (pull_request) Failing after 15m46s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Failing after 32m10s
testing / test-e2e (pull_request) Successful in 33m57s
testing / test-sqlite (pull_request) Failing after 36m11s
testing / test-pgsql (pull_request) Failing after 39m46s
testing / security-check (pull_request) Has been skipped
2025-10-12 12:16:30 +02:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from 5663459550
Some checks failed
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m2s
testing / backend-checks (pull_request) Successful in 6m4s
Integration tests for the release process / release-simulation (pull_request) Successful in 6m41s
testing / test-unit (pull_request) Failing after 15m46s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Failing after 32m10s
testing / test-e2e (pull_request) Successful in 33m57s
testing / test-sqlite (pull_request) Failing after 36m11s
testing / test-pgsql (pull_request) Failing after 39m46s
testing / security-check (pull_request) Has been skipped
to c0ee8900e5
Some checks failed
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m25s
testing / backend-checks (pull_request) Successful in 6m1s
Integration tests for the release process / release-simulation (pull_request) Failing after 8m35s
testing / test-unit (pull_request) Failing after 15m52s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Failing after 31m53s
testing / test-e2e (pull_request) Successful in 34m23s
testing / test-sqlite (pull_request) Failing after 36m12s
testing / test-pgsql (pull_request) Failing after 39m29s
testing / security-check (pull_request) Has been skipped
2025-10-12 12:17:36 +02:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from c0ee8900e5
Some checks failed
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / frontend-checks (pull_request) Successful in 1m25s
testing / backend-checks (pull_request) Successful in 6m1s
Integration tests for the release process / release-simulation (pull_request) Failing after 8m35s
testing / test-unit (pull_request) Failing after 15m52s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Failing after 31m53s
testing / test-e2e (pull_request) Successful in 34m23s
testing / test-sqlite (pull_request) Failing after 36m12s
testing / test-pgsql (pull_request) Failing after 39m29s
testing / security-check (pull_request) Has been skipped
to 6209f49b4d
All checks were successful
requirements / merge-conditions (pull_request) Successful in 2s
testing / frontend-checks (pull_request) Successful in 2m0s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / backend-checks (pull_request) Successful in 5m39s
Integration tests for the release process / release-simulation (pull_request) Successful in 7m52s
testing / test-unit (pull_request) Successful in 5m24s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m23s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m14s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m8s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m3s
testing / test-mysql (pull_request) Successful in 23m56s
testing / test-e2e (pull_request) Successful in 26m20s
testing / test-pgsql (pull_request) Successful in 31m57s
testing / test-sqlite (pull_request) Successful in 27m26s
testing / security-check (pull_request) Successful in 3m14s
2025-10-15 22:09:43 +02:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from 6209f49b4d
All checks were successful
requirements / merge-conditions (pull_request) Successful in 2s
testing / frontend-checks (pull_request) Successful in 2m0s
issue-labels / release-notes (pull_request_target) Has been skipped
testing / backend-checks (pull_request) Successful in 5m39s
Integration tests for the release process / release-simulation (pull_request) Successful in 7m52s
testing / test-unit (pull_request) Successful in 5m24s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m23s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m14s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m8s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m3s
testing / test-mysql (pull_request) Successful in 23m56s
testing / test-e2e (pull_request) Successful in 26m20s
testing / test-pgsql (pull_request) Successful in 31m57s
testing / test-sqlite (pull_request) Successful in 27m26s
testing / security-check (pull_request) Successful in 3m14s
to b67a92656b
All checks were successful
testing / frontend-checks (pull_request) Successful in 1m39s
testing / backend-checks (pull_request) Successful in 4m31s
testing / test-unit (pull_request) Successful in 6m55s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m36s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m36s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m40s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m41s
Integration tests for the release process / release-simulation (pull_request) Successful in 17m14s
testing / test-mysql (pull_request) Successful in 19m2s
testing / test-sqlite (pull_request) Successful in 24m27s
testing / test-pgsql (pull_request) Successful in 27m43s
testing / security-check (pull_request) Successful in 1m16s
testing / test-e2e (pull_request) Successful in 28m34s
issue-labels / backporting (pull_request_target) Has been skipped
issue-labels / cascade (pull_request_target) Has been skipped
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Successful in 40s
2025-10-16 14:12:09 +02:00
Compare
snematoda changed title from WIP: feat(issue-search): support query syntax to feat(issue-search): support query syntax 2025-10-16 14:45:02 +02:00
Owner

@fnetX Would this benefit from a modal with a description of the query syntax?

@fnetX Would this benefit from a modal with a description of the query syntax?
Where does that come from? The following is a preview of the release notes for this pull request, as they will appear in the upcoming release. They are derived from the content of the `release-notes/9109.md` file, if it exists, or the title of the pull request. They were also added at the bottom of the description of this pull request for easier reference.

This message and the release notes originate from a call to the release-notes-assistant.

@@ -13,3 +13,11 @@
 	- comments
 	- updated
-	- deadline
\ No newline at end of file
+	- deadline
+
+<!--start release-notes-assistant-->
+
+## Release notes
+<!--URL:https://codeberg.org/forgejo/forgejo-->
+- Features
+  - [PR](https://codeberg.org/forgejo/forgejo/pulls/9109): <!--number 9109 --><!--line 0 --><!--description ZmVhdChpc3N1ZS1zZWFyY2gpOiBzdXBwb3J0IHF1ZXJ5IHN5bnRheA==-->feat(issue-search): support query syntax<!--description-->
+<!--end release-notes-assistant-->

Release notes

  • Features
    • PR: feat(issue-search): support query syntax
<details> <summary>Where does that come from?</summary> The following is a preview of the release notes for this pull request, as they will appear in the upcoming release. They are derived from the content of the `release-notes/9109.md` file, if it exists, or the title of the pull request. They were also added at the bottom of the description of this pull request for easier reference. This message and the release notes originate from a call to the [release-notes-assistant](https://code.forgejo.org/forgejo/release-notes-assistant). ```diff @@ -13,3 +13,11 @@ - comments - updated - - deadline \ No newline at end of file + - deadline + +<!--start release-notes-assistant--> + +## Release notes +<!--URL:https://codeberg.org/forgejo/forgejo--> +- Features + - [PR](https://codeberg.org/forgejo/forgejo/pulls/9109): <!--number 9109 --><!--line 0 --><!--description ZmVhdChpc3N1ZS1zZWFyY2gpOiBzdXBwb3J0IHF1ZXJ5IHN5bnRheA==-->feat(issue-search): support query syntax<!--description--> +<!--end release-notes-assistant--> ``` </details> <!--start release-notes-assistant--> ## Release notes <!--URL:https://codeberg.org/forgejo/forgejo--> - Features - [PR](https://codeberg.org/forgejo/forgejo/pulls/9109): <!--number 9109 --><!--line 0 --><!--description ZmVhdChpc3N1ZS1zZWFyY2gpOiBzdXBwb3J0IHF1ZXJ5IHN5bnRheA==-->feat(issue-search): support query syntax<!--description--> <!--end release-notes-assistant-->
Gusted left a comment
Owner

Some minor comments, the code looks quite good and not complicated at all for this great feature great job!

Some minor comments, the code looks quite good and not complicated at all for this great feature great job!
@ -164,3 +160,1 @@
if len(tokens) > 0 {
q := bleve.NewBooleanQuery()
for _, token := range tokens {
if len(options.Tokens) != 0 {
Owner

This if condition can be dropped it seems, if len(options.Tokens) == 0 then the loop is not run.

This if condition can be dropped it seems, if `len(options.Tokens) == 0` then the loop is not run.
Author
Member

Nice catch! fixed...

Nice catch! fixed...
snematoda marked this conversation as resolved
@ -187,2 +187,3 @@
queries = append(queries, q)
}
// TODO: replace with following with filters
// https://github.com/blevesearch/bleve/pull/2220
Owner

#9780 this now available.

https://codeberg.org/forgejo/forgejo/pulls/9780 this now available.
Author
Member

Updated :)

Updated :)
snematoda marked this conversation as resolved
@ -82,3 +64,2 @@
cond = builder.Or(
builder.Eq{"`index`": issueID},
cond,
db.BuildCaseInsensitiveLike("issue.name", options.Tokens[0].Term),
Owner

It seems that this loop will now generate quite a complex query when the only variant is db.BuildCaseInsensitiveLike("content", token.Term). Could the loop be reduced to that?

It seems that this loop will now generate quite a complex query when the only variant is `db.BuildCaseInsensitiveLike("content", token.Term)`. Could the loop be reduced to that?
Author
Member

options.Tokens[0] was a mistake on my part... my bad 🫣

The SQL query sadly still remains complex more than what i want it to be...

`options.Tokens[0]` was a mistake on my part... my bad 🫣 The SQL query sadly still remains complex more than what i want it to be...
Gusted marked this conversation as resolved
Owner

@Gusted wrote in #9109 (comment):

@fnetX Would this benefit from a modal with a description of the query syntax?

Yes, I think this would be a good case in the spirit of #8662. It makes sense to have it in-app rather than in an external documentation.

@Gusted wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-8004149: > @fnetX Would this benefit from a modal with a description of the query syntax? Yes, I think this would be a good case in the spirit of https://codeberg.org/forgejo/forgejo/pulls/8662. It makes sense to have it in-app rather than in an external documentation.
snematoda force-pushed snematoda/issue-search-syntax-filters from b67a92656b
All checks were successful
testing / frontend-checks (pull_request) Successful in 1m39s
testing / backend-checks (pull_request) Successful in 4m31s
testing / test-unit (pull_request) Successful in 6m55s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m36s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m36s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m40s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m41s
Integration tests for the release process / release-simulation (pull_request) Successful in 17m14s
testing / test-mysql (pull_request) Successful in 19m2s
testing / test-sqlite (pull_request) Successful in 24m27s
testing / test-pgsql (pull_request) Successful in 27m43s
testing / security-check (pull_request) Successful in 1m16s
testing / test-e2e (pull_request) Successful in 28m34s
issue-labels / backporting (pull_request_target) Has been skipped
issue-labels / cascade (pull_request_target) Has been skipped
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Successful in 40s
to 6c6cb3a9b6
Some checks failed
requirements / merge-conditions (pull_request) Successful in 2s
testing / frontend-checks (pull_request) Successful in 1m39s
testing / backend-checks (pull_request) Successful in 4m1s
testing / test-e2e (pull_request) Failing after 7m26s
testing / test-unit (pull_request) Failing after 8m24s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Successful in 22m43s
testing / test-sqlite (pull_request) Successful in 26m50s
testing / test-pgsql (pull_request) Successful in 30m18s
testing / security-check (pull_request) Has been skipped
2025-11-01 19:55:11 +01:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from 6c6cb3a9b6
Some checks failed
requirements / merge-conditions (pull_request) Successful in 2s
testing / frontend-checks (pull_request) Successful in 1m39s
testing / backend-checks (pull_request) Successful in 4m1s
testing / test-e2e (pull_request) Failing after 7m26s
testing / test-unit (pull_request) Failing after 8m24s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Successful in 22m43s
testing / test-sqlite (pull_request) Successful in 26m50s
testing / test-pgsql (pull_request) Successful in 30m18s
testing / security-check (pull_request) Has been skipped
to 2b3090ed49
Some checks failed
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / release-notes (pull_request_target) Successful in 35s
testing / frontend-checks (pull_request) Successful in 1m5s
testing / backend-checks (pull_request) Successful in 4m1s
testing / test-unit (pull_request) Failing after 5m45s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Successful in 18m52s
testing / test-e2e (pull_request) Successful in 22m38s
testing / test-sqlite (pull_request) Successful in 23m44s
testing / test-pgsql (pull_request) Successful in 26m33s
testing / security-check (pull_request) Has been skipped
2025-11-02 11:33:25 +01:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from 2b3090ed49
Some checks failed
requirements / merge-conditions (pull_request) Successful in 3s
issue-labels / release-notes (pull_request_target) Successful in 35s
testing / frontend-checks (pull_request) Successful in 1m5s
testing / backend-checks (pull_request) Successful in 4m1s
testing / test-unit (pull_request) Failing after 5m45s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Successful in 18m52s
testing / test-e2e (pull_request) Successful in 22m38s
testing / test-sqlite (pull_request) Successful in 23m44s
testing / test-pgsql (pull_request) Successful in 26m33s
testing / security-check (pull_request) Has been skipped
to 43959ce56e
Some checks failed
testing / frontend-checks (pull_request) Successful in 1m11s
testing / backend-checks (pull_request) Successful in 2m23s
testing / test-unit (pull_request) Failing after 5m35s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Successful in 19m3s
testing / test-e2e (pull_request) Successful in 22m23s
testing / test-sqlite (pull_request) Successful in 23m41s
testing / test-pgsql (pull_request) Successful in 27m37s
testing / security-check (pull_request) Has been skipped
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Successful in 31s
2025-11-02 13:20:09 +01:00
Compare
Owner

CI failure looks related.

CI failure looks related.
Owner

@fnetX wrote in #9109 (comment):

Yes, I think this would be a good case in the spirit of #8662. It makes sense to have it in-app rather than in an external documentation.

What would be a good place to add the help icon? The horizontal line that the search bar is on is already quite... packed

@fnetX wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-8036819: > Yes, I think this would be a good case in the spirit of #8662. It makes sense to have it in-app rather than in an external documentation. What would be a good place to add the help icon? The horizontal line that the search bar is on is already quite... packed
Owner

Hmm, that's a good question. Intuitively, I would have added it to the line after the search icon. On the other hand, it basically contains some of the filters that are added below, so a position before the filter buttons could also make sense ("these filters and switches can also be controlled via the search bar").

Hmm, that's a good question. Intuitively, I would have added it to the line after the search icon. On the other hand, it basically contains some of the filters that are added below, so a position before the filter buttons could also make sense ("these filters and switches can also be controlled via the search bar").
Author
Member

@Gusted wrote in #9109 (comment):

CI failure looks related.

Yes... after a bit of poking around.... seems like bleve's new Filter query is very flaky for slices...?

diff --git a/search_test.go b/search_test.go
index 4e98c6d..9479ef8 100644
--- a/search_test.go
+++ b/search_test.go
@@ -4558,11 +4558,16 @@ func TestFilteredBooleanQuery(t *testing.T) {
 	titleMapping := mapping.NewTextFieldMapping()
 	titleMapping.Analyzer = en.AnalyzerName
 
+	tagsMapping := mapping.NewNumericFieldMapping()
+	tagsMapping.Store = false
+	tagsMapping.IncludeInAll = false
+
 	priceMapping := mapping.NewNumericFieldMapping()
 	imap.DefaultMapping.AddFieldMappingsAt("genre", genreMapping)
 	imap.DefaultMapping.AddFieldMappingsAt("author", authorMapping)
 	imap.DefaultMapping.AddFieldMappingsAt("title", titleMapping)
 	imap.DefaultMapping.AddFieldMappingsAt("price", priceMapping)
+	imap.DefaultMapping.AddFieldMappingsAt("tags", tagsMapping)
 
 	idx, err := New(tmpIndexPath, imap)
 	if err != nil {
@@ -4586,24 +4591,28 @@ func TestFilteredBooleanQuery(t *testing.T) {
 			"author": "J.D. Salinger",
 			"genre":  "fiction",
 			"price":  9.99,
+			"tags":   []int{1, 2, 3},
 		},
 		{
 			"title":  "Sapiens",
 			"author": "Yuval Noah Harari",
 			"genre":  "non-fiction",
 			"price":  14.29,
+			"tags":   []int{2},
 		},
 		{
 			"title":  "To Kill a Mockingbird",
 			"author": "Harper Lee",
 			"genre":  "fiction",
 			"price":  12,
+			"tags":   []int{},
 		},
 		{
 			"title":  "The Power of Habit",
 			"author": "Charles Duhigg",
 			"genre":  "self-help",
 			"price":  26,
+			"tags":   []int{1, 2},
 		},
 		{
 			"title":  "The Great Gatsby",
@@ -4622,12 +4631,14 @@ func TestFilteredBooleanQuery(t *testing.T) {
 			"author": "Tara Westover",
 			"genre":  "non-fiction",
 			"price":  18,
+			"tags":   []int{1, 2},
 		},
 		{
 			"title":  "1984",
 			"author": "George Orwell",
 			"genre":  "fiction",
 			"price":  20,
+			"tags":   []int{3},
 		},
 	}
 
@@ -4771,6 +4782,28 @@ func TestFilteredBooleanQuery(t *testing.T) {
 			t.Fatalf("expected score %f, got %f", unfilteredScore, res.Hits[i].Score)
 		}
 	}
+
+	p := float64(3)
+	incl := true
+	eqlFilter := NewNumericRangeInclusiveQuery(&p, &p, &incl, &incl)
+	eqlFilter.SetField("tags")
+	q = NewBooleanQuery()
+	q.AddFilter(eqlFilter)
+
+	req = NewSearchRequest(q)
+	req.Fields = []string{"title"}
+	res, err = idx.Search(req)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if res.Hits.Len() != 2 {
+		t.Fatalf("expected two hits, found '%d'", res.Hits.Len())
+	}
+
+	if res.Total != 2 {
+		t.Fatalf("expected two total, found '%d'", res.Total)
+	}
 }

Passes fine sometimes, but fails with count '1' if you run it a few times... will report this upstream and WIP: this pr in the meantime...

@Gusted wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-8144183: > CI failure looks related. Yes... after a bit of poking around.... seems like bleve's new `Filter` query is very flaky for slices...? ```diff diff --git a/search_test.go b/search_test.go index 4e98c6d..9479ef8 100644 --- a/search_test.go +++ b/search_test.go @@ -4558,11 +4558,16 @@ func TestFilteredBooleanQuery(t *testing.T) { titleMapping := mapping.NewTextFieldMapping() titleMapping.Analyzer = en.AnalyzerName + tagsMapping := mapping.NewNumericFieldMapping() + tagsMapping.Store = false + tagsMapping.IncludeInAll = false + priceMapping := mapping.NewNumericFieldMapping() imap.DefaultMapping.AddFieldMappingsAt("genre", genreMapping) imap.DefaultMapping.AddFieldMappingsAt("author", authorMapping) imap.DefaultMapping.AddFieldMappingsAt("title", titleMapping) imap.DefaultMapping.AddFieldMappingsAt("price", priceMapping) + imap.DefaultMapping.AddFieldMappingsAt("tags", tagsMapping) idx, err := New(tmpIndexPath, imap) if err != nil { @@ -4586,24 +4591,28 @@ func TestFilteredBooleanQuery(t *testing.T) { "author": "J.D. Salinger", "genre": "fiction", "price": 9.99, + "tags": []int{1, 2, 3}, }, { "title": "Sapiens", "author": "Yuval Noah Harari", "genre": "non-fiction", "price": 14.29, + "tags": []int{2}, }, { "title": "To Kill a Mockingbird", "author": "Harper Lee", "genre": "fiction", "price": 12, + "tags": []int{}, }, { "title": "The Power of Habit", "author": "Charles Duhigg", "genre": "self-help", "price": 26, + "tags": []int{1, 2}, }, { "title": "The Great Gatsby", @@ -4622,12 +4631,14 @@ func TestFilteredBooleanQuery(t *testing.T) { "author": "Tara Westover", "genre": "non-fiction", "price": 18, + "tags": []int{1, 2}, }, { "title": "1984", "author": "George Orwell", "genre": "fiction", "price": 20, + "tags": []int{3}, }, } @@ -4771,6 +4782,28 @@ func TestFilteredBooleanQuery(t *testing.T) { t.Fatalf("expected score %f, got %f", unfilteredScore, res.Hits[i].Score) } } + + p := float64(3) + incl := true + eqlFilter := NewNumericRangeInclusiveQuery(&p, &p, &incl, &incl) + eqlFilter.SetField("tags") + q = NewBooleanQuery() + q.AddFilter(eqlFilter) + + req = NewSearchRequest(q) + req.Fields = []string{"title"} + res, err = idx.Search(req) + if err != nil { + t.Fatal(err) + } + + if res.Hits.Len() != 2 { + t.Fatalf("expected two hits, found '%d'", res.Hits.Len()) + } + + if res.Total != 2 { + t.Fatalf("expected two total, found '%d'", res.Total) + } } ``` Passes fine sometimes, but fails with count '1' if you run it a few times... will report this upstream and `WIP:` this pr in the meantime...
snematoda changed title from feat(issue-search): support query syntax to WIP: feat(issue-search): support query syntax 2025-11-08 06:07:54 +01:00
Author
Member
Waiting for the v2.5.5 release now :) https://github.com/blevesearch/bleve/pull/2239 --- **EDIT:** Tests pass fine now :)
snematoda force-pushed snematoda/issue-search-syntax-filters from 43959ce56e
Some checks failed
testing / frontend-checks (pull_request) Successful in 1m11s
testing / backend-checks (pull_request) Successful in 2m23s
testing / test-unit (pull_request) Failing after 5m35s
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / test-mysql (pull_request) Successful in 19m3s
testing / test-e2e (pull_request) Successful in 22m23s
testing / test-sqlite (pull_request) Successful in 23m41s
testing / test-pgsql (pull_request) Successful in 27m37s
testing / security-check (pull_request) Has been skipped
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Successful in 31s
to ff66f9ff7a
All checks were successful
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Successful in 35s
testing / frontend-checks (pull_request) Successful in 54s
testing / backend-checks (pull_request) Successful in 3m6s
testing / test-unit (pull_request) Successful in 6m8s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m8s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m8s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m13s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m10s
testing / test-e2e (pull_request) Successful in 15m55s
testing / test-mysql (pull_request) Successful in 19m31s
testing / test-sqlite (pull_request) Successful in 24m32s
testing / test-pgsql (pull_request) Successful in 27m46s
testing / security-check (pull_request) Successful in 54s
2025-11-15 07:10:22 +01:00
Compare
Author
Member

@fnetX wrote in #9109 (comment):

Hmm, that's a good question. Intuitively, I would have added it to the line after the search icon. On the other hand, it basically contains some of the filters that are added below, so a position before the filter buttons could also make sense ("these filters and switches can also be controlled via the search bar").

How about a help icon along with the search bar?

modal

@fnetX wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-8153225: > Hmm, that's a good question. Intuitively, I would have added it to the line after the search icon. On the other hand, it basically contains some of the filters that are added below, so a position before the filter buttons could also make sense ("these filters and switches can also be controlled via the search bar"). How about a help icon along with the search bar? ![modal](/attachments/0576a67c-11a1-4db0-863a-8068d035acaa)
250 KiB
snematoda force-pushed snematoda/issue-search-syntax-filters from fa1ad1a5e6
Some checks failed
requirements / merge-conditions (pull_request) Successful in 2s
issue-labels / release-notes (pull_request_target) Successful in 56s
testing / frontend-checks (pull_request) Successful in 1m23s
testing / backend-checks (pull_request) Failing after 3m11s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
to 0a3a387300
All checks were successful
testing / frontend-checks (pull_request) Successful in 1m0s
testing / backend-checks (pull_request) Successful in 3m13s
testing / test-unit (pull_request) Successful in 6m35s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m33s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m33s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m33s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m43s
testing / test-mysql (pull_request) Successful in 21m14s
testing / test-sqlite (pull_request) Successful in 26m16s
testing / test-pgsql (pull_request) Successful in 29m20s
testing / security-check (pull_request) Successful in 55s
testing / test-e2e (pull_request) Successful in 15m23s
requirements / merge-conditions (pull_request) Successful in 0s
issue-labels / release-notes (pull_request_target) Successful in 32s
2025-11-15 14:30:30 +01:00
Compare
Owner

@snematoda Yes, this is where I'd have placed it. I expected it to be a challenge on mobile, but the mobile view seems to place the search bar on its own line anyway.

@snematoda Yes, this is where I'd have placed it. I expected it to be a challenge on mobile, but the mobile view seems to place the search bar on its own line anyway.
snematoda changed title from WIP: feat(issue-search): support query syntax to feat(issue-search): support query syntax 2025-11-15 19:03:25 +01:00
snematoda requested reviews from 0ko, fogti 2025-11-15 19:03:25 +01:00
@ -59,0 +60,4 @@
"repo.issues.filter_assignee_hint": "Filter by assigned user",
"repo.issues.filter_mention_hint": "Filter by mentioned user",
"repo.issues.filter_modified_hint": "Filter by last modified date",
"repo.issues.filter_sort_hint": "Filter by sort type; created/comments/updated/deadline",
Owner

Pretty sure the former is called due date in the ui but deadline as one word seems fine. Also, you might have wanted to use :

Pretty sure the former is called `due date` in the ui but deadline as one word seems fine. Also, you might have wanted to use `:`
Owner

I'd like to propose the following (clearer) key format: issues.filter.X.hint

I'd like to propose the following (clearer) key format: `issues.filter.X.hint`
snematoda marked this conversation as resolved
@ -93,6 +98,7 @@
"migrate.forgejo.description": "Migrate data from codeberg.org or other Forgejo instances.",
"repo.issue_indexer.title": "Issue Indexer",
"search.milestone_kind": "Search milestones…",
"search.syntax": "Search Syntax",
Owner

The general guideline is to not use news title case anywhere.

The general guideline is to not use ~~news~~ title case anywhere.
snematoda marked this conversation as resolved
@ -21,0 +30,4 @@
<table class="tw-table-auto">
<tbody>
{{range $filter, $expl :=
dict
Member

691dd023ff/modules/templates/helper.go

It would be nice to have a dedicated function for dictionaries where the values are msgids, in order to be able to handle those in lint-locale-usage.

https://codeberg.org/forgejo/forgejo/src/commit/691dd023ff312a8e137719022b2942e8b9bfe3f9/modules/templates/helper.go It would be nice to have a dedicated function for dictionaries where the values are msgids, in order to be able to handle those in `lint-locale-usage`.
snematoda marked this conversation as resolved
@ -21,0 +39,4 @@
"review:<username>" "repo.issues.filter_mention_hint"
"mention:<username>" "repo.issues.filter_mention_hint"
"sort:<by>:[asc|desc]" "repo.issues.filter_sort_hint"
"modified:[>|<]<date>" "repo.issues.filter_mention_hint"}}
Member

repo.issues.filter_mention_hint looks wrong here.

`repo.issues.filter_mention_hint` looks wrong here.
Owner

Yeah, there are in total three of these in total in the list

Yeah, there are in total three of these in total in the list
Author
Member

🙈 my bad...

🙈 my bad...
snematoda marked this conversation as resolved
@ -19,2 +19,4 @@
{{end}}
</div>
{{if not .PageIsMilestones}}
<a class="ui icon tw-px-4" id="search-syntax-button">{{svg "octicon-question"}}</a>
Owner

We don't seem to have a class for such button yet, so it's fine to have this. You may want to add tw-py-2 to further increase clickable area.

As well as gap: 0.5rem; to .list-header-search. It wasn't ready to have multiple items in it but now it will.

We don't seem to have a class for such button yet, so it's fine to have this. You may want to add `tw-py-2` to further increase clickable area. As well as `gap: 0.5rem;` to `.list-header-search`. It wasn't ready to have multiple items in it but now it will.
snematoda marked this conversation as resolved
@ -21,0 +24,4 @@
<article>
<header>
<span>{{ctx.Locale.Tr "search.syntax"}}</span>
<button class="ui button icon cancel tw-ml-auto">{{svg "octicon-x"}}</button>
Owner

Other dialogs use a text button at the bottom, best to stick to that for consistency.

Other dialogs use a text button at the bottom, best to stick to that for consistency.
snematoda marked this conversation as resolved
@ -116,0 +190,4 @@
case token.IsOf("author:"):
userNames = append(userNames, token.Term[7:])
userFilter = append(userFilter, userFilterAuthor)
case token.IsOf("assign:"):
Owner

I wonder if this should be assigned so it reads better. It is longer though.

I wonder if this should be `assigned` so it reads better. It is longer though.
Author
Member

blame my laziness for the short tags... will change to assignee: to be compatible with github :)

blame my laziness for the short tags... will change to `assignee:` to be compatible with github :)
snematoda marked this conversation as resolved
@ -116,0 +196,4 @@
case token.IsOf("review:"):
userNames = append(userNames, token.Term[7:])
userFilter = append(userFilter, userFilterReview)
case token.IsOf("mention:"):
Owner

Ditto, but maybe mentions?

Ditto, but maybe `mentions`?
snematoda marked this conversation as resolved
Owner

Looks pretty good overall!

Looks pretty good overall!
snematoda force-pushed snematoda/issue-search-syntax-filters from 0a3a387300
All checks were successful
testing / frontend-checks (pull_request) Successful in 1m0s
testing / backend-checks (pull_request) Successful in 3m13s
testing / test-unit (pull_request) Successful in 6m35s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m33s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m33s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m33s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m43s
testing / test-mysql (pull_request) Successful in 21m14s
testing / test-sqlite (pull_request) Successful in 26m16s
testing / test-pgsql (pull_request) Successful in 29m20s
testing / security-check (pull_request) Successful in 55s
testing / test-e2e (pull_request) Successful in 15m23s
requirements / merge-conditions (pull_request) Successful in 0s
issue-labels / release-notes (pull_request_target) Successful in 32s
to 08fc1bb324
All checks were successful
testing / frontend-checks (pull_request) Successful in 1m2s
requirements / merge-conditions (pull_request) Successful in 2s
testing / backend-checks (pull_request) Successful in 2m55s
issue-labels / release-notes (pull_request_target) Successful in 33s
testing / test-unit (pull_request) Successful in 6m6s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m14s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m17s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m18s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m17s
testing / test-e2e (pull_request) Successful in 16m7s
testing / test-mysql (pull_request) Successful in 20m28s
testing / test-sqlite (pull_request) Successful in 25m29s
testing / test-pgsql (pull_request) Successful in 28m43s
testing / security-check (pull_request) Successful in 52s
2025-11-15 21:20:33 +01:00
Compare
0ko approved these changes 2025-11-16 05:21:16 +01:00
Owner

The syntax seems to also apply on these:

  • /org/<name>/pulls?
  • /pulls

Which is really cool but it also means they lack the hint button and the dialog. Best to move it to a reusable template.

The syntax seems to also apply on these: * `/org/<name>/pulls?` * `/pulls` Which is really cool but it also means they lack the hint button and the dialog. Best to move it to a reusable template.
fogti approved these changes 2025-11-17 13:38:06 +01:00
fogti left a comment
Member

The parts affecting lint-locale-usage are okay.

The parts affecting `lint-locale-usage` are okay.
snematoda force-pushed snematoda/issue-search-syntax-filters from 08fc1bb324
All checks were successful
testing / frontend-checks (pull_request) Successful in 1m2s
requirements / merge-conditions (pull_request) Successful in 2s
testing / backend-checks (pull_request) Successful in 2m55s
issue-labels / release-notes (pull_request_target) Successful in 33s
testing / test-unit (pull_request) Successful in 6m6s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m14s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m17s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m18s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m17s
testing / test-e2e (pull_request) Successful in 16m7s
testing / test-mysql (pull_request) Successful in 20m28s
testing / test-sqlite (pull_request) Successful in 25m29s
testing / test-pgsql (pull_request) Successful in 28m43s
testing / security-check (pull_request) Successful in 52s
to b5514e8c04
All checks were successful
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Successful in 39s
testing / frontend-checks (pull_request) Successful in 57s
testing / backend-checks (pull_request) Successful in 3m2s
Integration tests for the release process / release-simulation (pull_request) Successful in 6m27s
testing / test-unit (pull_request) Successful in 6m17s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m3s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m6s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m7s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m11s
testing / test-e2e (pull_request) Successful in 16m32s
testing / test-mysql (pull_request) Successful in 20m49s
testing / test-sqlite (pull_request) Successful in 25m52s
testing / test-pgsql (pull_request) Successful in 28m54s
testing / security-check (pull_request) Successful in 51s
2025-11-17 14:02:21 +01:00
Compare
Author
Member

@0ko wrote in #9109 (comment):

[...] they lack the hint button and the dialog. Best to move it to a reusable template.

Nice catch! added :)

@0ko wrote in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-8312774: > [...] they lack the hint button and the dialog. Best to move it to a reusable template. Nice catch! added :)
Owner

tw-gap-2 was not copied to the other template, causing a minor inconsistency.

As suggested in #9109 (comment), it's better to move this property to the actual CSS as it is easy to introduce such inconsistencies with Tailwind. I checked all usages of class list-header-search and it should not cause issues in any other areas it is used in.,

`tw-gap-2` was not copied to the other template, causing a minor inconsistency. As suggested in https://codeberg.org/forgejo/forgejo/pulls/9109#issuecomment-8295782, it's better to move this property to the actual CSS as it is easy to introduce such inconsistencies with Tailwind. I checked all usages of class `list-header-search` and it should not cause issues in any other areas it is used in.,
snematoda force-pushed snematoda/issue-search-syntax-filters from b5514e8c04
All checks were successful
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Successful in 39s
testing / frontend-checks (pull_request) Successful in 57s
testing / backend-checks (pull_request) Successful in 3m2s
Integration tests for the release process / release-simulation (pull_request) Successful in 6m27s
testing / test-unit (pull_request) Successful in 6m17s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m3s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m6s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m7s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m11s
testing / test-e2e (pull_request) Successful in 16m32s
testing / test-mysql (pull_request) Successful in 20m49s
testing / test-sqlite (pull_request) Successful in 25m52s
testing / test-pgsql (pull_request) Successful in 28m54s
testing / security-check (pull_request) Successful in 51s
to 905485be7c
All checks were successful
requirements / merge-conditions (pull_request) Successful in 1s
testing / frontend-checks (pull_request) Successful in 1m35s
issue-labels / release-notes (pull_request_target) Successful in 55s
testing / backend-checks (pull_request) Successful in 4m17s
Integration tests for the release process / release-simulation (pull_request) Successful in 7m20s
testing / test-unit (pull_request) Successful in 7m50s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m32s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m35s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m15s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m6s
testing / test-e2e (pull_request) Successful in 24m11s
testing / test-mysql (pull_request) Successful in 27m42s
testing / test-sqlite (pull_request) Successful in 30m34s
testing / test-pgsql (pull_request) Successful in 34m55s
testing / security-check (pull_request) Successful in 58s
2025-11-17 14:56:14 +01:00
Compare
Gusted left a comment
Owner

Backend code looks great, thanks!

Backend code looks great, thanks!
@ -236,7 +237,14 @@ function initArchivedLabelFilter() {
});
}
function initSearchSyntaxModal() {
Owner

This code can be avoided, you can add the show-model class and add data-modal="#search-syntax-modal".

This code can be avoided, you can add the `show-model` class and add `data-modal="#search-syntax-modal"`.
snematoda marked this conversation as resolved
snematoda force-pushed snematoda/issue-search-syntax-filters from 905485be7c
All checks were successful
requirements / merge-conditions (pull_request) Successful in 1s
testing / frontend-checks (pull_request) Successful in 1m35s
issue-labels / release-notes (pull_request_target) Successful in 55s
testing / backend-checks (pull_request) Successful in 4m17s
Integration tests for the release process / release-simulation (pull_request) Successful in 7m20s
testing / test-unit (pull_request) Successful in 7m50s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m32s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m35s
testing / test-remote-cacher (garnet) (pull_request) Successful in 2m15s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m6s
testing / test-e2e (pull_request) Successful in 24m11s
testing / test-mysql (pull_request) Successful in 27m42s
testing / test-sqlite (pull_request) Successful in 30m34s
testing / test-pgsql (pull_request) Successful in 34m55s
testing / security-check (pull_request) Successful in 58s
to e2c491a874
Some checks failed
requirements / merge-conditions (pull_request) Successful in 1s
testing / frontend-checks (pull_request) Failing after 19s
issue-labels / release-notes (pull_request_target) Successful in 37s
Integration tests for the release process / release-simulation (pull_request) Has been cancelled
testing / backend-checks (pull_request) Successful in 2m55s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
2025-11-18 07:03:59 +01:00
Compare
snematoda force-pushed snematoda/issue-search-syntax-filters from e2c491a874
Some checks failed
requirements / merge-conditions (pull_request) Successful in 1s
testing / frontend-checks (pull_request) Failing after 19s
issue-labels / release-notes (pull_request_target) Successful in 37s
Integration tests for the release process / release-simulation (pull_request) Has been cancelled
testing / backend-checks (pull_request) Successful in 2m55s
testing / test-unit (pull_request) Has been skipped
testing / test-e2e (pull_request) Has been skipped
testing / test-mysql (pull_request) Has been skipped
testing / test-pgsql (pull_request) Has been skipped
testing / test-sqlite (pull_request) Has been skipped
testing / test-remote-cacher (redis) (pull_request) Has been skipped
testing / test-remote-cacher (valkey) (pull_request) Has been skipped
testing / test-remote-cacher (garnet) (pull_request) Has been skipped
testing / test-remote-cacher (redict) (pull_request) Has been skipped
testing / security-check (pull_request) Has been skipped
to f1e480eb77
All checks were successful
requirements / merge-conditions (pull_request) Successful in 1s
issue-labels / release-notes (pull_request_target) Successful in 38s
testing / frontend-checks (pull_request) Successful in 1m5s
testing / backend-checks (pull_request) Successful in 3m3s
Integration tests for the release process / release-simulation (pull_request) Successful in 6m59s
testing / test-unit (pull_request) Successful in 8m28s
testing / test-remote-cacher (redis) (pull_request) Successful in 2m17s
testing / test-remote-cacher (valkey) (pull_request) Successful in 2m1s
testing / test-remote-cacher (redict) (pull_request) Successful in 2m5s
testing / test-e2e (pull_request) Successful in 22m9s
testing / test-mysql (pull_request) Successful in 25m55s
testing / test-sqlite (pull_request) Successful in 29m53s
testing / test-pgsql (pull_request) Successful in 34m1s
testing / test-remote-cacher (garnet) (pull_request) Successful in 1m16s
testing / security-check (pull_request) Successful in 54s
issue-labels / backporting (pull_request_target) Has been skipped
milestone / set (pull_request_target) Successful in 3s
2025-11-18 07:06:18 +01:00
Compare
Gusted approved these changes 2025-11-19 16:04:38 +01:00
Gusted left a comment
Owner

Thank you!

Thank you!
Gusted merged commit 255ed593d3 into forgejo 2025-11-19 16:05:44 +01:00
Sign in to join this conversation.
No labels
arch
riscv64
backport/v1.19
backport/v1.20
backport/v1.21/forgejo
backport/v10.0/forgejo
backport/v11.0/forgejo
backport/v12.0/forgejo
backport/v13.0/forgejo
backport/v14.0/forgejo
backport/v7.0/forgejo
backport/v8.0/forgejo
backport/v9.0/forgejo
breaking
bug
bug
confirmed
bug
duplicate
bug
needs-more-info
bug
new-report
bug
reported-upstream
code/actions
code/api
code/auth
code/auth/faidp
code/auth/farp
code/email
code/federation
code/git
code/migrations
code/packages
code/wiki
database
MySQL
database
PostgreSQL
database
SQLite
dependency-upgrade
dependency
certmagic
dependency
chart.js
dependency
Chi
dependency
Chroma
dependency
citation.js
dependency
codespell
dependency
css-loader
dependency
devcontainers
dependency
dropzone
dependency
editorconfig-checker
dependency
elasticsearch
dependency
enmime
dependency
F3
dependency
ForgeFed
dependency
garage
dependency
Git
dependency
git-backporting
dependency
Gitea
dependency
gitignore
dependency
go-ap
dependency
go-enry
dependency
go-gitlab
dependency
Go-org
dependency
go-rpmutils
dependency
go-sql-driver mysql
dependency
go-swagger
dependency
go-version
dependency
go-webauthn
dependency
gocron
dependency
Golang
dependency
goldmark
dependency
goquery
dependency
Goth
dependency
grpc-go
dependency
happy-dom
dependency
Helm
dependency
image-spec
dependency
jsonschema
dependency
KaTeX
dependency
lint
dependency
MariaDB
dependency
Mermaid
dependency
minio-go
dependency
misspell
dependency
Monaco
dependency
PDFobject
dependency
playwright
dependency
postcss
dependency
postcss-plugins
dependency
pprof
dependency
prometheus client_golang
dependency
protobuf
dependency
relative-time-element
dependency
renovate
dependency
reply
dependency
ssh
dependency
swagger-ui
dependency
tailwind
dependency
temporal-polyfill
dependency
terminal-to-html
dependency
tests-only
dependency
text-expander-element
dependency
urfave
dependency
vfsgen
dependency
vite
dependency
Woodpecker CI
dependency
x tools
dependency
XORM
Discussion
duplicate
enhancement/feature
forgejo/accessibility
forgejo/branding
forgejo/ci
forgejo/commit-graph
forgejo/documentation
forgejo/furnace cleanup
forgejo/i18n
forgejo/interop
forgejo/moderation
forgejo/privacy
forgejo/release
forgejo/scaling
forgejo/security
forgejo/ui
Gain
High
Gain
Nice to have
Gain
Undefined
Gain
Very High
good first issue
i18n/backport-stable
impact
large
impact
medium
impact
small
impact
unknown
Incompatible license
issue
closed
issue
do-not-exist-yet
issue
open
manual test
Manually tested during feature freeze
OS
FreeBSD
OS
Linux
OS
macOS
OS
Windows
problem
QA
regression
release blocker
Release Cycle
Feature Freeze
release-blocker
v7.0
release-blocker
v7.0.1
release-blocker
v7.0.2
release-blocker
v7.0.3
release-blocker
v7.0.4
release-blocker
v8.0.0
release-blocker/v9.0.0
run-all-playwright-tests
run-end-to-end-tests
test
manual
test
needed
test
needs-help
test
not-needed
test
present
untested
User research - time-tracker
valuable code
worth a release-note
User research - Accessibility
User research - Blocked
User research - Community
User research - Config (instance)
User research - Errors
User research - Filters
User research - Future backlog
User research - Git workflow
User research - Labels
User research - Moderation
User research - Needs input
User research - Notifications/Dashboard
User research - Rendering
User research - Repo creation
User research - Repo units
User research - Security
User research - Settings (in-app)
No milestone
No project
No assignees
7 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forgejo/forgejo!9109
No description provided.