diff --git a/.dockerignore b/.dockerignore index f3699d0..4062fa6 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,21 +1,24 @@ .git .gitignore +.gitea Dockerfile .dockerignore README.md LICENSE -VERSION node_modules/ -coverge/ +coverage/ +test/ + # dotenv environment variable files .env -.env.development.local -.env.test.local -.env.production.local -.env.local +.env.* # SQLite database files *.sqlite *.sqlite3 sqlite* -sqldiff \ No newline at end of file +sqldiff + +# Archives +*.zip +*.tar.gz \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index de69a81..fafedef 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,10 +18,15 @@ USER badgedex COPY --chown=badgedex:badgedex . . #Install dependencies -RUN npm ci --only=production +RUN npm ci --omit=dev # Expose API port EXPOSE 3000 + +# Health check +HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ + CMD wget -qO- http://localhost:3000/version || exit 1 + #Start node application ENTRYPOINT ["npm"] diff --git a/README.md b/README.md index f7abf8a..43ffed8 100644 --- a/README.md +++ b/README.md @@ -1,95 +1,191 @@ -# badgedex +# BadgeDex -BadgeDex +Badge generátor szolgáltatás – SVG badge-ek készítése GitHub profilokhoz és projektekhez. -# BadgeDex API – URL Paraméterek -## Badge - -Az alábbi paraméterekkel szabályozhatod a `/badge` végpont működését: - -| Paraméter | Kötelező | Alapértelmezett érték | Leírás | Példa értékek | -|-------------|----------|-----------------------|----------------------------------------------------------------------------------------|------------------------------| -| `icon` | Igen |`simpleicons` | A SimpleIcons ikon neve (kisbetű, kötőjellel). | `github`, `docker`, `nginx` | -| `label` | Nem |`Simple Icons` | A badge-en megjelenő szöveg. | `MyApp`, `Status` | -| `style` | Nem |`rect` | A badge stílusa. rect négyzetes, flat lekerekitett sarkok | `rect`, `flat` | -| `bgicon` | Nem |`none` | Icon Háttérszín (hex vagy CSS színnév). Alapértelmezetten átlátszó. | `#fff`, `#222`, `red` | -| `bglabel` | Nem |`none` | Label Háttérszín (hex vagy CSS színnév). Alapértelmezetten átlátszó. | `#fff`, `#222`, `red` | -| `color` | Nem |`#000000` | Szöveg színe (hex vagy CSS színnév). Harmonizál az icon szinével ha nem kérünk külön. | `#333`, `white` | -| `size` | Nem |`24` | Ikon (és badge) magassága pixelben. | `16`, `32`, `64` | -| `labelpos` | Nem | `right` | Szöveg pozíciója az ikonhoz képest: `right`, `left`, `above`, `below`. | `left`, `above` | -| `fontweight`| Nem | `normal` | Szöveg vastagsága (`normal`, `bold`, `lighter`, szám is lehet pl. `600`). | `bold`, `600` | - -## Példák - -- **Alap badge:** - `/badge` - -- **React ikon, label, size: 64, font: bold, fehér label szöveg, sárga label háttérszín, piros ikon háttérszín, label jobbra** - `/badge?icon=react&label=React%20expert%20level&size=64&fontweight=bold&color=white&bgicon=red&bglabel=yellow&labelpos=right` - -- **GitHub ikon, piros label háttér, fehér szöveg:** - `/badge?icon=github&bglabel=red&color=white` - -- **Szöveg balra, ikon jobbra:** - `/badge?labelpos=left` - -- **Szöveg az ikon fölött, félkövér betű:** - `/badge?labelpos=above&fontweight=bold` - -- **Nagyobb ikon és szöveg:** - `/badge?size=48` +A badge SVG formátumban tér vissza, így közvetlenül beilleszthető HTML-be, Markdownba, vagy `` tag-be. --- -## Tag +## API végpontok -Az alábbi paraméterekkel szabályozhatod a `/tag` végpont működését: +### `GET /badge` -| Paraméter | Kötelező | Alapértelmezett érték | Leírás | Példa értékek | -|-------------|----------|-----------------------|----------------------------------------------------------------------------------------|------------------------------| -| `tag` | Igen |`badgedex` | A tag tartalma(kisbetű, kötőjellel). | `github`, `docker`, `nginx` | -| `label` | Nem |`BadgeDex` | A tag label tartalma. | `MyApp`, `Status` | -| `style` | Nem |`rect` | A badge stílusa. rect négyzetes, flat lekerekitett sarkok | `rect`, `flat` | -| `bgtag` | Nem |`none` | Icon Háttérszín (hex vagy CSS színnév). Alapértelmezetten átlátszó. | `#fff`, `#222`, `red` | -| `bglabel` | Nem |`none` | Label Háttérszín (hex vagy CSS színnév). Alapértelmezetten átlátszó. | `#fff`, `#222`, `red` | -| `color` | Nem |`#000000` | Szöveg színe (hex vagy CSS színnév). Harmonizál az icon szinével ha nem kérünk külön. | `#333`, `white` | -| `size` | Nem |`24` | Ikon (és badge) magassága pixelben. | `16`, `32`, `64` | -| `labelpos` | Nem | `right` | Szöveg pozíciója az ikonhoz képest: `right`, `left`, `above`, `below`. | `left`, `above` | -| `fontweight`| Nem | `normal` | Szöveg vastagsága (`normal`, `bold`, `lighter`, szám is lehet pl. `600`). | `bold`, `600` | +SVG badge-et generál egy [Simple Icons](https://simpleicons.org/) ikon és szöveg alapján. -## Példák +| Paraméter | Kötelező | Alapértelmezett | Leírás | Példák | +|-------------|----------|-----------------|----------------------------------------------------------------------------------------|------------------------------| +| `icon` | Nem | `simpleicons` | A SimpleIcons ikon neve (kisbetű, kötőjellel). | `github`, `docker`, `nginx` | +| `label` | Nem | *(ikonnév)* | A badge-en megjelenő szöveg. Ha nincs megadva, az ikon neve jelenik meg. | `MyApp`, `Status` | +| `style` | Nem | `rect` | Badge stílusa: `rect` (négyzetes) vagy `flat` (lekerekített sarkok). | `rect`, `flat` | +| `bgicon` | Nem | `none` | Ikon háttérszín (hex vagy CSS színnév). Alapból átlátszó. | `#fff`, `#222`, `red` | +| `bglabel` | Nem | `none` | Label háttérszín (hex vagy CSS színnév). Alapból átlátszó. | `#fff`, `#222`, `red` | +| `color` | Nem | *(ikonszín)* | Szöveg színe (hex vagy CSS színnév). Ha nincs megadva, az ikon színét használja. | `#333`, `white` | +| `size` | Nem | `24` | Ikon és badge magassága pixelben (8–256). | `16`, `32`, `64` | +| `labelpos` | Nem | `right` | Szöveg pozíciója az ikonhoz képest. | `right`, `left`, `above`, `below` | +| `fontweight`| Nem | `normal` | Szöveg vastagsága. | `normal`, `bold`, `600` | -- **Alap badge:** - `/badge` +#### Badge példák -- **React ikon, label, size: 64, font: bold, fehér label szöveg, sárga label háttérszín, piros ikon háttérszín, label jobbra** - `/badge?icon=react&label=React%20expert%20level&size=64&fontweight=bold&color=white&bgicon=red&bglabel=yellow&labelpos=right` +```markdown +![Default](http://localhost:3000/badge) +``` +``` +/badge +``` -- **GitHub ikon, piros label háttér, fehér szöveg:** - `/badge?icon=github&bglabel=red&color=white` +```markdown +![GitHub](http://localhost:3000/badge?icon=github&bglabel=red&color=white) +``` +``` +/badge?icon=github&bglabel=red&color=white +``` -- **Szöveg balra, ikon jobbra:** - `/badge?labelpos=left` +```markdown +![React](http://localhost:3000/badge?icon=react&label=React%20expert&size=64&fontweight=bold&color=white&bgicon=red&bglabel=yellow&labelpos=right) +``` +``` +/badge?icon=react&label=React%20expert&size=64&fontweight=bold&color=white&bgicon=red&bglabel=yellow&labelpos=right +``` -- **Szöveg az ikon fölött, félkövér betű:** - `/badge?labelpos=above&fontweight=bold` +```markdown +![Docker](http://localhost:3000/badge?icon=docker&label=Docker&style=flat&bgicon=%232496ED&color=white) +``` +``` +/badge?icon=docker&label=Docker&style=flat&bgicon=%232496ED&color=white +``` -- **Nagyobb ikon és szöveg:** - `/badge?size=48` +```markdown +![Left label](http://localhost:3000/badge?icon=nginx&labelpos=left) +``` +``` +/badge?icon=nginx&labelpos=left +``` + +```markdown +![Above label](http://localhost:3000/badge?icon=vue.js&labelpos=above&fontweight=bold&size=48) +``` +``` +/badge?icon=vue.js&labelpos=above&fontweight=bold&size=48 +``` --- -A badge SVG formátumban tér vissza, így közvetlenül beilleszthető HTML-be vagy Markdown +### `GET /tag` -# Installation +Badge-szerű SVG címkét generál szöveges tartalommal (stílus: shields.io-szerű). -## Run as Node.js application -Clone this repo and `npm start` +| Paraméter | Kötelező | Alapértelmezett | Leírás | Példák | +|-------------|----------|-----------------|----------------------------------------------------------------------------------------|------------------------------| +| `tag` | Nem | `badgedex` | A tag tartalma (bal oldali szöveg). | `build`, `coverage`, `v1.0` | +| `label` | Nem | `BadgeDex` | A label tartalma (jobb oldali szöveg). | `passing`, `95%`, `stable` | +| `style` | Nem | `rect` | Stílus: `rect` (négyzetes) vagy `flat` (lekerekített, árnyékolt). | `rect`, `flat` | +| `bgtag` | Nem | `none` | Tag háttérszín (hex vagy CSS színnév). | `#555`, `green`, `red` | +| `bglabel` | Nem | `none` | Label háttérszín (hex vagy CSS színnév). | `#007ec6`, `blue` | +| `color` | Nem | `#000000` | Szöveg színe (hex vagy CSS színnév). | `#fff`, `white` | +| `size` | Nem | `24` | Badge magassága pixelben (8–256). | `16`, `20`, `32` | +| `fontweight`| Nem | `normal` | Szöveg vastagsága. | `normal`, `bold`, `600` | -## Run as Docker service +#### Tag példák -`docker run -dit --name badgedex -p 3000:3000 badgedex` +```markdown +![Default tag](http://localhost:3000/tag) +``` +``` +/tag +``` -### Build for self hosted container service +```markdown +![Build passing](http://localhost:3000/tag?tag=build&label=passing&bgtag=%23555&bglabel=green&color=white) +``` +``` +/tag?tag=build&label=passing&bgtag=%23555&bglabel=green&color=white +``` -`docker build --build-arg VERSION=$(cat VERSION) -t badgedex:$(cat VERSION) .` \ No newline at end of file +```markdown +![Coverage](http://localhost:3000/tag?tag=coverage&label=98%25&bgtag=%23555&bglabel=%23007ec6&color=white) +``` +``` +/tag?tag=coverage&label=98%25&bgtag=%23555&bglabel=%23007ec6&color=white +``` + +```markdown +![License](http://localhost:3000/tag?tag=license&label=AGPL--v3&bgtag=gray&bglabel=blue&color=white) +``` +``` +/tag?tag=license&label=AGPL--v3&bgtag=gray&bglabel=blue&color=white +``` + +```markdown +![Version](http://localhost:3000/tag?tag=version&label=v0.0.1&style=flat&bgtag=%23333&bglabel=%23007ec6&color=white) +``` +``` +/tag?tag=version&label=v0.0.1&style=flat&bgtag=%23333&bglabel=%23007ec6&color=white +``` + +```markdown +![Node.js](http://localhost:3000/tag?tag=node.js&label=22.x&bgtag=%23339933&bglabel=black&color=white&size=20) +``` +``` +/tag?tag=node.js&label=22.x&bgtag=%23339933&bglabel=black&color=white&size=20 +``` + +--- + +### `GET /version` + +A szolgáltatás aktuális verzióját adja vissza JSON formátumban. + +```json +{ "badgedexVersion": "0.0.1" } +``` + +A verzió forrása (prioritás szerint): +1. `APP_VERSION` környezeti változó +2. `VERSION` fájl a projekt gyökerében + +--- + +## Környezeti változók + +A konfiguráció `.env` fájllal történik (lásd `.env.example`): + +| Változó | Alapértelmezett | Leírás | +|-------------|-----------------|------------------------------------------------------| +| `PORT` | `3000` | A szerver portja. | +| `LOG_LEVEL` | `info` | Logolás szintje: `fatal`, `error`, `warn`, `info`, `debug`, `trace`. | +| `NODE_ENV` | `development` | Környezet: `production`, `development`, `test`. | +| `APP_VERSION` | *(nincs)* | Verzió override (opcionális, alapból a `VERSION` fájlból olvas). | + +--- + +## Telepítés + +### Node.js alkalmazásként + +```bash +git clone +cd badgedex +npm install +npm start +``` + +A szerver a `http://localhost:3000` címen indul. + +### Docker konténerként + +```bash +docker build --build-arg VERSION=$(cat VERSION) -t badgedex:$(cat VERSION) . +docker run -dit --name badgedex -p 3000:3000 badgedex:$(cat VERSION) +``` + +--- + +## Fejlesztés + +### Tesztek futtatása + +```bash +npm test +``` + +Jest + Supertest tesztekkel, axios mockkal. A lefedettségi riport automatikusan generálódik. \ No newline at end of file