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