claimNextJob method

Future<BuildJob?> claimNextJob(
  1. String? customPattern
)

Claims the next queued build job for this platform.

Implementation

Future<BuildJob?> claimNextJob(String? customPattern) async {
  final runsOnPattern =
      customPattern ?? (Platform.isLinux ? '%ubuntu%' : '%macos%');

  if (serverUrl != null && serverUrl!.isNotEmpty) {
    final url = Uri.parse('$serverUrl/builds/claim');
    final idToken = await authManager.getIdToken();
    final response = await http.post(
      url,
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer $idToken',
      },
      body: jsonEncode({'runsOnPattern': runsOnPattern}),
    );
    if (response.statusCode >= 200 && response.statusCode < 300) {
      final data = jsonDecode(response.body) as Map<String, dynamic>;
      final jobJson = data['job'] as Map<String, dynamic>?;
      if (jobJson == null) return null;
      return BuildJob.fromJson(jobJson);
    }
    throw HttpException(
      'Failed to claim job from server: ${response.statusCode} ${response.body}',
    );
  }

  final response = await callApi('claim-next-job', {
    'runsOnPattern': runsOnPattern,
  });

  final jobJson = response['job'] as Map<String, dynamic>?;
  if (jobJson == null) return null;

  return BuildJob.fromJson(jobJson);
}