{"id":17006863,"url":"https://github.com/malaskowski/aet-helm","last_synced_at":"2026-04-13T22:03:02.065Z","repository":{"id":46336402,"uuid":"386672672","full_name":"malaskowski/aet-helm","owner":"malaskowski","description":"This chart bootstraps an AET deployment on a Kubernetes cluster using the Helm package manager.","archived":false,"fork":false,"pushed_at":"2023-03-13T21:50:37.000Z","size":104,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-22T11:48:11.357Z","etag":null,"topics":["aet","hacktoberfest","helm","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"Smarty","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/malaskowski.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-16T14:53:36.000Z","updated_at":"2021-10-30T11:35:47.000Z","dependencies_parsed_at":"2024-11-28T21:51:03.737Z","dependency_job_id":null,"html_url":"https://github.com/malaskowski/aet-helm","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/malaskowski/aet-helm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-helm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-helm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-helm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-helm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/malaskowski","download_url":"https://codeload.github.com/malaskowski/aet-helm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/malaskowski%2Faet-helm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31772642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T20:17:16.280Z","status":"ssl_error","status_checked_at":"2026-04-13T20:17:08.216Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aet","hacktoberfest","helm","kubernetes"],"created_at":"2024-10-14T05:23:51.254Z","updated_at":"2026-04-13T22:03:02.049Z","avatar_url":"https://github.com/malaskowski.png","language":"Smarty","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AET Helm chart\n![Version: 0.5.0](https://img.shields.io/badge/Version-0.5.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 3.3.0](https://img.shields.io/badge/AppVersion-3.3.0-informational?style=flat-square)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/malaskowski/aet-helm/main/misc/aet-helm.png\" alt=\"AET Helm Logo\"/\u003e\n\u003c/p\u003e\n\nThis chart bootstraps an [AET](https://github.com/wttech/aet) deployment on a [Kubernetes](http://kubernetes.io/) cluster using the [Helm](https://helm.sh/) package manager.\n\n[AET](https://github.com/wttech/aet) is a system that detects visual changes on web sites and performs basic page health checks.\n\n## TL;DR\n```\nhelm repo add aet-chart https://malaskowski.github.io/aet-helm\nhelm install --set ingress.enabled=true my-aet aet-chart/aet -n aet --create-namespace\n```\n\n## Prerequisites\n- Kubernetes cluster with at least 8 GB ram and 2 CPU to run basic AET configuration\n- Helm 3.6+\n- Add Helm repository with `helm repo add aet-chart https://malaskowski.github.io/aet-helm`\n\n## Installing the Chart\nTo instal the chart with the release name `my-aet` using existing domain that points to your Kubernetes cluster, run:\n```\nhelm install --set ingress.enabled=true --set ingress.host=my-aet-domain.com my-aet aet-chart/aet -n aet --create-namespace\n```\n\nThis command deploys AET on Kubernetes cluster with the default configuration using `aet` namespace.\nThe [Parameters](#parameters) section lists the parameters that can be configured.\n\n\u003e Tip: If you wish to run AET on local k8s cluster (e.g. Docker Desktop) you may want to use default provided Ingress.\n\u003e In that case run:\n\u003e ```\n\u003e helm install --set ingress.enabled=true local aet-chart/aet -n aet --create-namespace\n\u003e ```\n\u003e\n\u003e Your AET instance domain should be `http://aet-127.0.0.1.nip.io/`.\n\u003e\n\u003e You may use `watch -n 1 kubectl get all,ingress --namespace aet` command to watch progress of your instance setup.\n\u003e When all pods are in state `Running` you may start using your instance (it usually takes about 2-3 minutes from the start).\n\n## Uninstalling the Chart\nTo uninstall/delete the my-aet deployment:\n```\nhelm uninstall my-aet -n aet\n```\n\nThe command removes all the Kubernetes components associated with the chart and deletes the release.\n\n## Parameters\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| activemq.image.repository | string | `\"malaskowski/aet_activemq\"` | image repository for ActiveMQ |\n| activemq.image.tag | string | `nil` | ActiveMQ image tag, overrides `aetDockerTag` |\n| activemq.livenessProbe.enabled | bool | `true` | enables ActiveMQ pods liveness probe |\n| activemq.livenessProbe.failureThreshold | int | `6` |  |\n| activemq.livenessProbe.initialDelaySeconds | int | `120` |  |\n| activemq.livenessProbe.periodSeconds | int | `30` |  |\n| activemq.livenessProbe.successThreshold | int | `1` |  |\n| activemq.livenessProbe.timeoutSeconds | int | `5` |  |\n| activemq.ports.adminPanelPort | int | `8161` | Port ActiveMQ admin panel will be exposed at |\n| activemq.ports.brokerServicePort | int | `61616` | Port at which ActiveMQ exposes its broker service |\n| activemq.ports.jmxPort | int | `11199` | Port at which ActiveMQ exposes JMX that is used to purge queues |\n| activemq.readinessProbe.enabled | bool | `true` | enables ActiveMQ pods readiness probe |\n| activemq.readinessProbe.failureThreshold | int | `6` |  |\n| activemq.readinessProbe.initialDelaySeconds | int | `60` |  |\n| activemq.readinessProbe.periodSeconds | int | `10` |  |\n| activemq.readinessProbe.successThreshold | int | `1` |  |\n| activemq.readinessProbe.timeoutSeconds | int | `5` |  |\n| activemq.resources.limits.cpu | string | `\"250m\"` | ActiveMQ limits cpu resources |\n| activemq.resources.limits.memory | string | `\"250Mi\"` | ActiveMQ limits memory resources |\n| activemq.resources.requests.cpu | string | `\"100m\"` | ActiveMQ request cpu resources |\n| activemq.resources.requests.memory | string | `\"120Mi\"` | ActiveMQ request memory resources |\n| aetDockerTag | string | `\"1.2.0\"` | default version of AET images used to run the instance |\n| browsermob.image.repository | string | `\"malaskowski/aet_browsermob\"` | image repository for Browsermob Proxy |\n| browsermob.image.tag | string | `nil` | Browsermob image tag, overrides `aetDockerTag` |\n| browsermob.livenessProbe.enabled | bool | `true` | enables Browsermob pods liveness probe |\n| browsermob.livenessProbe.failureThreshold | int | `6` |  |\n| browsermob.livenessProbe.initialDelaySeconds | int | `60` |  |\n| browsermob.livenessProbe.periodSeconds | int | `30` |  |\n| browsermob.livenessProbe.successThreshold | int | `1` |  |\n| browsermob.livenessProbe.timeoutSeconds | int | `5` |  |\n| browsermob.ports.apiPort | int | `8080` | Port with Browsermob API exposed |\n| browsermob.proxyBasePort | int | `8281` | Base port for the proxy range to start |\n| browsermob.proxySize | int | `50` | Size of the proxy, when proxyBasePort is 8281 and size set to 50, proxy will use ports range 8281-8330 |\n| browsermob.readinessProbe.enabled | bool | `true` | enables Browsermob pods readiness probe |\n| browsermob.readinessProbe.failureThreshold | int | `6` |  |\n| browsermob.readinessProbe.initialDelaySeconds | int | `30` |  |\n| browsermob.readinessProbe.periodSeconds | int | `10` |  |\n| browsermob.readinessProbe.successThreshold | int | `1` |  |\n| browsermob.readinessProbe.timeoutSeconds | int | `5` |  |\n| browsermob.resources.limits.cpu | string | `\"500m\"` | Browsermob limits cpu resources |\n| browsermob.resources.limits.memory | string | `\"300Mi\"` | Browsermob limits memory resources |\n| browsermob.resources.requests.cpu | string | `\"100m\"` | Browsermob request cpu resources |\n| browsermob.resources.requests.memory | string | `\"200Mi\"` | Browsermob request memory resources |\n| ingress.annotations | object | `{\"kubernetes.io/ingress.class\":\"nginx\"}` | ingress annotations |\n| ingress.enabled | bool | `false` | enables ingress |\n| ingress.host | string | `\"\"` | ingress's spec rules host, supersedes `localDnsMapping` |\n| ingress.localDnsMapping | string | `\"aet-127.0.0.1.nip.io\"` | if `host` is not set, this value will be used as ingress's spec rules host - use e.g. nip.io to have a working alias for your instance |\n| karaf.configs.cleaner.dryRun | bool | `false` |  |\n| karaf.configs.cleaner.keepNVersions | int | `150` |  |\n| karaf.configs.cleaner.removeOlderThan | int | `4` |  |\n| karaf.configs.cleaner.schedule | string | `\"0 0 22 ? * *\"` |  |\n| karaf.configs.database.allowAutoCreate | bool | `true` | allows creating new databases by AET (no need to create them manually first, including indexes) |\n| karaf.configs.externalSeleniumHubUrl | string | `\"\"` | configures external Selenium Hub url including port (e.g. `http://\u003c\u003cSelenium-Hub-DNS\u003e\u003e:4444` ) |\n| karaf.configs.runner.ft | int | `120` | Time in seconds, after which suite processing will be interrupted if no notification was received in duration of this parameter. That means if Runner will be not updated by any collection or comparison result in that time it will decide to force stop suite processing. |\n| karaf.configs.runner.maxConcurrentSuitesCount | int | `2` | Defines the maximum number of suites processed concurrently byt the Runner. If more suites will come to the system, they will be scheduled for later processing. |\n| karaf.configs.runner.maxMessagesInCollectorQueue | int | `4` | Defines the maximum amount of messages in the collector queue. This should be equal the total number of browser sessions provided by Selenium Grid and collector instances. |\n| karaf.configs.runner.mttl | int | `300` | Time in seconds after which messages will be thrown out of queues. |\n| karaf.configs.runner.urlPackageSize | int | `1` | Defines how many urls are being sent in one message. Do not change this value unless you are absolutly certain you know what you do :). |\n| karaf.configs.seleniumChromeOptions | list | `[\"--disable-plugins\",\"--headless\",\"--hide-scrollbars\",\"--disable-gpu\",\"start-maximized\",\"enable-automation\",\"--no-sandbox\",\"--disable-infobars\",\"--disable-dev-shm-usage\",\"--disable-browser-side-navigation\",\"--dns-prefetch-disable\"]` | list of Chrome capabilities that are passed to Selenium while requesting a browser |\n| karaf.configs.workers.collectorInstancesNo | int | `4` |  |\n| karaf.configs.workers.collectorPrefetchSize | int | `1` |  |\n| karaf.configs.workers.comparatorInstancesNo | int | `5` |  |\n| karaf.configs.workers.comparatorPrefetchSize | int | `1` |  |\n| karaf.env.javaMaxMem | string | `\"2048m\"` |  |\n| karaf.image.repository | string | `\"malaskowski/aet_karaf\"` | image repository for Apache Karaf |\n| karaf.image.tag | string | `nil` | Karaf image tag, overrides `aetDockerTag`, use '-arm64' tags when running on Apple Silicon processors |\n| karaf.initContainers.initTimeoutSeconds | int | `120` | time after which init checks for hub, mongo and activemq will timeout if not found in network |\n| karaf.initContainers.waitForActivemq | bool | `true` | enables waiting for ActiveMq to be available before running the main Karaf conainer |\n| karaf.initContainers.waitForHub | bool | `true` | enables waiting for Selenium Grid Hub to be available before running the main Karaf conainer |\n| karaf.initContainers.waitForMongo | bool | `true` | enables waiting for MongoDB to be available before running the main Karaf conainer |\n| karaf.livenessProbe.enabled | bool | `true` | enables Karaf pods liveness probe |\n| karaf.livenessProbe.failureThreshold | int | `6` |  |\n| karaf.livenessProbe.initialDelaySeconds | int | `120` |  |\n| karaf.livenessProbe.periodSeconds | int | `30` |  |\n| karaf.livenessProbe.successThreshold | int | `1` |  |\n| karaf.livenessProbe.timeoutSeconds | int | `5` |  |\n| karaf.ports.osgi | int | `8181` | Port with Karaf console and endpoints |\n| karaf.readinessProbe.enabled | bool | `true` | enables Karaf pods readiness probe |\n| karaf.readinessProbe.failureThreshold | int | `6` |  |\n| karaf.readinessProbe.initialDelaySeconds | int | `120` |  |\n| karaf.readinessProbe.periodSeconds | int | `10` |  |\n| karaf.readinessProbe.successThreshold | int | `1` |  |\n| karaf.readinessProbe.timeoutSeconds | int | `5` |  |\n| karaf.resources.limits.cpu | string | `\"1000m\"` | Karaf limits cpu resources |\n| karaf.resources.limits.memory | string | `\"2000Mi\"` | Karaf limits memory resources |\n| karaf.resources.requests.cpu | string | `\"750m\"` | Karaf request cpu resources |\n| karaf.resources.requests.memory | string | `\"1500Mi\"` | Karaf request memory resources |\n| mongodb.arbiter.enabled | bool | `false` |  |\n| mongodb.architecture | string | `\"standalone\"` |  |\n| mongodb.auth.enabled | bool | `false` |  |\n| mongodb.image.tag | string | `\"3.6\"` |  |\n| mongodb.labels.\"app.kubernetes.io/component\" | string | `\"database\"` |  |\n| mongodb.labels.\"app.kubernetes.io/instance\" | string | `\"mongodb-aet\"` |  |\n| mongodb.labels.\"app.kubernetes.io/managed-by\" | string | `\"kubectl\"` |  |\n| mongodb.labels.\"app.kubernetes.io/name\" | string | `\"mongodb\"` |  |\n| mongodb.labels.\"app.kubernetes.io/part-of\" | string | `\"aet\"` |  |\n| mongodb.labels.\"app.kubernetes.io/version\" | string | `\"3.6\"` |  |\n| mongodb.persistence.size | string | `\"2Gi\"` |  |\n| mongodb.resources.limits.cpu | string | `\"1000m\"` |  |\n| mongodb.resources.limits.memory | string | `\"2Gi\"` |  |\n| mongodb.resources.requests.cpu | string | `\"500m\"` |  |\n| mongodb.resources.requests.memory | string | `\"512Mi\"` |  |\n| mongodb.service.port | int | `27017` |  |\n| mongodb.strategyType | string | `\"RollingUpdate\"` |  |\n| mongodb.useStatefulSet | bool | `true` |  |\n| report.image.repository | string | `\"malaskowski/aet_report\"` | image repository for Reports |\n| report.image.tag | string | `nil` | Reports image tag, overrides `aetDockerTag` |\n| report.livenessProbe.enabled | bool | `true` | enables Reports pods liveness probe |\n| report.livenessProbe.failureThreshold | int | `2` |  |\n| report.livenessProbe.initialDelaySeconds | int | `15` |  |\n| report.livenessProbe.periodSeconds | int | `30` |  |\n| report.livenessProbe.successThreshold | int | `1` |  |\n| report.livenessProbe.timeoutSeconds | int | `1` |  |\n| report.ports.service | int | `80` | Port Reports will be served at |\n| report.readinessProbe.enabled | bool | `true` | enables Reports pods readiness probe |\n| report.readinessProbe.failureThreshold | int | `2` |  |\n| report.readinessProbe.initialDelaySeconds | int | `15` |  |\n| report.readinessProbe.periodSeconds | int | `10` |  |\n| report.readinessProbe.successThreshold | int | `1` |  |\n| report.readinessProbe.timeoutSeconds | int | `1` |  |\n| report.resources.limits.cpu | string | `\"100m\"` | Reports limits cpu resources |\n| report.resources.limits.memory | string | `\"100Mi\"` | Reports limits memory resources |\n| report.resources.requests.cpu | string | `\"50m\"` | Reports request cpu resources |\n| report.resources.requests.memory | string | `\"50Mi\"` | Reports request memory resources |\n| sgrid.chrome.configs.maxInstancesPerNode | int | `1` | number of instances of same version of browser that can run in node |\n| sgrid.chrome.configs.maxSessionsPerNode | int | `1` | number of browsers (Any browser and version) that can run in parallel at a time in node, overrides max instances settings by restricting the number of browser instances that can run in parallel |\n| sgrid.chrome.image.repository | string | `\"selenium/node-chrome\"` |  |\n| sgrid.chrome.image.tag | string | `\"3.14.0-arsenic\"` |  |\n| sgrid.chrome.livenessProbe.enabled | bool | `true` | enables Selenium Grid Node pods liveness probe |\n| sgrid.chrome.livenessProbe.failureThreshold | int | `2` |  |\n| sgrid.chrome.livenessProbe.initialDelaySeconds | int | `30` |  |\n| sgrid.chrome.livenessProbe.periodSeconds | int | `30` |  |\n| sgrid.chrome.livenessProbe.successThreshold | int | `1` |  |\n| sgrid.chrome.livenessProbe.timeoutSeconds | int | `5` |  |\n| sgrid.chrome.readinessProbe.enabled | bool | `true` | enables Selenium Grid Node pods readiness probe |\n| sgrid.chrome.readinessProbe.failureThreshold | int | `2` |  |\n| sgrid.chrome.readinessProbe.initialDelaySeconds | int | `30` |  |\n| sgrid.chrome.readinessProbe.periodSeconds | int | `30` |  |\n| sgrid.chrome.readinessProbe.successThreshold | int | `1` |  |\n| sgrid.chrome.readinessProbe.timeoutSeconds | int | `5` |  |\n| sgrid.chrome.replicas | int | `4` | configure number of replicas of chrome replicas |\n| sgrid.chrome.resources.limits.cpu | string | `\"750m\"` | Selenium Grid Node limits cpu resources |\n| sgrid.chrome.resources.limits.memory | string | `\"1250Mi\"` | Selenium Grid Node limits memory resources |\n| sgrid.chrome.resources.requests.cpu | string | `\"250m\"` | Selenium Grid Node request cpu resources |\n| sgrid.chrome.resources.requests.memory | string | `\"500Mi\"` | Selenium Grid Node request memory resources |\n| sgrid.enabled | bool | `true` | enables Selenium Grid |\n| sgrid.hub.image.repository | string | `\"selenium/hub\"` |  |\n| sgrid.hub.image.tag | string | `\"3.14.0-arsenic\"` |  |\n| sgrid.hub.livenessProbe.enabled | bool | `true` | enables Selenium Grid Hub pods liveness probe |\n| sgrid.hub.livenessProbe.failureThreshold | int | `6` |  |\n| sgrid.hub.livenessProbe.initialDelaySeconds | int | `30` |  |\n| sgrid.hub.livenessProbe.periodSeconds | int | `30` |  |\n| sgrid.hub.livenessProbe.successThreshold | int | `1` |  |\n| sgrid.hub.livenessProbe.timeoutSeconds | int | `5` |  |\n| sgrid.hub.ports.service | int | `4444` | Port Selenium Grid Hub will be served at |\n| sgrid.hub.readinessProbe.enabled | bool | `true` | enables Selenium Grid Hub pods readiness probe |\n| sgrid.hub.readinessProbe.failureThreshold | int | `6` |  |\n| sgrid.hub.readinessProbe.initialDelaySeconds | int | `15` |  |\n| sgrid.hub.readinessProbe.periodSeconds | int | `10` |  |\n| sgrid.hub.readinessProbe.successThreshold | int | `1` |  |\n| sgrid.hub.readinessProbe.timeoutSeconds | int | `5` |  |\n| sgrid.hub.resources.limits.cpu | string | `\"800m\"` | Selenium Grid Hub limits cpu resources |\n| sgrid.hub.resources.limits.memory | string | `\"1250Mi\"` | Selenium Grid Hub limits memory resources |\n| sgrid.hub.resources.requests.cpu | string | `\"200m\"` | Selenium Grid Hub request cpu resources |\n| sgrid.hub.resources.requests.memory | string | `\"750Mi\"` | Selenium Grid Hub request memory resources |\n\n## Requirements\n\n| Repository | Name | Version |\n|------------|------|---------|\n| https://raw.githubusercontent.com/bitnami/charts/pre-2022/bitnami | mongodb | 10.20.0 |\n\nThis chart depends on [Bitnami MongoDB chart](https://github.com/bitnami/charts/tree/master/bitnami/mongodb).\nBy default settings of this chart, MongoDB runs in `standalone` mode as Statefull Set and RollingUpdate.\n\n## Development\n\n\u003e If you are using default ingress, you should install NginX ingress controller first. Use this [tutorial](https://kubernetes.github.io/ingress-nginx/deploy/).\n\n1. Checkout repo and change directory to `charts/aet`\n2. Build dependencies: `helm dependency build`\n3. Install AET (locally): `helm install --set ingress.enabled=true local . -n aet --create-namespace`\n\nYour AET instance domain should be `http://aet-127.0.0.1.nip.io/`\n\n## Improvements (help wanted)\n- [ ] prepare guide on how to install it on AWS/Azure/GCP","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalaskowski%2Faet-helm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmalaskowski%2Faet-helm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmalaskowski%2Faet-helm/lists"}