import * as github from "@actions/github"; import * as core from "@actions/core"; import { OWNER, REPO } from "./utils/utils"; import { createReadStream, promises as fs } from "fs"; import * as readline from "readline"; import * as semver from "semver"; import { updateChecksums } from "./download/checksum/update-known-checksums"; async function run(): Promise { const checksumFilePath = process.argv.slice(2)[0]; const defaultVersionFilePath = process.argv.slice(2)[1]; const github_token = process.argv.slice(2)[2]; const octokit = github.getOctokit(github_token); const response = await octokit.paginate(octokit.rest.repos.listReleases, { owner: OWNER, repo: REPO, }); const downloadUrls: string[] = response.flatMap((release) => release.assets .filter((asset) => asset.name.endsWith(".sha256")) .map((asset) => asset.browser_download_url), ); await updateChecksums(checksumFilePath, downloadUrls); const latestVersion = response .map((release) => release.tag_name) .sort(semver.rcompare)[0]; core.setOutput("latest-version", latestVersion); await updateDefaultVersion(defaultVersionFilePath, latestVersion); } async function updateDefaultVersion( filePath: string, latestVersion: string, ): Promise { const fileStream = createReadStream(filePath); const rl = readline.createInterface({ input: fileStream, }); let foundDescription = false; const lines = []; for await (let line of rl) { if ( !foundDescription && line.includes("description: 'The version of uv to install'") ) { foundDescription = true; } else if (foundDescription && line.includes("default: ")) { line = line.replace(/'[^']*'/, `'${latestVersion}'`); foundDescription = false; } lines.push(line); } await fs.writeFile(filePath, lines.join("\n")); } run();