Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/celest_cli.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ jobs:
# Because many golden tests encode the precise Dart/Flutter SDKs used to generate
# them, these values must be consistently used when running tests locally and in CI.
flutter-version: 3.29.3
# Needed for testing FVM integration and cross-compilation.
- name: Install FVM
run: |
dart pub global activate fvm
dart pub global run fvm:main install 3.32.0-0.2.pre
- name: Setup Libsecret
if: runner.os == 'Linux'
run: tool/setup-ci.sh
Expand Down
1 change: 1 addition & 0 deletions apps/cli/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ build/

tool/debug
**/*.dill
**/*.exe
**/*.pkg
vm_service_info.json
30 changes: 27 additions & 3 deletions apps/cli/fixtures/fixtures_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,9 @@ class TestRunner {

static Future<void> _warmUp(String projectRoot) {
return Isolate.run(() async {
final sdkResult = await const DartSdkFinder().findSdk();
final sdkResult = await DartSdkFinder(
projectRoot: projectRoot,
).findSdk();
Sdk.current = sdkResult.sdk;
return CelestAnalyzer.warmUp(projectRoot);
});
Expand All @@ -142,7 +144,17 @@ class TestRunner {
void run() {
group(testName, () {
setUpAll(() async {
final sdkResult = await const DartSdkFinder().findSdk();
if (fileSystem.file(p.join(projectRoot, '.fvmrc')).existsSync()) {
final res = Process.runSync(
'fvm',
['use'],
workingDirectory: projectRoot,
);
expect(res.exitCode, 0, reason: '${res.stdout}\n${res.stderr}');
}
final sdkResult = await DartSdkFinder(
projectRoot: projectRoot,
).findSdk();
Sdk.current = sdkResult.sdk;
await runPub(
exe: Platform.resolvedExecutable,
Expand Down Expand Up @@ -394,6 +406,10 @@ class TestRunner {
expect(project, isNotNull);

final frontend = CelestFrontend();
final buildDir = fileSystem.directory(projectPaths.buildDir);
if (buildDir.existsSync()) {
buildDir.deleteSync(recursive: true);
}
final result = await frontend.build(
migrateProject: false,
currentProgress: cliLogger.progress('Building project...'),
Expand All @@ -404,7 +420,14 @@ class TestRunner {
final outputDir = projectPaths.buildDir;
final imageName = '$testName-${Random().nextInt(1000000)}';
final dockerBuild = await processManager.run(
['docker', 'build', '-t', imageName, '.'],
[
'docker',
'build',
'-t',
imageName,
if (testName case 'fvm' || 'flutter') '--platform=linux/amd64',
'.',
],
workingDirectory: outputDir,
);
expect(
Expand All @@ -427,6 +450,7 @@ class TestRunner {
'--rm',
'-p',
'$openPort:8080',
if (testName case 'fvm' || 'flutter') '--platform=linux/amd64',
for (final database in project!.databases.values)
if (database.config case ast.CelestDatabaseConfig(:final hostname))
'--env=${hostname.name}=file::memory:',
Expand Down
3 changes: 3 additions & 0 deletions apps/cli/fixtures/standalone/fvm/.fvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"flutter": "3.32.0-0.2.pre"
}
11 changes: 11 additions & 0 deletions apps/cli/fixtures/standalone/fvm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Dart
.dart_tool/
pubspec.lock

# Celest
build/
.env
.env.*

# FVM Version Cache
.fvm/
3 changes: 3 additions & 0 deletions apps/cli/fixtures/standalone/fvm/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"dart.flutterSdkPath": ".fvm/versions/3.32.0-0.2.pre"
}
5 changes: 5 additions & 0 deletions apps/cli/fixtures/standalone/fvm/analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
include: package:lints/recommended.yaml

analyzer:
errors:
depend_on_referenced_packages: ignore
83 changes: 83 additions & 0 deletions apps/cli/fixtures/standalone/fvm/client/lib/fvm_client.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// Generated by Celest. This file should not be modified manually, but
// it can be checked into version control.
// ignore_for_file: type=lint, unused_local_variable, unnecessary_cast, unnecessary_import, deprecated_member_use, invalid_use_of_internal_member

library; // ignore_for_file: no_leading_underscores_for_library_prefixes

import 'dart:io';

import 'package:celest_core/_internal.dart' as _$celest;
import 'package:celest_core/celest_core.dart' as _$celest;
import 'package:celest_core/src/util/globals.dart' as _$celest;
import 'package:fvm_client/src/functions.dart';
import 'package:fvm_client/src/serializers.dart';
import 'package:http/http.dart' as _$http_http;
import 'package:native_storage/native_storage.dart'
as _$native_storage_native_storage;

export 'package:celest_backend/src/functions/greeting.dart'
show BadNameException, Person;

final Celest celest = Celest();

enum CelestEnvironment {
local,
production;

Uri get baseUri => switch (this) {
local => _$celest.kIsWeb || !Platform.isAndroid
? Uri.parse('http://localhost:7777')
: Uri.parse('http://10.0.2.2:7777'),
production => Uri.parse('https://example.celest.run'),
};
}

class Celest with _$celest.CelestBase {
var _initialized = false;

late CelestEnvironment _currentEnvironment;

late final _$native_storage_native_storage.NativeStorage nativeStorage =
_$native_storage_native_storage.NativeStorage(scope: 'celest');

@override
late _$http_http.Client httpClient =
_$celest.CelestHttpClient(secureStorage: nativeStorage.secure);

late Uri _baseUri;

final _functions = CelestFunctions();

T _checkInitialized<T>(T Function() value) {
if (!_initialized) {
throw StateError(
'Celest has not been initialized. Make sure to call `celest.init()` at the start of your `main` method.');
}
return value();
}

CelestEnvironment get currentEnvironment =>
_checkInitialized(() => _currentEnvironment);

@override
Uri get baseUri => _checkInitialized(() => _baseUri);

CelestFunctions get functions => _checkInitialized(() => _functions);

void init({
CelestEnvironment environment = CelestEnvironment.local,
_$celest.Serializers? serializers,
}) {
if (_initialized) {
_reset();
}
_currentEnvironment = environment;
_baseUri = environment.baseUri;
initSerializers(serializers: serializers);
_initialized = true;
}

void _reset() {
_initialized = false;
}
}
Loading
Loading