Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions backend/.env.dist.local
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,9 @@ CROWD_TEMPORAL_NAMESPACE=default
CROWD_TEMPORAL_ENCRYPTION_KEY_ID=local
CROWD_TEMPORAL_ENCRYPTION_KEY=FweBMRnGCLshER8FlSvNusQA6G3MRUKt

# Temporal — packages namespace
CROWD_PACKAGES_TEMPORAL_NAMESPACE=default

# Seach sync api
CROWD_SEARCH_SYNC_API_URL=http://localhost:8083

Expand Down
48 changes: 31 additions & 17 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions scripts/builders/packages-worker.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
DOCKERFILE="./services/docker/Dockerfile.packages-worker"
CONTEXT="../"
REPO="sjc.ocir.io/axbydjxa5zuh/packages-worker"
SERVICES="packages-worker"
16 changes: 10 additions & 6 deletions scripts/services/docker/Dockerfile.packages-worker
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
FROM node:20-alpine as builder
FROM node:20-bookworm-slim as builder

RUN apk add --no-cache python3 make g++
RUN apt-get update && apt-get install -y python3 make g++ --no-install-recommends && rm -rf /var/lib/apt/lists/*

WORKDIR /usr/crowd/app
RUN npm install -g corepack@latest && corepack enable pnpm && corepack prepare pnpm@9.15.0 --activate

COPY ./pnpm-workspace.yaml ./pnpm-lock.yaml ./
RUN pnpm fetch

COPY ./services ./services
RUN pnpm i --frozen-lockfile
COPY ./services/base.tsconfig.json ./services/
COPY ./services/archetypes ./services/archetypes
COPY ./services/libs ./services/libs
COPY ./services/apps/packages_worker ./services/apps/packages_worker
RUN pnpm i --frozen-lockfile --filter @crowd/packages-worker...

FROM node:20-alpine as runner
FROM node:20-bookworm-slim as runner

WORKDIR /usr/crowd/app
RUN npm install -g corepack@latest && corepack enable pnpm && corepack prepare pnpm@9.15.0 --activate
RUN npm install -g corepack@latest && corepack enable pnpm && corepack prepare pnpm@9.15.0 --activate && apt update && apt install -y ca-certificates --no-install-recommends && rm -rf /var/lib/apt/lists/*

COPY --from=builder /usr/crowd/app/node_modules ./node_modules
COPY --from=builder /usr/crowd/app/services/base.tsconfig.json ./services/base.tsconfig.json
COPY --from=builder /usr/crowd/app/services/libs ./services/libs
COPY --from=builder /usr/crowd/app/services/archetypes/ ./services/archetypes
COPY --from=builder /usr/crowd/app/services/apps/packages_worker/ ./services/apps/packages_worker
20 changes: 20 additions & 0 deletions scripts/services/docker/Dockerfile.packages-worker.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
**/.git
**/node_modules
**/venv*
**/.webpack
**/.serverless
Comment thread
epipav marked this conversation as resolved.
**/.env
**/.env.*
**/.idea
**/.vscode
**/dist
.vscode/
.github/
frontend/
scripts/
.flake8
*.md
Makefile
backend/
services/apps/
!services/apps/packages_worker
2 changes: 2 additions & 0 deletions scripts/services/packages-worker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ x-env-args: &env-args
DOCKER_BUILDKIT: 1
NODE_ENV: docker
SERVICE: packages-worker
CROWD_TEMPORAL_TASKQUEUE: packages-worker
CROWD_TEMPORAL_NAMESPACE: ${CROWD_PACKAGES_TEMPORAL_NAMESPACE}
Comment thread
epipav marked this conversation as resolved.
SHELL: /bin/sh
SUPPRESS_NO_CONFIG_WARNING: 'true'

