Skip to content

Commit 1a16906

Browse files
committed
fix(core): deduplicate EAS hook script boilerplate
1 parent 2d1bd0b commit 1a16906

File tree

4 files changed

+45
-48
lines changed

4 files changed

+45
-48
lines changed

packages/core/scripts/eas/build-on-complete.js

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,14 @@
3030
*
3131
*/
3232

33-
const { loadEnv, loadHooksModule, parseBaseOptions, runHook } = require('./utils');
33+
const { runEASHookScript } = require('./utils');
3434

35-
async function main() {
36-
loadEnv();
37-
38-
const hooks = loadHooksModule();
39-
const options = {
40-
...parseBaseOptions(),
35+
runEASHookScript({
36+
hookName: 'on-complete',
37+
hookFn: (hooks, options) => hooks.captureEASBuildComplete(options),
38+
getOptions: () => ({
4139
errorMessage: process.env.SENTRY_EAS_BUILD_ERROR_MESSAGE,
4240
successMessage: process.env.SENTRY_EAS_BUILD_SUCCESS_MESSAGE,
4341
captureSuccessfulBuilds: process.env.SENTRY_EAS_BUILD_CAPTURE_SUCCESS === 'true',
44-
};
45-
46-
await runHook('on-complete', () => hooks.captureEASBuildComplete(options));
47-
}
48-
49-
main().catch(error => {
50-
// eslint-disable-next-line no-console
51-
console.error('[Sentry] Unexpected error in eas-build-on-complete hook:', error);
52-
process.exit(1);
42+
}),
5343
});

packages/core/scripts/eas/build-on-error.js

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,12 @@
2121
* @see https://docs.sentry.io/platforms/react-native/
2222
*/
2323

24-
const { loadEnv, loadHooksModule, parseBaseOptions, runHook } = require('./utils');
24+
const { runEASHookScript } = require('./utils');
2525

26-
async function main() {
27-
loadEnv();
28-
29-
const hooks = loadHooksModule();
30-
const options = {
31-
...parseBaseOptions(),
26+
runEASHookScript({
27+
hookName: 'on-error',
28+
hookFn: (hooks, options) => hooks.captureEASBuildError(options),
29+
getOptions: () => ({
3230
errorMessage: process.env.SENTRY_EAS_BUILD_ERROR_MESSAGE,
33-
};
34-
35-
await runHook('on-error', () => hooks.captureEASBuildError(options));
36-
}
37-
38-
main().catch(error => {
39-
// eslint-disable-next-line no-console
40-
console.error('[Sentry] Unexpected error in eas-build-on-error hook:', error);
41-
process.exit(1);
31+
}),
4232
});

packages/core/scripts/eas/build-on-success.js

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,13 @@
2222
* @see https://docs.sentry.io/platforms/react-native/
2323
*/
2424

25-
const { loadEnv, loadHooksModule, parseBaseOptions, runHook } = require('./utils');
25+
const { runEASHookScript } = require('./utils');
2626

27-
async function main() {
28-
loadEnv();
29-
30-
const hooks = loadHooksModule();
31-
const options = {
32-
...parseBaseOptions(),
27+
runEASHookScript({
28+
hookName: 'on-success',
29+
hookFn: (hooks, options) => hooks.captureEASBuildSuccess(options),
30+
getOptions: () => ({
3331
successMessage: process.env.SENTRY_EAS_BUILD_SUCCESS_MESSAGE,
3432
captureSuccessfulBuilds: process.env.SENTRY_EAS_BUILD_CAPTURE_SUCCESS === 'true',
35-
};
36-
37-
await runHook('on-success', () => hooks.captureEASBuildSuccess(options));
38-
}
39-
40-
main().catch(error => {
41-
// eslint-disable-next-line no-console
42-
console.error('[Sentry] Unexpected error in eas-build-on-success hook:', error);
43-
process.exit(1);
33+
}),
4434
});

packages/core/scripts/eas/utils.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,36 @@ async function runHook(hookName, hookFn) {
116116
}
117117
}
118118

119+
/**
120+
* Runs a specific EAS build hook script with shared setup and fatal error handling.
121+
* @param {object} params - Hook script configuration
122+
* @param {string} params.hookName - Name of the hook for logging
123+
* @param {(hooks: object, options: object) => Promise<void>} params.hookFn - Hook invocation function
124+
* @param {() => object} [params.getOptions] - Returns hook-specific options from env vars
125+
*/
126+
function runEASHookScript({ hookName, hookFn, getOptions }) {
127+
async function main() {
128+
loadEnv();
129+
130+
const hooks = loadHooksModule();
131+
const options = {
132+
...parseBaseOptions(),
133+
...(getOptions ? getOptions() : {}),
134+
};
135+
136+
await runHook(hookName, () => hookFn(hooks, options));
137+
}
138+
139+
main().catch(error => {
140+
console.error(`[Sentry] Unexpected error in eas-build-${hookName} hook:`, error);
141+
process.exit(1);
142+
});
143+
}
144+
119145
module.exports = {
120146
loadEnv,
121147
loadHooksModule,
122148
parseBaseOptions,
123149
runHook,
150+
runEASHookScript,
124151
};

0 commit comments

Comments
 (0)