Files
tatlock-ui/tool/version_builder.dart
T
jpmschweitzerandClaude Opus 4.5 4b0c6b292a feat: automate version.g.dart generation via build_runner
Replace manual generate_version.dart script with a custom build_runner
builder that automatically generates lib/version.g.dart from pubspec.yaml
during the build process. This eliminates manual steps and ensures version
info stays in sync.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 17:27:10 +01:00

50 lines
1.6 KiB
Dart

import 'dart:async';
import 'package:build/build.dart';
import 'package:yaml/yaml.dart';
/// Builder that generates version.g.dart from pubspec.yaml.
Builder versionBuilder(BuilderOptions options) => VersionBuilder();
class VersionBuilder implements Builder {
@override
final buildExtensions = const {
r'$package$': ['lib/version.g.dart'],
};
@override
Future<void> build(BuildStep buildStep) async {
final pubspecId = AssetId(buildStep.inputId.package, 'pubspec.yaml');
final pubspecContent = await buildStep.readAsString(pubspecId);
final pubspec = loadYaml(pubspecContent) as YamlMap;
final name = pubspec['name'] as String;
final description = pubspec['description'] as String? ?? '';
final versionString = pubspec['version'] as String;
// Parse version: "0.2.0+2" -> version="0.2.0", buildNumber=2
final versionParts = versionString.split('+');
final version = versionParts[0];
final buildNumber = versionParts.length > 1 ? int.parse(versionParts[1]) : 0;
final output = '''
// GENERATED FILE - DO NOT EDIT
// Generated by build_runner from pubspec.yaml
/// Application version information from pubspec.yaml
class AppVersion {
AppVersion._();
static const String name = '$name';
static const String description = '$description';
static const String version = '$version';
static const int buildNumber = $buildNumber;
static const String fullVersion = '$version+$buildNumber';
}
''';
final outputId = AssetId(buildStep.inputId.package, 'lib/version.g.dart');
await buildStep.writeAsString(outputId, output);
}
}