Skip to content

Commit c36c778

Browse files
Merge remote-tracking branch 'origin/main' into fix-for-issue-8888
2 parents ff149a1 + 8ac89e1 commit c36c778

File tree

64 files changed

+587
-194
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+587
-194
lines changed

.github/workflows/binaries.yml

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,30 +140,35 @@ jobs:
140140
displayName: linux
141141
archivePortable: tar -c -C jabgui/build/packages/ubuntu-22.04 JabRef | pigz --rsyncable > jabgui/build/packages/ubuntu-22.04/JabRef-portable_linux.tar.gz && rm -R jabgui/build/packages/ubuntu-22.04/JabRef
142142
archivePortableJabKit: tar -c -C jabkit/build/packages/ubuntu-22.04 jabkit | pigz --rsyncable > jabkit/build/packages/ubuntu-22.04/jabkit-portable_linux.tar.gz && rm -R jabkit/build/packages/ubuntu-22.04/jabkit
143+
archivePortableJabLS: tar -c -C jabls-cli/build/packages/ubuntu-22.04 jabls | pigz --rsyncable > jabls-cli/build/packages/ubuntu-22.04/jabls-portable_linux.tar.gz && rm -R jabls-cli/build/packages/ubuntu-22.04/jabls
143144
suffix: ''
144145
archForDebianRepack: '_amd64'
145146
- os: ubuntu-22.04-arm
146147
displayName: linux-arm
147148
archivePortable: tar -c -C jabgui/build/packages/ubuntu-22.04-arm JabRef | pigz --rsyncable > jabgui/build/packages/ubuntu-22.04-arm/JabRef-portable_linux_arm64.tar.gz && rm -R jabgui/build/packages/ubuntu-22.04-arm/JabRef
148149
archivePortableJabKit: tar -c -C jabkit/build/packages/ubuntu-22.04-arm jabkit | pigz --rsyncable > jabkit/build/packages/ubuntu-22.04-arm/jabkit-portable_linux_arm64.tar.gz && rm -R jabkit/build/packages/ubuntu-22.04-arm/jabkit
150+
archivePortableJabLS: tar -c -C jabls-cli/build/packages/ubuntu-22.04-arm jabls | pigz --rsyncable > jabls-cli/build/packages/ubuntu-22.04-arm/jabls-cli-portable_linux_arm64.tar.gz && rm -R jabls-cli/build/packages/ubuntu-22.04-arm/jabls
149151
suffix: '_arm64'
150152
archForDebianRepack: '_arm64'
151153
- os: windows-latest
152154
displayName: windows
153155
archivePortable: 7z a -r jabgui/build/packages/windows-latest/JabRef-portable_windows.zip ./jabgui/build/packages/windows-latest/JabRef && rm -R jabgui/build/packages/windows-latest/JabRef
154156
archivePortableJabKit: 7z a -r jabkit/build/packages/windows-latest/jabkit-portable_windows.zip ./jabkit/build/packages/windows-latest/jabkit && rm -R jabkit/build/packages/windows-latest/jabkit
157+
archivePortableJabLS: 7z a -r jabls-cli/build/packages/windows-latest/jabls-portable_windows.zip ./jabls-cli/build/packages/windows-latest/jabls && rm -R jabls-cli/build/packages/windows-latest/jabls
155158
suffix: ''
156159
archForDebianRepack: ''
157160
- os: macos-15-intel # intel image
158161
displayName: macOS
159162
archivePortable: 7z a -r jabgui/build/packages/macos-15-intel/JabRef-portable_macos.zip ./jabgui/build/packages/macos-15-intel/JabRef.app && rm -R jabgui/build/packages/macos-15-intel/JabRef.app
160163
archivePortableJabKit: 7z a -r jabkit/build/packages/macos-15-intel/jabkit-portable_macos.zip ./jabkit/build/packages/macos-15-intel/jabkit.app && rm -R jabkit/build/packages/macos-15-intel/jabkit.app
164+
archivePortableJabLS: 7z a -r jabls-cli/build/packages/macos-15-intel/jabls-portable_macos.zip ./jabls-cli/build/packages/macos-15-intel/jabls.app && rm -R jabls-cli/build/packages/macos-15-intel/jabls.app
161165
suffix: ''
162166
archForDebianRepack: ''
163167
- os: macos-15
164168
displayName: macOS-arm
165169
archivePortable: 7z a -r jabgui/build/packages/macos-15/JabRef-portable_macos-arm.zip ./jabgui/build/packages/macos-15/JabRef.app && rm -R jabgui/build/packages/macos-15/JabRef.app
166170
archivePortableJabKit: 7z a -r jabkit/build/packages/macos-15/jabkit-portable_macos-arm.zip ./jabkit/build/packages/macos-15/jabkit.app && rm -R jabkit/build/packages/macos-15/jabkit.app
171+
archivePortableJabLS: 7z a -r jabls-cli/build/packages/macos-15/jabls-portable_macos-arm.zip ./jabls-cli/build/packages/macos-15/jabkit.app && rm -R jabls-cli/build/packages/macos-15/jabls.app
167172
suffix: '_arm64'
168173
archForDebianRepack: ''
169174
runs-on: ${{ matrix.os }}
@@ -265,6 +270,15 @@ jobs:
265270
set -e
266271
${{ matrix.archivePortableJabKit }}
267272
273+
- name: Build JabLS-CLI
274+
shell: bash
275+
run: ./gradlew -i -PprojVersion="${{ steps.gitversion.outputs.AssemblySemVer }}" -PprojVersionInfo="${{ steps.gitversion.outputs.InformationalVersion }}" :jabls-cli:jpackage
276+
- name: Package JabLS-CLI application image
277+
shell: bash
278+
run: |
279+
set -e
280+
${{ matrix.archivePortableJabLS }}
281+
268282
# region Upload to builds.jabref.org / GitHub artifacts store
269283
- name: Setup SSH key
270284
if: (needs.conditions.outputs.upload-to-builds-jabref-org == 'true')
@@ -304,9 +318,13 @@ jobs:
304318
- name: Upload jabkkit to builds.jabref.org (Windows)
305319
if: ${{ (steps.diskspace.outputs.available == 'true') && (matrix.os == 'windows-latest') }}
306320
shell: cmd
307-
# for rsync installed by chocolatey, we need the ssh.exe delivered with that installation
308321
run: |
309322
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'C:\ProgramData\chocolatey\lib\rsync\tools\bin\ssh.exe -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabkit/build/packages/${{ matrix.os }}/ [email protected]:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true
323+
- name: Upload jabls-cli to builds.jabref.org (Windows)
324+
if: ${{ (steps.diskspace.outputs.available == 'true') && (matrix.os == 'windows-latest') }}
325+
shell: cmd
326+
run: |
327+
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'C:\ProgramData\chocolatey\lib\rsync\tools\bin\ssh.exe -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabls-cli/build/packages/${{ matrix.os }}/ [email protected]:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true
310328
- name: Upload jabgui to builds.jabref.org (linux, macOS)
311329
if: ${{ (steps.diskspace.outputs.available == 'true') && (startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')) }}
312330
shell: bash
@@ -317,6 +335,11 @@ jobs:
317335
shell: bash
318336
run: |
319337
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabkit/build/packages/${{ matrix.os }}/ [email protected]:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true
338+
- name: Upload jabls-cli to builds.jabref.org (linux, macOS)
339+
if: ${{ (steps.diskspace.outputs.available == 'true') && (startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')) }}
340+
shell: bash
341+
run: |
342+
rsync -rt --chmod=Du=rwx,Dg=rx,Do=rx,Fu=rw,Fg=r,Fo=r --itemize-changes --stats --rsync-path="mkdir -p /var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }} && rsync" -e 'ssh -p 9922 -i sshkey -o StrictHostKeyChecking=no' jabls-cli/build/packages/${{ matrix.os }}/ [email protected]:/var/www/builds.jabref.org/www/${{ steps.gitversion.outputs.branchName }}/ || true
320343
- name: Upload to GitHub workflow artifacts store (macOS)
321344
if: ${{ (startsWith(matrix.os, 'macos')) && (needs.conditions.outputs.should-notarize == 'true') }}
322345
uses: actions/upload-artifact@v4

.jbang/JabKitLauncher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
//DEPS org.jabref:jablib:6.0-SNAPSHOT
3535
// https://jitpack.io/#jabref/jabref/main-SNAPSHOT
3636
// DEPS com.github.jabref:jabref:main-SNAPSHOT
37-
37+
//DEPS io.github.darvil82:terminal-text-formatter:2.2.0
3838
//DEPS info.picocli:picocli:4.7.7
3939

4040
import org.jabref.JabKit;

.jbang/JabLsLauncher.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
// https://jitpack.io/#jabref/jabref/main-SNAPSHOT
3737
// DEPS com.github.jabref:jabref:main-SNAPSHOT
3838

39+
//DEPS io.github.darvil82:terminal-text-formatter:2.2.0
3940
//DEPS info.picocli:picocli:4.7.7
4041
//DEPS org.jspecify:jspecify:1.0.0
4142

.jbang/JabSrvLauncher.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
// https://jitpack.io/#jabref/jabref/main-SNAPSHOT
5959
// DEPS com.github.jabref:jabref:main-SNAPSHOT
6060

61+
//DEPS io.github.darvil82:terminal-text-formatter:2.2.0
6162
//DEPS info.picocli:picocli:4.7.7
6263
//DEPS org.jspecify:jspecify:1.0.0
6364

@@ -86,7 +87,7 @@
8687
//DEPS com.google.guava:guava:33.5.0-jre
8788
//DEPS org.jabref:afterburner.fx:2.0.0
8889
//DEPS net.harawata:appdirs:1.5.0
89-
//DEPS de.undercouch:citeproc-java:3.3.0
90+
//DEPS de.undercouch:citeproc-java:3.4.0
9091

9192
/// This class is required for [jbang](https://www.jbang.dev/)
9293
public class JabSrvLauncher {

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv
4949

5050
### Changed
5151

52+
- We moved all sorting options into a dedicated “Sort” sub-menu in the Groups menu. ([#14017](https://github.com/JabRef/jabref/issues/14017))
5253
- We merged `Citation information` and `Citation relations` into a singular tab. [#13618](https://github.com/JabRef/jabref/issues/13618)
5354
- We changed `ISSNCleanup` into `NormalizeIssn` a `ISSN` formatter. [#13748](https://github.com/JabRef/jabref/issues/13748)
5455
- We changed Citation Relations tab and gave tab panes more descriptive titles and tooltips. [#13619](https://github.com/JabRef/jabref/issues/13619)
@@ -102,6 +103,7 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv
102103
- We improved the event viewer for debugging [#13783](https://github.com/JabRef/jabref/pull/13783).
103104
- We improved "REDACTED" replacement of API key value in web fetcher search URL [#13796](https://github.com/JabRef/jabref/issues/13796)
104105
- When the pin "Keep dialog always on top" in the global search dialog is selected, the search window stays open when double-clicking on an entry. [#13840](https://github.com/JabRef/jabref/issues/13840)
106+
- We improved the UI of regex replacement in the citation key generator tab. [#13939](https://github.com/JabRef/jabref/pull/13939)
105107
- We improved the way we check for matching curly braces in BibTeX fields and made error messages easier to understand. [#12605](https://github.com/JabRef/jabref/issues/12605)
106108

107109
### Fixed

build-logic/src/main/kotlin/org.jabref.gradle.base.dependency-rules.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@ extraJavaModuleInfo {
219219
overrideModuleName()
220220
exportAllPackages()
221221
}
222+
223+
module("io.github.darvil82:utils", "utils"){
224+
patchRealModule()
225+
exportAllPackages()
226+
}
222227
module("io.github.adr:e-adr", "io.github.adr") {
223228
patchRealModule()
224229
exportAllPackages()

docs/code-howtos/testing.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,28 @@ Imagine you want to test the method `format(String value)` in the class `BracesF
2727
* _Bug fixing:_ write a test case covering the bug and then fix it, leaving the test as a security that the bug will never reappear.
2828
* Do not catch exceptions in tests, instead use the `assertThrows(Exception.class, () -> doSomethingThrowsEx())` feature of [junit-jupiter](https://junit.org/junit5/docs/current/user-guide/) to the test method.
2929

30+
### Use `@ParamterizedTests`
31+
32+
If possible, use `@ParamterizedTests`.
33+
Read more at <https://mikemybytes.com/2021/10/19/parameterize-like-a-pro-with-junit-5-csvsource/>.
34+
35+
Example for a nicely formatted `@CsvSource`
36+
37+
```java
38+
@ParameterizedTest
39+
@CsvSource(delimiterString = "->", textBlock = """
40+
# underscore removed
41+
junit_jupiter -> JunitJupiter
42+
# camel case kept
43+
fooBar -> FooBar
44+
CsvSource -> CsvSource
45+
""")
46+
void convertsToUpperCamelCase(String input, String expected) {
47+
String converted = caseConverter.toUpperCamelCase(input);
48+
Assertions.assertEquals(expected, converted);
49+
}
50+
```
51+
3052
## Coverage
3153

3254
IntelliJ has build in test coverage reports. Choose "Run with coverage".

docs/decisions/0039-use-apache-velocity-as-template-engine.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ Implementation decision drivers:
2929
* Thymeleaf
3030
* Handlebars (Mustache)
3131
* Jinja
32+
* Pebble
3233

3334
## Decision Outcome
3435

jabgui/src/main/java/org/jabref/gui/actions/StandardActions.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,6 @@ public enum StandardActions implements Action {
182182

183183
HELP(Localization.lang("Online help"), IconTheme.JabRefIcons.HELP, KeyBinding.HELP),
184184
HELP_GROUPS(Localization.lang("Open Help page"), IconTheme.JabRefIcons.HELP, KeyBinding.HELP),
185-
HELP_KEY_PATTERNS(Localization.lang("Help on key patterns"), IconTheme.JabRefIcons.HELP, KeyBinding.HELP),
186185
HELP_REGEX_SEARCH(Localization.lang("Help on regular expression search"), IconTheme.JabRefIcons.HELP, KeyBinding.HELP),
187186
HELP_NAME_FORMATTER(Localization.lang("Help on Name Formatting"), IconTheme.JabRefIcons.HELP, KeyBinding.HELP),
188187
HELP_SPECIAL_FIELDS(Localization.lang("Help on special fields"), IconTheme.JabRefIcons.HELP, KeyBinding.HELP),

jabgui/src/main/java/org/jabref/gui/groups/GroupTreeView.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -614,10 +614,15 @@ private ContextMenu createContextMenuForGroup(GroupNodeViewModel group) {
614614
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_ADD, new ContextAction(StandardActions.GROUP_SUBGROUP_ADD, group)),
615615
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_RENAME, new ContextAction(StandardActions.GROUP_SUBGROUP_RENAME, group)),
616616
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_REMOVE, new ContextAction(StandardActions.GROUP_SUBGROUP_REMOVE, group)),
617-
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_SORT, new ContextAction(StandardActions.GROUP_SUBGROUP_SORT, group)),
618-
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_SORT_REVERSE, new ContextAction(StandardActions.GROUP_SUBGROUP_SORT_REVERSE, group)),
619-
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_SORT_ENTRIES, new ContextAction(StandardActions.GROUP_SUBGROUP_SORT_ENTRIES, group)),
620-
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_SORT_ENTRIES_REVERSE, new ContextAction(StandardActions.GROUP_SUBGROUP_SORT_ENTRIES_REVERSE, group)),
617+
new Menu(Localization.lang("Sort"), null,
618+
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_SORT,
619+
new GroupTreeView.ContextAction(StandardActions.GROUP_SUBGROUP_SORT, group)),
620+
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_SORT_REVERSE,
621+
new GroupTreeView.ContextAction(StandardActions.GROUP_SUBGROUP_SORT_REVERSE, group)),
622+
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_SORT_ENTRIES,
623+
new GroupTreeView.ContextAction(StandardActions.GROUP_SUBGROUP_SORT_ENTRIES, group)),
624+
factory.createMenuItem(StandardActions.GROUP_SUBGROUP_SORT_ENTRIES_REVERSE,
625+
new GroupTreeView.ContextAction(StandardActions.GROUP_SUBGROUP_SORT_ENTRIES_REVERSE, group))),
621626
new SeparatorMenuItem(),
622627
factory.createMenuItem(StandardActions.GROUP_ENTRIES_ADD, new ContextAction(StandardActions.GROUP_ENTRIES_ADD, group)),
623628
factory.createMenuItem(StandardActions.GROUP_ENTRIES_REMOVE, new ContextAction(StandardActions.GROUP_ENTRIES_REMOVE, group))

0 commit comments

Comments
 (0)