feat: init pin-inputs script
All checks were successful
Discord / discord commits (push) Has been skipped

This commit is contained in:
matt1432 2025-01-27 18:16:59 -05:00
parent 0fd37a9919
commit b8693b725b
8 changed files with 105 additions and 0 deletions

View file

@ -11,5 +11,6 @@ in
listToAttrs (map (x: nameValuePair x (callPackage ./${x})) [
"extract-subs"
"gen-docs"
"pin-inputs"
"update-sources"
])

2
apps/pin-inputs/.envrc Normal file
View file

@ -0,0 +1,2 @@
use flake $FLAKE#node
npm ci

View file

@ -0,0 +1,11 @@
{buildApp, ...}:
buildApp {
src = ./.;
npmDepsHash = "sha256-s4eh0nL52/bS/yIo2BQgdTN6l3SiD2NTY2KntxjpIl4=";
runtimeInputs = [];
meta.description = ''
Takes a list of inputs to pin to their current rev in `flake.lock`.
'';
}

View file

@ -0,0 +1,3 @@
import eslintConf from 'eslint-conf';
export default eslintConf;

BIN
apps/pin-inputs/package-lock.json generated Normal file

Binary file not shown.

View file

@ -0,0 +1,18 @@
{
"name": "pin-inputs",
"version": "0.0.0",
"bin": "out/bin/app.cjs",
"type": "module",
"scripts": {
"build": "node_ver=$(node -v); esbuild src/app.ts --bundle --platform=node --target=\"node${node_ver:1:2}\" --outfile=out/bin/app.cjs"
},
"devDependencies": {
"eslint-conf": "file:../config",
"@types/node": "22.10.10",
"esbuild": "0.24.2",
"eslint": "9.19.0",
"jiti": "2.4.2",
"pkg-types": "1.3.1",
"typescript": "5.7.3"
}
}

View file

@ -0,0 +1,60 @@
import { readFileSync, writeFileSync } from 'fs';
export const replaceInFile = (replace: RegExp, replacement: string, file: string) => {
const fileContents = readFileSync(file);
const replaced = fileContents.toString().replace(replace, replacement);
writeFileSync(file, replaced);
};
/* Constants */
const FLAKE = process.env.FLAKE;
if (!FLAKE) {
console.error('Environment variable FLAKE not found');
process.exit(1);
}
const FLAKE_LOCK = JSON.parse(readFileSync(`${FLAKE}/flake.lock`, 'utf8')).nodes;
const INPUT_REVS = new Map<string, string>();
Object.entries(FLAKE_LOCK).forEach(([key, val]) => {
if (key !== 'root') {
// eslint-disable-next-line
INPUT_REVS.set(key, (val as any).locked.rev);
}
});
const INPUTS = process.argv.slice(2);
/**
* Gets the commit hash of the specified input in this flake.
*
* @param input the name of the input
* @returns the commit hash
*/
const getCurrentRev = (input: string): string => {
if (!INPUT_REVS.has(input)) {
throw new Error(`Input ${input} could not be found.`);
}
return INPUT_REVS.get(input) as string;
};
INPUTS.forEach((input) => {
try {
const inputsFile = `${FLAKE}/inputs/default.nix`;
const rev = getCurrentRev(input);
replaceInFile(
new RegExp(`(\\n[ ]*)${input} =.*\\n.*\\n.*`),
`$&\n$1 # FIXME: $1 rev = "${rev}";`,
inputsFile,
);
}
catch (e) {
console.error((e as Error).message);
}
});

View file

@ -0,0 +1,10 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "../config/tsconfig.base.json",
"includes": [
"*.ts",
"**/*.ts",
"*.js",
"**/*.js"
]
}