Skip to content

Commit 29a243a

Browse files
authoredMar 10, 2025··
chore(release): replace mongodb with management endpoint (#9386)
* refactor: migrate from MongoDB to direct API calls for activity management * fix(release): remove unnecessary debug logging in activity update * fix(release): update API key environment variable for release workflow
1 parent fcaea9c commit 29a243a

File tree

4 files changed

+56
-55
lines changed

4 files changed

+56
-55
lines changed
 

‎.github/workflows/release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ jobs:
3232
run: npx pmd release
3333
env:
3434
CONNECT_TO_DEV: ${{ vars.CONNECT_TO_DEV}}
35-
MONGO_URL: ${{ secrets.MONGO_URL }}
35+
ADMIN_API_KEY: ${{ secrets.ADMIN_API_KEY }}
3636
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

‎cli/package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "pmd",
33
"type": "module",
4-
"version": "0.0.1",
4+
"version": "2.0.0",
55
"private": true,
66
"main": "dist/index.js",
77
"bin": {
@@ -41,7 +41,6 @@
4141
"is-ci": "^4.1.0",
4242
"json-to-ast": "^2.1.0",
4343
"jsonschema": "^1.5.0",
44-
"mongodb": "^6.14.2",
4544
"multimatch": "^7.0.0",
4645
"ora": "^8.2.0",
4746
"semver": "^7.7.1",

‎cli/src/commands/release.ts

+54-51
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,14 @@ import process from 'node:process'
66
import * as core from '@actions/core'
77
import * as github from '@actions/github'
88
import isCI from 'is-ci'
9-
import { MongoClient } from 'mongodb'
109
import { getChangedActivities } from '../util/getActivities.js'
1110
import { getFolderLetter } from '../util/getFolderLetter.js'
1211
import { exit, MESSAGES, success } from '../util/log.js'
1312
import { sanitazeFolderName } from '../util/sanitazeFolderName.js'
1413
import { buildActivity } from './build/buildActivity.js'
1514

16-
const NAME = 'pmd/release'
17-
18-
interface DbData {
19-
name: string
15+
interface ActivityData {
16+
service: string
2017
apiVersion?: number
2118
githubUrl: string
2219
folderName: string
@@ -42,11 +39,13 @@ export async function release() {
4239
return exit(MESSAGES.noToken)
4340
}
4441

45-
const mongoUrl = process.env.MONGO_URL
46-
if (!mongoUrl) {
47-
return exit(MESSAGES.noMongoUrl)
42+
const apiKey = process.env.ADMIN_API_KEY
43+
if (!apiKey) {
44+
return exit('No Admin API key provided')
4845
}
4946

47+
const apiUrl = process.env.API_URL || 'https://api.premid.app/v6'
48+
5049
const { changed, deleted } = await getChangedActivities()
5150

5251
core.info(`Found ${changed.length} changed activities, ${deleted.length} deleted activities`)
@@ -56,34 +55,33 @@ export async function release() {
5655
return success(MESSAGES.noActivities)
5756
}
5857

59-
const client = new MongoClient(mongoUrl, { appName: NAME })
60-
61-
try {
62-
await client.connect()
63-
64-
core.info('Connected to MongoDB')
65-
}
66-
catch (error) {
67-
core.debug(error as string)
68-
exit(MESSAGES.noMongoConnection)
69-
}
70-
71-
const connectToDev = process.env.CONNECT_TO_DEV === 'true'
72-
const database = client.db(connectToDev ? 'PreMiD-DEV' : 'PreMiD')
73-
const collection = database.collection<DbData>('presences')
74-
7558
if (deleted.length) {
76-
await collection.deleteMany({
77-
$or: deleted.map(activity => ({
78-
folderName: sanitazeFolderName(activity.metadata.service),
79-
apiVersion: activity.versionized ? activity.metadata.apiVersion : undefined,
80-
})),
81-
})
59+
for (const activity of deleted) {
60+
const folderName = sanitazeFolderName(activity.metadata.service)
61+
const apiVersion = activity.versionized ? `/v${activity.metadata.apiVersion}` : ''
62+
63+
try {
64+
const response = await fetch(`${apiUrl}/activities${apiVersion}/${encodeURIComponent(folderName)}`, {
65+
method: 'DELETE',
66+
headers: {
67+
'Authorization': `${apiKey}`,
68+
'Content-Type': 'application/json',
69+
},
70+
})
71+
72+
if (!response.ok) {
73+
core.warning(`Failed to delete activity ${activity.metadata.service}: ${response.statusText}`)
74+
}
75+
}
76+
catch (error) {
77+
core.warning(`Error deleting activity ${activity.metadata.service}: ${error}`)
78+
}
79+
}
8280

8381
core.info(`Deleted ${deleted.length} activities`)
8482
}
8583

86-
const dbData: DbData[] = []
84+
let successCount = 0
8785

8886
for (const activity of changed) {
8987
await buildActivity({
@@ -101,35 +99,40 @@ export async function release() {
10199
const folderNameEncoded = encodeURIComponent(folderName)
102100
const apiVersion = activity.versionized ? `/v${activity.metadata.apiVersion}` : ''
103101

104-
dbData.push({
105-
name: activity.metadata.service,
102+
const activityData: ActivityData = {
103+
service: activity.metadata.service,
106104
apiVersion: activity.versionized ? activity.metadata.apiVersion : undefined,
107105
metadata: activity.metadata,
108106
folderName,
109107
githubUrl: `https://github.com/PreMiD/Activities/tree/main/websites/${folderLetter}/${folderNameEncoded}${apiVersion}`,
110-
url: `https://api.premid.app/v6/activities${apiVersion}/${folderNameEncoded}`,
108+
url: `${apiUrl}/activities${apiVersion}/${folderNameEncoded}`,
111109
presenceJs: await readFile(resolve(activity.folder, 'dist', 'presence.js'), 'utf8'),
112110
...(existsSync(resolve(activity.folder, 'dist', 'iframe.js')) && {
113111
iframeJs: await readFile(resolve(activity.folder, 'dist', 'iframe.js'), 'utf8'),
114112
}),
115-
})
116-
}
117-
118-
if (dbData.length) {
119-
await collection.bulkWrite(
120-
dbData.map(data => ({
121-
updateOne: {
122-
filter: { name: data.name, apiVersion: data.apiVersion },
123-
update: {
124-
$set: data,
125-
},
126-
upsert: true,
113+
}
114+
115+
try {
116+
const response = await fetch(`${apiUrl}/activities`, {
117+
method: 'POST',
118+
headers: {
119+
'Authorization': `${apiKey}`,
120+
'Content-Type': 'application/json',
127121
},
128-
})),
129-
)
130-
131-
core.info(`Updated ${dbData.length} activities`)
122+
body: JSON.stringify(activityData),
123+
})
124+
125+
if (response.ok) {
126+
successCount++
127+
}
128+
else {
129+
core.warning(`Failed to update activity ${activity.metadata.service}: ${response.statusText}`)
130+
}
131+
}
132+
catch (error) {
133+
core.warning(`Error updating activity ${activity.metadata.service}: ${error}`)
134+
}
132135
}
133136

134-
await client.close()
137+
core.info(`Successfully updated ${successCount} activities`)
135138
}

‎cli/src/util/log.ts

-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ export const MESSAGES = {
2626
noToken: 'GITHUB_TOKEN environment variable is required',
2727
noCdnToken: 'CDN_TOKEN environment variable is required',
2828
noMongoUrl: 'MONGO_URL environment variable is required',
29-
noMongoConnection: 'Failed to connect to MongoDB',
3029
noActivities: 'No activities changed',
3130
checkingAndUpdatingAssets: 'Checking and updating assets...',
3231
someInvalidAssets: 'Some invalid assets were found, check the logs for more details',

0 commit comments

Comments
 (0)
Please sign in to comment.