mirror of
				https://github.com/Palm1r/QodeAssist.git
				synced 2025-10-30 15:54:37 -04:00 
			
		
		
		
	🐛 fix: Add plugins data
This commit is contained in:
		
							
								
								
									
										56
									
								
								.github/scripts/plugin.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								.github/scripts/plugin.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| { | ||||
|     "name": "QodeAssist", | ||||
|     "vendor": "Petr Mironychev", | ||||
|     "tags": [ | ||||
|         "code assistant", | ||||
|         "llm", | ||||
|         "ai", | ||||
|         "openai" | ||||
|         "ollama", | ||||
|     ], | ||||
|     "compatibility": "Qt 6.8.1", | ||||
|     "platforms": [ | ||||
|         "Windows", | ||||
|         "macOS", | ||||
|         "Linux" | ||||
|     ], | ||||
|     "license": "GPLv3", | ||||
|     "version": "0.4.0", | ||||
|     "status": "draft", | ||||
|     "is_pack": false, | ||||
|     "released_at": null, | ||||
|     "version_history": [ | ||||
|         { | ||||
|             "version": "0.4.0", | ||||
|             "is_latest": true, | ||||
|             "released_at": "2024-01-24T15:00:00Z" | ||||
|         } | ||||
|     ], | ||||
|     "icon": "https://github.com/user-attachments/assets/dc336712-83cb-440d-8761-8d0a31de898d", | ||||
|     "small_icon": "https://github.com/user-attachments/assets/8ec241bf-3186-452e-b8db-8d70543c2f41", | ||||
|     "description_paragraphs": [ | ||||
|         { | ||||
|             "header": "Description", | ||||
|             "text": [ | ||||
|                 "QodeAssist is an AI-powered coding assistant plugin for Qt Creator. It provides intelligent code completion and suggestions for C++ and QML, leveraging large language models through local providers like Ollama. Enhance your coding productivity with context-aware AI assistance directly in your Qt development environment." | ||||
|             ] | ||||
|         } | ||||
|     ], | ||||
|     "description_links": [ | ||||
|         { | ||||
|             "url": "https://github.com/Palm1r/QodeAssist", | ||||
|             "link_text": "Site" | ||||
|         } | ||||
|     ], | ||||
|     "description_images": [ | ||||
|         { | ||||
|             "url": "https://github.com/user-attachments/assets/255a52f1-5cc0-4ca3-b05c-c4cf9cdbe25a", | ||||
|             "image_label": "Code Completion" | ||||
|         } | ||||
|     ], | ||||
|     "copyright": "(C) Petr Mironychev", | ||||
|     "download_history": { | ||||
|         "download_count": 0 | ||||
|     }, | ||||
|     "plugin_sets": [] | ||||
| } | ||||
							
								
								
									
										147
									
								
								.github/scripts/registerPlugin.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								.github/scripts/registerPlugin.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,147 @@ | ||||
