refactor(tools): remove screenshot-service (#61172)

This commit is contained in:
Shaun Hamilton
2025-07-02 11:00:09 +02:00
committed by GitHub
parent 331f70da45
commit e3e8fadd3b
10 changed files with 0 additions and 1537 deletions

View File

@@ -1,49 +0,0 @@
# Define project root argument
ARG PROJECT_DIR=tools/screenshot-service
# Build the app
FROM node:22-alpine AS builder
ARG PROJECT_DIR
RUN npm i -g pnpm@10
USER node
WORKDIR /home/node/build
COPY --chown=node:node *.* .
COPY --chown=node:node ${PROJECT_DIR} ${PROJECT_DIR}
RUN pnpm install --frozen-lockfile --ignore-scripts -F=./${PROJECT_DIR}
RUN pnpm -F=./${PROJECT_DIR} build
# Install production dependencies
FROM node:22-alpine AS deps
ARG PROJECT_DIR
RUN npm i -g pnpm@10
USER node
WORKDIR /home/node/build
COPY --chown=node:node pnpm*.yaml .
COPY --chown=node:node ${PROJECT_DIR} ${PROJECT_DIR}
RUN pnpm install --prod --ignore-scripts --frozen-lockfile -F=./${PROJECT_DIR}
# App runner instance
FROM node:22-alpine AS runner
ARG PROJECT_DIR
USER node
WORKDIR /home/node/fcc
# Copy the built app
COPY --from=builder --chown=node:node /home/node/build/${PROJECT_DIR}/dist ./
# Copy the production dependencies
COPY --from=deps --chown=node:node /home/node/build/node_modules/ node_modules/
COPY --from=deps --chown=node:node /home/node/build/${PROJECT_DIR}/node_modules ${PROJECT_DIR}/node_modules/
ENV PORT 3003
# Run the app
CMD [ "node", "./tools/screenshot-service/index.js" ]

View File

@@ -158,7 +158,6 @@ export default tseslint.config(
'tools/scripts/**/*.ts', 'tools/scripts/**/*.ts',
'tools/challenge-helper-scripts/**/*.ts', 'tools/challenge-helper-scripts/**/*.ts',
'tools/challenge-auditor/**/*.ts', 'tools/challenge-auditor/**/*.ts',
'tools/screenshot-service/**/*.ts',
'e2e/**/*.ts' 'e2e/**/*.ts'
], ],
extends: [tseslint.configs.recommendedTypeChecked] extends: [tseslint.configs.recommendedTypeChecked]

1360
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,6 @@ packages:
- 'tools/client-plugins/*' - 'tools/client-plugins/*'
- 'tools/crowdin' - 'tools/crowdin'
- 'tools/daily-challenges' - 'tools/daily-challenges'
- 'tools/screenshot-service'
- 'tools/scripts/build' - 'tools/scripts/build'
- 'tools/scripts/seed' - 'tools/scripts/seed'
- 'tools/scripts/seed-exams' - 'tools/scripts/seed-exams'

View File

@@ -1,3 +0,0 @@
node_modules/
.env
dist/

View File

@@ -1,29 +0,0 @@
# Screenshot Service
## Development
To install dependencies:
```bash
pnpm install
```
To run:
```bash
npm run dev
```
## Deployment
Build the Docker image:
```bash
docker build -t screenshot-service -f ./docker/screenshot-service/Dockerfile .
```
Run the Docker container:
```bash
docker run -d -p 3003:3003 screenshot-service
```

View File

@@ -1,59 +0,0 @@
import {
PutObjectCommand,
S3Client,
type PutObjectCommandInput,
type PutObjectCommandOutput
} from '@aws-sdk/client-s3';
import express, { type Request, type Response } from 'express';
interface ImageUploadRequest {
image: string;
examAttemptId: string;
}
const app = express();
// Parse JSON bodies (in case images are sent as Base64 strings)
app.use(express.json({ limit: '5mb' }));
// Configure S3
const s3 = new S3Client({
region: process.env.AWS_REGION,
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID ?? '',
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY ?? ''
}
});
const uploadToS3 = (
image: string,
examAttemptId: string
): Promise<PutObjectCommandOutput> => {
const params: PutObjectCommandInput = {
Bucket: process.env.S3_BUCKET_NAME as string,
Key: `${examAttemptId}/${Date.now()}`,
Body: Buffer.from(image, 'base64'),
ContentType: 'image/jpeg'
};
return s3.send(new PutObjectCommand(params));
};
// Route to handle image uploads from another backend
app.post(
'/upload',
async (req: Request<object, object, ImageUploadRequest>, res: Response) => {
try {
await uploadToS3(req.body.image, req.body.examAttemptId);
res.status(200).json({ message: 'Image uploaded successfully' });
} catch (err) {
console.error('Error uploading image:', err);
res.status(500).json({ error: (err as Error).message });
}
}
);
const port = process.env.PORT || 3003;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});

View File

@@ -1,17 +0,0 @@
{
"name": "@freecodecamp/exam-screenshot-service",
"version": "1.0.0",
"devDependencies": {
"@types/express": "5.0.1",
"tsx": "4.19.1",
"typescript": "5.8.2"
},
"dependencies": {
"@aws-sdk/client-s3": "3.777.0",
"express": "5.0.1"
},
"scripts": {
"build": "tsc",
"dev": "tsx watch index.ts"
}
}

View File

@@ -1,5 +0,0 @@
AWS_REGION=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
S3_BUCKET_NAME=
PORT=3003

View File

@@ -1,13 +0,0 @@
{
"compilerOptions": {
"target": "es2022",
"module": "Node16",
"moduleResolution": "nodenext",
"allowJs": false,
"strict": true,
"forceConsistentCasingInFileNames": true,
"outDir": "./dist",
"rootDir": "../../"
},
"include": ["**/*.ts"]
}