From bd10945357b9fecd0bff52cf4d513fc48240b5a0 Mon Sep 17 00:00:00 2001 From: Riccardo Cipolleschi Date: Tue, 8 Apr 2025 09:41:02 +0100 Subject: [PATCH] [RN][CI][DoNotCommit] Testing the action in CI --- .../workflow-scripts/extractIssueOncalls.js | 64 +++++++++++++++++++ .github/workflow-scripts/issue-oncall.json | 1 + .github/workflows/monitor-new-issues.yml | 41 ++++++++---- 4041427422.mdt | 8 +++ 4 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 .github/workflow-scripts/extractIssueOncalls.js create mode 100644 .github/workflow-scripts/issue-oncall.json create mode 100644 4041427422.mdt diff --git a/.github/workflow-scripts/extractIssueOncalls.js b/.github/workflow-scripts/extractIssueOncalls.js new file mode 100644 index 00000000000..8cc25955591 --- /dev/null +++ b/.github/workflow-scripts/extractIssueOncalls.js @@ -0,0 +1,64 @@ +/** + * 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 + */ + +const fs = require('fs'); + +const MSEC_IN_DAY = 1000 * 60 * 60 * 24; + +function formatUsers(users) { + console.log(`${users[0]} ${users[1]}`.trim()); +} + +function extractUsersFromScheduleAndDate(schedule, userMap, date) { + const year = date.getFullYear(); + const month = date.getMonth() + 1; // 0 is January, 1 is February + const day = date.getDate(); + const dateStr = `${year}-${month < 10 ? `0${month}` : month}-${day < 10 ? `0${day}` : day}`; + const user1 = userMap[schedule[dateStr][0]]; + const user2 = userMap[schedule[dateStr][1]]; + return [user1, user2]; +} + +function main() { + const configFilePath = process.argv[2]; + // const {userMap, schedule} = JSON.parse( + // String(fs.readFileSync(configFilePath, 'utf8').trim()), + // ); + const {userMap, schedule} = JSON.parse(configFilePath); + extractIssueOncalls(schedule, userMap); +} + +function extractIssueOncalls(schedule, userMap) { + const now = new Date(); + const dayOfTheWeek = now.getDay(); // 0 is Sunday, 1 is Monday, etc. + let users; + if (dayOfTheWeek === 2) { + // exact match in the schedule + users = extractUsersFromScheduleAndDate(schedule, userMap, now); + } else if (dayOfTheWeek < 2) { + // sunday + // go to the tuesday of the last week + const lastWeekTuesday = new Date(now - (5 + dayOfTheWeek) * MSEC_IN_DAY); + users = extractUsersFromScheduleAndDate(schedule, userMap, lastWeekTuesday); + } else if (dayOfTheWeek > 1) { + // go to the previous tuesday + const thisWeekTuesday = new Date(now - (dayOfTheWeek - 2) * MSEC_IN_DAY); + users = extractUsersFromScheduleAndDate(schedule, userMap, thisWeekTuesday); + } + formatUsers(users); + return users; +} + +if (require.main === module) { + void main(); +} + +module.exports = { + extractIssueOncalls, +}; diff --git a/.github/workflow-scripts/issue-oncall.json b/.github/workflow-scripts/issue-oncall.json new file mode 100644 index 00000000000..4b2f3aaf3fe --- /dev/null +++ b/.github/workflow-scripts/issue-oncall.json @@ -0,0 +1 @@ +{\"userMap\": {\"@gammax\": \"178528720146006016\", \"@cipolleschi\": \"178123834233323520\", \"@shubham43245\": \"1272116738070286377\", \"@devanshsaini11\": \"1332338450409721947\", \"@migueldaipre\": \"955564231233777716\", \"@princekt001\": \"609764643178807296\", \"@fabricator2953\": \"756592099826335930\"}, \"schedule\": { \"2025-02-18\": [\"@migueldaipre\", \"@shubham43245\"], \"2025-02-25\": [\"@gammax\", \"@princekt001\"], \"2025-03-04\": [\"@cipolleschi\", \"@fabricator2953\"], \"2025-03-11\": [\"@migueldaipre\", \"@devanshsaini11\"], \"2025-03-18\": [\"@gammax\", \"@shubham43245\"], \"2025-03-25\": [\"@cipolleschi\", \"@princekt001\"], \"2025-04-01\": [\"@migueldaipre\", \"@fabricator2953\"], \"2025-04-08\": [\"@gammax\", \"@devanshsaini11\"], \"2025-04-15\": [\"@cipolleschi\", \"@shubham43245\"], \"2025-04-22\": [\"@migueldaipre\", \"@princekt001\"], \"2025-04-29\": [\"@gammax\", \"@fabricator2953\"], \"2025-05-06\": [\"@cipolleschi\", \"@devanshsaini11\"], \"2025-05-13\": [\"@migueldaipre\", \"@shubham43245\"], \"2025-05-20\": [\"@gammax\", \"@princekt001\"], \"2025-05-27\": [\"@migueldaipre\", \"@fabricator2953\"], \"2025-06-03\": [\"@gammax\", \"@devanshsaini11\"], \"2025-06-10\": [\"@cipolleschi\", \"@shubham43245\"], \"2025-06-17\": [\"@migueldaipre\", \"@princekt001\"], \"2025-06-24\": [\"@gammax\", \"@fabricator2953\"], \"2025-07-01\": [\"@cipolleschi\", \"@devanshsaini11\"], \"2025-07-08\": [\"@migueldaipre\", \"@shubham43245\"], \"2025-07-15\": [\"@gammax\", \"@princekt001\"], \"2025-07-22\": [\"@cipolleschi\", \"@fabricator2953\"], \"2025-07-29\": [\"@migueldaipre\", \"@devanshsaini11\"], \"2025-08-05\": [\"@gammax\", \"@shubham43245\"], \"2025-08-12\": [\"@cipolleschi\", \"@princekt001\"], \"2025-08-19\": [\"@migueldaipre\", \"@fabricator2953\"], \"2025-08-26\": [\"@gammax\", \"@devanshsaini11\"], \"2025-09-02\": [\"@cipolleschi\", \"@shubham43245\"], \"2025-09-09\": [\"@migueldaipre\", \"@princekt001\"], \"2025-09-16\": [\"@gammax\", \"@fabricator2953\"], \"2025-09-23\": [\"@cipolleschi\", \"@devanshsaini11\"], \"2025-09-30\": [\"@migueldaipre\", \"@shubham43245\"], \"2025-10-07\": [\"@gammax\", \"@princekt001\"], \"2025-10-14\": [\"@cipolleschi\", \"@fabricator2953\"], \"2025-10-21\": [\"@migueldaipre\", \"@devanshsaini11\"], \"2025-10-28\": [\"@gammax\", \"@shubham43245\"], \"2025-11-04\": [\"@cipolleschi\", \"@princekt001\"], \"2025-11-11\": [\"@migueldaipre\", \"@fabricator2953\"], \"2025-11-18\": [\"@gammax\", \"@devanshsaini11\"], \"2025-11-25\": [\"@cipolleschi\", \"@shubham43245\"], \"2025-12-02\": [\"@migueldaipre\", \"@princekt001\"], \"2025-12-09\": [\"@gammax\", \"@fabricator2953\"], \"2025-12-16\": [\"@cipolleschi\", \"@devanshsaini11\"], \"2025-12-23\": [\"@migueldaipre\", \"@shubham43245\"], \"2025-12-30\": [\"@gammax\", \"@princekt001\"]}} diff --git a/.github/workflows/monitor-new-issues.yml b/.github/workflows/monitor-new-issues.yml index 632cf62f584..5ca6b4d281b 100644 --- a/.github/workflows/monitor-new-issues.yml +++ b/.github/workflows/monitor-new-issues.yml @@ -1,6 +1,7 @@ name: Monitor React Native New Issues on: + pull_request: #to remove before landing schedule: - cron: "0 0,6,12,18 * * *" workflow_dispatch: @@ -9,19 +10,35 @@ jobs: monitor-issues: runs-on: ubuntu-latest steps: + - name: Checkout + uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20' - - name: Monitor New Issues - uses: react-native-community/repo-monitor@v1.0.1 - with: - task: "monitor-issues" - git_secret: ${{ secrets.GITHUB_TOKEN }} - notifier: "discord" - fetch_data_interval: 6 - repo_owner: "facebook" - repo_name: "react-native" - discord_webhook_url: "${{ secrets.DISCORD_WEBHOOK_URL }}" - discord_id_type: "role" - discord_ids: "1339243367841927228" + - name: Install dependencies + uses: ./.github/actions/yarn-install + - name: Extract next oncall + run: | + ONCALLS=$(node ./.github/workflow-scripts/extractIssueOncalls.js "${{ secrets.ONCALL_SCHEDULE }}" ) + ONCALL1=$(echo $ONCALLS | cut -d ' ' -f 1) + ONCALL2=$(echo $ONCALLS | cut -d ' ' -f 2) + echo "oncall1=$ONCALL1" >> $GITHUB_ENV + echo "oncall2=$ONCALL2" >> $GITHUB_ENV + - name: Print oncalls + run: | + echo "oncall1: ${{ env.oncall1 }}" + echo "oncall2: ${{ env.oncall2 }}" + # Uncomment before landing + # - name: Monitor New Issues + # uses: react-native-community/repo-monitor@v1.0.1 + # with: + # task: "monitor-issues" + # git_secret: ${{ secrets.GITHUB_TOKEN }} + # notifier: "discord" + # fetch_data_interval: 6 + # repo_owner: "facebook" + # repo_name: "react-native" + # discord_webhook_url: "${{ secrets.DISCORD_WEBHOOK_URL }}" + # discord_id_type: "role" + # discord_ids: "${{ env.oncall1 }},${{ env.oncall2 }}" diff --git a/4041427422.mdt b/4041427422.mdt new file mode 100644 index 00000000000..7ddba3a4bc5 --- /dev/null +++ b/4041427422.mdt @@ -0,0 +1,8 @@ +## Summary: + +Test Automation for issue triage +## Changelog: +[Internal] - + +## Test Plan: +GHA