From 74f77c8dd2950451963f6b268921a714cb4dbf33 Mon Sep 17 00:00:00 2001 From: Zeeshan Akram <97m.zeeshan@gmail.com> Date: Tue, 16 Jan 2024 17:48:17 +0500 Subject: [PATCH 1/3] fix query to return up to date package version each time --- ...45480233-Data.js => 1705406586630-Data.js} | 6 +- db/migrations/2200000000000-Operator.js | 17 --- package-lock.json | 115 ++++++++++++++++-- package.json | 1 + schema/misc.graphql | 4 - src/server-extension/resolvers/index.ts | 1 + .../resolvers/squidVersion.ts | 41 +++++++ 7 files changed, 152 insertions(+), 33 deletions(-) rename db/migrations/{1705345480233-Data.js => 1705406586630-Data.js} (97%) delete mode 100644 schema/misc.graphql create mode 100644 src/server-extension/resolvers/index.ts create mode 100644 src/server-extension/resolvers/squidVersion.ts diff --git a/db/migrations/1705345480233-Data.js b/db/migrations/1705406586630-Data.js similarity index 97% rename from db/migrations/1705345480233-Data.js rename to db/migrations/1705406586630-Data.js index 0a91f36..d4a4225 100644 --- a/db/migrations/1705345480233-Data.js +++ b/db/migrations/1705406586630-Data.js @@ -1,9 +1,8 @@ -module.exports = class Data1705345480233 { - name = 'Data1705345480233' +module.exports = class Data1705406586630 { + name = 'Data1705406586630' async up(db) { await db.query(`CREATE TABLE "next_entity_id" ("entity_name" character varying NOT NULL, "next_id" bigint NOT NULL, CONSTRAINT "PK_09a3b40db622a65096e7344d7ae" PRIMARY KEY ("entity_name"))`) - await db.query(`CREATE TABLE "squid_version" ("id" character varying NOT NULL, "version" text NOT NULL, CONSTRAINT "PK_97d8a06dfa602575b79a623734d" PRIMARY KEY ("id"))`) await db.query(`CREATE TABLE "event" ("id" character varying NOT NULL, "in_block" integer NOT NULL, "in_extrinsic" text, "index_in_block" integer NOT NULL, "timestamp" TIMESTAMP WITH TIME ZONE NOT NULL, "data" jsonb NOT NULL, CONSTRAINT "PK_30c2f3bbaf6d34a55f8ae6e4614" PRIMARY KEY ("id"))`) await db.query(`CREATE INDEX "IDX_8f3f220c4e717207d841d4e6d4" ON "event" ("in_extrinsic") `) await db.query(`CREATE TABLE "storage_bucket" ("id" character varying NOT NULL, "operator_status" jsonb NOT NULL, "accepting_new_bags" boolean NOT NULL, "data_objects_size_limit" numeric NOT NULL, "data_object_count_limit" numeric NOT NULL, "data_objects_count" numeric NOT NULL, "data_objects_size" numeric NOT NULL, CONSTRAINT "PK_97cd0c3fe7f51e34216822e5f91" PRIMARY KEY ("id"))`) @@ -45,7 +44,6 @@ module.exports = class Data1705345480233 { async down(db) { await db.query(`DROP TABLE "next_entity_id"`) - await db.query(`DROP TABLE "squid_version"`) await db.query(`DROP TABLE "event"`) await db.query(`DROP INDEX "public"."IDX_8f3f220c4e717207d841d4e6d4"`) await db.query(`DROP TABLE "storage_bucket"`) diff --git a/db/migrations/2200000000000-Operator.js b/db/migrations/2200000000000-Operator.js index 73c470d..db516a1 100644 --- a/db/migrations/2200000000000-Operator.js +++ b/db/migrations/2200000000000-Operator.js @@ -1,24 +1,7 @@ -const fs = require('fs') -const path = require('path') - module.exports = class Operator2200000000000 { name = 'Operator2200000000000' async up(db) { - // Path to your package.json file - const packageJsonPath = path.join(__dirname, '../../package.json') - - // Read the package.json file synchronously - const data = fs.readFileSync(packageJsonPath, 'utf8') - - // Parse the JSON data - const packageJson = JSON.parse(data) - - await db.query( - `INSERT INTO "squid_version" ("id", "version") - VALUES ('${packageJson.name}' ,'${packageJson.version}');` - ) - // Create pg_stat_statements extension for analyzing query stats await db.query(`CREATE EXTENSION pg_stat_statements;`) } diff --git a/package-lock.json b/package-lock.json index fd2253c..1cad0ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "storage-squid", - "version": "1.2.0", + "version": "1.4.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "storage-squid", - "version": "1.2.0", + "version": "1.4.0", "hasInstallScript": true, "dependencies": { "@joystream/js": "^1.4.0", @@ -34,6 +34,7 @@ "lodash": "^4.17.21", "patch-package": "^6.5.0", "pg": "8.8.0", + "pkg-dir": "^4.2.0", "type-graphql": "^1.2.0-rc.1", "typeorm": "^0.3.11" }, @@ -13886,7 +13887,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } @@ -14113,7 +14113,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -14287,6 +14286,65 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", @@ -27030,8 +27088,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "packet-reader": { "version": "1.0.0", @@ -27212,8 +27269,7 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -27341,6 +27397,49 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", diff --git a/package.json b/package.json index 0b4faa2..d09cecc 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "lodash": "^4.17.21", "patch-package": "^6.5.0", "pg": "8.8.0", + "pkg-dir": "^4.2.0", "type-graphql": "^1.2.0-rc.1", "typeorm": "^0.3.11" }, diff --git a/schema/misc.graphql b/schema/misc.graphql deleted file mode 100644 index 8218cd4..0000000 --- a/schema/misc.graphql +++ /dev/null @@ -1,4 +0,0 @@ -type SquidVersion @entity { - "Current version of the storage squid package" - version: String! -} diff --git a/src/server-extension/resolvers/index.ts b/src/server-extension/resolvers/index.ts new file mode 100644 index 0000000..69775db --- /dev/null +++ b/src/server-extension/resolvers/index.ts @@ -0,0 +1 @@ +export { SquidVersionResolver } from './squidVersion' diff --git a/src/server-extension/resolvers/squidVersion.ts b/src/server-extension/resolvers/squidVersion.ts new file mode 100644 index 0000000..b643c00 --- /dev/null +++ b/src/server-extension/resolvers/squidVersion.ts @@ -0,0 +1,41 @@ +import fs from 'fs' +import _ from 'lodash' +import pkgDir from 'pkg-dir' +import 'reflect-metadata' +import { Field, ObjectType, Query, Resolver } from 'type-graphql' + +const pkgVersion = (): Promise => { + // Path to package.json file + const packageJsonPath = `${pkgDir.sync()}/package.json` + + // Read the package.json file synchronously + const data = fs.readFileSync(packageJsonPath, 'utf8') + + // Parse the JSON data + const packageJson = JSON.parse(data) + + return packageJson.version +} + +const memoizedPkgVersion = _.memoize(pkgVersion) + +@ObjectType() +export class SquidVersion { + @Field(() => String, { nullable: false }) + version!: string +} + +@Resolver() +export class SquidVersionResolver { + private version: string + + constructor() {} + + @Query(() => SquidVersion) + async squidVersion(): Promise { + // Get package version + const version = await memoizedPkgVersion() + + return { version } + } +} From 4251214cb9c2381a8ad56ff99745dc9c4f59c077 Mon Sep 17 00:00:00 2001 From: Zeeshan Akram <97m.zeeshan@gmail.com> Date: Tue, 16 Jan 2024 17:48:50 +0500 Subject: [PATCH 2/3] use bash instead of sh in shell scripts --- scripts/get-graphql-schema.sh | 2 +- scripts/start-graphql-server.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/get-graphql-schema.sh b/scripts/get-graphql-schema.sh index e135cb7..9a27486 100755 --- a/scripts/get-graphql-schema.sh +++ b/scripts/get-graphql-schema.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -e diff --git a/scripts/start-graphql-server.sh b/scripts/start-graphql-server.sh index e36e263..394ee87 100755 --- a/scripts/start-graphql-server.sh +++ b/scripts/start-graphql-server.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # docker entrypoint fot graphql-server, to allow running with telemetry if [[ "$TELEMETRY_ENABLED" = "yes" ]]; then From a3348d26feaa197c26634dcea03427f3885d1142 Mon Sep 17 00:00:00 2001 From: Zeeshan Akram <97m.zeeshan@gmail.com> Date: Tue, 16 Jan 2024 18:05:56 +0500 Subject: [PATCH 3/3] fix eslint issue --- src/server-extension/resolvers/squidVersion.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/server-extension/resolvers/squidVersion.ts b/src/server-extension/resolvers/squidVersion.ts index b643c00..48a833c 100644 --- a/src/server-extension/resolvers/squidVersion.ts +++ b/src/server-extension/resolvers/squidVersion.ts @@ -27,10 +27,6 @@ export class SquidVersion { @Resolver() export class SquidVersionResolver { - private version: string - - constructor() {} - @Query(() => SquidVersion) async squidVersion(): Promise { // Get package version