1.1.1Updated a month ago
import { Command } from "jsr:@cliffy/command@1.0.0-rc.7";
import { execSync } from "node:child_process";

import { CLI_VERSION, HOST_URL } from "../config.ts";
import { fetchExternal } from "../utils/fetch_external.ts";

const upgraded_flag = "--viapak-just-finished-upgrading";

export default new Command()
  .name('upgrade')
  .description('Updates viapak to the latest version')
  .option(
    '--force',
    'Download the latest version even if the client already has it'
  )
  .option(
    upgraded_flag,
    'Flag to indicate Viapak has just finished ugrading',
    {
      hidden: true,
      action: () => {
        console.log();
        console.log(`Viapak has been updated to v${CLI_VERSION}`);
        console.log();
        Deno.exit(0);
      },
    })
  .action(async ({ force, viapakJustFinishedUpgrading }) => {
    if(viapakJustFinishedUpgrading) return;

    console.log(`Current Viapak version: ${CLI_VERSION}`);
    console.log(`Fetching the latest Viapak version...`);
    const latest_version = await (await fetchExternal(HOST_URL + '/api/v1/viapak-version')).text();
    console.log(`Latest Viapak version: ${latest_version}`);

    if(latest_version == CLI_VERSION && !force) {
      console.log(`\nViapak is up to date\n`);
      Deno.exit(0);
    }

    console.log(execSync(`deno run -A -r=${HOST_URL} -q ${HOST_URL} upgrade ${upgraded_flag}`).toString());
  });