diff --git a/packages/artifact_proxy/lib/config.dart b/packages/artifact_proxy/lib/config.dart index 709e8333..0642d1ab 100644 --- a/packages/artifact_proxy/lib/config.dart +++ b/packages/artifact_proxy/lib/config.dart @@ -26,6 +26,7 @@ final engineArtifactPatterns = { r'flutter_infra_release\/flutter\/(.*)\/linux-arm64-profile\/linux-arm64-flutter-gtk\.zip', r'flutter_infra_release\/flutter\/(.*)\/ios\/artifacts\.zip', r'flutter_infra_release\/flutter\/(.*)\/ios-release\/artifacts\.zip', + r'flutter_infra_release\/flutter\/(.*)\/ios-release\/Flutter.dSYM\.zip', r'flutter_infra_release\/flutter\/(.*)\/ios-profile\/artifacts\.zip', r'flutter_infra_release\/flutter\/(.*)\/flutter-web-sdk\.zip', // Web SDK seems to be all-platform after 3.10.0. r'flutter_infra_release\/flutter\/(.*)\/flutter-web-sdk-windows-x64\.zip', // Platform-specific web-sdks may no longer needed as of 3.10.0? @@ -57,6 +58,7 @@ final engineArtifactPatterns = { r'flutter_infra_release\/flutter\/(.*)\/android-x64-release\/linux-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-x64-release\/darwin-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-x64-release\/artifacts\.zip', + r'flutter_infra_release\/flutter\/(.*)\/android-x64-release\/symbols\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-x64-profile\/windows-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-x64-profile\/linux-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-x64-profile\/darwin-x64\.zip', @@ -66,19 +68,23 @@ final engineArtifactPatterns = { r'flutter_infra_release\/flutter\/(.*)\/android-arm64-release\/linux-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm64-release\/darwin-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm64-release\/artifacts\.zip', + r'flutter_infra_release\/flutter\/(.*)\/android-arm64-release\/symbols\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm64-profile\/windows-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm64-profile\/linux-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm64-profile\/darwin-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm64-profile\/artifacts\.zip', + r'flutter_infra_release\/flutter\/(.*)\/android-arm64-profile\/symbols\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm\/artifacts\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm-release\/windows-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm-release\/linux-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm-release\/darwin-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm-release\/artifacts\.zip', + r'flutter_infra_release\/flutter\/(.*)\/android-arm-release\/symbols\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm-profile\/windows-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm-profile\/linux-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm-profile\/darwin-x64\.zip', r'flutter_infra_release\/flutter\/(.*)\/android-arm-profile\/artifacts\.zip', + r'flutter_infra_release\/flutter\/(.*)\/android-arm-profile\/symbols\.zip', r'download.flutter.io\/io\/flutter\/x86_debug\/1\.0\.0-(.*)\/x86_debug-1\.0\.0-(.*)\.pom', r'download.flutter.io\/io\/flutter\/x86_64_release\/1\.0\.0-(.*)\/x86_64_release-1\.0\.0-(.*)\.pom\.sha1', r'download.flutter.io\/io\/flutter\/x86_64_release\/1\.0\.0-(.*)\/x86_64_release-1\.0\.0-(.*)\.pom', diff --git a/packages/artifact_proxy/test/artifact_proxy_test.dart b/packages/artifact_proxy/test/artifact_proxy_test.dart index e933b5c4..1e2d3582 100644 --- a/packages/artifact_proxy/test/artifact_proxy_test.dart +++ b/packages/artifact_proxy/test/artifact_proxy_test.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:artifact_proxy/artifact_proxy.dart'; +import 'package:checked_yaml/checked_yaml.dart'; import 'package:mocktail/mocktail.dart'; import 'package:shelf/shelf.dart'; import 'package:test/test.dart'; @@ -14,9 +15,12 @@ void main() { flutterEngineRevision: 'ec975089acb540fc60752606a3d3ba809dd1528b', storageBucket: 'download.shorebird.dev', artifactOverrides: { - r'flutter_infra_release/flutter/$engine/android-arm-64-release/artifacts.zip', + r'flutter_infra_release/flutter/$engine/android-arm64-release/artifacts.zip', + r'flutter_infra_release/flutter/$engine/android-arm64-release/symbols.zip', r'flutter_infra_release/flutter/$engine/android-arm-release/artifacts.zip', + r'flutter_infra_release/flutter/$engine/android-arm-release/symbols.zip', r'flutter_infra_release/flutter/$engine/android-x64-release/artifacts.zip', + r'flutter_infra_release/flutter/$engine/android-x64-release/symbols.zip', r'download.flutter.io/io/flutter/flutter_embedding_release/1.0.0-$engine/flutter_embedding_release-1.0.0-$engine.pom', r'download.flutter.io/io/flutter/flutter_embedding_release/1.0.0-$engine/flutter_embedding_release-1.0.0-$engine.jar', r'download.flutter.io/io/flutter/arm64_v8a_release/1.0.0-$engine/arm64_v8a_release-1.0.0-$engine.pom', @@ -142,5 +146,33 @@ void main() { expect(response.headers['content-type'], equals('text/html')); expect(response.readAsString(), completion(contains('Shorebird'))); }); + + // artifact_proxy only runs on linux currently. + test('generate_manifest matches config', () async { + // Make a temp directory, run generate_manifest, parse the yaml + // and make sure all urls are handled. + const engineRevision = '8b89f8bd9fc6982aa9c4557fd0e5e89db1ff9986'; + final result = Process.runSync('/bin/sh', [ + 'tool/generate_manifest.sh', + engineRevision, + ]); + expect(result.exitCode, equals(0)); + final manifest = checkedYamlDecode( + result.stdout as String, + (m) => ArtifactsManifest.fromJson(m!), + ); + expect(manifest.artifactOverrides, isNotEmpty); + + for (final pattern in manifest.artifactOverrides) { + final path = pattern.replaceAll(r'$engine', engineRevision); + final request = buildRequest(path); + final response = await handler(request); + expect( + response.statusCode, + isNot(HttpStatus.notFound), + reason: 'Pattern $pattern not handled', + ); + } + }); }); } diff --git a/packages/artifact_proxy/tool/generate_manifest.sh b/packages/artifact_proxy/tool/generate_manifest.sh index 47a1de4b..8df6c040 100755 --- a/packages/artifact_proxy/tool/generate_manifest.sh +++ b/packages/artifact_proxy/tool/generate_manifest.sh @@ -7,6 +7,9 @@ set -e +# NOTE: If you edit this file you also may need to edit the global list +# of all known artifacts in config.dart + if [ "$#" -ne 1 ]; then echo "Usage: ./generate_manifest.sh " exit 1 @@ -61,3 +64,4 @@ artifact_overrides: # iOS release artifacts # Includes unified Flutter.framework for device and simulator (debug) - flutter_infra_release/flutter/\$engine/ios-release/artifacts.zip + - flutter_infra_release/flutter/\$engine/ios-release/Flutter.dSYM.zip