From 65a5a418e8b2905e73a5ab8b143102183cd35aae Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Wed, 23 Apr 2025 21:06:48 +0200 Subject: [PATCH] feat: base config --- .github/workflows/renovate.yml | 40 +++++++++++++++++++ .gitignore | 1 + apps/whoami/config.json | 24 +++++++++++ apps/whoami/docker-compose.json | 10 +++++ apps/whoami/metadata/description.md | 43 ++++++++++++++++++++ apps/whoami/metadata/logo.jpg | Bin 0 -> 18692 bytes bun.lockb | Bin 0 -> 2715 bytes package.json | 17 ++++++++ renovate.json | 59 ++++++++++++++++++++++++++++ scripts/update-config.ts | 35 +++++++++++++++++ tsconfig.json | 21 ++++++++++ 11 files changed, 250 insertions(+) create mode 100644 .github/workflows/renovate.yml create mode 100644 .gitignore create mode 100644 apps/whoami/config.json create mode 100644 apps/whoami/docker-compose.json create mode 100644 apps/whoami/metadata/description.md create mode 100644 apps/whoami/metadata/logo.jpg create mode 100755 bun.lockb create mode 100644 package.json create mode 100644 renovate.json create mode 100644 scripts/update-config.ts create mode 100644 tsconfig.json diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml new file mode 100644 index 0000000..77d2c04 --- /dev/null +++ b/.github/workflows/renovate.yml @@ -0,0 +1,40 @@ +name: Renovate +on: + workflow_dispatch: + inputs: + log_level: + type: choice + description: Log level + default: INFO + options: + - DEBUG + - INFO + - WARN + - ERROR + - FATAL + schedule: + - cron: 0 2 * * * + +jobs: + renovate: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Install bun + uses: oven-sh/setup-bun@v2 + + - name: Install Renovate + run: bun install -g renovate re2 + + - name: Echo repository + run: echo ${{ github.repository }} + + - name: Run renovate + run: LOG_LEVEL=${{ github.event.inputs.log_level || 'INFO' }} renovate --token ${{ secrets.GITHUB_TOKEN }} ${{ github.repository }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/apps/whoami/config.json b/apps/whoami/config.json new file mode 100644 index 0000000..c343963 --- /dev/null +++ b/apps/whoami/config.json @@ -0,0 +1,24 @@ +{ + "name": "Whoami", + "id": "whoami", + "available": true, + "short_desc": "Tiny Go server that prints os information and HTTP request to output.", + "author": "traefik", + "port": 8382, + "categories": [ + "utilities" + ], + "description": "Tiny Go webserver that prints OS information and HTTP request to output.", + "tipi_version": 1, + "version": "v1.11.0", + "source": "https://github.com/traefik/whoami", + "exposable": true, + "supported_architectures": [ + "arm64", + "amd64" + ], + "created_at": 1745082405284, + "updated_at": 1745082405284, + "dynamic_config": true, + "form_fields": [] +} diff --git a/apps/whoami/docker-compose.json b/apps/whoami/docker-compose.json new file mode 100644 index 0000000..2f6c4a1 --- /dev/null +++ b/apps/whoami/docker-compose.json @@ -0,0 +1,10 @@ +{ + "services": [ + { + "name": "whoami", + "image": "traefik/whoami:v1.11.0", + "isMain": true, + "internalPort": "80" + } + ] +} diff --git a/apps/whoami/metadata/description.md b/apps/whoami/metadata/description.md new file mode 100644 index 0000000..27cd734 --- /dev/null +++ b/apps/whoami/metadata/description.md @@ -0,0 +1,43 @@ +# Whoami + +Tiny Go webserver that prints OS information and HTTP request to output. + +## Usage + +### Paths + +#### `/[?wait=d]` + +Returns the whoami information (request and network information). + +The optional `wait` query parameter can be provided to tell the server to wait before sending the response. +The duration is expected in Go's [`time.Duration`](https://golang.org/pkg/time/#ParseDuration) format (e.g. `/?wait=100ms` to wait 100 milliseconds). + +The optional `env` query parameter can be set to `true` to add the environment variables to the response. + +#### `/api` + +Returns the whoami information (and some extra information) as JSON. + +The optional `env` query parameter can be set to `true` to add the environment variables to the response. + +#### `/bench` + +Always return the same response (`1`). + +#### `/data?size=n[&unit=u]` + +Creates a response with a size `n`. + +The unit of measure, if specified, accepts the following values: `KB`, `MB`, `GB`, `TB` (optional, default: bytes). + +#### `/echo` + +WebSocket echo. + +#### `/health` + +Heath check. + +- `GET`, `HEAD`, ...: returns a response with the status code defined by the `POST` +- `POST`: changes the status code of the `GET` (`HEAD`, ...) response. diff --git a/apps/whoami/metadata/logo.jpg b/apps/whoami/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..24ed99d3f04b8a10fdaf3708a8b0bdf3ee296b58 GIT binary patch literal 18692 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 literal 0 HcmV?d00001 diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..f7bcbffa5789067da817b6667b2a1dd384cef970 GIT binary patch literal 2715 zcmY#Z)GsYA(of3F(@)JSQ%EY!;{sycoc!eMw9K4T-L(9o+{6;yG6OCq1_p-zT~d1sE6_ z&-}Kgi>vKuj!v>E8gHiN@=nK@(45TH1n3a%5s60%+575K< zNcutM5DP$NfG{Y`VERBbNDSl-kT`OJAWi*0{(m3?s0o1PF)~2RMK+pcx8plo9=X34 zUn|{Umz%la&fWP5Dpkij)*DxLetJwM{b?O(+?I^BX;yyn{eT~5KcZVJonKYej zIl6pqX46^gJ~{seT^1STT#GiFlessJm-t`&tBPbUEPO#`v&_l-d5PsnZegiq?YV`$ z&!x7-RccrCc8Z;JsTH5`a*x+V2_DJnmlI0gFub_Rt-nEcL8GWPyNBTAzZ)u#uhO`C z1<70%m}5ca{^6c>;PAhs75#aK3ZK|bu44%A3PHU<=#PIjj|0|PCjvgqJobl)rlDWv~kVQ_+bkUk?oUH4DRv#3rHd=QruwD6{ z`<5wE|C=5^*6BK|7y70D_`#P4v)VshiE7o%eR1}DM}W-2hlwd%9kDhUUO;n4!C(%7 z4bW_U1WI$+6c;7yW#$!^BhmB%KPZ2Jk{PV*0+|7F zLj_c?2()nKvWYe_i!HSPdczFv4nu@DVD%fU-r``4GtjfpGhkqV)r7Db4k%+}q-SWN zXP6AM2UIu0>O3aKIx{^ZL!c&D?Fg&&m>A=X^^8pPj2K|`C#+tC$(Um35rFD3WQc?M z0Y;<7QgLc-S!$7xvA;Oy$aBp@%O=5<&3xF{L3=u;t0g_sg zm|FmBZzL8J6qn=|r8*Rq=9Od?Wa=m9=jP_;Ih0fuq!#Pv<)@@(l#~<{Tj}c;rKV>V zmlRd%%+-YiH^?wN z2B0||Xa>X&y5I-~X$D4@Zb`mwR&jowZgFx(YHlJP<1iHiO~e$`1xL6k0k;A5L3M+b M8-tVsQ`MjZ03~Yh=l}o! literal 0 HcmV?d00001 diff --git a/package.json b/package.json new file mode 100644 index 0000000..6223dc6 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "example-appstore", + "version": "1.0.0", + "description": "", + "main": "index.js", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@runtipi/common": "^0.8.0", + "@types/node": "^22.14.1" + } +} diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..8bb2ada --- /dev/null +++ b/renovate.json @@ -0,0 +1,59 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ], + "addLabels": [ + "renovate" + ], + "automergeStrategy": "rebase", + "ignoreTests": true, + "customManagers": [ + { + "customType": "regex", + "fileMatch": [ + "^.*docker-compose\\.json$" + ], + "matchStrings": [ + "\"image\": \"(?.*?):(?.*?)\"," + ], + "datasourceTemplate": "docker" + } + ], + "packageRules": [ + { + "matchUpdateTypes": [ + "minor", + "patch", + "pin", + "digest" + ], + "automerge": true + }, + { + "matchDepTypes": [ + "devDependencies" + ], + "automerge": true + }, + { + "matchPackageNames": [ + "mariadb", + "mysql", + "monogdb", + "postgres", + "redis" + ], + "enabled": false + } + ], + "postUpgradeTasks": { + "commands": [ + "bun ./scripts/update-config.ts {{packageFile}} {{newVersion}}" + ], + "fileFilters": [ + "**/*" + ], + "executionMode": "update" + } +} diff --git a/scripts/update-config.ts b/scripts/update-config.ts new file mode 100644 index 0000000..42891c7 --- /dev/null +++ b/scripts/update-config.ts @@ -0,0 +1,35 @@ +import path from "node:path"; +import fs from "fs/promises"; + +const packageFile = process.argv[2]; +const newVersion = process.argv[3]; + +type AppConfig = { + tipi_version: string; + version: string; + updated_at: number; +}; + +const updateAppConfig = async (packageFile: string, newVersion: string) => { + try { + const packageRoot = path.dirname(packageFile); + const configPath = path.join(packageRoot, "config.json"); + + const config = await fs.readFile(configPath, "utf-8"); + const configParsed = JSON.parse(config) as AppConfig; + + configParsed.tipi_version = configParsed.tipi_version + 1; + configParsed.version = newVersion; + configParsed.updated_at = new Date().getTime(); + + await fs.writeFile(configPath, JSON.stringify(configParsed, null, 2)); + } catch (e) { + console.error(`Failed to update app config, error: ${e}`); + } +}; + +if (!packageFile || !newVersion) { + console.error("Usage: node update-config.js "); + process.exit(1); +} +updateAppConfig(packageFile, newVersion); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..216b3a6 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "skipLibCheck": true, + "target": "es2022", + "allowJs": true, + "resolveJsonModule": true, + "moduleDetection": "force", + "isolatedModules": true, + "verbatimModuleSyntax": true, + "strict": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "module": "NodeNext", + "outDir": "dist", + "sourceMap": true, + "lib": [ + "es2022" + ] + } +}