Compare commits

..

8 Commits

Author SHA1 Message Date
Syer10
a1770cb055 Release v2.3.2238 2026-07-05 15:22:03 -04:00
Mitchell Syer
cf3589f272 Improve winget action (#2164) 2026-07-05 14:23:43 -04:00
Mitchell Syer
d7a839b1fd Fix automatic docker deploy for stable builds (#2162) 2026-07-05 14:23:30 -04:00
Mitchell Syer
5d46f2a197 Use temporary file for H2 migration tools download (#2169) 2026-07-05 14:23:15 -04:00
Mitchell Syer
fbd3a3cc5d Support Fully Qualified Class Names (#2168)
* Support Fully Qualified Class Names

* Lint
2026-07-05 14:23:01 -04:00
Mitchell Syer
41d23c0a09 Return Partial Manga Data with Errors (#2166)
* Return Partial Manga Data with Errors

* Lint

* Optimize imports

* Update server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/MangaMutation.kt

Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>

* Update server/src/main/kotlin/suwayomi/tachidesk/graphql/mutations/MangaMutation.kt

Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>

---------

Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>
2026-07-05 14:22:28 -04:00
Syer10
f473135d04 Release v2.3.2232 2026-07-03 19:09:53 -04:00
Mitchell Syer
36ecb3ce6f Update APK url on installed Extensions (#2159)
* Update APK url on installed Extensions

* Changelog
2026-07-02 13:39:03 -04:00
8 changed files with 97 additions and 18 deletions

View File

@@ -42,7 +42,7 @@ body:
label: Suwayomi-Server version
description: You can find your Suwayomi-Server version in **More → About**.
placeholder: |
Example: "v2.3.2230"
Example: "v2.3.2238"
validations:
required: true

View File

@@ -11,5 +11,5 @@ jobs:
steps:
- name: run docker build and publish script
run: |
curl -X POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ${{ secrets.DEPLOY_PREVIEW_TOKEN }}" -d '{"ref":"main", "inputs":{"tachidesk_release_type": "stable"}}' https://api.github.com/repos/suwayomi/docker-tachidesk/actions/workflows/build_container_images.yml/dispatches
curl -X POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: token ${{ secrets.DEPLOY_DOCKER_TOKEN }}" -d '{"ref":"main", "inputs":{"tachidesk_release_type": "stable"}}' https://api.github.com/repos/suwayomi/suwayomi-server-docker/actions/workflows/build_container_images.yml/dispatches

View File

@@ -1,19 +1,52 @@
name: Publish to WinGet
on:
workflow_dispatch:
inputs:
version:
description: Version
required: false
type: string
release:
types: [published]
jobs:
publish:
runs-on: windows-latest # action can only be run on windows
steps:
- uses: actions/checkout@v4
- name: Determine version
id: version
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
if [ -n "${{ inputs.version }}" ]; then
VERSION="${{ inputs.version }}"
elif [ "${{ github.event_name }}" = "release" ]; then
VERSION="${{ github.event.release.tag_name }}"
else
VERSION="$(gh release view --json tagName -q .tagName)"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Sync winget-pkgs fork with upstream
shell: bash
env:
GH_TOKEN: ${{ secrets.WINGET_PUBLISH_PAT }}
run: |
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
"/repos/Suwayomi/winget-pkgs/merge-upstream" \
-f branch=master
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Suwayomi.Suwayomi-Server
installers-regex: '.*x64.msi$'
token: ${{ secrets.WINGET_PUBLISH_PAT }}
version: ${{ inputs.version || github.ref_name }}
release-tag: ${{ inputs.version || github.ref_name }}
version: ${{ steps.version.outputs.version }}
release-tag: ${{ steps.version.outputs.version }}

View File

@@ -15,6 +15,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Fixed
- .
## [v2.3.2238] - 2026-07-05
### Changed
- (**Extension**) Support fully qualified extension class names
- (**Manga/API**) Return partial responses for Manga And Chapters query
### Fixed
- (**Database/H2**) Use temporary file for H2 migration tools download
## [v2.3.2232] - 2026-07-03
### Fixed
- (**Extension**) Update APK url on installed Extensions
## [v2.3.2230] - 2026-07-01
### Fixed
@@ -486,7 +500,9 @@ Huge thanks to @martinek who pulled the most of the weight this release!
<!-- SERVER LINKS -->
[unreleased]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2230...HEAD
[unreleased]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2238...HEAD
[v2.3.2238]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2232...v2.3.2238
[v2.3.2232]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2230...v2.3.2232
[v2.3.2230]: https://github.com/suwayomi/suwayomi-server/compare/v2.3.2223...v2.3.2230
[v2.3.2223]: https://github.com/suwayomi/suwayomi-server/compare/v2.2.2100...v2.3.2223
[v2.2.2100]: https://github.com/suwayomi/suwayomi-server/compare/v2.1.1867...v2.2.2100

View File

@@ -3,6 +3,8 @@
package suwayomi.tachidesk.graphql.mutations
import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
import com.expediagroup.graphql.server.extensions.toGraphQLError
import graphql.execution.DataFetcherResult
import org.jetbrains.exposed.v1.core.LikePattern
import org.jetbrains.exposed.v1.core.Op
import org.jetbrains.exposed.v1.core.and
@@ -181,15 +183,21 @@ class MangaMutation {
)
@RequireAuth
fun fetchMangaAndChapters(input: FetchMangaAndChaptersInput): CompletableFuture<FetchMangaAndChaptersPayload?> {
fun fetchMangaAndChapters(input: FetchMangaAndChaptersInput): CompletableFuture<DataFetcherResult<FetchMangaAndChaptersPayload?>> {
val (clientMutationId, id, fetchManga, fetchChapters) = input
return future {
Manga.updateMangaAndChapters(
mangaId = id,
updateManga = fetchManga,
updateChapters = fetchChapters,
)
val error =
try {
Manga.updateMangaAndChapters(
mangaId = id,
updateManga = fetchManga,
updateChapters = fetchChapters,
)
null
} catch (e: Exception) {
e
}
val (manga, chapters) =
transaction {
@@ -202,11 +210,20 @@ class MangaMutation {
.map { ChapterType(it) },
)
}
FetchMangaAndChaptersPayload(
clientMutationId = clientMutationId,
manga = MangaType(manga),
chapters = chapters,
)
@Suppress("UNCHECKED_CAST")
DataFetcherResult
.newResult<FetchMangaAndChaptersPayload>()
.data(
FetchMangaAndChaptersPayload(
clientMutationId = clientMutationId,
manga = MangaType(manga),
chapters = chapters,
),
).also {
if (error != null) {
it.error(error.toGraphQLError())
}
}.build() as DataFetcherResult<FetchMangaAndChaptersPayload?>
}
}

View File

@@ -166,8 +166,17 @@ object Extension {
}
}
val sourceClass =
packageInfo.applicationInfo.metaData
.getString(METADATA_SOURCE_CLASS)!!
.trim()
val className =
packageInfo.packageName + packageInfo.applicationInfo.metaData.getString(METADATA_SOURCE_CLASS)
if (sourceClass.startsWith(".")) {
packageInfo.packageName + sourceClass
} else {
sourceClass
}
logger.debug { "Main class for extension is $className" }

View File

@@ -132,6 +132,7 @@ object ExtensionsList {
// Always update icon url and repo
this[ExtensionTable.iconUrl] = foundExtension.iconUrl
this[ExtensionTable.storeIndexUrl] = foundExtension.storeIndexUrl
this[ExtensionTable.apkUrl] = foundExtension.apkUrl
// add these because batch updates need matching columns
this[ExtensionTable.hasUpdate] = extensionRecord[ExtensionTable.hasUpdate]

View File

@@ -130,9 +130,12 @@ object H2Migration {
)
}
output.outputStream().use { out ->
val tmp = output.resolveSibling(output.name + ".tmp")
tmp.outputStream().use { out ->
response.body.byteStream().copyTo(out)
}
tmp.copyTo(output)
tmp.deleteExisting()
}
logger.info { "Saved: ${output.absolutePathString()}" }