155 строки
3.2 KiB
JavaScript
155 строки
3.2 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
module.exports = async (github, context) => {
|
|
const issue = context.payload.issue;
|
|
const title = issue?.title?.toLowerCase();
|
|
if (!title) return;
|
|
|
|
const addLabels = async labelsToAdd => {
|
|
await github.rest.issues.addLabels({
|
|
issue_number: context.issue.number,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
labels: labelsToAdd,
|
|
});
|
|
};
|
|
|
|
const labelsToAdd = [];
|
|
for (const component of components) {
|
|
if (title.includes(component.toLowerCase())) {
|
|
labelsToAdd.push(`Component: ${component}`);
|
|
}
|
|
}
|
|
for (const api of apis) {
|
|
if (title.includes(api.toLowerCase())) {
|
|
labelsToAdd.push(`API: ${api}`);
|
|
}
|
|
}
|
|
for (const topic of Object.keys(topics)) {
|
|
if (title.includes(topic.toLowerCase())) {
|
|
labelsToAdd.push(topics[topic]);
|
|
}
|
|
}
|
|
if (labelsToAdd.length > 0) {
|
|
await addLabels(labelsToAdd);
|
|
}
|
|
};
|
|
|
|
const labelAndroid = 'Platform: Android';
|
|
const labelIos = 'Platform: iOS';
|
|
const labelTvos = 'Platform: tvOS';
|
|
const labelNetworking = '🌐Networking';
|
|
const labelBundler = '📦Bundler';
|
|
const labelCli = '💻CLI';
|
|
const labelRegression = 'Impact: Regression';
|
|
|
|
const components = [
|
|
'ActivityIndicator',
|
|
'Button',
|
|
'DatePickerIOS',
|
|
'DrawerLayoutAndroid',
|
|
'FlatList',
|
|
'Image',
|
|
'ImageBackground',
|
|
'InputAccessoryView',
|
|
'KeyboardAvoidingView',
|
|
'ListView',
|
|
'MaskedViewIOS',
|
|
'Modal',
|
|
'NavigatorIOS',
|
|
'Picker',
|
|
'PickerIOS',
|
|
'ProgressBarAndroid',
|
|
'ProgressViewIOS',
|
|
'RefreshControl',
|
|
'SafeAreaView',
|
|
'ScrollView',
|
|
'SectionList',
|
|
'SegmentedControlIOS',
|
|
'Slider',
|
|
'SnapshotViewIOS',
|
|
'StatusBar',
|
|
'Switch',
|
|
'TabBarIOS',
|
|
'TextInput',
|
|
'ToolbarAndroid',
|
|
'TouchableHighlight',
|
|
'TouchableNativeFeedback',
|
|
'TouchableOpacity',
|
|
'TouchableWithoutFeedback',
|
|
'ViewPagerAndroid',
|
|
'VirtualizedList',
|
|
'WebView',
|
|
];
|
|
|
|
const apis = [
|
|
'AccessibilityInfo',
|
|
'ActionSheetIOS',
|
|
'Alert',
|
|
'AlertIOS',
|
|
'Animated',
|
|
'AppRegistry',
|
|
'AppState',
|
|
'AsyncStorage',
|
|
'BackAndroid',
|
|
'BackHandler',
|
|
'CameraRoll',
|
|
'Clipboard',
|
|
'DatePickerAndroid',
|
|
'Dimensions',
|
|
'Easing',
|
|
'Geolocation',
|
|
'ImageEditor',
|
|
'ImagePickerIOS',
|
|
'ImageStore',
|
|
'InteractionManager',
|
|
'Keyboard',
|
|
'LayoutAnimation',
|
|
'Linking',
|
|
'ListViewDataSource',
|
|
'NetInfo',
|
|
'PanResponder',
|
|
'PermissionsAndroid',
|
|
'PixelRatio',
|
|
'PushNotificationIOS',
|
|
'Settings',
|
|
'Share',
|
|
'StatusBarIOS',
|
|
'StyleSheet',
|
|
'Systrace',
|
|
'TimePickerAndroid',
|
|
'ToastAndroid',
|
|
'Transforms',
|
|
'Vibration',
|
|
'VibrationIOS',
|
|
];
|
|
|
|
const topics = {
|
|
Flow: 'Flow',
|
|
'Flow-Strict': 'Flow',
|
|
xhr: labelNetworking,
|
|
netinfo: labelNetworking,
|
|
fetch: labelNetworking,
|
|
okhttp: labelNetworking,
|
|
http: labelNetworking,
|
|
bundle: labelBundler,
|
|
bundling: labelBundler,
|
|
packager: labelBundler,
|
|
'unable to resolve module': labelBundler,
|
|
android: labelAndroid,
|
|
ios: labelIos,
|
|
tvos: labelTvos,
|
|
'react-native-cli': labelCli,
|
|
'react-native upgrade': labelCli,
|
|
'react-native link': labelCli,
|
|
'local-cli': labelCli,
|
|
regression: labelRegression,
|
|
};
|