(token, repoName)
| 2073 | } |
| 2074 | |
| 2075 | async function ensureGitHubRepo(token, repoName) { |
| 2076 | const [owner, repo] = repoName.split('/'); |
| 2077 | |
| 2078 | const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, { |
| 2079 | headers: { 'Authorization': `Bearer ${token}` } |
| 2080 | }); |
| 2081 | |
| 2082 | if (response.ok) { |
| 2083 | return await response.json(); |
| 2084 | } |
| 2085 | |
| 2086 | if (response.status === 404) { |
| 2087 | const createRes = await fetch(`https://api.github.com/user/repos`, { |
| 2088 | method: 'POST', |
| 2089 | headers: { |
| 2090 | 'Authorization': `Bearer ${token}`, |
| 2091 | 'Content-Type': 'application/json' |
| 2092 | }, |
| 2093 | body: JSON.stringify({ |
| 2094 | name: repo, |
| 2095 | private: true, |
| 2096 | description: 'OpenCode Studio backup', |
| 2097 | auto_init: true |
| 2098 | }) |
| 2099 | }); |
| 2100 | |
| 2101 | if (createRes.ok) { |
| 2102 | await new Promise(r => setTimeout(r, 2000)); |
| 2103 | return await createRes.json(); |
| 2104 | } |
| 2105 | |
| 2106 | const err = await createRes.text(); |
| 2107 | throw new Error(`Failed to create repo: ${err}`); |
| 2108 | } |
| 2109 | |
| 2110 | const err = await response.text(); |
| 2111 | throw new Error(`Failed to check repo: ${err}`); |
| 2112 | } |
| 2113 | |
| 2114 | const RESERVED_WIN_NAMES = ['con', 'prn', 'aux', 'nul', 'com0', 'com1', 'com2', 'com3', 'com4', 'com5', 'com6', 'com7', 'com8', 'com9', 'lpt0', 'lpt1', 'lpt2', 'lpt3', 'lpt4', 'lpt5', 'lpt6', 'lpt7', 'lpt8', 'lpt9']; |
| 2115 |
no outgoing calls
no test coverage detected