Compare commits

...

4 Commits

Author SHA1 Message Date
Immich Release Bot
b37162099e Version v1.46.1 2023-02-10 04:24:05 +00:00
Zack Pollard
dab74662e9 fix(server): fk constraint violation when updating to 1.46 with deleted users and albums (#1716)
Fixes #1715
2023-02-10 04:11:04 +00:00
bo0tzz
3d103046bc fix(ci): Add missing checkout step to prepare-release workflow (#1709) 2023-02-09 13:02:30 -06:00
Alex Tran
3ca62d9c55 Add changelogs 2023-02-09 13:00:28 -06:00
15 changed files with 79 additions and 22 deletions

View File

@@ -55,6 +55,11 @@ jobs:
needs: build_mobile
steps:
- name: Checkout
uses: actions/checkout@v3
with:
token: ${{ secrets.ORG_RELEASE_TOKEN }}
- name: Download APK
uses: actions/download-artifact@v3
with:

View File

@@ -36,7 +36,7 @@ platform :android do
build_type: 'Release',
properties: {
"android.injected.version.code" => 69,
"android.injected.version.name" => "1.46.0",
"android.injected.version.name" => "1.46.1",
}
)
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')

View File

@@ -0,0 +1,6 @@
* Library page rework (album sorting, favorites).
* Tap to enter immersive mode on the gallery viewer.
* Removed stay logged in the checkbox and made it enabled by default.
* Multiselect add to favorites from the timeline.
* Responsive layout improvements with a navigation rail and album grid.
* Home screen customization options.

View File

@@ -5,17 +5,17 @@
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000307">
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000281">
</testcase>
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="36.955598">
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="142.850758">
</testcase>
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="75.445063">
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="39.589103">
</testcase>

View File

@@ -1,5 +1,7 @@
PODS:
- Flutter (1.0.0)
- flutter_native_splash (0.0.1):
- Flutter
- flutter_udid (0.0.1):
- Flutter
- SAMKeychain
@@ -15,6 +17,8 @@ PODS:
- Flutter
- integration_test (0.0.1):
- Flutter
- isar_flutter_libs (1.0.0):
- Flutter
- package_info_plus (0.4.5):
- Flutter
- path_provider_ios (0.0.1):
@@ -40,11 +44,13 @@ PODS:
DEPENDENCIES:
- Flutter (from `Flutter`)
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
- flutter_udid (from `.symlinks/plugins/flutter_udid/ios`)
- flutter_web_auth (from `.symlinks/plugins/flutter_web_auth/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- integration_test (from `.symlinks/plugins/integration_test/ios`)
- isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- photo_manager (from `.symlinks/plugins/photo_manager/ios`)
@@ -64,6 +70,8 @@ SPEC REPOS:
EXTERNAL SOURCES:
Flutter:
:path: Flutter
flutter_native_splash:
:path: ".symlinks/plugins/flutter_native_splash/ios"
flutter_udid:
:path: ".symlinks/plugins/flutter_udid/ios"
flutter_web_auth:
@@ -74,6 +82,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/image_picker_ios/ios"
integration_test:
:path: ".symlinks/plugins/integration_test/ios"
isar_flutter_libs:
:path: ".symlinks/plugins/isar_flutter_libs/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_ios:
@@ -95,12 +105,14 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
flutter_udid: 0848809dbed4c055175747ae6a45a8b4f6771e1c
flutter_web_auth: c25208760459cec375a3c39f6a8759165ca0fa4d
fluttertoast: 16fbe6039d06a763f3533670197d01fc73459037
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb
integration_test: a1e7d09bd98eca2fc37aefd79d4f41ad37bdbbe5
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
photo_manager: 4f6810b7dfc4feb03b461ac1a70dacf91fba7604

View File

@@ -360,7 +360,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 84;
CURRENT_PROJECT_VERSION = 85;
DEVELOPMENT_TEAM = 2F67MQ8R79;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
@@ -495,7 +495,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 84;
CURRENT_PROJECT_VERSION = 85;
DEVELOPMENT_TEAM = 2F67MQ8R79;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
@@ -522,7 +522,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 84;
CURRENT_PROJECT_VERSION = 85;
DEVELOPMENT_TEAM = 2F67MQ8R79;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;

View File

@@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.43.0</string>
<string>1.46.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>82</string>
<string>85</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>MGLMapboxMetricsEnabledSettingShownInApp</key>

View File

@@ -19,7 +19,7 @@ platform :ios do
desc "iOS Beta"
lane :beta do
increment_version_number(
version_number: "1.46.0"
version_number: "1.46.1"
)
increment_build_number(
build_number: latest_testflight_build_number + 1,

View File

@@ -5,32 +5,32 @@
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000222">
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000283">
</testcase>
<testcase classname="fastlane.lanes" name="1: increment_version_number" time="2.33276">
<testcase classname="fastlane.lanes" name="1: increment_version_number" time="2.755864">
</testcase>
<testcase classname="fastlane.lanes" name="2: latest_testflight_build_number" time="5.370222">
<testcase classname="fastlane.lanes" name="2: latest_testflight_build_number" time="7.319767">
</testcase>
<testcase classname="fastlane.lanes" name="3: increment_build_number" time="1.977555">
<testcase classname="fastlane.lanes" name="3: increment_build_number" time="1.376562">
</testcase>
<testcase classname="fastlane.lanes" name="4: build_app" time="94.172587">
<testcase classname="fastlane.lanes" name="4: build_app" time="105.396514">
</testcase>
<testcase classname="fastlane.lanes" name="5: upload_to_testflight" time="82.579096">
<testcase classname="fastlane.lanes" name="5: upload_to_testflight" time="86.092896">
</testcase>

View File

@@ -1,5 +1,14 @@
import { immichAppConfig } from '@app/common/config';
import { AssetEntity, ExifEntity, SmartInfoEntity, UserEntity, APIKeyEntity, InfraModule } from '@app/infra';
import {
AssetEntity,
ExifEntity,
SmartInfoEntity,
UserEntity,
APIKeyEntity,
InfraModule,
UserTokenEntity,
AlbumEntity,
} from '@app/infra';
import { StorageModule } from '@app/storage';
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@@ -23,7 +32,15 @@ import { DomainModule } from '@app/domain';
DomainModule.register({
imports: [InfraModule],
}),
TypeOrmModule.forFeature([UserEntity, ExifEntity, AssetEntity, SmartInfoEntity, APIKeyEntity]),
TypeOrmModule.forFeature([
UserEntity,
ExifEntity,
AssetEntity,
SmartInfoEntity,
APIKeyEntity,
UserTokenEntity,
AlbumEntity,
]),
StorageModule,
CommunicationModule,
],

View File

@@ -1,5 +1,5 @@
import { APP_UPLOAD_LOCATION, userUtils } from '@app/common';
import { APIKeyEntity, AssetEntity, UserEntity } from '@app/infra';
import { AlbumEntity, APIKeyEntity, AssetEntity, UserEntity, UserTokenEntity } from '@app/infra';
import { QueueName, JobName } from '@app/domain';
import { IUserDeletionJob } from '@app/domain';
import { Process, Processor } from '@nestjs/bull';
@@ -23,6 +23,12 @@ export class UserDeletionProcessor {
@InjectRepository(APIKeyEntity)
private apiKeyRepository: Repository<APIKeyEntity>,
@InjectRepository(UserTokenEntity)
private userTokenRepository: Repository<UserTokenEntity>,
@InjectRepository(AlbumEntity)
private albumRepository: Repository<AlbumEntity>,
) {}
@Process(JobName.USER_DELETION)
@@ -44,6 +50,16 @@ export class UserDeletionProcessor {
fs.rmSync(userAssetDir, { recursive: true, force: true });
this.logger.warn(`Removing user from database: ${user.id}`);
const userTokens = await this.userTokenRepository.find({
where: { user: { id: user.id } },
relations: { user: true },
withDeleted: true,
});
await this.userTokenRepository.remove(userTokens);
const albums = await this.albumRepository.find({ where: { ownerId: user.id } });
await this.albumRepository.remove(albums);
await this.apiKeyRepository.delete({ userId: user.id });
await this.assetRepository.delete({ userId: user.id });
await this.userRepository.remove(user);

View File

@@ -2689,7 +2689,7 @@
"info": {
"title": "Immich",
"description": "Immich API",
"version": "1.46.0",
"version": "1.46.1",
"contact": {}
},
"tags": [],

View File

@@ -4,6 +4,7 @@ export class AddAlbumUserForeignKeyConstraint1675701909594 implements MigrationI
name = 'AddAlbumUserForeignKeyConstraint1675701909594';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DELETE FROM "albums" WHERE "ownerId"::uuid NOT IN (SELECT id FROM "users") `)
await queryRunner.query(`ALTER TABLE "albums" ALTER COLUMN "ownerId" TYPE varchar(36)`);
await queryRunner.query(`ALTER TABLE "albums" ALTER COLUMN "ownerId" TYPE uuid using "ownerId"::uuid`);
await queryRunner.query(

View File

@@ -1,6 +1,6 @@
{
"name": "immich",
"version": "1.46.0",
"version": "1.46.1",
"lockfileVersion": 2,
"requires": true,
"packages": {

View File

@@ -1,6 +1,6 @@
{
"name": "immich",
"version": "1.46.0",
"version": "1.46.1",
"description": "",
"author": "",
"private": true,