mirror of
https://github.com/immich-app/immich.git
synced 2026-06-12 19:11:52 -07:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 42d9c8cfcf | |||
| e31d4aa909 | |||
| 43b2d04e2c |
@@ -50,6 +50,7 @@ jobs:
|
||||
outputs:
|
||||
ref: ${{ steps.push-tag.outputs.commit_long_sha }}
|
||||
version: ${{ steps.output.outputs.version }}
|
||||
rc: ${{ steps.output.outputs.rc }}
|
||||
permissions: {} # No job-level permissions are needed because it uses the app-token
|
||||
steps:
|
||||
- id: token
|
||||
@@ -81,7 +82,13 @@ jobs:
|
||||
run: pnpm --silent release -s "${SERVER_BUMP}" -m "${MOBILE_BUMP}"
|
||||
|
||||
- id: output
|
||||
run: echo "version=$IMMICH_VERSION" >> $GITHUB_OUTPUT
|
||||
run: |
|
||||
echo "version=$IMMICH_VERSION" >> $GITHUB_OUTPUT
|
||||
if [[ "$IMMICH_VERSION" =~ -rc\.[0-9]+$ ]]; then
|
||||
echo "rc=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "rc=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Commit and tag
|
||||
id: push-tag
|
||||
@@ -145,6 +152,7 @@ jobs:
|
||||
uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
|
||||
with:
|
||||
draft: true
|
||||
prerelease: ${{ needs.bump_version.outputs.rc }}
|
||||
tag_name: ${{ needs.bump_version.outputs.version }}
|
||||
token: ${{ steps.generate-token.outputs.token }}
|
||||
generate_release_notes: true
|
||||
|
||||
@@ -95,7 +95,7 @@ describe('/server', () => {
|
||||
major: expect.any(Number),
|
||||
minor: expect.any(Number),
|
||||
patch: expect.any(Number),
|
||||
prerelease: null,
|
||||
prerelease: expect.anything(),
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+2
-2
@@ -2390,12 +2390,12 @@
|
||||
"trashed_items_will_be_permanently_deleted_after": "Smazané položky budou trvale odstraněny po {days, plural, one {# dni} other {# dnech}}.",
|
||||
"trigger": "Spouštěč",
|
||||
"trigger_asset_metadata_extraction": "Extrakce metadat položek",
|
||||
"trigger_asset_metadata_extraction_description": "Spustí se při extrakci EXIF údajů z mediálního souboru",
|
||||
"trigger_asset_metadata_extraction_description": "Spustí se při extrakci EXIF metadat z mediálního souboru",
|
||||
"trigger_asset_uploaded": "Nahrání položky",
|
||||
"trigger_asset_uploaded_description": "Spustí se při nahrání nového souboru",
|
||||
"trigger_description": "Událost, která spustí pracovní postup",
|
||||
"trigger_person_recognized": "Osoba rozpoznána",
|
||||
"trigger_person_recognized_description": "Spustí se, když je objevena osoba",
|
||||
"trigger_person_recognized_description": "Spustí se, když je rozpoznána osoba",
|
||||
"trigger_type": "Typ spouštěče",
|
||||
"troubleshoot": "Diagnostika",
|
||||
"type": "Typ",
|
||||
|
||||
+3
-3
@@ -2020,13 +2020,13 @@
|
||||
"search_albums": "Albumok keresése",
|
||||
"search_by_context": "Keresés tartalom alapján",
|
||||
"search_by_description": "Keresés leírás alapján",
|
||||
"search_by_description_example": "Túrázós nap Szapában",
|
||||
"search_by_description_example": "Például: túrázós nap a hegyekben",
|
||||
"search_by_filename": "Keresés fájlnév vagy kiterjesztés alapján",
|
||||
"search_by_filename_example": "például IMG_1234.JPG vagy PNG",
|
||||
"search_by_full_path": "Keresés teljes elérési út vagy mappa alapján",
|
||||
"search_by_full_path_example": "/Jancsi/Projektek/3D_nyomtatás/2026-07-01 – kereshetsz a Projektek, 3D, Nyomtatás, 2026 stb. kifejezésekre.",
|
||||
"search_by_ocr": "Keresés szövegfelismeréssel (OCR)",
|
||||
"search_by_ocr_example": "Latte",
|
||||
"search_by_ocr_example": "Például: számla",
|
||||
"search_camera_lens_model": "Keresés objektívmodell alapján...",
|
||||
"search_camera_make": "Kameragyártó keresése...",
|
||||
"search_camera_model": "Kameramodell keresése...",
|
||||
@@ -2308,7 +2308,7 @@
|
||||
"submit": "Beküldés",
|
||||
"success": "Siker",
|
||||
"suggestions": "Javaslatok",
|
||||
"sunrise_on_the_beach": "Napkelte a tengerparton",
|
||||
"sunrise_on_the_beach": "Például: napfelkelte a tengerparton",
|
||||
"support": "Támogatás",
|
||||
"support_and_feedback": "Támogatás és visszajelzés",
|
||||
"support_third_party_description": "Az Immich telepítésedet egy harmadik fél csomagolta. Mivel elképzelhető, hogy az esetlegesen felmerülő problémákat ez a csomag okozza, ezért kérjük, először velük közöld a problémákat az alábbi linkek segítségével.",
|
||||
|
||||
+4
-4
@@ -2165,8 +2165,8 @@
|
||||
"share_assets_selected": "Wybrano {count}",
|
||||
"share_dialog_preparing": "Przygotowywanie…",
|
||||
"share_link": "Udostępnij link",
|
||||
"share_original": "Użyj orginału (dużej)",
|
||||
"share_preview": "Użyj miniatury (małej)",
|
||||
"share_original": "Użyj orginału (duży)",
|
||||
"share_preview": "Użyj miniatury (mała)",
|
||||
"shared": "Udostępnione",
|
||||
"shared_album_activities_input_disable": "Komentarz jest wyłączony",
|
||||
"shared_album_activity_remove_content": "Czy chcesz usunąć tę aktywność?",
|
||||
@@ -2390,12 +2390,12 @@
|
||||
"trashed_items_will_be_permanently_deleted_after": "Wyrzucone zasoby zostaną trwale usunięte po {days, plural, one {jednym dniu} other {# dniach}}.",
|
||||
"trigger": "Wyzwalacz",
|
||||
"trigger_asset_metadata_extraction": "Ekstrakcja metadanych zasobów",
|
||||
"trigger_asset_metadata_extraction_description": "Wyzwalane, gdy wyodrębniony zostanie plik EXIF zasobu",
|
||||
"trigger_asset_metadata_extraction_description": "Wyzwalane po wyodrębnieniu metadanych EXIF z zasobu",
|
||||
"trigger_asset_uploaded": "Przesyłanie zasobu",
|
||||
"trigger_asset_uploaded_description": "Wyzwalane gdy przesłany zostanie nowy zasób",
|
||||
"trigger_description": "Wydarzenie, które uruchamia przepływ pracy",
|
||||
"trigger_person_recognized": "Osoba rozpoznana",
|
||||
"trigger_person_recognized_description": "Wyzwalane gdy zostanie wykryta osoba",
|
||||
"trigger_person_recognized_description": "Wyzwalane gdy osoba zostanie rozpoznana",
|
||||
"trigger_type": "Rodzaj wyzwalacza",
|
||||
"troubleshoot": "Rozwiąż problemy",
|
||||
"type": "Typ",
|
||||
|
||||
+3
-3
@@ -114,7 +114,7 @@
|
||||
"image_thumbnail_quality_description": "Kvalita miniatúry v stupnici od 1 do 100. Vyššia hodnota znamená lepšiu kvalitu, ale produkuje väčšie súbory a môže znížiť odozvu aplikácie.",
|
||||
"image_thumbnail_title": "Miniatúry",
|
||||
"import_config_from_json_description": "Importovať konfiguráciu systému nahraním konfiguračného súboru JSON",
|
||||
"job_concurrency": "Súbežnosť úlohy - {job}",
|
||||
"job_concurrency": "Súbežné úlohy - {job}",
|
||||
"job_created": "Úloha bola vytvorená",
|
||||
"job_not_concurrency_safe": "Táto úloha nie je bezpečná pre súbežné spracovanie.",
|
||||
"job_settings": "Úlohy",
|
||||
@@ -2390,12 +2390,12 @@
|
||||
"trashed_items_will_be_permanently_deleted_after": "Položky v koši sa natrvalo vymažú po {days, plural, one {# dni} other {# dňoch}}.",
|
||||
"trigger": "Spúšťač",
|
||||
"trigger_asset_metadata_extraction": "Extrakcia metadát položky",
|
||||
"trigger_asset_metadata_extraction_description": "Spustí sa pri extrakcii údajov EXIF z mediálneho súboru",
|
||||
"trigger_asset_metadata_extraction_description": "Spustí sa pri extrakcii EXIF metadát z mediálneho súboru",
|
||||
"trigger_asset_uploaded": "Nahranie položiek",
|
||||
"trigger_asset_uploaded_description": "Spustí sa pri nahratí novej položky",
|
||||
"trigger_description": "Udalosť, ktorá spustí pracovný postup",
|
||||
"trigger_person_recognized": "Osoba bola rozpoznaná",
|
||||
"trigger_person_recognized_description": "Spustí sa, keď bude objavená osoba",
|
||||
"trigger_person_recognized_description": "Spustí sa, keď sa rozpozná osoba",
|
||||
"trigger_type": "Typ spúšťača",
|
||||
"troubleshoot": "Riešenie problémov",
|
||||
"type": "Typ",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { DateTime } from 'luxon';
|
||||
import { SemVer } from 'semver';
|
||||
import { defaults } from 'src/config';
|
||||
import { serverVersion } from 'src/constants';
|
||||
import { ReleaseChannel } from 'src/dtos/system-config.dto';
|
||||
import { CronJob, JobName, JobStatus, SystemMetadataKey } from 'src/enum';
|
||||
import { VersionService } from 'src/services/version.service';
|
||||
@@ -23,16 +22,10 @@ describe(VersionService.name, () => {
|
||||
mocks.cron.update.mockResolvedValue();
|
||||
});
|
||||
|
||||
beforeAll(() => {
|
||||
vitest.mock(import('src/constants.js'), async () => ({
|
||||
...(await vitest.importActual<typeof import('src/constants.js')>('src/constants.js')),
|
||||
serverVersion: new SemVer('v3.0.0'),
|
||||
}));
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
vitest.unmock(import('src/constants.js'));
|
||||
});
|
||||
vitest.mock(import('src/constants.js'), async (importOriginal) => ({
|
||||
...(await importOriginal()),
|
||||
serverVersion: new SemVer('v3.0.0'),
|
||||
}));
|
||||
|
||||
it('should work', () => {
|
||||
expect(sut).toBeDefined();
|
||||
@@ -53,7 +46,7 @@ describe(VersionService.name, () => {
|
||||
mocks.versionHistory.getLatest.mockResolvedValue({
|
||||
id: 'version-1',
|
||||
createdAt: new Date(),
|
||||
version: serverVersion.toString(),
|
||||
version: '3.0.0',
|
||||
});
|
||||
await expect(sut.onBootstrap()).resolves.toBeUndefined();
|
||||
expect(mocks.versionHistory.create).not.toHaveBeenCalled();
|
||||
@@ -64,7 +57,7 @@ describe(VersionService.name, () => {
|
||||
mocks.versionHistory.getLatest.mockResolvedValue({
|
||||
id: 'version-1',
|
||||
createdAt: new Date(),
|
||||
version: serverVersion.toString(),
|
||||
version: '3.0.0',
|
||||
});
|
||||
await sut.onBootstrap();
|
||||
expect(mocks.cron.create).toHaveBeenCalledWith(
|
||||
@@ -121,7 +114,7 @@ describe(VersionService.name, () => {
|
||||
checkedAt: DateTime.utc().minus({ seconds: 60 }).toISO(),
|
||||
releaseVersion: '1.0.0',
|
||||
});
|
||||
mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse(serverVersion.toString()));
|
||||
mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse('v3.0.0'));
|
||||
await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Success);
|
||||
expect(mocks.serverInfo.getLatestRelease).toHaveBeenCalled();
|
||||
});
|
||||
@@ -135,11 +128,11 @@ describe(VersionService.name, () => {
|
||||
});
|
||||
|
||||
it('should not notify if the version is equal', async () => {
|
||||
mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse(serverVersion.toString()));
|
||||
mocks.serverInfo.getLatestRelease.mockResolvedValue(mockVersionResponse('v3.0.0'));
|
||||
await expect(sut.handleVersionCheck()).resolves.toEqual(JobStatus.Success);
|
||||
expect(mocks.systemMetadata.set).toHaveBeenCalledWith(SystemMetadataKey.VersionCheckState, {
|
||||
checkedAt: expect.any(String),
|
||||
releaseVersion: serverVersion.toString(),
|
||||
releaseVersion: 'v3.0.0',
|
||||
});
|
||||
expect(mocks.websocket.clientBroadcast).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user