diff --git a/.github/workflows/docker-release.yaml b/.github/workflows/docker-release.yaml index 90b3383b..6579e6a9 100644 --- a/.github/workflows/docker-release.yaml +++ b/.github/workflows/docker-release.yaml @@ -76,6 +76,7 @@ jobs: type=semver,pattern=v{{version}} type=semver,pattern=v{{major}}.{{minor}} type=semver,pattern=v{{major}} + type=raw,value=v{{version}} # Build and push Docker image with Buildx (don't push on PR) # https://github.com/docker/build-push-action @@ -101,4 +102,4 @@ jobs: # env: # # This step uses the identity token to provision an ephemeral certificate # # against the sigstore community Fulcio instance. -# run: cosign sign ${{ steps.kubero-meta.outputs.tags }}@${{ steps.kubero-build-and-push.outputs.digest }} \ No newline at end of file +# run: cosign sign ${{ steps.kubero-meta.outputs.tags }}@${{ steps.kubero-build-and-push.outputs.digest }} diff --git a/.github/workflows/stargazers.yaml b/.github/workflows/stargazers.yaml new file mode 100644 index 00000000..d7662237 --- /dev/null +++ b/.github/workflows/stargazers.yaml @@ -0,0 +1,21 @@ +name: 'Mail on Star' +on: + workflow_dispatch: + watch: + types: [started] +jobs: + stargazer: + name: 'stargazers' + runs-on: ubuntu-latest + steps: + - name: 💌 Send email, you star + uses: dawidd6/action-send-mail@v1.3.0 + with: + server_address: smtp.gmail.com + server_port: 465 + username: ${{ secrets.GMAIL_USER }} + password: ${{ secrets.GMAIL_PASS }} + subject: Your a star ✨ + body: ${{ github.actor }} just starred your mail-on-star repo!!! ${{ github.repository }} + to: ${{ secrets.GMAIL_ADDRESS }} + from: ${{ secrets.GMAIL_ADDRESS }} \ No newline at end of file diff --git a/client/src/components/apps/addons.vue b/client/src/components/apps/addons.vue index 70e20ad4..19e65868 100644 --- a/client/src/components/apps/addons.vue +++ b/client/src/components/apps/addons.vue @@ -119,6 +119,15 @@ dense v-model="field.default" > + { + Object.entries(this.selectedAddon.formfields as FormField[]).forEach(([field, value]) => { const fieldvalue = get(addon.resourceDefinitions, field, value.default) //console.log(field, value, fieldvalue); value.default = fieldvalue; @@ -338,7 +347,7 @@ export default defineComponent({ this.dialog = false; // replace the formfields with the form value - Object.entries(this.selectedAddon.formfields).forEach(([field, value]) => { + Object.entries(this.selectedAddon.formfields as FormField[]).forEach(([field, value]) => { // Cast number fields to int if (value.type === 'number' && typeof value.default === 'string') { @@ -364,8 +373,6 @@ export default defineComponent({ resourceDefinitions: this.selectedAddon.resourceDefinitions, } as Addon; - //console.log(addon); - if (this.mode === 'create') { this.addAddon(addon); } else { diff --git a/client/src/components/apps/form.vue b/client/src/components/apps/form.vue index 11a00817..153fd4df 100644 --- a/client/src/components/apps/form.vue +++ b/client/src/components/apps/form.vue @@ -1802,10 +1802,13 @@ export default defineComponent({ (v: any) => /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(v) || 'Allowed characters : [a-zA-Z0-9_-]', ], repositoryRules: [ - //v => !!v || 'Repository is required', - (v: any) => v.length <= 120 || 'Repository must be less than 120 characters', + //(v: any) => !!v || 'Repository is required', + //(v: any) => v.length <= 120 || 'Repository must be less than 120 characters', // ((git|ssh|http(s)?)|(git@[\w\.]+))(:(//)?)([\w\.@\:/\-~]+)(\.git)(/)? - (v: any) => /((git|ssh|http(s)?)|(git@[\w.]+))(:(\/\/)?)([\w.@:/\-~]+)(\.git)(\/)?/.test(v) || 'Format "owner/repository"', + // ((git|ssh|http(s)?)|(git@[\w.]+))(:(\/\/)?)([\w.@:\/\-~]+)(\.git) + // (git@[\w.]+:\/\/)([\w.\/\-~]+)(\.git) // not working + // ((git|ssh|http(s)?)|(git@[\w\.-]+))(:(//)?)([\w\.@\:/\-~]+)(\.git)(/)? + (v: any) => /^((git|ssh|http(s)?)|(git@[\w\.-]+))(:(\/\/)?)([\w\.@\:\/\-~]+)(\.git)(\/)?/.test(v) || 'Format "git@github.com:organisation/repository.git"', ], domainRules: [ (v: any) => !!v || 'Domain is required', diff --git a/client/src/components/settings/form-deployment.vue b/client/src/components/settings/form-deployment.vue index 8ed2d50c..0526e9c1 100644 --- a/client/src/components/settings/form-deployment.vue +++ b/client/src/components/settings/form-deployment.vue @@ -54,9 +54,19 @@

