diff --git a/.github/scripts/readme-generator.ts b/.github/scripts/readme-generator.ts new file mode 100644 index 00000000..df5ee562 --- /dev/null +++ b/.github/scripts/readme-generator.ts @@ -0,0 +1,68 @@ +import fs from "fs"; + +type App = { + name: string; + description: string; + link: string; +}; + +const getAppsList = async () => { + const apps: Record = {}; + // fetch apps from app store repo + const res = await fetch( + "https://api.github.com/repos/runtipi/runtipi-appstore/contents/apps" + ); + + const data = await res.json(); + const appNames = data.map((app) => app.name); + + for (const app of appNames) { + const config = await fetch( + `https://raw.githubusercontent.com/runtipi/runtipi-appstore/master/apps/${app}/config.json` + ); + const appConfig = await config.text(); + try { + const appConfigJson = JSON.parse(appConfig); + + if (!appConfigJson.deprecated) { + apps[app] = { + name: appConfigJson.name, + description: appConfigJson.short_desc, + link: appConfigJson.source, + }; + } + } catch (e) { + console.error(`Error parsing config for ${app}`); + } + } + + return { apps }; +}; + +const appToReadme = async (app) => { + return `- [${app.name}](${app.link}) - ${app.description}`; +}; + +const writeToReadme = (appsList) => { + const baseReadme = fs.readFileSync( + __dirname + "/../../templates/README.md", + "utf8" + ); + const finalReadme = baseReadme.replace("", appsList); + fs.writeFileSync(__dirname + "/../../README.md", finalReadme); +}; + +const main = async () => { + const apps = await getAppsList(); + const appKeys = Object.keys(apps["apps"]); + let appsList = ""; + + for (let i = 0; i < appKeys.length; i++) { + const appFinal = await appToReadme(apps["apps"][appKeys[i]]); + appsList += i == 0 ? appFinal : "\n" + appFinal; + } + + writeToReadme(appsList); +}; + +main(); diff --git a/.github/workflows/readme-generator.yml b/.github/workflows/readme-generator.yml index cf6c8d43..72f1b462 100644 --- a/.github/workflows/readme-generator.yml +++ b/.github/workflows/readme-generator.yml @@ -14,7 +14,7 @@ jobs: uses: oven-sh/setup-bun@v1 - name: Generate new README.md file - run: bun readme-generator.ts + run: bun .github/scripts/readme-generator.ts - name: Create Pull Request uses: peter-evans/create-pull-request@v5 diff --git a/README.md b/README.md index b933b622..c4c88d85 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # Tipi App Store ⛺️ -This is the official repository for the Tipi App Store. It contains all the apps that are available for download on [Tipi](https://github.com/meienberger/runtipi). - +This is the official repository for the Tipi App Store. It contains all the apps that are available for download on [Tipi](https://github.com/runtipi/runtipi). + ## Apps available - + - [2FAuth](https://github.com/Bubka/2FAuth) - Manage your Two-Factor Authentication codes. - [Activepieces](https://github.com/activepieces/activepieces) - True zapier alternative. - [Actual Budget](https://github.com/actualbudget/actual-server) - Local-first OpenSource Budget tool @@ -103,7 +103,6 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Mastodon](https://github.com/mastodon/mastodon) - Your self-hosted, globally interconnected microblogging community - [Conduit](https://gitlab.com/famedly/conduit) - Conduit is a simple, fast and reliable chat server written in Rust - [Mealie](https://github.com/hay-kot/mealie) - Mealie is a self-hosted recipe manager and meal planner. -- [Mealie v0.5.6](https://github.com/hay-kot/mealie) - Mealie is a self-hosted recipe manager and meal planner. - [Memos](https://github.com/usememos/memos) - Memo hub for knowledge management and collaboration. - [MeTube](https://github.com/alexta69/metube) - youtube-dl web UI - [Mind](https://github.com/Casvt/MIND) - A simple self hosted reminder platform that uses push to send notifications to your device. @@ -183,7 +182,6 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Tandoor](https://github.com/TandoorRecipes/recipes) - Recipe collection manager. - [Tasks.md](https://github.com/BaldissaraMatheus/Tasks.md) - A self-hosted, file based task management board. - [Tautulli](https://github.com/Tautulli/Tautulli) - Monitoring and tracking tool for Plex Media Server. -- [teddit](https://codeberg.org/teddit/teddit) - Alternative Reddit front-end focused on privacy https://teddit.net - [Tooljet](https://github.com/ToolJet/ToolJet) - Alternative to retool to construct CRM dashboard - [Traefik Certs Dumper](https://github.com/kereis/traefik-certs-dumper) - Dumps Let's Encrypt certificates of a specified domain which Traefik stores in acme.json. - [Transmission (VPN)](https://github.com/haugene/docker-transmission-openvpn) - BitTorrent client with VPN support. @@ -206,11 +204,11 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Your Spotify](https://github.com/Yooooomi/your_spotify) - Self hosted Spotify tracking dashboard. - [ZeroTier](https://github.com/zerotier/ZeroTierOne) - Easy to use zero configuration VPN. - [Zipline](https://github.com/diced/zipline) - A ShareX/file upload server that is easy to use, packed with features, and with an easy setup! - + ## How to sumbit an app - + If you want to see new apps on Tipi you can either: - -- [Open an issue](https://github.com/meienberger/runtipi-appstore/issues) on this repository and members of the community will add it + +- [Create a discussion](https://github.com/runtipi/runtipi-appstore/discussions) on this repository and members of the community will add it - [Join the Discord](https://discord.gg/Bu9qEPnHsc) members of the community will add it. -- Fork this repo and create the necessary files for a Tipi app. Follow this [guide](<[https://github.com/meienberger/runtipi/wiki/Adding-your-own-app](https://www.runtipi.io/docs/contributing/adding-a-new-app)>) \ No newline at end of file +- Fork this repo and create the necessary files for a Tipi app. Follow this [guide](https://www.runtipi.io/docs/contributing/adding-a-new-app)` diff --git a/apps/budibase/config.json b/apps/budibase/config.json index d6482b9d..cfdd050e 100644 --- a/apps/budibase/config.json +++ b/apps/budibase/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "budibase", - "tipi_version": 70, - "version": "2.15.2", + "tipi_version": 73, + "version": "2.15.5", "categories": [ "development" ], diff --git a/apps/budibase/docker-compose.yml b/apps/budibase/docker-compose.yml index 6fe7bee1..e255f2df 100644 --- a/apps/budibase/docker-compose.yml +++ b/apps/budibase/docker-compose.yml @@ -1,7 +1,7 @@ version: '3.7' services: budibase: - image: budibase/budibase:2.15.2 + image: budibase/budibase:2.15.5 restart: unless-stopped container_name: budibase ports: diff --git a/apps/code-server/config.json b/apps/code-server/config.json index afe709eb..1f60cdc2 100644 --- a/apps/code-server/config.json +++ b/apps/code-server/config.json @@ -5,8 +5,8 @@ "exposable": true, "port": 8138, "id": "code-server", - "tipi_version": 20, - "version": "4.20.0", + "tipi_version": 21, + "version": "4.20.1", "categories": [ "development" ], diff --git a/apps/code-server/docker-compose.yml b/apps/code-server/docker-compose.yml index 481ff815..1beb47d2 100644 --- a/apps/code-server/docker-compose.yml +++ b/apps/code-server/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.7" services: code-server: - image: lscr.io/linuxserver/code-server:4.20.0 + image: lscr.io/linuxserver/code-server:4.20.1 container_name: code-server environment: - PUID=1000 diff --git a/apps/dashdot/config.json b/apps/dashdot/config.json index b3826e34..ca52ed74 100644 --- a/apps/dashdot/config.json +++ b/apps/dashdot/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "dashdot", - "tipi_version": 14, - "version": "5.8.2", + "tipi_version": 15, + "version": "5.8.3", "categories": [ "utilities" ], diff --git a/apps/dashdot/docker-compose.yml b/apps/dashdot/docker-compose.yml index e5d1a2df..ffa3a873 100644 --- a/apps/dashdot/docker-compose.yml +++ b/apps/dashdot/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.5" services: dashdot: - image: mauricenino/dashdot:5.8.2 + image: mauricenino/dashdot:5.8.3 restart: unless-stopped container_name: dashdot privileged: true diff --git a/apps/email-oauth2-proxy/config.json b/apps/email-oauth2-proxy/config.json index 303e1a34..d8710062 100644 --- a/apps/email-oauth2-proxy/config.json +++ b/apps/email-oauth2-proxy/config.json @@ -6,8 +6,8 @@ "no_gui": true, "port": 1999, "id": "email-oauth2-proxy", - "tipi_version": 1, - "version": "2024.01.04", + "tipi_version": 2, + "version": "2024.01.22", "categories": [ "utilities", "security" @@ -17,5 +17,8 @@ "author": "simonrob", "source": "https://github.com/simonrob/email-oauth2-proxy", "form_fields": [], - "supported_architectures": ["arm64", "amd64"] -} \ No newline at end of file + "supported_architectures": [ + "arm64", + "amd64" + ] +} diff --git a/apps/email-oauth2-proxy/docker-compose.yml b/apps/email-oauth2-proxy/docker-compose.yml index 94ceae44..fda1b28e 100644 --- a/apps/email-oauth2-proxy/docker-compose.yml +++ b/apps/email-oauth2-proxy/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.9" services: email-oauth2-proxy: container_name: email-oauth2-proxy - image: ghcr.io/blacktirion/email-oauth2-proxy-docker:2024.01.04 + image: ghcr.io/blacktirion/email-oauth2-proxy-docker:2024.01.22 ports: - ${APP_PORT}:80 restart: unless-stopped diff --git a/apps/emulatorjs/config.json b/apps/emulatorjs/config.json index c7ea383a..52478156 100644 --- a/apps/emulatorjs/config.json +++ b/apps/emulatorjs/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "emulatorjs", - "tipi_version": 6, - "version": "1.8.2", + "tipi_version": 7, + "version": "1.8.3", "categories": [ "gaming" ], diff --git a/apps/emulatorjs/docker-compose.yml b/apps/emulatorjs/docker-compose.yml index c66c4ff3..89b26318 100644 --- a/apps/emulatorjs/docker-compose.yml +++ b/apps/emulatorjs/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: emulatorjs: container_name: emulatorjs - image: lscr.io/linuxserver/emulatorjs:1.8.2 + image: lscr.io/linuxserver/emulatorjs:1.8.3 ports: - ${APP_PORT}:80 - 8165:3000 diff --git a/apps/ghost/config.json b/apps/ghost/config.json index adcd707d..c8218866 100644 --- a/apps/ghost/config.json +++ b/apps/ghost/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "ghost", - "tipi_version": 68, - "version": "5.76.0", + "tipi_version": 69, + "version": "5.76.1", "categories": [ "social", "media" diff --git a/apps/ghost/docker-compose.yml b/apps/ghost/docker-compose.yml index 67ee84eb..c73c5977 100644 --- a/apps/ghost/docker-compose.yml +++ b/apps/ghost/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: ghost: - image: ghost:5.76.0 + image: ghost:5.76.1 container_name: ghost depends_on: - ghostdb diff --git a/apps/lobe-chat/config.json b/apps/lobe-chat/config.json index 1b1ff2e5..124b9cab 100644 --- a/apps/lobe-chat/config.json +++ b/apps/lobe-chat/config.json @@ -5,8 +5,8 @@ "exposable": true, "id": "lobe-chat", "description": "LobeChat is an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible (Function Call) plugin system.", - "tipi_version": 13, - "version": "0.120.5", + "tipi_version": 14, + "version": "0.120.6", "categories": [ "ai" ], diff --git a/apps/lobe-chat/docker-compose.yml b/apps/lobe-chat/docker-compose.yml index c29603e5..eef61e2e 100644 --- a/apps/lobe-chat/docker-compose.yml +++ b/apps/lobe-chat/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.9' services: lobe-chat: container_name: lobe-chat - image: lobehub/lobe-chat:v0.120.5 + image: lobehub/lobe-chat:v0.120.6 environment: - OPENAI_API_KEY=${OPENAI_API_KEY} - OPENAI_PROXY_URL=${OPEANAI_PROXY_URL} diff --git a/apps/wekan/config.json b/apps/wekan/config.json index dfea4262..dbc05dd8 100644 --- a/apps/wekan/config.json +++ b/apps/wekan/config.json @@ -5,8 +5,8 @@ "available": true, "exposable": true, "id": "wekan", - "tipi_version": 2, - "version": "7.27", + "tipi_version": 3, + "version": "7.28", "categories": [ "development" ], diff --git a/apps/wekan/docker-compose.yml b/apps/wekan/docker-compose.yml index af2e7668..bf407fd0 100644 --- a/apps/wekan/docker-compose.yml +++ b/apps/wekan/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.7" services: wekan: - image: ghcr.io/wekan/wekan:v7.27 + image: ghcr.io/wekan/wekan:v7.28 container_name: wekan environment: # https://github.com/wekan/wekan/blob/main/docker-compose.yml diff --git a/readme-generator.ts b/readme-generator.ts deleted file mode 100644 index 2ca46e37..00000000 --- a/readme-generator.ts +++ /dev/null @@ -1,81 +0,0 @@ -import fs from "fs"; - -type App = { - name: string; - description: string; - link: string; -}; - -const getAppsList = async () => { - const apps: Record = {}; - // fetch apps from app store repo - const res = await fetch( - "https://api.github.com/repos/runtipi/runtipi-appstore/contents/apps" - ); - - const data = await res.json(); - const appNames = data.map((app) => app.name); - - for (const app of appNames) { - const config = await fetch( - `https://raw.githubusercontent.com/runtipi/runtipi-appstore/master/apps/${app}/config.json` - ); - const appConfig = await config.text(); - try { - const appConfigJson = JSON.parse(appConfig); - - apps[app] = { - name: appConfigJson.name, - description: appConfigJson.short_desc, - link: appConfigJson.source, - }; - } catch (e) { - console.error(`Error parsing config for ${app}`); - } - } - - return { apps }; -}; - -const appToReadme = async (app) => { - return `- [${app.name}](${app.link}) - ${app.description}`; -}; - -const writeToReadme = async (appsList) => { - let finalReadme = `# Tipi App Store ⛺️ - -This is the official repository for the Tipi App Store. It contains all the apps that are available for download on [Tipi](https://github.com/meienberger/runtipi). - -## Apps available - -${appsList} - -## How to sumbit an app - -If you want to see new apps on Tipi you can either: - -- [Open an issue](https://github.com/meienberger/runtipi-appstore/issues) on this repository and members of the community will add it -- [Join the Discord](https://discord.gg/Bu9qEPnHsc) members of the community will add it. -- Fork this repo and create the necessary files for a Tipi app. Follow this [guide](<[https://github.com/meienberger/runtipi/wiki/Adding-your-own-app](https://www.runtipi.io/docs/contributing/adding-a-new-app)>)`; - - await fs.writeFileSync("README.md", finalReadme); -}; - -const main = async () => { - const apps = await getAppsList(); - const appKeys = Object.keys(apps["apps"]); - let appsList: string = ""; - - for (let i = 0; i < appKeys.length; i++) { - const appFinal = await appToReadme(apps["apps"][appKeys[i]]); - if (i == 0) { - appsList = appsList + appFinal; - } else { - appsList = appsList + "\n" + appFinal; - } - } - - await writeToReadme(appsList); -}; - -main(); diff --git a/templates/README.md b/templates/README.md new file mode 100644 index 00000000..12e55ff8 --- /dev/null +++ b/templates/README.md @@ -0,0 +1,15 @@ +# Tipi App Store ⛺️ + +This is the official repository for the Tipi App Store. It contains all the apps that are available for download on [Tipi](https://github.com/runtipi/runtipi). + +## Apps available + + + +## How to sumbit an app + +If you want to see new apps on Tipi you can either: + +- [Create a discussion](https://github.com/runtipi/runtipi-appstore/discussions) on this repository and members of the community will add it +- [Join the Discord](https://discord.gg/Bu9qEPnHsc) members of the community will add it. +- Fork this repo and create the necessary files for a Tipi app. Follow this [guide](https://www.runtipi.io/docs/contributing/adding-a-new-app)`