From b7584bd0c233895ee6d9d83dca36018be7584731 Mon Sep 17 00:00:00 2001 From: Strycher Date: Mon, 20 Jul 2026 20:58:29 -0400 Subject: [PATCH] chore(#352): generate drift code in CI instead of committing it Replaces the stopgap (53f87f5) that committed lib/storage/drift/offband_database.g.dart to green CI. Restores the repo's "generated files are not committed" convention: - dropped the .gitignore negation; the .g.dart is gitignored + untracked (git rm --cached, working copy kept) - added `dart run build_runner build --delete-conflicting-outputs` immediately after `flutter pub get` in every Dart job: flutter_dart (analyze), build.yml (all 6), release-signed (android-signed), deploy-web (before build_pipe) - keeps the drift_dev 2.34.0 / drift 2.34.2 / build_runner ^2.15.1 pins from the stopgap for deterministic generation Verified locally on the bench toolchain (3.44.1): deleted the working .g.dart, ran build_runner from scratch (regenerated cleanly), confirmed the generated file passes `dart format --set-exit-if-changed` and full `flutter analyze --fatal-infos --fatal-warnings` is clean with the file generated (not tracked). For #335 / PR #348. Agent: SapphireCompass (session 8d755b5e) --- .github/workflows/build.yml | 6 + .github/workflows/deploy-web.yml | 1 + .github/workflows/flutter_dart.yml | 3 + .github/workflows/release-signed.yml | 1 + .gitignore | 3 - lib/storage/drift/offband_database.g.dart | 445 ---------------------- 6 files changed, 11 insertions(+), 448 deletions(-) delete mode 100644 lib/storage/drift/offband_database.g.dart diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 238f426..1c1ba57 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,6 +30,7 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - run: flutter pub get + - run: dart run build_runner build --delete-conflicting-outputs - name: Write dart_defines.json env: GIPHY_API_KEY: ${{ secrets.GIPHY_API_KEY }} @@ -52,6 +53,7 @@ jobs: flutter-version: "3.44.1" cache: true - run: flutter pub get + - run: dart run build_runner build --delete-conflicting-outputs - run: flutter build ios --release --no-codesign --no-pub linux: @@ -65,6 +67,7 @@ jobs: - name: Install Linux build deps run: sudo apt-get update && sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev - run: flutter pub get + - run: dart run build_runner build --delete-conflicting-outputs - name: Write dart_defines.json env: GIPHY_API_KEY: ${{ secrets.GIPHY_API_KEY }} @@ -87,6 +90,7 @@ jobs: flutter-version: "3.44.1" cache: true - run: flutter pub get + - run: dart run build_runner build --delete-conflicting-outputs - run: flutter build macos --release --no-pub web: @@ -98,6 +102,7 @@ jobs: flutter-version: "3.44.1" cache: true - run: flutter pub get + - run: dart run build_runner build --delete-conflicting-outputs - name: Write dart_defines.json env: GIPHY_API_KEY: ${{ secrets.GIPHY_API_KEY }} @@ -120,6 +125,7 @@ jobs: flutter-version: "3.44.1" cache: true - run: flutter pub get + - run: dart run build_runner build --delete-conflicting-outputs # Windows runner defaults to PowerShell; jq is not guaranteed there, # so build the JSON with ConvertTo-Json, which escapes correctly. - name: Write dart_defines.json diff --git a/.github/workflows/deploy-web.yml b/.github/workflows/deploy-web.yml index 21a5c8a..3fb45c9 100644 --- a/.github/workflows/deploy-web.yml +++ b/.github/workflows/deploy-web.yml @@ -50,6 +50,7 @@ jobs: cache: true - run: flutter pub get + - run: dart run build_runner build --delete-conflicting-outputs # Same mechanism as build.yml (#331). build_pipe's build_command in # pubspec.yaml passes --dart-define-from-file, so this file must exist diff --git a/.github/workflows/flutter_dart.yml b/.github/workflows/flutter_dart.yml index bff800d..4076ea5 100644 --- a/.github/workflows/flutter_dart.yml +++ b/.github/workflows/flutter_dart.yml @@ -22,6 +22,9 @@ jobs: - name: Install dependencies run: flutter pub get + - name: Generate code (drift / build_runner) + run: dart run build_runner build --delete-conflicting-outputs + - name: Analyze code run: flutter analyze --fatal-infos --fatal-warnings diff --git a/.github/workflows/release-signed.yml b/.github/workflows/release-signed.yml index 6a255b0..2f1b806 100644 --- a/.github/workflows/release-signed.yml +++ b/.github/workflows/release-signed.yml @@ -100,6 +100,7 @@ jobs: echo "Keystore decoded (${SIZE} bytes), key.properties written." - run: flutter pub get + - run: dart run build_runner build --delete-conflicting-outputs # Same mechanism as build.yml (#331). A signed release that shipped # without the Giphy key would have a dead GIF picker. diff --git a/.gitignore b/.gitignore index a2b2a17..31e840c 100644 --- a/.gitignore +++ b/.gitignore @@ -93,6 +93,3 @@ keystore.properties # Local build secrets (Giphy etc.) — injected via --dart-define-from-file dart_defines.json - -# drift generated code is committed so CI needs no build_runner step (#335) -!/lib/storage/drift/offband_database.g.dart diff --git a/lib/storage/drift/offband_database.g.dart b/lib/storage/drift/offband_database.g.dart deleted file mode 100644 index 38c23ac..0000000 --- a/lib/storage/drift/offband_database.g.dart +++ /dev/null @@ -1,445 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'offband_database.dart'; - -// ignore_for_file: type=lint -class $StoredBlobsTable extends StoredBlobs - with TableInfo<$StoredBlobsTable, StoredBlob> { - @override - final GeneratedDatabase attachedDatabase; - final String? _alias; - $StoredBlobsTable(this.attachedDatabase, [this._alias]); - static const VerificationMeta _keyMeta = const VerificationMeta('key'); - @override - late final GeneratedColumn key = GeneratedColumn( - 'key', - aliasedName, - false, - type: DriftSqlType.string, - requiredDuringInsert: true, - ); - static const VerificationMeta _valueMeta = const VerificationMeta('value'); - @override - late final GeneratedColumn value = GeneratedColumn( - 'value', - aliasedName, - false, - type: DriftSqlType.string, - requiredDuringInsert: true, - ); - static const VerificationMeta _updatedAtMeta = const VerificationMeta( - 'updatedAt', - ); - @override - late final GeneratedColumn updatedAt = GeneratedColumn( - 'updated_at', - aliasedName, - false, - type: DriftSqlType.dateTime, - requiredDuringInsert: false, - defaultValue: currentDateAndTime, - ); - @override - List get $columns => [key, value, updatedAt]; - @override - String get aliasedName => _alias ?? actualTableName; - @override - String get actualTableName => $name; - static const String $name = 'stored_blobs'; - @override - VerificationContext validateIntegrity( - Insertable instance, { - bool isInserting = false, - }) { - final context = VerificationContext(); - final data = instance.toColumns(true); - if (data.containsKey('key')) { - context.handle( - _keyMeta, - key.isAcceptableOrUnknown(data['key']!, _keyMeta), - ); - } else if (isInserting) { - context.missing(_keyMeta); - } - if (data.containsKey('value')) { - context.handle( - _valueMeta, - value.isAcceptableOrUnknown(data['value']!, _valueMeta), - ); - } else if (isInserting) { - context.missing(_valueMeta); - } - if (data.containsKey('updated_at')) { - context.handle( - _updatedAtMeta, - updatedAt.isAcceptableOrUnknown(data['updated_at']!, _updatedAtMeta), - ); - } - return context; - } - - @override - Set get $primaryKey => {key}; - @override - StoredBlob map(Map data, {String? tablePrefix}) { - final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; - return StoredBlob( - key: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}key'], - )!, - value: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}value'], - )!, - updatedAt: attachedDatabase.typeMapping.read( - DriftSqlType.dateTime, - data['${effectivePrefix}updated_at'], - )!, - ); - } - - @override - $StoredBlobsTable createAlias(String alias) { - return $StoredBlobsTable(attachedDatabase, alias); - } -} - -class StoredBlob extends DataClass implements Insertable { - final String key; - final String value; - final DateTime updatedAt; - const StoredBlob({ - required this.key, - required this.value, - required this.updatedAt, - }); - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - map['key'] = Variable(key); - map['value'] = Variable(value); - map['updated_at'] = Variable(updatedAt); - return map; - } - - StoredBlobsCompanion toCompanion(bool nullToAbsent) { - return StoredBlobsCompanion( - key: Value(key), - value: Value(value), - updatedAt: Value(updatedAt), - ); - } - - factory StoredBlob.fromJson( - Map json, { - ValueSerializer? serializer, - }) { - serializer ??= driftRuntimeOptions.defaultSerializer; - return StoredBlob( - key: serializer.fromJson(json['key']), - value: serializer.fromJson(json['value']), - updatedAt: serializer.fromJson(json['updatedAt']), - ); - } - @override - Map toJson({ValueSerializer? serializer}) { - serializer ??= driftRuntimeOptions.defaultSerializer; - return { - 'key': serializer.toJson(key), - 'value': serializer.toJson(value), - 'updatedAt': serializer.toJson(updatedAt), - }; - } - - StoredBlob copyWith({String? key, String? value, DateTime? updatedAt}) => - StoredBlob( - key: key ?? this.key, - value: value ?? this.value, - updatedAt: updatedAt ?? this.updatedAt, - ); - StoredBlob copyWithCompanion(StoredBlobsCompanion data) { - return StoredBlob( - key: data.key.present ? data.key.value : this.key, - value: data.value.present ? data.value.value : this.value, - updatedAt: data.updatedAt.present ? data.updatedAt.value : this.updatedAt, - ); - } - - @override - String toString() { - return (StringBuffer('StoredBlob(') - ..write('key: $key, ') - ..write('value: $value, ') - ..write('updatedAt: $updatedAt') - ..write(')')) - .toString(); - } - - @override - int get hashCode => Object.hash(key, value, updatedAt); - @override - bool operator ==(Object other) => - identical(this, other) || - (other is StoredBlob && - other.key == this.key && - other.value == this.value && - other.updatedAt == this.updatedAt); -} - -class StoredBlobsCompanion extends UpdateCompanion { - final Value key; - final Value value; - final Value updatedAt; - final Value rowid; - const StoredBlobsCompanion({ - this.key = const Value.absent(), - this.value = const Value.absent(), - this.updatedAt = const Value.absent(), - this.rowid = const Value.absent(), - }); - StoredBlobsCompanion.insert({ - required String key, - required String value, - this.updatedAt = const Value.absent(), - this.rowid = const Value.absent(), - }) : key = Value(key), - value = Value(value); - static Insertable custom({ - Expression? key, - Expression? value, - Expression? updatedAt, - Expression? rowid, - }) { - return RawValuesInsertable({ - if (key != null) 'key': key, - if (value != null) 'value': value, - if (updatedAt != null) 'updated_at': updatedAt, - if (rowid != null) 'rowid': rowid, - }); - } - - StoredBlobsCompanion copyWith({ - Value? key, - Value? value, - Value? updatedAt, - Value? rowid, - }) { - return StoredBlobsCompanion( - key: key ?? this.key, - value: value ?? this.value, - updatedAt: updatedAt ?? this.updatedAt, - rowid: rowid ?? this.rowid, - ); - } - - @override - Map toColumns(bool nullToAbsent) { - final map = {}; - if (key.present) { - map['key'] = Variable(key.value); - } - if (value.present) { - map['value'] = Variable(value.value); - } - if (updatedAt.present) { - map['updated_at'] = Variable(updatedAt.value); - } - if (rowid.present) { - map['rowid'] = Variable(rowid.value); - } - return map; - } - - @override - String toString() { - return (StringBuffer('StoredBlobsCompanion(') - ..write('key: $key, ') - ..write('value: $value, ') - ..write('updatedAt: $updatedAt, ') - ..write('rowid: $rowid') - ..write(')')) - .toString(); - } -} - -abstract class _$OffbandDatabase extends GeneratedDatabase { - _$OffbandDatabase(QueryExecutor e) : super(e); - $OffbandDatabaseManager get managers => $OffbandDatabaseManager(this); - late final $StoredBlobsTable storedBlobs = $StoredBlobsTable(this); - @override - Iterable> get allTables => - allSchemaEntities.whereType>(); - @override - List get allSchemaEntities => [storedBlobs]; -} - -typedef $$StoredBlobsTableCreateCompanionBuilder = - StoredBlobsCompanion Function({ - required String key, - required String value, - Value updatedAt, - Value rowid, - }); -typedef $$StoredBlobsTableUpdateCompanionBuilder = - StoredBlobsCompanion Function({ - Value key, - Value value, - Value updatedAt, - Value rowid, - }); - -class $$StoredBlobsTableFilterComposer - extends Composer<_$OffbandDatabase, $StoredBlobsTable> { - $$StoredBlobsTableFilterComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - ColumnFilters get key => $composableBuilder( - column: $table.key, - builder: (column) => ColumnFilters(column), - ); - - ColumnFilters get value => $composableBuilder( - column: $table.value, - builder: (column) => ColumnFilters(column), - ); - - ColumnFilters get updatedAt => $composableBuilder( - column: $table.updatedAt, - builder: (column) => ColumnFilters(column), - ); -} - -class $$StoredBlobsTableOrderingComposer - extends Composer<_$OffbandDatabase, $StoredBlobsTable> { - $$StoredBlobsTableOrderingComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - ColumnOrderings get key => $composableBuilder( - column: $table.key, - builder: (column) => ColumnOrderings(column), - ); - - ColumnOrderings get value => $composableBuilder( - column: $table.value, - builder: (column) => ColumnOrderings(column), - ); - - ColumnOrderings get updatedAt => $composableBuilder( - column: $table.updatedAt, - builder: (column) => ColumnOrderings(column), - ); -} - -class $$StoredBlobsTableAnnotationComposer - extends Composer<_$OffbandDatabase, $StoredBlobsTable> { - $$StoredBlobsTableAnnotationComposer({ - required super.$db, - required super.$table, - super.joinBuilder, - super.$addJoinBuilderToRootComposer, - super.$removeJoinBuilderFromRootComposer, - }); - GeneratedColumn get key => - $composableBuilder(column: $table.key, builder: (column) => column); - - GeneratedColumn get value => - $composableBuilder(column: $table.value, builder: (column) => column); - - GeneratedColumn get updatedAt => - $composableBuilder(column: $table.updatedAt, builder: (column) => column); -} - -class $$StoredBlobsTableTableManager - extends - RootTableManager< - _$OffbandDatabase, - $StoredBlobsTable, - StoredBlob, - $$StoredBlobsTableFilterComposer, - $$StoredBlobsTableOrderingComposer, - $$StoredBlobsTableAnnotationComposer, - $$StoredBlobsTableCreateCompanionBuilder, - $$StoredBlobsTableUpdateCompanionBuilder, - ( - StoredBlob, - BaseReferences<_$OffbandDatabase, $StoredBlobsTable, StoredBlob>, - ), - StoredBlob, - PrefetchHooks Function() - > { - $$StoredBlobsTableTableManager(_$OffbandDatabase db, $StoredBlobsTable table) - : super( - TableManagerState( - db: db, - table: table, - createFilteringComposer: () => - $$StoredBlobsTableFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $$StoredBlobsTableOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $$StoredBlobsTableAnnotationComposer($db: db, $table: table), - updateCompanionCallback: - ({ - Value key = const Value.absent(), - Value value = const Value.absent(), - Value updatedAt = const Value.absent(), - Value rowid = const Value.absent(), - }) => StoredBlobsCompanion( - key: key, - value: value, - updatedAt: updatedAt, - rowid: rowid, - ), - createCompanionCallback: - ({ - required String key, - required String value, - Value updatedAt = const Value.absent(), - Value rowid = const Value.absent(), - }) => StoredBlobsCompanion.insert( - key: key, - value: value, - updatedAt: updatedAt, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), - prefetchHooksCallback: null, - ), - ); -} - -typedef $$StoredBlobsTableProcessedTableManager = - ProcessedTableManager< - _$OffbandDatabase, - $StoredBlobsTable, - StoredBlob, - $$StoredBlobsTableFilterComposer, - $$StoredBlobsTableOrderingComposer, - $$StoredBlobsTableAnnotationComposer, - $$StoredBlobsTableCreateCompanionBuilder, - $$StoredBlobsTableUpdateCompanionBuilder, - ( - StoredBlob, - BaseReferences<_$OffbandDatabase, $StoredBlobsTable, StoredBlob>, - ), - StoredBlob, - PrefetchHooks Function() - >; - -class $OffbandDatabaseManager { - final _$OffbandDatabase _db; - $OffbandDatabaseManager(this._db); - $$StoredBlobsTableTableManager get storedBlobs => - $$StoredBlobsTableTableManager(_db, _db.storedBlobs); -}