@@ -4,11 +4,49 @@ import { errorCollector } from './index.js';
44import j2m from 'jira2md' ;
55
66// Initialize Octokit with GraphQL support
7+ // @deprecated Use getOctokitForOwner() instead for multi-org support
78export const octokit = new Octokit ( {
89 auth : process . env . GH_TOKEN ,
910 baseUrl : 'https://api.github.com' ,
1011} ) ;
1112
13+ // Cache for Octokit instances by owner
14+ const octokitInstances = new Map ( ) ;
15+
16+ /**
17+ * Get an Octokit instance for the specified owner
18+ * @param {string } owner - Repository owner (e.g., 'patternfly', 'rh-uxd')
19+ * @returns {Octokit } Cached Octokit instance with appropriate token
20+ */
21+ export function getOctokitForOwner ( owner ) {
22+ // Return cached instance if available
23+ if ( octokitInstances . has ( owner ) ) {
24+ return octokitInstances . get ( owner ) ;
25+ }
26+
27+ // Determine which token to use based on owner
28+ let token ;
29+ if ( owner === 'rh-uxd' ) {
30+ token = process . env . GH_JIRA_SYNC_RHUXD_PAT ;
31+ } else {
32+ // Default to patternfly token for 'patternfly' and any other owners
33+ token = process . env . GH_TOKEN ;
34+ }
35+
36+ if ( ! token ) {
37+ throw new Error ( `Missing GitHub token for owner: ${ owner } ` ) ;
38+ }
39+
40+ // Create and cache new instance
41+ const instance = new Octokit ( {
42+ auth : token ,
43+ baseUrl : 'https://api.github.com' ,
44+ } ) ;
45+
46+ octokitInstances . set ( owner , instance ) ;
47+ return instance ;
48+ }
49+
1250// Initialize Jira client
1351export const jiraClient = axios . create ( {
1452 baseURL : 'https://issues.redhat.com/' ,
@@ -283,6 +321,10 @@ export const availableComponents = [
283321 {
284322 name : 'github-jira-sync' ,
285323 owner : 'rh-uxd'
324+ } ,
325+ {
326+ name : 'jira-weekly-report' ,
327+ owner : 'rh-uxd'
286328 }
287329] ;
288330
@@ -354,9 +396,12 @@ export const buildJiraIssueData = (githubIssue, isUpdateIssue = false) => {
354396} ;
355397
356398// Helper function to execute GraphQL queries
357- export async function executeGraphQLQuery ( query , variables ) {
399+ export async function executeGraphQLQuery ( query , variables , owner = null ) {
358400 try {
359- const response = await octokit . graphql ( query , variables ) ;
401+ // Extract owner from variables if not provided directly
402+ const ownerToUse = owner || variables ?. owner || 'patternfly' ;
403+ const octokitInstance = getOctokitForOwner ( ownerToUse ) ;
404+ const response = await octokitInstance . graphql ( query , variables ) ;
360405 return response ;
361406 } catch ( error ) {
362407 errorCollector . addError ( 'HELPERS: GraphQL query execution' , error ) ;
@@ -587,7 +632,7 @@ export async function getRepoIssues(repo, ghOwner = 'patternfly', since) {
587632 repo,
588633 issuesCursor : cursor ,
589634 since,
590- } ) ;
635+ } , ghOwner ) ;
591636
592637 // Validate response structure
593638 if ( ! response ?. repository ?. issues ) {
@@ -786,7 +831,8 @@ export function shouldSyncFromJira(githubIssue, jiraIssue) {
786831export async function updateGitHubIssue ( owner , repo , issueNumber , updates ) {
787832 await delay ( ) ;
788833 try {
789- const response = await octokit . rest . issues . update ( {
834+ const octokitInstance = getOctokitForOwner ( owner ) ;
835+ const response = await octokitInstance . rest . issues . update ( {
790836 owner,
791837 repo,
792838 issue_number : issueNumber ,
@@ -805,7 +851,8 @@ export async function updateGitHubIssue(owner, repo, issueNumber, updates) {
805851export async function addGitHubIssueComment ( owner , repo , issueNumber , body ) {
806852 await delay ( ) ;
807853 try {
808- const response = await octokit . rest . issues . createComment ( {
854+ const octokitInstance = getOctokitForOwner ( owner ) ;
855+ const response = await octokitInstance . rest . issues . createComment ( {
809856 owner,
810857 repo,
811858 issue_number : issueNumber ,
@@ -824,7 +871,8 @@ export async function addGitHubIssueComment(owner, repo, issueNumber, body) {
824871export async function createGitHubIssue ( owner , repo , issueData ) {
825872 await delay ( ) ;
826873 try {
827- const response = await octokit . rest . issues . create ( {
874+ const octokitInstance = getOctokitForOwner ( owner ) ;
875+ const response = await octokitInstance . rest . issues . create ( {
828876 owner,
829877 repo,
830878 ...issueData ,
@@ -850,7 +898,8 @@ export async function createGitHubIssue(owner, repo, issueData) {
850898export async function closeGitHubIssue ( owner , repo , issueNumber ) {
851899 await delay ( ) ;
852900 try {
853- const response = await octokit . rest . issues . update ( {
901+ const octokitInstance = getOctokitForOwner ( owner ) ;
902+ const response = await octokitInstance . rest . issues . update ( {
854903 owner,
855904 repo,
856905 issue_number : issueNumber ,
0 commit comments