From 361d57ac1d91c2e90182ed2ca2982b459e6ebbce Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 17 Jan 2024 13:33:20 +0800 Subject: [PATCH] Remove secrets loading as this is handled by k8s now. Fix redis init --- packages/api/package.json | 3 +-- packages/api/src/gcp-utils.ts | 28 --------------------- packages/api/src/queue-processor.ts | 3 +-- packages/api/src/redis_data_source.ts | 11 ++++---- packages/web/styles/articleInnerStyling.css | 2 +- 5 files changed, 9 insertions(+), 38 deletions(-) delete mode 100644 packages/api/src/gcp-utils.ts diff --git a/packages/api/package.json b/packages/api/package.json index f38e23c6d..9060f0641 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -19,7 +19,6 @@ "@google-cloud/monitoring": "^4.0.0", "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.0.0", "@google-cloud/pubsub": "^4.0.0", - "@google-cloud/secret-manager": "^5.0.1", "@google-cloud/storage": "^7.0.1", "@google-cloud/tasks": "^4.0.0", "@graphql-tools/utils": "^9.1.1", @@ -156,4 +155,4 @@ "volta": { "extends": "../../package.json" } -} +} \ No newline at end of file diff --git a/packages/api/src/gcp-utils.ts b/packages/api/src/gcp-utils.ts deleted file mode 100644 index 563f6a30a..000000000 --- a/packages/api/src/gcp-utils.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { BackendEnv, getEnv } from './util' -import { SecretManagerServiceClient } from '@google-cloud/secret-manager' - -// When running on GCP we want to use secrets manager instead -// of environment variables for storing secrets. This means -// after startup we need to query secret manager, and -// pull in those secrets. -// To opt into this feature you need to set the `GCP_SECRETS_NAME` -// environment variable to the secrets name for example: -// `omnivore-project/secrets/my-secrets/latest` -// -export const loadEnvFromGCPSecrets = async (): Promise< - BackendEnv | undefined -> => { - if (process.env.GCP_SECRETS_NAME && process.env.GCP_PROJECT_ID) { - const client = new SecretManagerServiceClient() - const [version] = await client.accessSecretVersion({ - name: `projects/${process.env.GCP_PROJECT_ID}/secrets/${process.env.GCP_SECRETS_NAME}/versions/latest`, - }) - if (!version || !version.payload || !version.payload.data) { - throw new Error(`no data for secret: ${process.env.GCP_SECRETS_NAME}`) - } - let data = Buffer.from(version.payload.data.toString(), 'base64') - const result: any = JSON.parse(data.toString()) - return getEnv(result) - } - return undefined -} diff --git a/packages/api/src/queue-processor.ts b/packages/api/src/queue-processor.ts index 512462421..5b5a247eb 100644 --- a/packages/api/src/queue-processor.ts +++ b/packages/api/src/queue-processor.ts @@ -4,7 +4,6 @@ /* eslint-disable @typescript-eslint/no-misused-promises */ import express, { Express } from 'express' import { appDataSource } from './data_source' -import { loadEnvFromGCPSecrets } from './gcp-utils' import { getEnv } from './util' import { redisDataSource } from './redis_data_source' import { CustomTypeOrmLogger } from './utils/logger' @@ -12,13 +11,13 @@ import { SnakeNamingStrategy } from 'typeorm-naming-strategies' import { refreshAllFeeds } from './jobs/rss/refreshAllFeeds' import { Job, Worker, QueueEvents } from 'bullmq' import { refreshFeed } from './jobs/rss/refreshFeed' +import { env } from './env' export const QUEUE_NAME = 'omnivore-backend-queue' const main = async () => { console.log('[queue-processor]: starting queue processor') - let env = (await loadEnvFromGCPSecrets()) ?? getEnv(process.env) const app: Express = express() const port = process.env.PORT || 3002 diff --git a/packages/api/src/redis_data_source.ts b/packages/api/src/redis_data_source.ts index 809aebc88..802f60816 100644 --- a/packages/api/src/redis_data_source.ts +++ b/packages/api/src/redis_data_source.ts @@ -8,7 +8,7 @@ export type RedisDataSourceOptions = { export class RedisDataSource { options: RedisDataSourceOptions - isInitialized: Boolean + isInitialized: boolean redisClient: Redis | undefined = undefined workerRedisClient: Redis | undefined = undefined @@ -18,6 +18,7 @@ export class RedisDataSource { this.isInitialized = false } + // Forcing this to be async as we might do some more initialization in the future async initialize(): Promise { if (this.isInitialized) throw 'Error already initialized' @@ -25,7 +26,7 @@ export class RedisDataSource { this.workerRedisClient = createIORedisClient(this.options) this.isInitialized = true - return this + return Promise.resolve(this) } setOptions(options: RedisDataSourceOptions): void { @@ -34,10 +35,10 @@ export class RedisDataSource { async shutdown(): Promise { if (this.redisClient && this.redisClient.status == 'ready') { - this.redisClient.quit() + await this.redisClient.quit() } if (this.workerRedisClient && this.workerRedisClient.status == 'ready') { - this.workerRedisClient.quit() + await this.workerRedisClient.quit() } } } @@ -45,7 +46,7 @@ export class RedisDataSource { const createIORedisClient = ( options: RedisDataSourceOptions ): Redis | undefined => { - let redisURL = options.REDIS_URL + const redisURL = options.REDIS_URL if (!redisURL) { throw 'Error: no redisURL supplied' } diff --git a/packages/web/styles/articleInnerStyling.css b/packages/web/styles/articleInnerStyling.css index 3045467ce..faf39b314 100644 --- a/packages/web/styles/articleInnerStyling.css +++ b/packages/web/styles/articleInnerStyling.css @@ -335,7 +335,7 @@ on smaller screens we display the note icon vertical-align: bottom; word-wrap: initial; font-family: 'SF Mono', monospace !important; - white-space: pre; + white-space: break-spaces; direction: ltr; unicode-bidi: embed; color: var(--font-color);