Github

+ + + \ No newline at end of file + diff --git a/client/src/components/settings/form.vue b/client/src/components/settings/form.vue index 6523cead..1db734b2 100644 --- a/client/src/components/settings/form.vue +++ b/client/src/components/settings/form.vue @@ -65,6 +65,7 @@ import FormNotifications from './form-notifications.vue' // types & interfaces export interface Secrets { + GITHUB_BASEURL: string; GITHUB_PERSONAL_ACCESS_TOKEN: string; GITEA_PERSONAL_ACCESS_TOKEN: string; GITEA_BASEURL: string; @@ -389,6 +390,7 @@ export default defineComponent({ show: false, settings: { secrets: { + GITHUB_BASEURL: '', GITHUB_PERSONAL_ACCESS_TOKEN: '', GITEA_PERSONAL_ACCESS_TOKEN: '', GITEA_BASEURL: '', @@ -548,4 +550,4 @@ export default defineComponent({ \ No newline at end of file + diff --git a/client/src/components/templates/index.vue b/client/src/components/templates/index.vue index 6301c3e2..8a833640 100644 --- a/client/src/components/templates/index.vue +++ b/client/src/components/templates/index.vue @@ -69,10 +69,38 @@ prepend-icon="mdi-file-certificate" v-if="template.spdx_id && template.spdx_id !== 'NOASSERTION'" >{{ template.spdx_id }} +
+ {{ category }} - + {{ template.description }} + + + + + @@ -154,6 +182,7 @@ import axios from "axios"; import { forEach } from "lodash"; import { defineComponent } from 'vue' +import { useRouter } from 'vue-router' type Pipeline = { name: string, @@ -187,6 +216,7 @@ type Template = { last_updated: string, last_pushed: string, status: string, + } type Templates = { @@ -232,6 +262,12 @@ export default defineComponent({ dialog: false, clickedTemplate: {} as Template, catalogId: 0, + addonImages: { + 'KuberoPostgresql': '/img/addons/pgsql.svg', + 'KuberoMysql': '/img/addons/mysql.svg', + 'KuberoRedis': '/img/addons/redis.svg', + 'KuberoMongoDB': '/img/addons/mongo.svg', + } as { [key: string]: string }, templates: { enabled: true, catalogs: [] as Catalog[], @@ -258,10 +294,10 @@ export default defineComponent({ this.dialog = false; }, openInstall(templateurl: string, pipeline: string, phase: string) { + const router = useRouter(); // redirect to install page const templateurlB64 = btoa(templateurl); - this.$router.push({ name: 'App Form', params: { pipeline: pipeline, phase: phase, app: 'new'}, query: { template: templateurlB64 }}) - + router.push({ name: 'App Form', params: { pipeline: pipeline, phase: phase, app: 'new'}, query: { template: templateurlB64 }}) }, openInstallDialog(template: Template) { this.clickedTemplate = template; @@ -282,7 +318,7 @@ export default defineComponent({ }); }, filterByCategory(selectedCategory: string) { - console.log(selectedCategory); + if (selectedCategory === 'All') { this.showedTemplates.services = this.templatesList.services; } else { diff --git a/server/src/addons/kuberoCouchDB.ts b/server/src/addons/kuberoCouchDB.ts index c67790f9..ae83f8b7 100644 --- a/server/src/addons/kuberoCouchDB.ts +++ b/server/src/addons/kuberoCouchDB.ts @@ -24,6 +24,15 @@ export class KuberoCouchDB extends Plugin implements IPlugin { default: 'couchdb', description: 'The name of the Couchdb instance' }, + 'KuberoCouchDB.spec.couchdb.image.tag':{ + type: 'combobox', + label: 'Version/Tag', + options: ['3.2.1', '3.3', '3.4.2', 'latest'], // TODO - load this dynamically + name: 'spec.couchdb.image.tag', + required: true, + default: '3.2.1', + description: 'Version of the PostgreSQL image to use' + }, 'KuberoCouchDB.spec.couchdb.clusterSize':{ type: 'number', label: 'Cluster Size*', diff --git a/server/src/addons/kuberoElasticsearch.ts b/server/src/addons/kuberoElasticsearch.ts index 2a88c944..16f37ea5 100644 --- a/server/src/addons/kuberoElasticsearch.ts +++ b/server/src/addons/kuberoElasticsearch.ts @@ -24,6 +24,15 @@ export class KuberoElasticsearch extends Plugin implements IPlugin { default: 'elasticsearch', description: 'The name of the elasticsearch instance' }, + 'KuberoElasticsearch.spec.elasticsearch.image.tag':{ + type: 'combobox', + label: 'Version/Tag', + options: ['7', '7.17.26', '8.6.0-debian-11-r0', '8', '8.17.1', 'latest'], // TODO - load this dynamically + name: 'spec.couchdb.image.tag', + required: true, + default: '8.6.0-debian-11-r0', + description: 'Version of the PostgreSQL image to use' + }, 'KuberoElasticsearch.spec.elasticsearch.global.storageClass':{ type: 'select-storageclass', label: 'Storage Class', diff --git a/server/src/addons/kuberoMemcached.ts b/server/src/addons/kuberoMemcached.ts index baef0647..c488f8ee 100644 --- a/server/src/addons/kuberoMemcached.ts +++ b/server/src/addons/kuberoMemcached.ts @@ -24,6 +24,15 @@ export class KuberoMemcached extends Plugin implements IPlugin { default: 'memcached', description: 'The name of the Memcached instance' }, + 'KuberoMemcached.spec.memcached.image.tag':{ + type: 'combobox', + label: 'Version/Tag', + options: ['1.6.22-debian-11-r1', '1', '1.6.34', 'latest'], // TODO - load this dynamically + name: 'spec.memcached.image.tag', + required: true, + default: '1.6.22-debian-11-r1', + description: 'Version of the PostgreSQL image to use' + }, 'KuberoMemcached.spec.memcached.architecture':{ type: 'select', label: 'Architecture*', diff --git a/server/src/addons/kuberoMongoDB.ts b/server/src/addons/kuberoMongoDB.ts index 7e050050..385c0cd5 100644 --- a/server/src/addons/kuberoMongoDB.ts +++ b/server/src/addons/kuberoMongoDB.ts @@ -24,6 +24,15 @@ export class KuberoMongoDB extends Plugin implements IPlugin { default: 'mongodb', description: 'The name of tht MongoDB instance' }, + 'KuberoMongoDB.spec.mongodb.image.tag':{ + type: 'combobox', + label: 'Version/Tag', + options: ['6.0.6-debian-11-r3', '7.0.15', '8.0', '8.0.4', 'latest'], // TODO - load this dynamically + name: 'spec.mongodb.image.tag', + required: true, + default: '8.0', + description: 'Version of the PostgreSQL image to use' + }, 'KuberoMongoDB.spec.mongodb.global.storageClass':{ type: 'select-storageclass', label: 'Storage Class', diff --git a/server/src/addons/kuberoMysql.ts b/server/src/addons/kuberoMysql.ts index 1bb03372..df973d82 100644 --- a/server/src/addons/kuberoMysql.ts +++ b/server/src/addons/kuberoMysql.ts @@ -24,6 +24,15 @@ export class KuberoMysql extends Plugin implements IPlugin { default: 'mysql', description: 'The name of the MySQL instance' }, + 'KuberoMysql.spec.mysql.image.tag':{ + type: 'combobox', + label: 'Version/Tag', + options: ['8.0.33-debian-11-r12', '8.1', '8.2-debian-11', '8.4.4', '9.0', 'latest'], // TODO - load this dynamically + name: 'spec.mysql.image.tag', + required: true, + default: '8.4.4', + description: 'Version of the PostgreSQL image to use' + }, 'KuberoMysql.spec.mysql.global.storageClass':{ type: 'select-storageclass', label: 'Storage Class', diff --git a/server/src/addons/kuberoPostgresql.ts b/server/src/addons/kuberoPostgresql.ts index 135a462a..6dfc5569 100644 --- a/server/src/addons/kuberoPostgresql.ts +++ b/server/src/addons/kuberoPostgresql.ts @@ -24,6 +24,15 @@ export class KuberoPostgresql extends Plugin implements IPlugin { default: 'postgresql', description: 'The name of the PostgreSQL instance' }, + 'KuberoPostgresql.spec.postgresql.image.tag':{ + type: 'combobox', + label: 'Version/Tag', + options: ['13', '14', '15', '16.6.0', '17.2.0', 'latest'], // TODO - load this dynamically + name: 'spec.postgresql.image.tag', + required: true, + default: '16', + description: 'Version of the PostgreSQL image to use' + }, 'KuberoPostgresql.spec.postgresql.global.postgresql.auth.postgresPassword':{ type: 'text', label: 'Postgres admin Password*', diff --git a/server/src/addons/kuberoRabbitMQ.ts b/server/src/addons/kuberoRabbitMQ.ts index 532c81d2..eb7a8565 100644 --- a/server/src/addons/kuberoRabbitMQ.ts +++ b/server/src/addons/kuberoRabbitMQ.ts @@ -24,6 +24,15 @@ export class KuberoRabbitMQ extends Plugin implements IPlugin { default: 'rabbitmq', description: 'The name of the PostgreSQL instance' }, + 'KuberoRabbitMQ.spec.rabbitmq.image.tag':{ + type: 'combobox', + label: 'Version/Tag', + options: ['3.12.10-debian-11-r1', '3.13.7', '4.0.5', 'latest'], // TODO - load this dynamically + name: 'spec.rabbitmq.image.tag', + required: true, + default: '3.12.10-debian-11-r1', + description: 'Version of the PostgreSQL image to use' + }, 'KuberoRabbitMQ.spec.rabbitmq.auth.username':{ type: 'text', label: 'User Name*', diff --git a/server/src/addons/kuberoRedis.ts b/server/src/addons/kuberoRedis.ts index ab652492..5c2ae84f 100644 --- a/server/src/addons/kuberoRedis.ts +++ b/server/src/addons/kuberoRedis.ts @@ -24,6 +24,15 @@ export class KuberoRedis extends Plugin implements IPlugin { default: 'redis', description: 'The name of the redis instance' }, + 'KuberoRedis.spec.redis.image.tag':{ + type: 'combobox', + label: 'Version/Tag', + options: ['7.0.7-debian-11-r7', '6.2', '7.4.2', 'latest'], // TODO - load this dynamically + name: 'spec.redis.image.tag', + required: true, + default: '7.0-debian-12', + description: 'Version of the PostgreSQL image to use' + }, 'KuberoRedis.spec.redis.replica.replicaCount':{ type: 'number', label: 'Replica Count*', diff --git a/server/src/addons/plugin.ts b/server/src/addons/plugin.ts index 616e3f19..64f669db 100644 --- a/server/src/addons/plugin.ts +++ b/server/src/addons/plugin.ts @@ -2,7 +2,7 @@ import axios from 'axios'; import { KubernetesListObject, KubernetesObject } from '@kubernetes/client-node' export interface IPluginFormFields { - type: 'text' | 'number' |'switch' | 'select' | 'select-storageclass', + type: 'text' | 'number' |'switch' | 'select' | 'select-storageclass' | 'combobox', label: string, name: string, required: boolean, diff --git a/server/src/git/github.ts b/server/src/git/github.ts index e9e68ec1..9fa0b858 100644 --- a/server/src/git/github.ts +++ b/server/src/git/github.ts @@ -12,10 +12,16 @@ import { RequestError } from '@octokit/types'; export class GithubApi extends Repo { private octokit: any; - constructor(token: string) { + constructor(baseUrl: string, token: string) { super("github"); + + if (baseUrl === '') { + baseUrl = 'https://api.github.com'; + } + this.octokit = new Octokit({ - auth: token + auth: token, + baseUrl: baseUrl, }); } @@ -398,4 +404,4 @@ export class GithubApi extends Repo { return ret; } -} \ No newline at end of file +} diff --git a/server/src/git/repo.test.ts b/server/src/git/repo.test.ts index 012d42db..ca02759a 100644 --- a/server/src/git/repo.test.ts +++ b/server/src/git/repo.test.ts @@ -6,7 +6,7 @@ import { GiteaApi } from './gitea'; describe('GithubApi', () => { it('should load config', () => { - const github = new GithubApi("token"); + const github = new GithubApi('', "token"); expect(github).toBeTruthy(); }); }); diff --git a/server/src/kubero.ts b/server/src/kubero.ts index c623ebcd..35655e7e 100644 --- a/server/src/kubero.ts +++ b/server/src/kubero.ts @@ -80,7 +80,7 @@ export class Kubero { this.giteaApi = new GiteaApi(process.env.GITEA_BASEURL as string, process.env.GITEA_PERSONAL_ACCESS_TOKEN as string); this.gogsApi = new GogsApi(process.env.GOGS_BASEURL as string, process.env.GOGS_PERSONAL_ACCESS_TOKEN as string); - this.githubApi = new GithubApi(process.env.GITHUB_PERSONAL_ACCESS_TOKEN as string); + this.githubApi = new GithubApi(process.env.GITHUB_BASEURL as string, process.env.GITHUB_PERSONAL_ACCESS_TOKEN as string); this.gitlabApi = new GitlabApi(process.env.GITLAB_BASEURL as string, process.env.GITLAB_PERSONAL_ACCESS_TOKEN as string); this.bitbucketApi = new BitbucketApi(process.env.BITBUCKET_USERNAME as string, process.env.BITBUCKET_APP_PASSWORD as string); diff --git a/server/src/modules/repositories.ts b/server/src/modules/repositories.ts index f1f90b92..641238ce 100644 --- a/server/src/modules/repositories.ts +++ b/server/src/modules/repositories.ts @@ -16,7 +16,7 @@ export class Repositories { constructor() { this.giteaApi = new GiteaApi(process.env.GITEA_BASEURL as string, process.env.GITEA_PERSONAL_ACCESS_TOKEN as string); this.gogsApi = new GogsApi(process.env.GOGS_BASEURL as string, process.env.GOGS_PERSONAL_ACCESS_TOKEN as string); - this.githubApi = new GithubApi(process.env.GITHUB_PERSONAL_ACCESS_TOKEN as string); + this.githubApi = new GithubApi(process.env.GITHUB_BASEURL as string, process.env.GITHUB_PERSONAL_ACCESS_TOKEN as string); this.gitlabApi = new GitlabApi(process.env.GITLAB_BASEURL as string, process.env.GITLAB_PERSONAL_ACCESS_TOKEN as string); this.bitbucketApi = new BitbucketApi(process.env.BITBUCKET_USERNAME as string, process.env.BITBUCKET_APP_PASSWORD as string); } diff --git a/server/src/modules/settings.ts b/server/src/modules/settings.ts index 49a04c49..707d0ee5 100644 --- a/server/src/modules/settings.ts +++ b/server/src/modules/settings.ts @@ -64,6 +64,7 @@ export class Settings { } config["secrets"] = { + GITHUB_BASEURL: process.env.GITHUB_BASEURL || '', GITHUB_PERSONAL_ACCESS_TOKEN: process.env.GITHUB_PERSONAL_ACCESS_TOKEN || '', GITEA_PERSONAL_ACCESS_TOKEN: process.env.GITEA_PERSONAL_ACCESS_TOKEN || '', GITEA_BASEURL: process.env.GITEA_BASEURL || '', @@ -143,6 +144,7 @@ export class Settings { process.env[key] = secrets[key] } */ + process.env.GITHUB_BASEURL = secrets.GITHUB_BASEURL process.env.GITHUB_PERSONAL_ACCESS_TOKEN = secrets.GITHUB_PERSONAL_ACCESS_TOKEN process.env.GITEA_PERSONAL_ACCESS_TOKEN = secrets.GITEA_PERSONAL_ACCESS_TOKEN process.env.GITEA_BASEURL = secrets.GITEA_BASEURL diff --git a/services/airbroke/app.yaml b/services/airbroke/app.yaml new file mode 100644 index 00000000..c3dc0c54 --- /dev/null +++ b/services/airbroke/app.yaml @@ -0,0 +1,77 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: airbroke + annotations: + kubero.dev/template.architecture: "[]" + kubero.dev/template.description: "A lightweight, Airbrake-compatible, PostgreSQL-based Open Source Error Catcher" + kubero.dev/template.icon: "https://raw.githubusercontent.com/icoretech/airbroke/refs/heads/main/public/logo.svg" + kubero.dev/template.installation: "After installation you need to login into the pod and run the following command: `npx prisma migrate deploy`" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: '["https://github.com/icoretech/airbroke/raw/main/public/aidemo.gif"]' + kubero.dev/template.source: "https://github.com/icoretech/airbroke" + kubero.dev/template.categories: '["development", "monitoring", "ai"]' + kubero.dev/template.title: "Airbroke" + kubero.dev/template.website: "https://airbroke.icorete.ch/" + labels: + manager: kubero +spec: + name: airbroke + deploymentstrategy: docker + envVars: + - name: DATABASE_URL + value: postgresql://airbroke:airbroke@airbroke-postgresql:5432/airbroke?schema=public + - name: DIRECT_URL + value: postgresql://airbroke:airbroke@airbroke-postgresql:5432/airbroke?schema=public + - name: NEXT_SERVER_ACTIONS_ENCRYPTION_KEY + value: random64 + - name: AUTH_SECRET + value: random64 + - name: AIRBROKE_GITHUB_ID + value: createAGithubApp + - name: AIRBROKE_GITHUB_SECRET + value: createAGithubApp + - name: AUTH_DEBUG + value: "false" + - name: AUTH_URL + value: https://airbroke.localhost/ + - name: AIRBROKE_CORS_ORIGINS + value: https://airbroke.localhost/ + extraVolumes: [] + cronjobs: [] + addons: + - displayName: Postgresql + env: [] + icon: /img/addons/pgsql.svg + id: kubero-operator + kind: KuberoPostgresql + resourceDefinitions: + KuberoPostgresql: + apiVersion: application.kubero.dev/v1alpha1 + kind: KuberoPostgresql + metadata: + name: airbroke-postgresql + spec: + postgresql: + global: + postgresql: + auth: + database: airbroke + password: airbroke + postgresPassword: airbroke + username: airbroke + storageClass: standard + primary: + persistence: + size: 1Gi + version: + latest: 0.1.6 + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: "3000" + pullPolicy: Always + repository: ghcr.io/icoretech/airbroke + tag: latest diff --git a/services/caddygen/app.yaml b/services/caddygen/app.yaml new file mode 100644 index 00000000..c04f319e --- /dev/null +++ b/services/caddygen/app.yaml @@ -0,0 +1,33 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: caddygen + annotations: + kubero.dev/template.architecture: '["linux/amd64", "linux/arm64"]' + kubero.dev/template.description: "CaddyGen is a user-friendly web interface for generating Caddy server configurations. " + kubero.dev/template.icon: "https://avatars.githubusercontent.com/u/12955528" + kubero.dev/template.installation: "" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: "[]" + kubero.dev/template.source: "https://github.com/DeanWard/CaddyGen" + kubero.dev/template.categories: '["utility"]' + kubero.dev/template.title: "CaddyGen" + kubero.dev/template.website: "https://caddygen.site/" + labels: + manager: kubero +spec: + name: caddygen + deploymentstrategy: docker + envVars: [] + extraVolumes: [] + cronjobs: [] + addons: [] + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: "80" + pullPolicy: Always + repository: wardy784/caddygen + tag: latest diff --git a/services/guitos/app.yaml b/services/guitos/app.yaml new file mode 100644 index 00000000..1055a0ea --- /dev/null +++ b/services/guitos/app.yaml @@ -0,0 +1,33 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: guitos + annotations: + kubero.dev/template.architecture: "[]" + kubero.dev/template.description: "A personal budgeting app that helps you figure out where your money went, plan your budget ahead of time and analyze past expenditures." + kubero.dev/template.icon: "https://avatars.githubusercontent.com/u/5001560" + kubero.dev/template.installation: "" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: "[]" + kubero.dev/template.source: "https://github.com/rare-magma/guitos" + kubero.dev/template.categories: '["personal"]' + kubero.dev/template.title: "guitos" + kubero.dev/template.website: "https://guitos.app/" + labels: + manager: kubero +spec: + name: guitos + deploymentstrategy: docker + envVars: [] + extraVolumes: [] + cronjobs: [] + addons: [] + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: "3000" + pullPolicy: Always + repository: ghcr.io/rare-magma/guitos + tag: latest diff --git a/services/kotaemon/app.yaml b/services/kotaemon/app.yaml new file mode 100644 index 00000000..96870853 --- /dev/null +++ b/services/kotaemon/app.yaml @@ -0,0 +1,37 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: kotaemon + annotations: + kubero.dev/template.architecture: "[]" + kubero.dev/template.description: "An open-source clean & customizable RAG UI for chatting with your documents." + kubero.dev/template.icon: "https://avatars.githubusercontent.com/u/3265185" + kubero.dev/template.installation: "" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: '["https://raw.githubusercontent.com/Cinnamon/kotaemon/main/docs/images/preview-graph.png", "https://raw.githubusercontent.com/Cinnamon/kotaemon/main/docs/images/preview.png"]' + kubero.dev/template.source: "https://github.com/Cinnamon/kotaemon" + kubero.dev/template.categories: '["ai"]' + kubero.dev/template.title: "Kotaemon" + kubero.dev/template.website: "https://cinnamon.github.io/kotaemon/" + labels: + manager: kubero +spec: + name: kotaemon + deploymentstrategy: docker + envVars: + - name: GRADIO_SERVER_PORT + value: "8080" + - name: GRADIO_SERVER_NAME + value: 0.0.0.0 + extraVolumes: [] + cronjobs: [] + addons: [] + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: 8080 + pullPolicy: Always + repository: ghcr.io/cinnamon/kotaemon + tag: main-full diff --git a/services/outline/app.yaml b/services/outline/app.yaml new file mode 100644 index 00000000..d25af165 --- /dev/null +++ b/services/outline/app.yaml @@ -0,0 +1,126 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: outline + annotations: + kubero.dev/template.architecture: '["linux/amd64", "linux/arm64", "linux/arm/v7"]' + kubero.dev/template.description: "The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible." + kubero.dev/template.icon: "https://avatars.githubusercontent.com/u/1765001" + kubero.dev/template.installation: "" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: '["https://user-images.githubusercontent.com/380914/110356468-26374600-7fef-11eb-9f6a-f2cc2c8c6590.png"]' + kubero.dev/template.source: "https://github.com/outline/outline" + kubero.dev/template.categories: '["work", "utility"]' + kubero.dev/template.title: "Outline" + kubero.dev/template.website: "https://www.getoutline.com/" + labels: + manager: kubero +spec: + name: outline + deploymentstrategy: docker + envVars: + - name: NODE_ENV + value: production + - name: SECRET_KEY + value: 4b8767e288424f2f47630e005e1109ddfec63ee561fa86657f1ab41c401465ce + - name: DATABASE_URL + value: postgres://outline:outline@outline-postgresql:5432/outline + - name: PGSSLMODE + value: disable + - name: REDIS_URL + value: redis://:outline@outline-redis-master:6379 + - name: FILE_STORAGE + value: local + - name: FILE_STORAGE_LOCAL_ROOT_DIR + value: /var/lib/outline/data + - name: FILE_STORAGE_UPLOAD_MAX_SIZE + value: "262144000" + - name: LOG_LEVEL + value: info + - name: DEFAULT_LANGUAGE + value: en_US + - name: UTILS_SECRET + value: 74e934cd60281e460db22128382511ffe49031363db1a7e85d4812772e5207e9 + - name: URL + value: https://outline.localhost + - name: CDN_URL + value: https://outline.localhost + - name: FORCE_HTTPS + value: "false" + - name: SLACK_CLIENT_ID + value: "" + - name: SLACK_CLIENT_SECRET + value: "" + extraVolumes: + - accessMode: ReadWriteOnce + accessModes: + - ReadWriteOnce + emptyDir: false + mountPath: /var/lib/outline/data + name: outline-volume + size: 1Gi + storageClass: standard + cronjobs: [] + addons: + - displayName: Redis + env: [] + icon: /img/addons/redis.svg + id: kubero-operator + kind: KuberoRedis + resourceDefinitions: + KuberoRedis: + apiVersion: application.kubero.dev/v1alpha1 + kind: KuberoRedis + metadata: + name: outline-redis + spec: + redis: + architecture: replication + global: + redis: + password: outline + storageClass: standard + master: + persistence: + size: 1Gi + replica: + persistence: + size: 1Gi + replicaCount: 1 + version: + latest: 0.1.8 + - displayName: Postgresql + env: [] + icon: /img/addons/pgsql.svg + id: kubero-operator + kind: KuberoPostgresql + resourceDefinitions: + KuberoPostgresql: + apiVersion: application.kubero.dev/v1alpha1 + kind: KuberoPostgresql + metadata: + name: outline-postgresql + spec: + postgresql: + global: + postgresql: + auth: + database: outline + password: outline + postgresPassword: outline + username: outline + storageClass: standard + primary: + persistence: + size: 1Gi + version: + latest: 0.1.8 + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: "3000" + pullPolicy: Always + repository: docker.getoutline.com/outlinewiki/outline + tag: latest diff --git a/services/piwigo/app.yaml b/services/piwigo/app.yaml new file mode 100644 index 00000000..de80399a --- /dev/null +++ b/services/piwigo/app.yaml @@ -0,0 +1,77 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: piwigo + annotations: + kubero.dev/template.architecture: '["linux/amd64", "linux/arm64"]' + kubero.dev/template.description: "Manage your photos with Piwigo, a full featured open source photo gallery application for the web." + kubero.dev/template.icon: "https://avatars.githubusercontent.com/u/9326886" + kubero.dev/template.installation: "This app requires a manual step to configure the MySQL database." + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: '["https://piwigo.org/plugins/piwigo-piwigodotorg//images/home/responsive-screens.png"]' + kubero.dev/template.source: "https://github.com/Piwigo/Piwigo" + kubero.dev/template.categories: '["utilities"]' + kubero.dev/template.title: "Piwigo" + kubero.dev/template.website: "https://piwigo.org/" + labels: + manager: kubero +spec: + name: piwigo + deploymentstrategy: docker + envVars: [] + extraVolumes: + - accessMode: ReadWriteOnce + accessModes: + - ReadWriteOnce + emptyDir: false + mountPath: /config + name: piwigo-config-volume + size: 1Gi + storageClass: standard + - accessMode: ReadWriteOnce + accessModes: + - ReadWriteOnce + emptyDir: false + mountPath: /gallery + name: piwigo-gallery-volume + size: 1Gi + storageClass: standard + cronjobs: [] + addons: + - displayName: MySQL + env: [] + icon: /img/addons/mysql.svg + id: kubero-operator + kind: KuberoMysql + resourceDefinitions: + KuberoMysql: + apiVersion: application.kubero.dev/v1alpha1 + kind: KuberoMysql + metadata: + name: piwigo-mysql + spec: + mysql: + auth: + createDatabase: true + database: piwigo + password: piwigo + rootPassword: piwigo + username: piwigo + global: + storageClass: standard + primary: + persistence: + accessModes: + - ReadWriteOnce + size: 1Gi + version: + latest: 0.1.5 + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: "80" + pullPolicy: Always + repository: lscr.io/linuxserver/piwigo + tag: latest diff --git a/services/qdrant/app.yaml b/services/qdrant/app.yaml new file mode 100644 index 00000000..08c4ff4a --- /dev/null +++ b/services/qdrant/app.yaml @@ -0,0 +1,41 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: qdrant + annotations: + kubero.dev/template.architecture: "[]" + kubero.dev/template.description: "High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud" + kubero.dev/template.icon: "https://avatars.githubusercontent.com/u/73504361" + kubero.dev/template.installation: "" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: "[]" + kubero.dev/template.source: "https://github.com/qdrant/qdrant" + kubero.dev/template.categories: '["database"]' + kubero.dev/template.title: "qdrant" + kubero.dev/template.website: "https://qdrant.tech/" + labels: + manager: kubero +spec: + name: qdrant + deploymentstrategy: docker + envVars: [] + extraVolumes: + - accessMode: ReadWriteOnce + accessModes: + - ReadWriteOnce + emptyDir: false + mountPath: /qdrant/storage + name: qdrant-volume + size: 1Gi + storageClass: standard + cronjobs: [] + addons: [] + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: "6333" + pullPolicy: Always + repository: qdrant/qdrant + tag: latest diff --git a/services/searxng/app.yaml b/services/searxng/app.yaml new file mode 100644 index 00000000..875740ec --- /dev/null +++ b/services/searxng/app.yaml @@ -0,0 +1,45 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: searxng + annotations: + kubero.dev/template.architecture: '["linux/amd64", "linux/arm64", "linux/arm/v7"]' + kubero.dev/template.description: "SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled." + kubero.dev/template.icon: "https://avatars.githubusercontent.com/u/80454229" + kubero.dev/template.installation: "" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: "[]" + kubero.dev/template.source: "https://github.com/searxng/searxng" + kubero.dev/template.categories: '["utility"]' + kubero.dev/template.title: "searxng" + kubero.dev/template.website: "https://docs.searxng.org/" + labels: + manager: kubero +spec: + name: searxng + deploymentstrategy: docker + envVars: + - name: BASE_URL + value: https://searxng.localhost/ + - name: INSTANCE_NAME + value: example + extraVolumes: + - accessMode: ReadWriteOnce + accessModes: + - ReadWriteOnce + emptyDir: false + mountPath: /etc/searxng + name: searxng-volume + size: 1Gi + storageClass: standard + cronjobs: [] + addons: [] + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: 8080 + pullPolicy: Always + repository: searxng/searxng + tag: latest diff --git a/services/trailbase/app.yaml b/services/trailbase/app.yaml new file mode 100644 index 00000000..af1cfb96 --- /dev/null +++ b/services/trailbase/app.yaml @@ -0,0 +1,33 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: trailbase + annotations: + kubero.dev/template.architecture: '["linux/amd64"]' + kubero.dev/template.description: "A fast, open-source application server with type-safe APIs, including an admin interface." + kubero.dev/template.icon: "https://avatars.githubusercontent.com/u/176172021" + kubero.dev/template.installation: "" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: "[]" + kubero.dev/template.source: "https://github.com/trailbaseio/trailbase" + kubero.dev/template.categories: '["devtool", "utility"]' + kubero.dev/template.title: "Trailbase" + kubero.dev/template.website: "https://www.trailbase.io/" + labels: + manager: kubero +spec: + name: trailbase + deploymentstrategy: docker + envVars: [] + extraVolumes: [] + cronjobs: [] + addons: [] + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: "4000" + pullPolicy: Always + repository: trailbase/trailbase + tag: latest diff --git a/services/workout-tracker/app.yaml b/services/workout-tracker/app.yaml new file mode 100644 index 00000000..59f45eec --- /dev/null +++ b/services/workout-tracker/app.yaml @@ -0,0 +1,47 @@ +apiVersion: application.kubero.dev/v1alpha1 +kind: KuberoApp +metadata: + name: workout-tracker + annotations: + kubero.dev/template.architecture: "[]" + kubero.dev/template.description: "A workout tracking web application for personal use (or family, friends), geared towards running and other GPX-based activities" + kubero.dev/template.icon: "https://github.com/cristianmarint/MotionGym/raw/master/docs/imgs/logo.png" + kubero.dev/template.installation: "" + kubero.dev/template.links: "[]" + kubero.dev/template.screenshots: "[]" + kubero.dev/template.source: "https://github.com/jovandeginste/workout-tracker" + kubero.dev/template.categories: "[]" + kubero.dev/template.title: "Workout Tracker" + kubero.dev/template.website: "https://github.com/jovandeginste/workout-tracker" + labels: + manager: kubero +spec: + name: workout-tracker + deploymentstrategy: docker + envVars: + - name: WT_JWT_ENCRYPTION_KEY + value: random32 + - name: WT_REGISTRATION_DISABLED + value: "false" + - name: WT_SOCIALS_DISABLED + value: "false" + extraVolumes: + - accessMode: ReadWriteOnce + accessModes: + - ReadWriteOnce + emptyDir: false + mountPath: /data + name: workout-tracker-volume + size: 1Gi + storageClass: standard + cronjobs: [] + addons: [] + web: + replicaCount: 1 + worker: + replicaCount: 0 + image: + containerPort: 8080 + pullPolicy: Always + repository: ghcr.io/jovandeginste/workout-tracker + tag: latest