Compare commits

...

96 Commits
5.3.5 ... 5.4.0

Author SHA1 Message Date
Athou
d37cf5bbcf release 5.4.0 2025-01-17 17:15:09 +01:00
Athou
045baba705 use github actions to build a native arm64 docker image 2025-01-17 16:12:05 +01:00
renovate[bot]
3623dc8e1d chore(deps): update dependency vitest to ^3.0.1 2025-01-16 20:17:53 +00:00
renovate[bot]
2610c37067 fix(deps): update swagger.version to v2.2.28 2025-01-16 18:17:44 +00:00
renovate[bot]
286b69a646 fix(deps): update dependency react-router-dom to ^7.1.2 2025-01-16 15:56:44 +00:00
Jérémie Panzer
9673f27090 Merge pull request #1656 from Athou/renovate/major-vitest-monorepo
chore(deps): update dependency vitest to v3
2025-01-16 16:55:55 +01:00
renovate[bot]
0722599f6d chore(deps): update dependency vitest to v3 2025-01-16 14:17:05 +00:00
Jérémie Panzer
1df40d8370 Merge pull request #1655 from Athou/renovate/redoc-2.x
fix(deps): update dependency redoc to ^2.3.0
2025-01-16 15:15:28 +01:00
renovate[bot]
457e4ec69e fix(deps): update dependency redoc to ^2.3.0 2025-01-16 13:56:26 +00:00
renovate[bot]
647310a45f fix(deps): update quarkus.version to v3.17.7 2025-01-15 17:22:28 +00:00
renovate[bot]
e85c92f216 chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.2 2025-01-15 02:04:18 +00:00
renovate[bot]
d93b0dbfd4 fix(deps): update dependency io.dropwizard.metrics:metrics-json to v4.2.30 2025-01-14 20:40:37 +00:00
Jérémie Panzer
b4e61ef547 Merge pull request #1654 from Athou/renovate/mantine-monorepo
fix(deps): update mantine monorepo to ^7.16.0 (minor)
2025-01-14 14:14:01 +01:00
Jérémie Panzer
71dffbba46 Merge pull request #1653 from Athou/renovate/debian-12.x
chore(deps): update debian docker tag to v12.9
2025-01-14 14:13:51 +01:00
renovate[bot]
2c0b0c4e3b fix(deps): update mantine monorepo to ^7.16.0 2025-01-14 12:49:52 +00:00
renovate[bot]
d868e58e1e chore(deps): update debian docker tag to v12.9 2025-01-14 12:49:31 +00:00
renovate[bot]
90eb2095bf chore(deps): lock file maintenance 2025-01-13 01:27:25 +00:00
Athou
62d3ed16e6 remove DOCTYPE declarations (#1260) 2025-01-10 16:18:49 +01:00
Jérémie Panzer
74f7c48818 Merge pull request #1652 from Athou/renovate/jsdom-26.x
chore(deps): update dependency jsdom to v26
2025-01-10 15:43:55 +01:00
renovate[bot]
23fe9c29ed chore(deps): update dependency jsdom to v26 2025-01-09 10:23:05 +00:00
renovate[bot]
8f7be8278a chore(deps): update dependency typescript to ^5.7.3 (#1651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-09 05:40:40 +00:00
renovate[bot]
49118b6ea0 fix(deps): update quarkus.version to v3.17.6 2025-01-08 17:50:38 +00:00
Jérémie Panzer
d97bd04ae2 Merge pull request #1649 from Athou/renovate/com.diffplug.spotless-spotless-maven-plugin-2.x
chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.1
2025-01-08 18:50:20 +01:00
Jérémie Panzer
8d11309b64 Merge pull request #1650 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.13.0
2025-01-08 18:50:07 +01:00
renovate[bot]
68c24e4cb8 chore(deps): update node.js to v22.13.0 2025-01-08 17:21:57 +00:00
renovate[bot]
4e43e0235f chore(deps): update dependency com.diffplug.spotless:spotless-maven-plugin to v2.44.1 2025-01-08 15:35:52 +00:00
renovate[bot]
62b79a9625 fix(deps): update mantine monorepo to ^7.15.3 2025-01-08 15:35:49 +00:00
renovate[bot]
cb0706808c chore(deps): lock file maintenance 2025-01-06 02:01:57 +00:00
renovate[bot]
ffd5704b1e chore(deps): update dependency vite to ^6.0.7 2025-01-02 23:21:46 +00:00
Jérémie Panzer
3987077e5a Merge pull request #1647 from Athou/renovate/io.github.hakky54-sslcontext-kickstart-for-apache5-9.x
fix(deps): update dependency io.github.hakky54:sslcontext-kickstart-for-apache5 to v9
2025-01-01 16:02:38 +01:00
renovate[bot]
2e01a76784 fix(deps): update dependency io.github.hakky54:sslcontext-kickstart-for-apache5 to v9 2025-01-01 13:58:06 +00:00
Athou
8254093f5f fix tests failing because pubDate is older than a year 2024-12-30 08:07:03 +01:00
Jérémie Panzer
0b06526756 Merge pull request #1646 from Athou/renovate/lock-file-maintenance
chore(deps): lock file maintenance
2024-12-30 07:20:00 +01:00
renovate[bot]
06731ae76d chore(deps): lock file maintenance 2024-12-30 00:18:52 +00:00
Jérémie Panzer
9a59453792 Merge pull request #1645 from Athou/renovate/patch-fontsource-monorepo
fix(deps): update dependency @fontsource/open-sans to ^5.1.1
2024-12-29 19:01:50 +01:00
renovate[bot]
c195a52c89 fix(deps): update dependency @fontsource/open-sans to ^5.1.1 2024-12-29 14:30:46 +00:00
Jérémie Panzer
3d7924f953 Merge pull request #1644 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.21.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.1
2024-12-29 10:20:33 +01:00
renovate[bot]
f29efd7fae chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.1 2024-12-28 15:55:17 +00:00
Jérémie Panzer
157bff3c83 Merge pull request #1643 from Athou/renovate/rollup-plugin-visualizer-5.13.x
chore(deps): update dependency rollup-plugin-visualizer to ^5.13.1
2024-12-28 13:41:58 +01:00
renovate[bot]
5c17bbc36d chore(deps): update dependency rollup-plugin-visualizer to ^5.13.1 2024-12-27 11:16:46 +00:00
Jérémie Panzer
c85e72e70c Merge pull request #1642 from Athou/renovate/rollup-plugin-visualizer-5.x
chore(deps): update dependency rollup-plugin-visualizer to ^5.13.0
2024-12-27 12:16:03 +01:00
renovate[bot]
01150f67e1 chore(deps): update dependency rollup-plugin-visualizer to ^5.13.0 2024-12-27 10:55:17 +00:00
Jérémie Panzer
75aca7aa6f Merge pull request #1638 from bestZwei/patch-1
Update zh/messages.po
2024-12-27 05:05:22 +01:00
zwei
affde7e43c Update messages.po
add a few Chinese Translations
2024-12-26 22:49:36 +08:00
renovate[bot]
b9b1b53235 chore(deps): update dependency vite to ^6.0.6 2024-12-26 05:23:50 +00:00
renovate[bot]
708ebb8abc fix(deps): update dependency react-router-dom to ^7.1.1 2024-12-23 18:42:33 +00:00
renovate[bot]
83e763df0a fix(deps): update mantine monorepo to ^7.15.2 2024-12-23 11:22:09 +00:00
Jérémie Panzer
0ff812c1ea Merge pull request #1637 from Athou/renovate/lock-file-maintenance
chore(deps): lock file maintenance
2024-12-23 12:21:17 +01:00
renovate[bot]
3e9dd6d8e2 chore(deps): lock file maintenance 2024-12-23 10:39:01 +00:00
Jérémie Panzer
23af73e847 Merge pull request #1626 from Athou/renovate/mantine-monorepo
fix(deps): update mantine monorepo (minor)
2024-12-23 11:37:18 +01:00
renovate[bot]
e79e4719fd fix(deps): update mantine monorepo 2024-12-23 10:17:49 +00:00
Jérémie Panzer
23fef98432 Merge pull request #1636 from Athou/renovate/react-router-monorepo
fix(deps): update dependency react-router-dom to ^7.1.0
2024-12-21 10:50:32 +01:00
renovate[bot]
22478252e7 fix(deps): update dependency react-router-dom to ^7.1.0 2024-12-21 02:23:37 +00:00
Jérémie Panzer
76b1f3cd35 Merge pull request #1635 from Athou/renovate/vite-6.0.x
chore(deps): update dependency vite to ^6.0.5
2024-12-20 22:47:21 +01:00
renovate[bot]
420d73ec6a chore(deps): update dependency vite to ^6.0.5 2024-12-20 11:53:07 +00:00
renovate[bot]
e0211cfa0c chore(deps): update dependency @types/react to ^18.3.18 2024-12-20 02:18:48 +00:00
renovate[bot]
25a92c651c fix(deps): update quarkus.version to v3.17.5 2024-12-19 20:26:08 +00:00
renovate[bot]
0781205c69 chore(deps): update dependency vite to ^6.0.4 2024-12-19 11:15:48 +00:00
Jérémie Panzer
5102dd5e30 Merge pull request #1613 from Athou/renovate/vite-6.x
chore(deps): update dependency vite to v6
2024-12-16 21:30:14 +01:00
renovate[bot]
6ccfc3fd67 chore(deps): update dependency vite to v6 2024-12-16 20:14:47 +00:00
Athou
2791ed91ab lingui update 2024-12-16 21:11:54 +01:00
Jérémie Panzer
f40c198233 Merge pull request #1634 from Athou/renovate/npm-11.x
chore(deps): update dependency npm to v11
2024-12-16 20:57:57 +01:00
renovate[bot]
003dc63121 chore(deps): update dependency npm to v11 2024-12-16 19:36:39 +00:00
renovate[bot]
f8ef1e2a99 chore(deps): update dependency @types/react to ^18.3.17 2024-12-16 15:42:17 +00:00
renovate[bot]
14c7078940 fix(deps): update querydsl.version to v6.10.1 2024-12-16 00:30:43 +00:00
Jérémie Panzer
074836d3e8 Merge pull request #1632 from Athou/renovate/querydsl.version
fix(deps): update querydsl.version to v6.10 (minor)
2024-12-14 06:59:55 +01:00
renovate[bot]
0cdbc144b3 fix(deps): update querydsl.version to v6.10 2024-12-13 20:09:27 +00:00
Jérémie Panzer
dc63ec24c0 Merge pull request #1630 from Athou/renovate/com.puppycrawl.tools-checkstyle-10.x
chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.0
2024-12-12 22:42:41 +01:00
renovate[bot]
6d4c6c36a5 chore(deps): update dependency com.puppycrawl.tools:checkstyle to v10.21.0 2024-12-12 20:31:27 +00:00
renovate[bot]
464af5f4d9 fix(deps): update swagger.version to v2.2.27 2024-12-11 18:13:04 +00:00
renovate[bot]
aa94a46a3d fix(deps): update quarkus.version to v3.17.4 2024-12-11 16:27:30 +00:00
renovate[bot]
8542197dc3 chore(deps): update react monorepo 2024-12-11 06:15:47 +00:00
Jérémie Panzer
64d77eaef4 Merge pull request #1628 from Athou/renovate/reduxjs-toolkit-2.x
fix(deps): update dependency @reduxjs/toolkit to ^2.5.0
2024-12-11 07:14:49 +01:00
Jérémie Panzer
675ef8794c Merge pull request #1627 from Athou/renovate/react-redux-9.x
fix(deps): update dependency react-redux to ^9.2.0
2024-12-11 07:14:17 +01:00
renovate[bot]
4bcdbeb516 fix(deps): update dependency @reduxjs/toolkit to ^2.5.0 2024-12-11 04:59:19 +00:00
renovate[bot]
a9f37739fb fix(deps): update dependency react-redux to ^9.2.0 2024-12-11 02:11:18 +00:00
renovate[bot]
5ab0fc19da chore(deps): update dependency @types/react-dom to ^18.3.3 2024-12-09 22:54:32 +00:00
renovate[bot]
7b232425f3 fix(deps): update dependency monaco-editor to ^0.52.2 2024-12-09 19:06:36 +00:00
Jérémie Panzer
c0e7668140 Merge pull request #1625 from Athou/renovate/emotion-monorepo
fix(deps): update dependency @emotion/react to ^11.14.0
2024-12-09 16:02:32 +01:00
renovate[bot]
ae3f059257 fix(deps): update dependency @emotion/react to ^11.14.0 2024-12-09 12:04:31 +00:00
renovate[bot]
d44c7c1e95 fix(deps): update dependency tss-react to ^4.9.14 2024-12-09 07:48:44 +00:00
renovate[bot]
6cd9d134cf chore(deps): update dependency vite-tsconfig-paths to ^5.1.4 2024-12-07 05:53:17 +00:00
renovate[bot]
6f21ba8afc chore(deps): update react monorepo 2024-12-05 19:55:23 +00:00
renovate[bot]
b2fe13c117 chore(deps): update dependency npm to v10.9.2 2024-12-05 01:06:03 +00:00
renovate[bot]
03ece7a262 chore(deps): update dependency @types/react to ^18.3.13 (#1622)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-05 01:05:43 +00:00
renovate[bot]
697fde2d0e chore(deps): update quarkus.version to v3.17.3 2024-12-04 20:09:33 +00:00
renovate[bot]
7f0f85b356 fix(deps): update dependency axios to ^1.7.9 2024-12-04 09:43:27 +00:00
Jérémie Panzer
a7d41debfe Merge pull request #1621 from Athou/renovate/node-22.x
chore(deps): update node.js to v22.12.0
2024-12-04 07:21:31 +01:00
renovate[bot]
57bf758108 chore(deps): update node.js to v22.12.0 2024-12-03 21:03:12 +00:00
Jérémie Panzer
b37d933047 Merge pull request #1620 from Athou/renovate/react-icons-5.x
fix(deps): update dependency react-icons to ^5.4.0
2024-12-03 13:08:38 +01:00
renovate[bot]
80ffef4555 fix(deps): update dependency react-icons to ^5.4.0 2024-12-03 11:31:44 +00:00
renovate[bot]
af5a0002aa fix(deps): update dependency react-router-dom to ^7.0.2 2024-12-03 04:09:43 +00:00
Athou
cd24e412e3 release 5.3.6 2024-12-02 18:50:14 +01:00
Athou
a073d843ab ignore invalid cache control values (#1619) 2024-12-02 18:43:46 +01:00
renovate[bot]
8ccb59ed18 chore(deps): update dependency vitest to ^2.1.8 2024-12-02 14:56:45 +00:00
renovate[bot]
e6dc7d2d0d chore(deps): lock file maintenance 2024-12-02 03:59:25 +00:00
17 changed files with 1493 additions and 2421 deletions

View File

@@ -7,8 +7,57 @@ env:
DOCKER_BUILD_SUMMARY: false
jobs:
build-linux:
build:
strategy:
matrix:
os: [ "ubuntu-latest", "ubuntu-24.04-arm", "windows-latest" ]
database: [ "h2", "postgresql", "mysql", "mariadb" ]
runs-on: ${{ matrix.os }}
steps:
# Checkout
- name: Configure git to checkout as-is
run: git config --global core.autocrlf false
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Setup
- name: Set up GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: "graalvm"
cache: "maven"
- name: Install Playwright dependencies
run: sudo apt-get install -y libgbm1
if: matrix.os != 'windows-latest'
# Build & Test
- name: Build with Maven
run: mvn --batch-mode --no-transfer-progress install -Pnative -P${{ matrix.database }} -DskipTests=${{ matrix.os == 'windows-latest' && matrix.database != 'h2' }}
# Upload artifacts
- name: Upload cross-platform app
uses: actions/upload-artifact@v4
with:
name: commafeed-${{ matrix.database }}-jvm
path: commafeed-server/target/commafeed-*.zip
overwrite: true
- name: Upload native executable
uses: actions/upload-artifact@v4
with:
name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }}
path: commafeed-server/target/commafeed-*-runner*
docker:
needs: build
runs-on: ubuntu-latest
strategy:
matrix:
database: [ "h2", "postgresql", "mysql", "mariadb" ]
@@ -27,29 +76,29 @@ jobs:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set up GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: "graalvm"
cache: "maven"
- name: Install required packages
run: sudo apt-get install -y rename unzip
# Build & Test
- name: Build with Maven
run: mvn --batch-mode --no-transfer-progress install -Pnative -P${{ matrix.database }}
# Upload artifacts
- name: Upload cross-platform app
uses: actions/upload-artifact@v4
# Prepare artifacts
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: commafeed-${{ matrix.database }}-jvm
path: commafeed-server/target/commafeed-*.zip
pattern: commafeed-${{ matrix.database }}-*
path: ./artifacts
merge-multiple: true
- name: Upload native executable
uses: actions/upload-artifact@v4
with:
name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }}
path: commafeed-server/target/commafeed-*-runner
- name: Set the exec flag on the native executables
run: chmod +x artifacts/*-runner
- name: Rename native executables to match buildx TARGETARCH
run: |
rename 's/x86_64/amd64/g' artifacts/*
rename 's/aarch_64/arm64/g' artifacts/*
- name: Unzip jvm package
run: |
unzip artifacts/*-jvm.zip -d artifacts/extracted-jvm-package
rename 's/commafeed-.*/quarkus-app/g' artifacts/extracted-jvm-package/*
# Docker
- name: Login to Container Registry
@@ -67,7 +116,7 @@ jobs:
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
push: true
platforms: linux/amd64
platforms: linux/amd64,linux/arm64/v8
tags: |
athou/commafeed:latest-${{ matrix.database }}
athou/commafeed:${{ github.ref_name }}-${{ matrix.database }}
@@ -92,7 +141,7 @@ jobs:
context: .
file: commafeed-server/src/main/docker/Dockerfile.native
push: true
platforms: linux/amd64
platforms: linux/amd64,linux/arm64/v8
tags: athou/commafeed:master-${{ matrix.database }}
- name: Docker build and push master - jvm
@@ -105,46 +154,10 @@ jobs:
platforms: linux/amd64,linux/arm64/v8
tags: athou/commafeed:master-${{ matrix.database }}-jvm
build-windows:
runs-on: windows-latest
strategy:
matrix:
database: [ "h2", "postgresql", "mysql", "mariadb" ]
steps:
# Checkout
- name: Configure git to checkout as-is
run: git config --global core.autocrlf false
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Setup
- name: Set up GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: "graalvm"
cache: "maven"
# Build & Test
- name: Build with Maven
run: mvn --batch-mode --no-transfer-progress install -Pnative -P${{ matrix.database }} -DskipTests=${{ matrix.database != 'h2' }}
# Upload artifacts
- name: Upload native executable
uses: actions/upload-artifact@v4
with:
name: commafeed-${{ matrix.database }}-${{ runner.os }}-${{ runner.arch }}
path: commafeed-server/target/commafeed-*-runner.exe
release:
runs-on: ubuntu-latest
needs:
- build-linux
- build-windows
- build
if: github.ref_type == 'tag'
steps:
@@ -160,6 +173,9 @@ jobs:
path: ./artifacts
merge-multiple: true
- name: Set the exec flag on the native executables
run: chmod +x artifacts/*-runner
- name: Extract Changelog Entry
uses: mindsers/changelog-reader-action@v2
id: changelog_reader

View File

@@ -1,5 +1,15 @@
# Changelog
## [5.4.0]
- An arm64 native executable is now available for download on the releases page
- The native executable Docker image now supports arm64
- Fixed an issue with feeds that declared an invalid DOCTYPE (#1260)
## [5.3.6]
- Ignore invalid Cache-Control header values (#1619)
## [5.3.5]
- Fixed an issue with the aspect ratio of images of some feeds (#1595)

File diff suppressed because it is too large Load Diff

View File

@@ -15,23 +15,23 @@
"i18n:extract": "lingui extract --clean"
},
"dependencies": {
"@emotion/react": "^11.13.5",
"@fontsource/open-sans": "^5.1.0",
"@lingui/core": "^5.0.0",
"@lingui/react": "^5.0.0",
"@mantine/core": "^7.14.3",
"@mantine/form": "^7.14.3",
"@mantine/hooks": "^7.14.3",
"@mantine/modals": "^7.14.3",
"@mantine/notifications": "^7.14.3",
"@mantine/spotlight": "^7.14.3",
"@emotion/react": "^11.14.0",
"@fontsource/open-sans": "^5.1.1",
"@mantine/core": "^7.16.0",
"@mantine/form": "^7.16.0",
"@mantine/hooks": "^7.16.0",
"@mantine/modals": "^7.16.0",
"@mantine/notifications": "^7.16.0",
"@mantine/spotlight": "^7.16.0",
"@lingui/core": "^5.1.2",
"@lingui/react": "^5.1.2",
"@monaco-editor/react": "^4.6.0",
"@reduxjs/toolkit": "^2.4.0",
"axios": "^1.7.8",
"@reduxjs/toolkit": "^2.5.0",
"axios": "^1.7.9",
"dayjs": "^1.11.13",
"escape-string-regexp": "^5.0.0",
"interweave": "^13.1.0",
"monaco-editor": "^0.52.0",
"monaco-editor": "^0.52.2",
"mousetrap": "^1.6.5",
"react": "^18.3.1",
"react-async-hook": "^4.0.0",
@@ -41,26 +41,26 @@
"react-draggable": "^4.4.6",
"react-ga4": "^2.1.0",
"react-helmet": "^6.1.0",
"react-icons": "^5.3.0",
"react-icons": "^5.4.0",
"react-infinite-scroller": "^1.2.6",
"react-redux": "^9.1.2",
"react-router-dom": "^7.0.1",
"react-redux": "^9.2.0",
"react-router-dom": "^7.1.2",
"react-swipeable": "^7.0.2",
"redoc": "^2.2.0",
"redoc": "^2.3.0",
"style-to-object": "^1.0.8",
"throttle-debounce": "^5.0.2",
"tinycon": "^0.6.8",
"tss-react": "^4.9.13",
"tss-react": "^4.9.14",
"websocket-heartbeat-js": "^1.1.3"
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"@lingui/babel-plugin-lingui-macro": "^5.0.0",
"@lingui/cli": "^5.0.0",
"@lingui/vite-plugin": "^5.0.0",
"@lingui/babel-plugin-lingui-macro": "^5.1.2",
"@lingui/cli": "^5.1.2",
"@lingui/vite-plugin": "^5.1.2",
"@types/mousetrap": "^1.6.15",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@types/react-helmet": "^6.1.11",
"@types/react-infinite-scroller": "^1.2.5",
"@types/swagger-ui-react": "^4.18.3",
@@ -68,13 +68,13 @@
"@types/tinycon": "^0.6.7",
"@vitejs/plugin-react": "^4.3.4",
"babel-plugin-macros": "^3.1.0",
"jsdom": "^25.0.1",
"rollup-plugin-visualizer": "^5.12.0",
"typescript": "^5.7.2",
"vite": "^5.4.11",
"jsdom": "^26.0.0",
"rollup-plugin-visualizer": "^5.13.1",
"typescript": "^5.7.3",
"vite": "^6.0.7",
"vite-plugin-checker": "^0.8.0",
"vite-tsconfig-paths": "^5.1.3",
"vitest": "^2.1.6",
"vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.0.1",
"vitest-mock-extended": "^2.0.2"
}
}

View File

@@ -6,16 +6,16 @@
<parent>
<groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId>
<version>5.3.5</version>
<version>5.4.0</version>
</parent>
<artifactId>commafeed-client</artifactId>
<name>CommaFeed Client</name>
<properties>
<!-- renovate: datasource=node-version depName=node -->
<node.version>v22.11.0</node.version>
<node.version>v22.13.0</node.version>
<!-- renovate: datasource=npm depName=npm -->
<npm.version>10.9.1</npm.version>
<npm.version>11.0.0</npm.version>
</properties>
<build>

View File

@@ -142,7 +142,7 @@ msgstr "浏览器扩展"
#: src/components/settings/DisplaySettings.tsx
msgid "Browser tab"
msgstr ""
msgstr "浏览器标签页"
#: src/components/admin/UserEdit.tsx
#: src/components/content/add/AddCategory.tsx
@@ -323,7 +323,7 @@ msgstr "输入您当前的密码以更改配置文件设置"
#: src/components/settings/DisplaySettings.tsx
msgid "Entries to keep above the selected entry when scrolling"
msgstr ""
msgstr "滚动时固定在顶部的条目"
#: src/components/settings/DisplaySettings.tsx
msgid "Entry headers"
@@ -378,7 +378,7 @@ msgstr "过滤表达式"
#: src/components/header/ProfileMenu.tsx
msgid "Force fetching feeds is not yet available."
msgstr ""
msgstr "强制获取订阅源功能不可用。"
#: src/pages/auth/LoginPage.tsx
msgid "Forgot password?"
@@ -844,11 +844,11 @@ msgstr "显示星标图标"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab favicon"
msgstr ""
msgstr "在标签页图标上显示未读数量"
#: src/components/settings/DisplaySettings.tsx
msgid "Show unread count in tab title"
msgstr ""
msgstr "在标签页标题中显示未读数量"
#: src/pages/auth/RegistrationPage.tsx
#: src/pages/auth/RegistrationPage.tsx

View File

@@ -6,16 +6,16 @@
<parent>
<groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId>
<version>5.3.5</version>
<version>5.4.0</version>
</parent>
<artifactId>commafeed-server</artifactId>
<name>CommaFeed Server</name>
<properties>
<quarkus.version>3.17.2</quarkus.version>
<querydsl.version>6.9</querydsl.version>
<quarkus.version>3.17.7</quarkus.version>
<querydsl.version>6.10.1</querydsl.version>
<rome.version>2.1.0</rome.version>
<swagger.version>2.2.26</swagger.version>
<swagger.version>2.2.28</swagger.version>
<build.database>h2</build.database>
</properties>
@@ -241,7 +241,7 @@
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>10.20.2</version>
<version>10.21.1</version>
</dependency>
</dependencies>
<executions>
@@ -270,7 +270,7 @@
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.43.0</version>
<version>2.44.2</version>
<?m2e ignore?>
<executions>
<execution>
@@ -297,7 +297,7 @@
<dependency>
<groupId>com.commafeed</groupId>
<artifactId>commafeed-client</artifactId>
<version>5.3.5</version>
<version>5.4.0</version>
</dependency>
<!-- compile-time processors -->
@@ -361,7 +361,7 @@
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-json</artifactId>
<version>4.2.29</version>
<version>4.2.30</version>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
@@ -464,7 +464,7 @@
<dependency>
<groupId>io.github.hakky54</groupId>
<artifactId>sslcontext-kickstart-for-apache5</artifactId>
<version>8.3.7</version>
<version>9.0.0</version>
</dependency>
<!-- test dependencies -->

View File

@@ -4,7 +4,7 @@ EXPOSE 8082
RUN mkdir -p /commafeed/data
VOLUME /commafeed/data
COPY commafeed-server/target/quarkus-app/ /commafeed
COPY artifacts/extracted-jvm-package/quarkus-app/ /commafeed
WORKDIR /commafeed
CMD ["java", \

View File

@@ -1,10 +1,12 @@
FROM debian:12.8
FROM debian:12.9
ARG TARGETARCH
EXPOSE 8082
RUN mkdir -p /commafeed/data
VOLUME /commafeed/data
COPY commafeed-server/target/commafeed-*-runner /commafeed/application
COPY artifacts/commafeed-*-${TARGETARCH}-runner /commafeed/application
WORKDIR /commafeed
CMD ["./application"]

View File

@@ -92,5 +92,4 @@ Tags are of the form `<version>-<database>[-jvm]` where:
- `latest` (always points to the latest version)
- `master` (always points to the latest git commit)
- `<database>` is the database to use (`h2`, `postgresql`, `mysql` or `mariadb`)
- `-jvm` is optional and indicates that CommaFeed is running on a JVM, and not compiled natively. This image supports
the arm64 platform which is not yet supported by the native image.
- `-jvm` is optional and indicates that CommaFeed is running on a JVM, and not compiled natively.

View File

@@ -162,7 +162,7 @@ public class HttpGetter {
CacheControl cacheControl = Optional.ofNullable(resp.getFirstHeader(HttpHeaders.CACHE_CONTROL))
.map(NameValuePair::getValue)
.map(StringUtils::trimToNull)
.map(CacheControlDelegate.INSTANCE::fromString)
.map(HttpGetter::toCacheControl)
.orElse(null);
String contentType = Optional.ofNullable(resp.getEntity()).map(HttpEntity::getContentType).orElse(null);
@@ -176,6 +176,15 @@ public class HttpGetter {
});
}
private static CacheControl toCacheControl(String headerValue) {
try {
return CacheControlDelegate.INSTANCE.fromString(headerValue);
} catch (Exception e) {
log.debug("Invalid Cache-Control header: {}", headerValue);
return null;
}
}
private static byte[] toByteArray(HttpEntity entity, long maxBytes) throws IOException {
if (entity.getContentLength() > maxBytes) {
throw new IOException(

View File

@@ -1,6 +1,7 @@
package com.commafeed.backend.feed.parser;
import java.util.Collection;
import java.util.regex.Pattern;
import org.ahocorasick.trie.Emit;
import org.ahocorasick.trie.Trie;
@@ -11,6 +12,8 @@ import jakarta.inject.Singleton;
@Singleton
class FeedCleaner {
private static final Pattern DOCTYPE_PATTERN = Pattern.compile("<!DOCTYPE[^>]*>", Pattern.CASE_INSENSITIVE);
public String trimInvalidXmlCharacters(String xml) {
if (StringUtils.isBlank(xml)) {
return null;
@@ -60,4 +63,8 @@ class FeedCleaner {
return sb.toString();
}
public String removeDoctypeDeclarations(String xml) {
return DOCTYPE_PATTERN.matcher(xml).replaceAll("");
}
}

View File

@@ -64,6 +64,7 @@ public class FeedParser {
throw new FeedException("Input string is null for url " + feedUrl);
}
xmlString = feedCleaner.replaceHtmlEntitiesWithNumericEntities(xmlString);
xmlString = feedCleaner.removeDoctypeDeclarations(xmlString);
InputSource source = new InputSource(new StringReader(xmlString));
SyndFeed feed = new SyndFeedInput().build(source);

View File

@@ -50,6 +50,7 @@ quarkus.native.add-all-charsets=true
%test.commafeed.users.allow-registrations=true
%test.commafeed.password-recovery-enabled=true
%test.commafeed.http-client.cache.enabled=false
%test.commafeed.database.cleanup.entries-max-age=0
%test.commafeed.feed-refresh.force-refresh-cooldown-duration=1m

View File

@@ -94,7 +94,7 @@ class HttpGetterTest {
.withContentType(MediaType.APPLICATION_ATOM_XML)
.withHeader(HttpHeaders.LAST_MODIFIED, "123456")
.withHeader(HttpHeaders.ETAG, "78910")
.withHeader(HttpHeaders.CACHE_CONTROL, "max-age=60"));
.withHeader(HttpHeaders.CACHE_CONTROL, "max-age=60, must-revalidate"));
HttpResult result = getter.get(this.feedUrl);
Assertions.assertArrayEquals(feedContent, result.getContent());
@@ -105,6 +105,18 @@ class HttpGetterTest {
Assertions.assertEquals(this.feedUrl, result.getUrlAfterRedirect());
}
@Test
void ignoreInvalidCacheControlValue() throws Exception {
this.mockServerClient.when(HttpRequest.request().withMethod("GET"))
.respond(HttpResponse.response()
.withBody(feedContent)
.withContentType(MediaType.APPLICATION_ATOM_XML)
.withHeader(HttpHeaders.CACHE_CONTROL, "max-age=60; must-revalidate"));
HttpResult result = getter.get(this.feedUrl);
Assertions.assertEquals(Duration.ZERO, result.getValidFor());
}
@ParameterizedTest
@ValueSource(
ints = { HttpStatus.SC_MOVED_PERMANENTLY, HttpStatus.SC_MOVED_TEMPORARILY, HttpStatus.SC_TEMPORARY_REDIRECT,

View File

@@ -13,4 +13,22 @@ class FeedCleanerTest {
Assertions.assertEquals("<source>T&#180;l&#180;phone &#8242;</source>", feedCleaner.replaceHtmlEntitiesWithNumericEntities(source));
}
@Test
void testRemoveDoctype() {
String source = "<!DOCTYPE html><html><head></head><body></body></html>";
Assertions.assertEquals("<html><head></head><body></body></html>", feedCleaner.removeDoctypeDeclarations(source));
}
@Test
void testRemoveMultilineDoctype() {
String source = """
<!DOCTYPE
html
>
<html><head></head><body></body></html>""";
Assertions.assertEquals("""
<html><head></head><body></body></html>""", feedCleaner.removeDoctypeDeclarations(source));
}
}

View File

@@ -5,7 +5,7 @@
<groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId>
<version>5.3.5</version>
<version>5.4.0</version>
<name>CommaFeed</name>
<packaging>pom</packaging>