Skip to content

Commit 6b78b5d

Browse files
ci(swift): use PR branch to test swift integration rather than version (#17460)
1 parent f852df8 commit 6b78b5d

File tree

2 files changed

+81
-2
lines changed

2 files changed

+81
-2
lines changed

.github/workflows/all_plugins.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,7 @@ jobs:
131131
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
132132
- uses: subosito/flutter-action@f2c4f6686ca8e8d6e6d0f28410eeef506ed66aff
133133
with:
134-
# TODO - enabling swift is on `master` channel at the moment. Update when it's on `stable`
135-
channel: 'master'
134+
channel: 'stable'
136135
- name: Setup firebase_core example app to test Swift integration
137136
# run this before running melos boostrap to ensure the example app is set up
138137
run: |

.github/workflows/scripts/swift-integration.dart

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,91 @@ void main(List<String> arguments) async {
99
if (arguments.isEmpty) {
1010
throw Exception('No FlutterFire dependency arguments provided.');
1111
}
12+
13+
// Get the current git branch from GitHub Actions environment or fallback to git command
14+
final currentBranch = await getCurrentBranch();
15+
print('Current branch: $currentBranch');
16+
17+
// Update all Package.swift files to use branch dependencies
18+
await updatePackageSwiftFiles(currentBranch, arguments);
19+
1220
final plugins = arguments.join(',');
1321
await buildSwiftExampleApp('ios', plugins);
1422
await buildSwiftExampleApp('macos', plugins);
1523
}
1624

25+
Future<String> getCurrentBranch() async {
26+
// Try GitHub Actions environment variables first
27+
String? branch = Platform.environment['GITHUB_HEAD_REF']; // For pull requests
28+
29+
if (branch == null || branch.isEmpty) {
30+
branch = Platform.environment['GITHUB_REF_NAME']; // For direct pushes
31+
}
32+
33+
if (branch == null || branch.isEmpty) {
34+
// Fallback to git command for local testing
35+
print('GitHub Actions environment variables not found, trying git command...');
36+
final result = await Process.run('git', ['branch', '--show-current']);
37+
if (result.exitCode != 0) {
38+
throw Exception('Failed to get current git branch: ${result.stderr}');
39+
}
40+
branch = result.stdout.toString().trim();
41+
}
42+
43+
if (branch.isEmpty) {
44+
throw Exception('Could not determine current branch from GitHub Actions environment or git command');
45+
}
46+
47+
return branch;
48+
}
49+
50+
Future<void> updatePackageSwiftFiles(String branch, List<String> packages) async {
51+
print('Updating Package.swift files to use branch: $branch');
52+
53+
// Update each package's Package.swift files
54+
for (final package in packages) {
55+
await updatePackageSwiftForPackage(package, branch);
56+
}
57+
}
58+
59+
Future<void> updatePackageSwiftForPackage(String packageName, String branch) async {
60+
// Check both ios and macos directories
61+
final platforms = ['ios', 'macos'];
62+
63+
for (final platform in platforms) {
64+
final packageSwiftPath = 'packages/$packageName/$packageName/$platform/$packageName/Package.swift';
65+
final file = File(packageSwiftPath);
66+
67+
if (!file.existsSync()) {
68+
print('Warning: Package.swift not found at $packageSwiftPath');
69+
continue;
70+
}
71+
72+
print('Updating $packageSwiftPath');
73+
final content = await file.readAsString();
74+
75+
// Replace exact version dependency with branch dependency
76+
String updatedContent = content;
77+
78+
// Pattern to match the exact version dependency
79+
final exactVersionPattern = RegExp(
80+
r'\.package\(url: "https://github\.com/firebase/flutterfire", exact: [^)]+\)',
81+
multiLine: true
82+
);
83+
84+
// Replace with branch dependency
85+
final branchDependency = '.package(url: "https://github.com/firebase/flutterfire", branch: "$branch")';
86+
87+
if (exactVersionPattern.hasMatch(content)) {
88+
updatedContent = content.replaceAll(exactVersionPattern, branchDependency);
89+
await file.writeAsString(updatedContent);
90+
print('✓ Updated $packageSwiftPath to use branch: $branch');
91+
} else {
92+
print('⚠ No exact version dependency found in $packageSwiftPath');
93+
}
94+
}
95+
}
96+
1797
Future<void> buildSwiftExampleApp(String platform, String plugins) async {
1898
final initialDirectory = Directory.current;
1999
final platformName = platform == 'ios' ? 'iOS' : 'macOS';

0 commit comments

Comments
 (0)