Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e3d089a71f | |||
| 668e7c34bb | |||
| e796b4f400 | |||
| a4b5c20993 | |||
| d17f364fc5 | |||
| 5f79eec3dd | |||
| ed98bb57c0 |
@@ -79,7 +79,29 @@ jobs:
|
||||
|
||||
- name: Create Gitea release
|
||||
run: |
|
||||
python3 -c "import json,os; v=os.environ['VERSION']; img=os.environ['IMAGE']; notes=open('/tmp/release_notes.txt').read(); open('/tmp/release_body.json','w').write(json.dumps({'tag_name':'v'+v,'name':'Catalyst v'+v,'body':'### Changes\n\n'+notes+'\n\n### Image\n\n'+img+':'+v,'draft':False,'prerelease':False}))"
|
||||
cat > /tmp/make_release.py << 'PYEOF'
|
||||
import json, os
|
||||
v = os.environ['VERSION']
|
||||
img = os.environ['IMAGE']
|
||||
raw = open('/tmp/release_notes.txt').read().strip()
|
||||
feats, fixes = [], []
|
||||
for line in raw.splitlines():
|
||||
msg = line.lstrip('- ').strip()
|
||||
if msg.startswith('feat:'):
|
||||
feats.append('- ' + msg[5:].strip())
|
||||
elif msg.startswith('fix:'):
|
||||
fixes.append('- ' + msg[4:].strip())
|
||||
sections = []
|
||||
if feats:
|
||||
sections.append('### New Features\n\n' + '\n'.join(feats))
|
||||
if fixes:
|
||||
sections.append('### Bug Fixes\n\n' + '\n'.join(fixes))
|
||||
notes = '\n\n'.join(sections) or '_No changes_'
|
||||
body = notes + '\n\n### Image\n\n' + img + ':' + v
|
||||
payload = {'tag_name': 'v'+v, 'name': 'Catalyst v'+v, 'body': body, 'draft': False, 'prerelease': False}
|
||||
open('/tmp/release_body.json', 'w').write(json.dumps(payload))
|
||||
PYEOF
|
||||
python3 /tmp/make_release.py
|
||||
curl -sf -X POST \
|
||||
-H "Authorization: token ${{ secrets.TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
|
||||
@@ -1 +1 @@
|
||||
const VERSION = "1.3.0";
|
||||
const VERSION = "1.3.1";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "catalyst",
|
||||
"version": "1.3.0",
|
||||
"version": "1.3.1",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"start": "node server/server.js",
|
||||
|
||||
@@ -151,11 +151,13 @@ export function updateInstance(vmid, data) {
|
||||
}
|
||||
|
||||
export function deleteInstance(vmid) {
|
||||
return db.prepare('DELETE FROM instances WHERE vmid = ?').run(vmid);
|
||||
db.prepare('DELETE FROM instance_history WHERE vmid = ?').run(vmid);
|
||||
db.prepare('DELETE FROM instances WHERE vmid = ?').run(vmid);
|
||||
}
|
||||
|
||||
export function importInstances(rows) {
|
||||
db.exec('BEGIN');
|
||||
db.exec('DELETE FROM instance_history');
|
||||
db.exec('DELETE FROM instances');
|
||||
const insert = db.prepare(`
|
||||
INSERT INTO instances
|
||||
|
||||
@@ -164,6 +164,19 @@ describe('deleteInstance', () => {
|
||||
expect(getInstance(1)).toBeNull();
|
||||
expect(getInstance(2)).not.toBeNull();
|
||||
});
|
||||
|
||||
it('clears history for the deleted instance', () => {
|
||||
createInstance({ ...base, name: 'a', vmid: 1 });
|
||||
deleteInstance(1);
|
||||
expect(getInstanceHistory(1)).toHaveLength(0);
|
||||
});
|
||||
|
||||
it('does not clear history for other instances', () => {
|
||||
createInstance({ ...base, name: 'a', vmid: 1 });
|
||||
createInstance({ ...base, name: 'b', vmid: 2 });
|
||||
deleteInstance(1);
|
||||
expect(getInstanceHistory(2).length).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
// ── importInstances ───────────────────────────────────────────────────────────
|
||||
@@ -183,6 +196,12 @@ describe('importInstances', () => {
|
||||
importInstances([]);
|
||||
expect(getInstances()).toEqual([]);
|
||||
});
|
||||
|
||||
it('clears history for all replaced instances', () => {
|
||||
createInstance({ ...base, name: 'old', vmid: 1 });
|
||||
importInstances([{ ...base, name: 'new', vmid: 2 }]);
|
||||
expect(getInstanceHistory(1)).toHaveLength(0);
|
||||
});
|
||||
});
|
||||
|
||||
// ── instance history ─────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user