diff --git a/lib/sentry_dart_plugin.dart b/lib/sentry_dart_plugin.dart index 9782775..731c388 100644 --- a/lib/sentry_dart_plugin.dart +++ b/lib/sentry_dart_plugin.dart @@ -246,32 +246,33 @@ class SentryDartPlugin { return results; } - Future> _findAllJsFilePaths() => _collectWebFiles( - extension: '.js', - builder: (file) => file.path, - ); - Future> _findAllSourceMapFiles() => _collectWebFiles( extension: '.js.map', builder: (file) => file.absolute, ); Future _injectDebugIds() async { - List params = []; - params.add('sourcemaps'); - - // There is currently a sentry-cli bug that mutates the Flutter Web source map - // in such a way that it becomes corrupt / invalid -> that's why we need to - // inject each file separately instead of using a directory - // TODO(buenaflor): in the future we should use the directory when sentry-cli is fixed - final jsFilePaths = await _findAllJsFilePaths(); - if (jsFilePaths.isEmpty) { + final fs = injector.get(); + final webDir = fs.directory(_configuration.webBuildFilesFolder); + if (!await webDir.exists()) { + Log.warn( + 'Web build directory "${_configuration.webBuildFilesFolder}" does not exist, ' + 'skipping debug id injection.', + ); return false; } + List params = []; + params.add('sourcemaps'); params.add('inject'); - for (final path in jsFilePaths) { - params.add(path); + params.add(_configuration.webBuildFilesFolder); + + // Honor ignore_web_source_paths during injection so ignored files are not + // mutated in-place. Patterns are gitignore-style globs interpreted relative + // to the web build folder, matching the upload step. + for (final ignorePattern in _configuration.ignoreWebSourcePaths) { + params.add('--ignore'); + params.add(ignorePattern); } params.addAll(_baseCliParams()); diff --git a/test/plugin_test.dart b/test/plugin_test.dart index dae8d66..d06ece6 100644 --- a/test/plugin_test.dart +++ b/test/plugin_test.dart @@ -102,7 +102,7 @@ void main() { expect(commandLog, [ '$cli $args debug-files upload $orgAndProject --include-sources $buildDir/app/outputs', '$cli $args releases $orgAndProject new $release', - '$cli sourcemaps inject $buildDir/web/file.js $orgAndProject', + '$cli sourcemaps inject $buildDir/web --ignore testdir/**/*.js $orgAndProject', '$cli $args sourcemaps upload --release $release $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ ./ --ext dart --ignore testdir/**/*.js $orgAndProject', '$cli $args releases $orgAndProject set-commits $release --auto --ignore-missing', '$cli $args releases $orgAndProject finalize $release' @@ -293,7 +293,7 @@ void main() { final args = commonArgs; expect(commandLog, [ '$cli $args releases $orgAndProject new $release', - '$cli sourcemaps inject build/web/file.js $orgAndProject', + '$cli sourcemaps inject build/web $orgAndProject', '$cli $args sourcemaps upload --release $release $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ $orgAndProject', '$cli $args releases $orgAndProject set-commits $release --auto', '$cli $args releases $orgAndProject finalize $release' @@ -314,7 +314,7 @@ void main() { final args = commonArgs; expect(commandLog, [ '$cli $args releases $orgAndProject new $configRelease', - '$cli sourcemaps inject build/web/file.js $orgAndProject', + '$cli sourcemaps inject build/web $orgAndProject', '$cli $args sourcemaps upload --release $configRelease $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ $orgAndProject', '$cli $args releases $orgAndProject set-commits $configRelease --auto', '$cli $args releases $orgAndProject finalize $configRelease' @@ -337,7 +337,7 @@ void main() { final args = commonArgs; expect(commandLog, [ '$cli $args releases $orgAndProject new $release', - '$cli sourcemaps inject build/web/file.js $orgAndProject', + '$cli sourcemaps inject build/web $orgAndProject', '$cli $args sourcemaps upload --release $release --dist $build $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ $orgAndProject', '$cli $args releases $orgAndProject set-commits $release --auto', '$cli $args releases $orgAndProject finalize $release' @@ -359,7 +359,7 @@ void main() { final args = commonArgs; expect(commandLog, [ '$cli $args releases $orgAndProject new $configRelease', - '$cli sourcemaps inject build/web/file.js $orgAndProject', + '$cli sourcemaps inject build/web $orgAndProject', '$cli $args sourcemaps upload --release $configRelease $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ $orgAndProject', '$cli $args releases $orgAndProject set-commits $configRelease --auto', '$cli $args releases $orgAndProject finalize $configRelease' @@ -381,7 +381,7 @@ void main() { final args = commonArgs; expect(commandLog, [ '$cli $args releases $orgAndProject new $release', - '$cli sourcemaps inject build/web/file.js $orgAndProject', + '$cli sourcemaps inject build/web $orgAndProject', '$cli $args sourcemaps upload --release $release --dist $configDist $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ $orgAndProject', '$cli $args releases $orgAndProject set-commits $release --auto', '$cli $args releases $orgAndProject finalize $release' @@ -406,7 +406,7 @@ void main() { final args = commonArgs; expect(commandLog, [ '$cli $args releases $orgAndProject new $release', - '$cli sourcemaps inject build/web/file.js $orgAndProject', + '$cli sourcemaps inject build/web $orgAndProject', '$cli $args sourcemaps upload --release $release --dist $configDist $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ $orgAndProject', '$cli $args releases $orgAndProject set-commits $release --auto', '$cli $args releases $orgAndProject finalize $release' @@ -429,7 +429,7 @@ void main() { final args = commonArgs; expect(commandLog, [ '$cli $args releases $orgAndProject new $configRelease', - '$cli sourcemaps inject build/web/file.js $orgAndProject', + '$cli sourcemaps inject build/web $orgAndProject', '$cli $args sourcemaps upload --release $configRelease --dist $configDist $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ $orgAndProject', '$cli $args releases $orgAndProject set-commits $configRelease --auto', '$cli $args releases $orgAndProject finalize $configRelease' @@ -457,7 +457,7 @@ void main() { final args = commonArgs; expect(commandLog, [ '$cli $args releases $orgAndProject new $configRelease', - '$cli sourcemaps inject build/web/file.js $orgAndProject', + '$cli sourcemaps inject build/web $orgAndProject', '$cli $args sourcemaps upload --release $configRelease --dist $configDist --url-prefix ~/app/ $buildDir/web --ext js --ext map --strip-prefix ../../Documents --strip-prefix ../../../../ --strip-prefix ../../ --strip-prefix ../ $orgAndProject', '$cli $args releases $orgAndProject set-commits $configRelease --auto', '$cli $args releases $orgAndProject finalize $configRelease'