# use for production
node bugsnag.upload.js
# use for development
node bugsnag.upload.js --dev
Last active
November 2, 2021 23:08
-
-
Save ridvanaltun/64b59562058871d7654d696ed6204cde to your computer and use it in GitHub Desktop.
Bugsnag React-Native bundle uploader
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Fs = require('fs'); | |
const Exec = require('child_process').exec; | |
const Package = require('./package.json'); | |
const isDevMode = process?.argv[2] === '--dev'; | |
const apiKey = '<bugsnag-api-key>'; | |
(async function () { | |
await cleanUp(); | |
await generateSourceMapForIos(); | |
await generateSourceMapForAndroid(); | |
await uploadSourceMapForIos(); | |
await uploadSourceMapForAndroid(); | |
await cleanUp(); | |
console.log('Bugsnag source map upload completed.'); | |
})(); | |
async function cleanUp() { | |
return new Promise(resolve => { | |
Fs.unlink('ios-release.bundle', () => { | |
Fs.unlink('ios-release.bundle.map', () => { | |
Fs.unlink('android-release.bundle', () => { | |
Fs.unlink('android-release.bundle.map', () => { | |
return resolve(); | |
}); | |
}); | |
}); | |
}); | |
}); | |
} | |
async function uploadSourceMapForIos() { | |
return new Promise((resolve, reject) => { | |
Exec( | |
` | |
curl https://upload.bugsnag.com/react-native-source-map \\ | |
-F apiKey=${apiKey} \\ | |
-F codeBundleId=${Package.version} \\ | |
-F dev=${isDevMode} \\ | |
-F platform=ios \\ | |
-F sourceMap=@ios-release.bundle.map \\ | |
-F bundle=@ios-release.bundle \\ | |
-F projectRoot=\`pwd\` | |
`, | |
error => { | |
if (error) { | |
return reject(error); | |
} | |
console.log('iOS Source map uploaded'); | |
return resolve(); | |
}, | |
); | |
}); | |
} | |
async function uploadSourceMapForAndroid() { | |
return new Promise((resolve, reject) => { | |
Exec( | |
` | |
curl https://upload.bugsnag.com/react-native-source-map \\ | |
-F apiKey=${apiKey} \\ | |
-F codeBundleId=${Package.version} \\ | |
-F dev=${isDevMode} \\ | |
-F platform=android \\ | |
-F sourceMap=@android-release.bundle.map \\ | |
-F bundle=@android-release.bundle \\ | |
-F projectRoot=\`pwd\` | |
`, | |
error => { | |
if (error) { | |
return reject(error); | |
} | |
console.log('Android Source map uploaded'); | |
return resolve(); | |
}, | |
); | |
}); | |
} | |
async function generateSourceMapForIos() { | |
return new Promise((resolve, reject) => { | |
Exec( | |
` | |
react-native bundle \\ | |
--platform ios \\ | |
--dev ${isDevMode} \\ | |
--entry-file index.js \\ | |
--bundle-output ios-release.bundle \\ | |
--sourcemap-output ios-release.bundle.map | |
`, | |
error => { | |
if (error) { | |
return reject(error); | |
} | |
console.log('iOS Source map generated'); | |
return resolve(); | |
}, | |
); | |
}); | |
} | |
async function generateSourceMapForAndroid() { | |
return new Promise((resolve, reject) => { | |
Exec( | |
` | |
react-native bundle \\ | |
--platform android \\ | |
--dev ${isDevMode} \\ | |
--entry-file index.js \\ | |
--bundle-output android-release.bundle \\ | |
--sourcemap-output android-release.bundle.map | |
`, | |
error => { | |
if (error) { | |
return reject(error); | |
} | |
console.log('Android Source map generated'); | |
return resolve(); | |
}, | |
); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment