Change workflow
This commit is contained in:
84
.github/workflows/push_json_to_pocketbase.yml
generated
vendored
84
.github/workflows/push_json_to_pocketbase.yml
generated
vendored
@@ -105,7 +105,11 @@ jobs:
|
|||||||
const typesRes = await request(apiBase + '/collections/z_ref_script_types/records?perPage=500', { headers: { 'Authorization': token } });
|
const typesRes = await request(apiBase + '/collections/z_ref_script_types/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
if (typesRes.ok) {
|
if (typesRes.ok) {
|
||||||
const typesData = JSON.parse(typesRes.body);
|
const typesData = JSON.parse(typesRes.body);
|
||||||
(typesData.items || []).forEach(function(item) { if (item.type) typeValueToId[item.type] = item.id; });
|
(typesData.items || []).forEach(function(item) {
|
||||||
|
if (item.type != null) typeValueToId[item.type] = item.id;
|
||||||
|
if (item.name != null) typeValueToId[item.name] = item.id;
|
||||||
|
if (item.value != null) typeValueToId[item.value] = item.id;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} catch (e) { console.warn('Could not fetch z_ref_script_types:', e.message); }
|
} catch (e) { console.warn('Could not fetch z_ref_script_types:', e.message); }
|
||||||
try {
|
try {
|
||||||
@@ -115,6 +119,33 @@ jobs:
|
|||||||
(catData.items || []).forEach(function(item) { if (item.name) categoryNameToPbId[item.name] = item.id; });
|
(catData.items || []).forEach(function(item) { if (item.name) categoryNameToPbId[item.name] = item.id; });
|
||||||
}
|
}
|
||||||
} catch (e) { console.warn('Could not fetch script_categories:', e.message); }
|
} catch (e) { console.warn('Could not fetch script_categories:', e.message); }
|
||||||
|
var noteTypeToId = {};
|
||||||
|
var installMethodTypeToId = {};
|
||||||
|
var osToId = {};
|
||||||
|
var osVersionToId = {};
|
||||||
|
try {
|
||||||
|
const res = await request(apiBase + '/collections/z_ref_note_types/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
|
if (res.ok) JSON.parse(res.body).items?.forEach(function(item) { if (item.type != null) noteTypeToId[item.type] = item.id; });
|
||||||
|
} catch (e) { console.warn('z_ref_note_types:', e.message); }
|
||||||
|
try {
|
||||||
|
const res = await request(apiBase + '/collections/z_ref_install_method_types/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
|
if (res.ok) JSON.parse(res.body).items?.forEach(function(item) { if (item.type != null) installMethodTypeToId[item.type] = item.id; });
|
||||||
|
} catch (e) { console.warn('z_ref_install_method_types:', e.message); }
|
||||||
|
try {
|
||||||
|
const res = await request(apiBase + '/collections/z_ref_os/records?perPage=500', { headers: { 'Authorization': token } });
|
||||||
|
if (res.ok) JSON.parse(res.body).items?.forEach(function(item) { if (item.os != null) osToId[item.os] = item.id; });
|
||||||
|
} catch (e) { console.warn('z_ref_os:', e.message); }
|
||||||
|
try {
|
||||||
|
const res = await request(apiBase + '/collections/z_ref_os_version/records?perPage=500&expand=os', { headers: { 'Authorization': token } });
|
||||||
|
if (res.ok) {
|
||||||
|
(JSON.parse(res.body).items || []).forEach(function(item) {
|
||||||
|
var osName = item.expand && item.expand.os && item.expand.os.os != null ? item.expand.os.os : null;
|
||||||
|
if (osName != null && item.version != null) osVersionToId[osName + '|' + item.version] = item.id;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (e) { console.warn('z_ref_os_version:', e.message); }
|
||||||
|
var notesCollUrl = apiBase + '/collections/script_notes/records';
|
||||||
|
var installMethodsCollUrl = apiBase + '/collections/script_install_methods/records';
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
if (!fs.existsSync(file)) continue;
|
if (!fs.existsSync(file)) continue;
|
||||||
const data = JSON.parse(fs.readFileSync(file, 'utf8'));
|
const data = JSON.parse(fs.readFileSync(file, 'utf8'));
|
||||||
@@ -137,6 +168,7 @@ jobs:
|
|||||||
is_dev: true
|
is_dev: true
|
||||||
};
|
};
|
||||||
var resolvedType = typeValueToId[data.type];
|
var resolvedType = typeValueToId[data.type];
|
||||||
|
if (resolvedType == null && data.type === 'ct') resolvedType = typeValueToId['lxc'];
|
||||||
if (resolvedType) payload.type = resolvedType;
|
if (resolvedType) payload.type = resolvedType;
|
||||||
var resolvedCats = (data.categories || []).map(function(n) { return categoryNameToPbId[categoryIdToName[n]]; }).filter(Boolean);
|
var resolvedCats = (data.categories || []).map(function(n) { return categoryNameToPbId[categoryIdToName[n]]; }).filter(Boolean);
|
||||||
if (resolvedCats.length) payload.categories = resolvedCats;
|
if (resolvedCats.length) payload.categories = resolvedCats;
|
||||||
@@ -149,7 +181,49 @@ jobs:
|
|||||||
});
|
});
|
||||||
const list = JSON.parse(listRes.body);
|
const list = JSON.parse(listRes.body);
|
||||||
const existingId = list.items && list.items[0] && list.items[0].id;
|
const existingId = list.items && list.items[0] && list.items[0].id;
|
||||||
|
async function resolveNotesAndInstallMethods(scriptId) {
|
||||||
|
var noteIds = [];
|
||||||
|
for (var i = 0; i < (data.notes || []).length; i++) {
|
||||||
|
var note = data.notes[i];
|
||||||
|
var typeId = noteTypeToId[note.type];
|
||||||
|
if (typeId == null) continue;
|
||||||
|
var postRes = await request(notesCollUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ text: note.text || '', type: typeId })
|
||||||
|
});
|
||||||
|
if (postRes.ok) noteIds.push(JSON.parse(postRes.body).id);
|
||||||
|
}
|
||||||
|
var installMethodIds = [];
|
||||||
|
for (var j = 0; j < (data.install_methods || []).length; j++) {
|
||||||
|
var im = data.install_methods[j];
|
||||||
|
var typeId = installMethodTypeToId[im.type];
|
||||||
|
var res = im.resources || {};
|
||||||
|
var osId = osToId[res.os];
|
||||||
|
var osVersionKey = (res.os != null && res.version != null) ? res.os + '|' + res.version : null;
|
||||||
|
var osVersionId = osVersionKey ? osVersionToId[osVersionKey] : null;
|
||||||
|
var imBody = {
|
||||||
|
script: scriptId,
|
||||||
|
resources_cpu: res.cpu != null ? res.cpu : 0,
|
||||||
|
resources_ram: res.ram != null ? res.ram : 0,
|
||||||
|
resources_hdd: res.hdd != null ? res.hdd : 0
|
||||||
|
};
|
||||||
|
if (typeId) imBody.type = typeId;
|
||||||
|
if (osId) imBody.os = osId;
|
||||||
|
if (osVersionId) imBody.os_version = osVersionId;
|
||||||
|
var imPostRes = await request(installMethodsCollUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify(imBody)
|
||||||
|
});
|
||||||
|
if (imPostRes.ok) installMethodIds.push(JSON.parse(imPostRes.body).id);
|
||||||
|
}
|
||||||
|
return { noteIds: noteIds, installMethodIds: installMethodIds };
|
||||||
|
}
|
||||||
if (existingId) {
|
if (existingId) {
|
||||||
|
var resolved = await resolveNotesAndInstallMethods(existingId);
|
||||||
|
payload.notes = resolved.noteIds;
|
||||||
|
payload.install_methods = resolved.installMethodIds;
|
||||||
console.log('Updating', file, '(slug=' + data.slug + ')');
|
console.log('Updating', file, '(slug=' + data.slug + ')');
|
||||||
const r = await request(recordsUrl + '/' + existingId, {
|
const r = await request(recordsUrl + '/' + existingId, {
|
||||||
method: 'PATCH',
|
method: 'PATCH',
|
||||||
@@ -165,6 +239,14 @@ jobs:
|
|||||||
body: JSON.stringify(payload)
|
body: JSON.stringify(payload)
|
||||||
});
|
});
|
||||||
if (!r.ok) throw new Error('POST failed: ' + r.body);
|
if (!r.ok) throw new Error('POST failed: ' + r.body);
|
||||||
|
var scriptId = JSON.parse(r.body).id;
|
||||||
|
var resolved = await resolveNotesAndInstallMethods(scriptId);
|
||||||
|
var patchRes = await request(recordsUrl + '/' + scriptId, {
|
||||||
|
method: 'PATCH',
|
||||||
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ install_methods: resolved.installMethodIds, notes: resolved.noteIds })
|
||||||
|
});
|
||||||
|
if (!patchRes.ok) throw new Error('PATCH relations failed: ' + patchRes.body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log('Done.');
|
console.log('Done.');
|
||||||
|
|||||||
Reference in New Issue
Block a user