import { writeFileSync } from 'node:fs'; import { spawnSync } from 'node:child_process'; import { parseFetchurl } from './lib'; /* Constants */ const FLAKE = process.env.FLAKE; const genVueText = ( version: string, hash: string, url: string, ) => `# This file was autogenerated. DO NOT EDIT! { version = "${version}"; url = "${url}"; hash = "${hash}"; } `; export const updateVuetorrent = () => { const FILE = `${FLAKE}/configurations/nos/modules/qbittorrent/vuetorrent.nix`; const OLD_VERSION = JSON.parse(spawnSync('nix', ['eval', '-f', FILE, '--json'], { shell: true }).stdout.toString()).version; const VERSION = JSON.parse(spawnSync('curl', ['-s', 'https://api.github.com/repos/VueTorrent/VueTorrent/releases/latest'], { shell: true }).stdout.toString()).tag_name.replace('v', ''); const URL = `https://github.com/VueTorrent/VueTorrent/releases/download/v${VERSION}/vuetorrent.zip`; const HASH = parseFetchurl(URL); const fileText = genVueText(VERSION, HASH, URL); writeFileSync(FILE, fileText); return OLD_VERSION !== VERSION ? `Vuetorrent: ${OLD_VERSION} -> ${VERSION}` : ''; }; export const updateCustomPackage = (pkg: string) => spawnSync( `nix run ${FLAKE}#${pkg}.update`, [], { shell: true }, ).stderr.toString(); export const runNixUpdate = (attr: string, options: string[] = []) => spawnSync( 'nix-update', ['--flake', attr, ...options], { shell: true, cwd: FLAKE }, ).stderr.toString();