#!/usr/bin/env bare
/**
* Create issue directly in database (bypasses HTTP)
*/
import Corestore from 'corestore'
import Hyperbee from 'hyperbee'
import process from 'bare-process'
import fs from 'bare-fs'
async function main() {
const repoName = process.argv[2]
const title = process.argv[3]
const descriptionFile = process.argv[4]
if (!repoName || !title || !descriptionFile) {
console.error('Usage: bare create-issue-direct.js <repo-name> <title> <description-file>')
console.error('Example: bare create-issue-direct.js pear-git "Roadmap" /tmp/roadmap.md')
process.exit(1)
}
console.log('📝 Creating issue directly in database...\n')
console.log(`Repository: ${repoName}`)
console.log(`Title: ${title}`)
console.log(`Description file: ${descriptionFile}`)
console.log('')
// Read description from file
let description
try {
description = fs.readFileSync(descriptionFile, 'utf8')
} catch (err) {
console.error(`❌ Failed to read description file: ${err.message}`)
process.exit(1)
}
// Initialize storage
const store = new Corestore('./pear-git-storage')
await store.ready()
const core = store.get({ name: 'registry' })
const db = new Hyperbee(core, { keyEncoding: 'utf-8', valueEncoding: 'json' })
await db.ready()
try {
// Get next issue number
console.log('Finding next issue number...')
let maxNumber = 0
for await (const entry of db.createReadStream({
gt: `issue:${repoName}:`,
lt: `issue:${repoName}:\xff`
})) {
if (entry.value.number > maxNumber) {
maxNumber = entry.value.number
}
}
const issueNumber = maxNumber + 1
console.log(`Next issue number: #${issueNumber}`)
console.log('')
// Create issue object
const issue = {
number: issueNumber,
title,
description,
images: [],
status: 'open',
createdBy: 'admin-71f234c6f5a991d5', // Admin user we created earlier
createdAt: Date.now(),
updatedAt: Date.now(),
comments: []
}
// Store in database
console.log('Writing to database...')
await db.put(`issue:${repoName}:${issueNumber}`, issue)
console.log('✅ Issue created successfully!')
console.log('')
console.log(`Issue #${issueNumber}: ${title}`)
console.log(`Status: ${issue.status}`)
console.log(`Created: ${new Date(issue.createdAt).toISOString()}`)
console.log('')
console.log('View at: http://10.22.0.1:5005/git/tabertron/pear-git/issues/' + issueNumber)
} catch (err) {
console.error('❌ Error:', err.message)
console.error(err)
process.exit(1)
} finally {
await db.close()
await store.close()
}
}
main().catch(err => {
console.error('Fatal error:', err)
process.exit(1)
})