| const fs = require('fs'); | ||||
| const path = require('path'); | ||||
|  | ||||
| const updatePluginData = (plugin, env, pluginQtcData) => { | ||||
|   const dictionary_platform = { | ||||
|     'Windows': `${env.PLUGIN_DOWNLOAD_URL}/${env.PLUGIN_NAME}-${env.QT_CREATOR_VERSION}-Windows-x64.7z`, | ||||
|     'Linux': `${env.PLUGIN_DOWNLOAD_URL}/${env.PLUGIN_NAME}-${env.QT_CREATOR_VERSION}-Linux-x64.7z`, | ||||
|     'macOS': `${env.PLUGIN_DOWNLOAD_URL}/${env.PLUGIN_NAME}-${env.QT_CREATOR_VERSION}-macOS-universal.7z` | ||||
|   }; | ||||
|  | ||||
|   plugin.core_compat_version = env.QT_CREATOR_VERSION_INTERNAL; | ||||
|   plugin.core_version = env.QT_CREATOR_VERSION_INTERNAL; | ||||
|   plugin.status = "draft"; | ||||
|  | ||||
|   plugin.plugins.forEach(pluginsEntry => { | ||||
|     pluginsEntry.url = dictionary_platform[plugin.host_os]; | ||||
|     pluginsEntry.meta_data = pluginQtcData; | ||||
|   }); | ||||
|   return plugin; | ||||
| }; | ||||
|  | ||||
| const createNewPluginData = (env, platform, pluginQtcData) => { | ||||
|   const pluginJson = { | ||||
|     "status": "draft", | ||||
|     "core_compat_version": "<placeholder>", | ||||
|     "core_version": "<placeholder>", | ||||
|     "host_os": platform, | ||||
|     "host_os_version": "0", // TODO: pass the real data | ||||
|     "host_os_architecture": "x86_64", // TODO: pass the real data | ||||
|     "plugins": [ | ||||
|       { | ||||
|         "url": "", | ||||
|         "size": 5000, // TODO: check if it is needed, pass the real data | ||||
|         "meta_data": {}, | ||||
|         "dependencies": [] | ||||
|       } | ||||
|     ] | ||||
|   }; | ||||
|  | ||||
|   updatePluginData(pluginJson, env, pluginQtcData); | ||||
|   return pluginJson; | ||||
| } | ||||
|  | ||||
| const updateServerPluginJson = (endJsonData, pluginQtcData, env) => { | ||||
|   // Update the global data in mainData | ||||
|   endJsonData.name = pluginQtcData.Name; | ||||
|   endJsonData.vendor = pluginQtcData.Vendor; | ||||
|   endJsonData.version = pluginQtcData.Version; | ||||
|   endJsonData.copyright = pluginQtcData.Copyright; | ||||
|   endJsonData.status = "draft"; | ||||
|  | ||||
|   endJsonData.version_history[0].version = pluginQtcData.Version; | ||||
|  | ||||
|   endJsonData.description_paragraphs = [ | ||||
|     { | ||||
|       header: "Description", | ||||
|       text: [ | ||||
|         pluginQtcData.Description | ||||
|       ] | ||||
|     } | ||||
|   ]; | ||||
|  | ||||
|   let found = false; | ||||
|   // Update or Add the plugin data for the current Qt Creator version | ||||
|   for (const plugin of endJsonData.plugin_sets) { | ||||
|     if (plugin.core_compat_version === env.QT_CREATOR_VERSION_INTERNAL) { | ||||
|       updatePluginData(plugin, env, pluginQtcData); | ||||
|       found = true; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (!found)  { | ||||
|     for (const platform of ['Windows', 'Linux', 'macOS']) { | ||||
|       endJsonData.plugin_sets.push(createNewPluginData(env, platform, pluginQtcData)); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   // Save the updated JSON file | ||||
|   const serverPluginJsonPath = path.join(__dirname, `${env.PLUGIN_NAME}.json`); | ||||
|   fs.writeFileSync(serverPluginJsonPath, JSON.stringify(endJsonData, null, 2), 'utf8'); | ||||
| }; | ||||
|  | ||||
| const request = async (type, url, token, data) => { | ||||
|   const response = await fetch(url, { | ||||
|     method: type, | ||||
|     headers: { | ||||
|       'Authorization': `Bearer ${token}`, | ||||
|       'accept': 'application/json', | ||||
|       'Content-Type': 'application/json' | ||||
|     }, | ||||
|     body: data ? JSON.stringify(data) : undefined | ||||
|   }); | ||||
|   if (!response.ok) { | ||||
|     const errorResponse = await response.json(); | ||||
|     console.error(`${type} Request Error Response:`, errorResponse); // Log the error response | ||||
|     throw new Error(`HTTP error! status: ${response.status}`); | ||||
|   } | ||||
|   return await response.json(); | ||||
| } | ||||
|  | ||||
| const put = (url, token, data) => request('PUT', url, token, data) | ||||
| const post = (url, token, data) => request('POST', url, token, data) | ||||
| const get = (url, token) => request('GET', url, token) | ||||
|  | ||||
| const purgeCache = async (env) => { | ||||
|   try { | ||||
|     await post(`${env.API_URL}api/v1/cache/purgeall`, env.TOKEN, {}); | ||||
|     console.log('Cache purged successfully'); | ||||
|   } catch (error) { | ||||
|     console.error('Error:', error); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| async function main() { | ||||
|   const env = { | ||||
|     PLUGIN_DOWNLOAD_URL: process.env.PLUGIN_DOWNLOAD_URL || process.argv[2], | ||||
|     PLUGIN_NAME: process.env.PLUGIN_NAME || process.argv[3], | ||||
|     QT_CREATOR_VERSION: process.env.QT_CREATOR_VERSION || process.argv[4], | ||||
|     QT_CREATOR_VERSION_INTERNAL: process.env.QT_CREATOR_VERSION_INTERNAL || process.argv[5], | ||||
|     TOKEN: process.env.TOKEN || process.argv[6], | ||||
|     API_URL: process.env.API_URL || process.argv[7] || '' | ||||
|   }; | ||||
|  | ||||
|   const pluginQtcData = require(`../../${env.PLUGIN_NAME}-origin/${env.PLUGIN_NAME}.json`); | ||||
|   const templateFileData = require('./plugin.json'); | ||||
|  | ||||
|   if (env.API_URL === '') { | ||||
|     updateServerPluginJson(templateFileData, pluginQtcData, env); | ||||
|     process.exit(0); | ||||
|   } | ||||
|  | ||||
|   const response = await get(`${env.API_URL}api/v1/admin/extensions?search=${env.PLUGIN_NAME}`, env.TOKEN); | ||||
|   if (response.items.length > 0 && response.items[0].extension_id !== '') { | ||||
|     const pluginId = response.items[0].extension_id; | ||||
|     console.log('Plugin found. Updating the plugin'); | ||||
|     updateServerPluginJson(response.items[0], pluginQtcData, env); | ||||
|  | ||||
|     await put(`${env.API_URL}api/v1/admin/extensions/${pluginId}`, env.TOKEN, response.items[0]); | ||||
|   } else { | ||||
|     console.log('No plugin found. Creating a new plugin'); | ||||
|     updateServerPluginJson(templateFileData, pluginQtcData, env); | ||||
|     await post(`${env.API_URL}api/v1/admin/extensions`, env.TOKEN, templateFileData); | ||||
|   } | ||||
|   // await purgeCache(env); | ||||
| } | ||||
|  | ||||
| main().then(() => console.log('JSON file updated successfully')); | ||||
		Reference in New Issue
	
	Block a user