feat: add build system
Some checks failed
/ deploy_site (push) Has been cancelled

This commit is contained in:
2024-12-30 14:40:09 +09:00
parent 6cbeecea87
commit 32dc5eb667
9 changed files with 845 additions and 24 deletions

View File

@ -0,0 +1,14 @@
on:
push:
workflow_dispatch:
jobs:
deploy_site:
runs-on: ubuntu-latest
container:
image: src.pmh.codes/build-tools/react2minio:latest
steps:
- uses: actions/checkout@v4
- run: pnpm i
- run: pnpm run pkg
- run: mc cp $PWD/dist/* minio/releases/

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
node_modules/
build/
dist/

View File

@ -1,11 +1,13 @@
{
"name": "bpsets",
"version": "0.1.0",
"main": "dist/main.js",
"main": "build/main.js",
"bin": "build/main.js",
"scripts": {
"build": "rimraf ./dist && tsc",
"pkg": "rimraf ./build && tsc && pkg .",
"build": "rimraf ./build && tsc",
"start": "node .",
"dev": "nodemon -e ts --exec \"rimraf ./dist && tsc && node . || exit 1\""
"dev": "nodemon -e ts --exec \"rimraf ./build && tsc && node . || exit 1\""
},
"author": "Minhyeok Park<pmh_only@pmh.codes>",
"license": "MIT",
@ -48,7 +50,20 @@
"@types/express": "^5.0.0",
"@types/node": "^22.10.2",
"@types/sha.js": "^2.4.4",
"@yao-pkg/pkg": "^6.2.0",
"nodemon": "^3.1.9",
"typescript": "^5.7.2"
},
"pkg": {
"scripts": "build/**/*",
"assets": [
"views/**/*",
"bpset_metadata.json"
],
"targets": [
"node22-linuxstatic-x86_64",
"node22-linuxstatic-arm64"
],
"outputPath": "dist"
}
}

778
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -22,25 +22,25 @@ export class BPManager {
}
private async loadBPSets() {
const bpSetFiles = await readdir('./dist/bpsets', {
recursive: true,
withFileTypes: true
})
const bpSetFolders = await readdir(path.join(__dirname, 'bpsets'))
for (const bpSetFolder of bpSetFolders) {
const bpSetFiles = await readdir(path.join(__dirname, 'bpsets', bpSetFolder))
for (const bpSetFile of bpSetFiles) {
if (bpSetFile.isDirectory())
continue
const bpSetPath = path.join(bpSetFile.parentPath, bpSetFile.name)
const bpSetClasses = await import('../' + bpSetPath) as Record<string, new () => BPSet>
for (const bpSetClass of Object.keys(bpSetClasses))
this.bpSets[bpSetClass] = new bpSetClasses[bpSetClass]()
for (const bpSetFile of bpSetFiles) {
const bpSetPath = path.join(__dirname, 'bpsets', bpSetFolder, bpSetFile)
const bpSetClasses = await import(bpSetPath) as Record<string, new () => BPSet>
for (const bpSetClass of Object.keys(bpSetClasses)) {
this.bpSets[bpSetClass] = new bpSetClasses[bpSetClass]()
console.log('BPSet implement,', bpSetClass, 'loaded')
}
}
}
}
private async loadBPSetMetadatas() {
const bpSetMetadatasRaw = await readFile('./bpset_metadata.json')
const bpSetMetadatasRaw = await readFile(path.join(__dirname, '../bpset_metadata.json'))
const bpSetMetadatas = JSON.parse(bpSetMetadatasRaw.toString('utf-8')) as BPSetMetadata[]
for (const [idx, bpSetMetadata] of bpSetMetadatas.entries()) {

View File

@ -2,6 +2,7 @@ import express, { Request, Response } from 'express'
import { BPManager } from './BPManager'
import { BPSetMetadata } from './types'
import { Memorizer } from './Memorizer'
import path from 'path'
export class WebServer {
private readonly app = express()
@ -12,7 +13,7 @@ export class WebServer {
private readonly port = 2424
) {
this.app.set('view engine', 'ejs')
this.app.set('views', './views');
this.app.set('views', path.join(__dirname, '../views'));
this.app.get('/', this.getMainPage.bind(this))
this.app.get('/check', this.runCheckOnce.bind(this))

View File

@ -2,7 +2,7 @@
"compilerOptions": {
"target": "ES2016",
"module": "CommonJS",
"outDir": "./dist",
"outDir": "./build",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,

View File

@ -5,11 +5,23 @@
<tr>
<td class="fw-bold">#<%= metadata.idx + 1 %></td>
<td><%= metadata.name %></td>
<td>
<span
class="m-0"
data-bs-toggle="tooltip"
data-bs-placement="bottom"
data-bs-title="<%= metadata.description %>">
<%= metadata.name %>
</span>
</td>
<td><%= metadata.bestPracticeCategory %></td>
<td>
<span class="badge text-bg-<%= priorityColor %>">
<span
class="badge text-bg-<%= priorityColor %>"
data-bs-toggle="tooltip"
data-bs-placement="bottom"
data-bs-title="<%= metadata.priorityReason %>">
<%= metadata.priority %> - <%= priorityLabel %>
</span>
</td>

View File

@ -32,7 +32,7 @@
<div class="progress-bar progress-bar-striped progress-bar-animated bg-secondary" style="width: 100%"></div>
</div>
<p>Progressing</p>
<p class="m-0">Progressing</p>
</td>
<% } %>
@ -42,7 +42,7 @@
<div class="progress-bar progress-bar-striped bg-danger" style="width: 100%"></div>
</div>
<p>Error</p>
<p class="m-0">Error</p>
</td>
<% } %>
@ -52,6 +52,6 @@
<div class="progress-bar" style="width: 0%"></div>
</div>
<p>Ready</p>
<p class="m-0">Ready</p>
</td>
<% } %>