Expand Down
10 changes: 7 additions & 3 deletions services/apps/packages_worker/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,26 @@
"name": "@crowd/packages-worker",
"private": true,
"scripts": {
"start:packages-worker": "SERVICE=packages-worker tsx src/bin/packages-worker.ts",
"start:packages-worker": "CROWD_TEMPORAL_TASKQUEUE=packages-worker CROWD_TEMPORAL_NAMESPACE=$CROWD_PACKAGES_TEMPORAL_NAMESPACE SERVICE=packages-worker tsx src/bin/packages-worker.ts",
"start:github-repos-enricher": "SERVICE=github-repos-enricher tsx src/bin/github-repos-enricher.ts",
"dev:packages-worker": "SERVICE=packages-worker LOG_LEVEL=trace nodemon --watch src --watch ../../libs --ext ts --exec tsx --inspect=0.0.0.0:9233 src/bin/packages-worker.ts",
"dev:packages-worker": "CROWD_TEMPORAL_TASKQUEUE=packages-worker CROWD_TEMPORAL_NAMESPACE=$CROWD_PACKAGES_TEMPORAL_NAMESPACE SERVICE=packages-worker LOG_LEVEL=trace nodemon --watch src --watch ../../libs --ext ts --exec tsx --inspect=0.0.0.0:9233 src/bin/packages-worker.ts",
"dev:github-repos-enricher": "SERVICE=github-repos-enricher LOG_LEVEL=trace nodemon --watch src --watch ../../libs --ext ts --exec tsx --inspect=0.0.0.0:9234 src/bin/github-repos-enricher.ts",
"dev:packages-worker:local": "set -a && . ../../../backend/.env.dist.local && . ../../../backend/.env.override.local && set +a && SERVICE=packages-worker LOG_LEVEL=trace nodemon --watch src --watch ../../libs --ext ts --exec tsx --inspect=0.0.0.0:9233 src/bin/packages-worker.ts",
"dev:packages-worker:local": "set -a && . ../../../backend/.env.dist.local && . ../../../backend/.env.override.local && set +a && CROWD_TEMPORAL_TASKQUEUE=packages-worker CROWD_TEMPORAL_NAMESPACE=$CROWD_PACKAGES_TEMPORAL_NAMESPACE SERVICE=packages-worker LOG_LEVEL=trace nodemon --watch src --watch ../../libs --ext ts --exec tsx --inspect=0.0.0.0:9233 src/bin/packages-worker.ts",
Comment thread
epipav marked this conversation as resolved.
"dev:github-repos-enricher:local": "set -a && . ../../../backend/.env.dist.local && . ../../../backend/.env.override.local && set +a && SERVICE=github-repos-enricher LOG_LEVEL=trace nodemon --watch src --watch ../../libs --ext ts --exec tsx --inspect=0.0.0.0:9234 src/bin/github-repos-enricher.ts",
"lint": "npx eslint --ext .ts src --max-warnings=0",
"format": "npx prettier --write \"src/**/*.ts\"",
"format-check": "npx prettier --check .",
"tsc-check": "tsc --noEmit"
},
"dependencies": {
"@crowd/archetype-standard": "workspace:*",
"@crowd/archetype-worker": "workspace:*",
"@crowd/common": "workspace:*",
"@crowd/data-access-layer": "workspace:*",
"@crowd/database": "workspace:*",
"@crowd/logging": "workspace:*",
"@temporalio/client": "~1.11.8",
"@temporalio/workflow": "~1.11.8",
"tsx": "^4.7.1",
"typescript": "^5.6.3"
},
Expand Down
1 change: 1 addition & 0 deletions services/apps/packages_worker/src/activities.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { sayHiNpm } from './npm/activities'
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const main = async () => {
log.info('Connected to packages-db.')

log.info(
{ tokens: config.tokens.length, pageSize: config.pageSize, batchSize: config.batchSize },
{ tokens: config.tokens.length, batchSize: config.batchSize },
'Starting enrichment loop',
)

Expand Down
57 changes: 6 additions & 51 deletions services/apps/packages_worker/src/bin/packages-worker.ts
Original file line number Diff line number Diff line change
@@ -1,53 +1,8 @@
import fs from 'fs'
import path from 'path'
import { scheduleNpmIngest } from '../npm/schedule'
import { svc } from '../service'

import { getServiceLogger } from '@crowd/logging'

import { getPackagesDb } from '../db'

const log = getServiceLogger()

const liveFilePath = path.join(__dirname, '../tmp/packages-worker-live.tmp')
const readyFilePath = path.join(__dirname, '../tmp/packages-worker-ready.tmp')

let shuttingDown = false

const shutdown = async () => {
if (shuttingDown) return
shuttingDown = true
log.info('Shutting down packages-worker...')
process.exit(0)
}

process.on('SIGINT', shutdown)
process.on('SIGTERM', shutdown)

const main = async () => {
log.info('packages-worker starting...')

const qx = await getPackagesDb()
await qx.selectOne('SELECT 1')
log.info('Connected to packages-db.')

// Create tmp directory for health probe files
fs.mkdirSync(path.dirname(liveFilePath), { recursive: true })

setInterval(async () => {
if (shuttingDown) return
try {
await Promise.all([
fs.promises.open(liveFilePath, 'a').then((f) => f.close()),
fs.promises.open(readyFilePath, 'a').then((f) => f.close()),
])
} catch (err) {
log.warn({ err }, 'Failed to write health probe files')
}
}, 5000)

log.info('packages-worker started, idle.')
}

main().catch((err) => {
log.error({ err }, 'packages-worker fatal error')
process.exit(1)
setImmediate(async () => {
await svc.init()
await scheduleNpmIngest()
await svc.start()
})
5 changes: 4 additions & 1 deletion services/apps/packages_worker/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ export function getPackagesDbConfig() {

export function getEnricherConfig() {
const rawTokens = process.env.ENRICHER_GITHUB_TOKENS ?? ''
const tokens = rawTokens.split(',').map((t) => t.trim()).filter(Boolean)
const tokens = rawTokens
.split(',')
.map((t) => t.trim())
.filter(Boolean)

return {
tokens,
Expand Down
2 changes: 1 addition & 1 deletion services/apps/packages_worker/src/db.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { getDbConnection } from '@crowd/database'
import { pgpQx } from '@crowd/data-access-layer/src/queryExecutor'
import { getDbConnection } from '@crowd/database'

import { getPackagesDbConfig } from './config'

Expand Down
7 changes: 5 additions & 2 deletions services/apps/packages_worker/src/enricher/fetchLightRepo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ export async function fetchLightRepo(url: string, token: string): Promise<LightR

if (json.errors?.length) {
const err = json.errors[0]
if (err.type === 'RATE_LIMITED') throw new FetchError('RATE_LIMIT', `RATE_LIMITED for ${url}`, resetMs)
if (err.type === 'RATE_LIMITED')
throw new FetchError('RATE_LIMIT', `RATE_LIMITED for ${url}`, resetMs)
if (err.type === 'NOT_FOUND') throw new FetchError('NOT_FOUND', `NOT_FOUND for ${url}`)
throw new FetchError('TRANSIENT', `GraphQL error for ${url}: ${err.message ?? err.type}`)
}
Expand All @@ -82,7 +83,9 @@ export async function fetchLightRepo(url: string, token: string): Promise<LightR
name,
description: repo.description ?? null,
primaryLanguage: repo.primaryLanguage?.name ?? null,
topics: (repo.repositoryTopics?.nodes ?? []).map((n: { topic: { name: string } }) => n.topic.name),
topics: (repo.repositoryTopics?.nodes ?? []).map(
(n: { topic: { name: string } }) => n.topic.name,
),
stars: repo.stargazerCount ?? 0,
forks: repo.forkCount ?? 0,
watchers: repo.watchers?.totalCount ?? 0,
Expand Down
Loading
Loading