From ed06cc05a61156c54a82b2102e2a0e096ef8bb40 Mon Sep 17 00:00:00 2001 From: Prathamesh Musale Date: Mon, 24 Jun 2024 07:27:39 +0000 Subject: [PATCH] Replace repository URL in records with published repo record id (#67) Part of [Define record schemas for entities](https://www.notion.so/Define-record-schemas-for-entities-e13e84d7cf7c4087aae69035733faff0) Reviewed-on: https://git.vdb.to/cerc-io/laconic-registry-cli/pulls/67 Co-authored-by: Prathamesh Musale Co-committed-by: Prathamesh Musale --- demo/README.md | 8 +++---- demo/scripts/publish-records.ts | 38 ++++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/demo/README.md b/demo/README.md index 0611fa8..98da29e 100644 --- a/demo/README.md +++ b/demo/README.md @@ -57,12 +57,12 @@ ### Example -* Query for `ajna-watcher` deployment(s): +* Query for `azimuth-watcher` deployment(s): - * Find the `WatcherRecord` for `ajna-watcher`: + * Find the `WatcherRecord` for `azimuth-watcher`: ```bash - WATCHER_RECORD_ID=$(laconic registry record list --all --type WatcherRecord --name ajna-watcher | jq -r '.[].id') + WATCHER_RECORD_ID=$(laconic registry record list --all --type WatcherRecord --name azimuth-watcher | jq -r '.[].id') ``` * Find corresponding deployment(s): @@ -74,7 +74,7 @@ laconic registry record list --all --type WatcherDeploymentRecord watcher $WATCHER_RECORD_ID | jq -r '.[].attributes.url' # Expected output: - https://ajna-watcher-endpoint.example.com + https://azimuth-watcher-endpoint.example.com ``` * Query for `sushiswap-v3-subgraph` deployment(s): diff --git a/demo/scripts/publish-records.ts b/demo/scripts/publish-records.ts index efb2a72..6134438 100644 --- a/demo/scripts/publish-records.ts +++ b/demo/scripts/publish-records.ts @@ -4,14 +4,23 @@ import path from 'path'; import assert from 'assert'; import { hideBin } from 'yargs/helpers'; +import { StdFee } from '@cosmjs/stargate'; import { Registry } from '@cerc-io/registry-sdk'; import { getConfig, getGasAndFees, getConnectionInfo, txOutput } from '../../src/util'; +enum RecordType { + RepositoryRecord = 'RepositoryRecord', + ServiceRecord = 'ServiceRecord', + StackRecord = 'StackRecord', + SubgraphRecord = 'SubgraphRecord', + WatcherRecord = 'WatcherRecord', +} + const recordTypeToRecordField = new Map([ - ['WatcherRecord', 'watcher'], - ['SubgraphRecord', 'subgraph'], - ['ServiceRecord', 'service'] + [RecordType.WatcherRecord, 'watcher'], + [RecordType.SubgraphRecord, 'subgraph'], + [RecordType.ServiceRecord, 'service'] ]); let registry: Registry; @@ -81,7 +90,7 @@ async function publishRecordsFromDir (recordsDir: string): Promise { const record = readRecord(filePath); // Publish record - const result = await registry.setRecord({ privateKey: userKey, record, bondId }, userKey, fee); + const result = await publishRecord(userKey, bondId, fee, record); console.log(`Published record ${file}`); txOutput(result, JSON.stringify(result, undefined, 2), '', false); @@ -91,7 +100,7 @@ async function publishRecordsFromDir (recordsDir: string): Promise { // Check if deployment record files exist const deploymentRecordsDir = path.resolve(recordsDir, 'deployments'); - if (!fs.statSync(deploymentRecordsDir).isDirectory()) { + if (!fs.existsSync(deploymentRecordsDir) || !fs.statSync(deploymentRecordsDir).isDirectory()) { return; } console.log('--------------------------------------'); @@ -142,6 +151,25 @@ function readRecord (filePath: string): any { return record; } +async function publishRecord (userKey: string, bondId: string, fee: StdFee, record: any): Promise { + if (record.repository) { + const repoUrl = record.repository; + + const queryResult = await registry.queryRecords({ type: RecordType.RepositoryRecord, url: repoUrl }, true); + if (queryResult.length === 0) { + throw new Error(`Record not found, type: ${RecordType.RepositoryRecord}, url: ${repoUrl}`); + } + + // Assume the first query result + const repoRecordId = queryResult[0].id; + + // Replace repository URL with the repo record id + record.repository = repoRecordId; + } + + return registry.setRecord({ privateKey: userKey, record, bondId }, userKey, fee); +} + function getArgs (): any { return yargs(hideBin(process.argv)).parserConfiguration({ 'parse-numbers': false