{"id":22394077,"url":"https://github.com/flant/helm-apps","last_synced_at":"2025-03-26T22:41:04.405Z","repository":{"id":59401172,"uuid":"529277496","full_name":"flant/helm-apps","owner":"flant","description":null,"archived":false,"fork":false,"pushed_at":"2023-10-05T14:40:22.000Z","size":134,"stargazers_count":23,"open_issues_count":5,"forks_count":3,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-23T01:02:44.294Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/flant.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2022-08-26T13:53:46.000Z","updated_at":"2024-09-24T18:02:32.000Z","dependencies_parsed_at":"2025-02-01T04:23:27.558Z","dependency_job_id":"f43381d5-5017-48ae-8c93-5a4dcf0e4ef1","html_url":"https://github.com/flant/helm-apps","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flant%2Fhelm-apps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flant%2Fhelm-apps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flant%2Fhelm-apps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flant%2Fhelm-apps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flant","download_url":"https://codeload.github.com/flant/helm-apps/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245749795,"owners_count":20666084,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-12-05T05:08:53.458Z","updated_at":"2025-03-26T22:41:04.378Z","avatar_url":"https://github.com/flant.png","language":"Smarty","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Репозиторий библиотеки для развертывания приложений в Kubernetes.\n1. Позволяет:\n   *  упростить структуру описания приложения.\n   *  переиспользовать шаблоны одного приложения для множества других\n2. Ускоряет:\n   * процесс ревью изменений приложения за счет стандартизирования подхода и уменьшению количества кода.\n   * развертывание новых приложений за счет лаконичного синтаксиса, сокращения повторяемого кода\n   * редактирование и добавление новых ресурсов к приложению\n3. Упрощает:\n   * работу с сущностями Kubernetes (не нужно описывать все поля приложения, не нужно думать как правильно выглядит конструкции сущностей).\n   * связывание сущностей Kubernetes за счет использования хелперов\n\n\u003e  :warning: **На данный момент корректная работа чартов гарантируется только с утилитой** [**Werf**](https://werf.io)\n\n## Для подключения библиотеки необходимо:\n### Инструкция по использованию\n#### Использовать пример:\n* Скопировать содержимое папки [docs/example](/docs/example) в корень нового проекта\n* настроить файлы под свой проект\n#### Вручную:\n* Добавить в .gitlab-ci.yml строку подключения библиотеки общих чартов\n  ```bash\n     werf helm repo add --force-update  helm-apps https://flant.github.io/helm-apps\n  ```\n  + к примеру так:\n    ```yaml\n    before_script:\n    - type trdl \u0026\u0026 source $(trdl use werf ${WERF_VERSION:-1.2 ea})\n    - type werf \u0026\u0026 source $(werf ci-env gitlab --as-file)\n    - werf helm repo add --force-update  helm-apps https://flant.github.io/helm-apps\n    ```\n    у себя на компьютере добавляем репозиторий helm-apps:\n    ```yaml\n    werf helm repo add --force-update  helm-apps https://flant.github.io/helm-apps\n    ```\n    и обновляем зависимости:\n    ```yaml\n    werf helm dependency update .helm\n    ```\n* Добавить в папку .helm/templates файл [init-helm-apps.yaml](tests/.helm/templates/init-helm-apps.yaml) для инициализаци библиотеки, содержимое файла:\n  ```yaml\n    {{- /* Подключаем библиотеку */}}\n    {{- include \"apps-utils.init-library\" $ }}\n  ```\n* В Chart.yaml в секцию **dependencies**:\n  ```yaml\n  apiVersion: v2\n  name: test-app\n  version: 1.0.0\n  dependencies:\n  - name: helm-apps\n    version: ~1\n    repository: \"@helm-apps\"\n  ```\n* В [values.yaml](docs/example/.helm/values.yaml) отредактировать секцию global._includes с параметрами по умолчанию для хелперов.\n\nНа данный момент актуальная документация находится в файле  [tests/.helm/values.yaml](tests/.helm/values.yaml). Ведется дополнительная работа над созданием расширенной версии документации.\n\n[О хелперах]( docs/usage.md)\n\n## Пример простейшего деплоймента Nginx на библиотеке:\n\u003cdetails\u003e\n\u003csummary\u003evalues.yaml секция приложений\u003c/summary\u003e\n\n```yaml\nglobal:\n  ci_url: example.com\n# ...\napps-stateless:\n  # Приложение из примера в документации\n  nginx:\n    _include: [\"apps-stateless-defaultApp\"]\n    replicas: 1\n    containers:\n      nginx:\n        image:\n          name: nginx\n        ports: |\n          - name: http\n            containerPort: 80\n        configFiles:\n          default.conf:\n            mountPath: /etc/nginx/templates/default.conf.template\n            content: |\n              server {\n                listen         80 default_server;\n                listen         [::]:80 default_server;\n                server_name    {{ $.Values.global.ci_url }} {{ $.Values.global.ci_url }};\n                root           /var/www/{{ $.Values.global.ci_url }};\n                index          index.html;\n                try_files $uri /index.html;\n                location / {\n                  proxy_set_header Authorization \"Bearer ${SECRET_TOKEN}\";\n                  proxy_pass_header Authorization;\n                  proxy_pass https://backend:3000;\n                }\n              }\n        secretEnvVars:\n          SECRET_TOKEN: \"!!!secret-token-for-backend!!!\"\n    service:\n      enabled: true\n      ports: |\n        - name: http\n          port: 80\n\napps-ingresses:\n  nginx:\n    _include: [\"apps-ingresses-defaultIngress\"]\n    host:  '{{ $.Values.global.ci_url }}'\n    paths: |\n      - path: /\n        pathType: Prefix\n        backend:\n          service:\n            name: nginx\n            port:\n              number: 80\n    tls:\n      enabled: true\n```\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eСгенерирует следующее...\u003c/summary\u003e\n\n```yaml\n# Helm Apps Library: apps-stateless.nginx.podDisruptionBudget\napiVersion: policy/v1beta1\nkind: PodDisruptionBudget\nmetadata:\n  name: \"nginx\"\n  labels:\n    app: \"nginx\"\n    chart: \"tests\"\n    repo: \"\"\n  annotations:\n    project.werf.io/env: \"\"\n    project.werf.io/name: test\n    werf.io/version: v1.2.162\nspec:\n  selector:\n    matchLabels:\n      app: \"nginx\"\n  maxUnavailable: \"15%\"\n---\n# Helm Apps Library: apps-stateless.nginx.containers.nginx.secretEnvVars\napiVersion: v1\nkind: Secret\nmetadata:\n  name: \"envs-containers-nginx-nginx\"\n  labels:\n    app: \"nginx\"\n    chart: \"tests\"\n    repo: \"\"\n  annotations:\n    project.werf.io/env: \"\"\n    project.werf.io/name: test\n    werf.io/version: v1.2.162\ntype: Opaque\ndata:\n  \"SECRET_TOKEN\": \"ISEhc2VjcmV0LXRva2VuLWZvci1iYWNrZW5kISEh\"\n---\n# Helm Apps Library: apps-stateless.nginx.containers.nginx.configFiles.default.conf\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: \"config-containers-nginx-nginx-default-conf\"\n  labels:\n    app: \"nginx\"\n    chart: \"tests\"\n    repo: \"\"\n  annotations:\n    project.werf.io/env: \"\"\n    project.werf.io/name: test\n    werf.io/version: v1.2.162\ndata:\n  \"default.conf\": |\n    server {\n      listen         80 default_server;\n      listen         [::]:80 default_server;\n      server_name    example.com example.com;\n      root           /var/www/example.com;\n      index          index.html;\n      try_files $uri /index.html;\n      location / {\n        proxy_set_header Authorization \"Bearer ${SECRET_TOKEN}\";\n        proxy_pass_header Authorization;\n        proxy_pass https://backend:3000;\n      }\n    }\n---\n# Helm Apps Library: apps-stateless.nginx.service\napiVersion: v1\nkind: Service\nmetadata:\n  name: \"nginx\"\n  labels:\n    app: \"nginx\"\n    chart: \"tests\"\n    repo: \"\"\n  annotations:\n    project.werf.io/env: \"\"\n    project.werf.io/name: test\n    werf.io/version: v1.2.162\nspec:\n  selector:\n    app: \"nginx\"\n  ports:\n    - name: http\n      port: 80\n---\n# Source: tests/templates/init-flant-apps-library.yaml\n# Helm Apps Library: apps-stateless.nginx\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: \"nginx\"\n  annotations:\n    checksum/config: \"19812d5210967fd69097dc991263af171c4071ebb455357bd49be2a0ca05acdd\"\n    project.werf.io/env: \"\"\n    project.werf.io/name: test\n    werf.io/version: v1.2.162\n  labels:\n    app: \"nginx\"\n    chart: \"tests\"\n    repo: \"\"\nspec:\n  strategy:\n    rollingUpdate:\n      maxSurge: 20%\n      maxUnavailable: 50%\n    type: RollingUpdate\n  template:\n    metadata:\n      name: \"nginx\"\n      annotations:\n        checksum/config: \"19812d5210967fd69097dc991263af171c4071ebb455357bd49be2a0ca05acdd\"\n      labels:\n        app: \"nginx\"\n        chart: \"tests\"\n        repo: \"\"\n    spec:\n      containers:\n        - name: \"nginx\"\n          image: REPO:TAG\n          envFrom:\n            - secretRef:\n                name: \"envs-containers-nginx-nginx\"\n          resources:\n          volumeMounts:\n            - name: \"config-containers-nginx-nginx-default-conf\"\n              subPath: \"default.conf\"\n              mountPath: \"/etc/nginx/templates/default.conf.template\"\n          ports:\n            - name: http\n              containerPort: 80\n      imagePullSecrets:\n        - name: registrysecret\n      volumes:\n        - name: \"config-containers-nginx-nginx-default-conf\"\n          configMap:\n            name: \"config-containers-nginx-nginx-default-conf\"\n  selector:\n    matchLabels:\n      app: \"nginx\"\n  revisionHistoryLimit: 3\n  replicas: 1\n---\n# Source: tests/templates/init-flant-apps-library.yaml\n# Helm Apps Library: apps-ingresses.nginx\napiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n  name: \"nginx\"\n  annotations:\n    kubernetes.io/ingress.class: \"nginx\"\n    project.werf.io/env: \"\"\n    project.werf.io/name: test\n    werf.io/version: v1.2.162\n  labels:\n    app: \"nginx\"\n    chart: \"tests\"\n    repo: \"\"\nspec:\n  tls:\n    - secretName: nginx\n  rules:\n    - host: \"example.com\"\n      http:\n        paths:\n          - path: /\n            pathType: Prefix\n            backend:\n              service:\n                name: nginx\n                port:\n                  number: 80\n---\n# Helm Apps Library: apps-ingresses.nginx.tls\napiVersion: cert-manager.io/v1\nkind: Certificate\nmetadata:\n  name: nginx\n  annotations:\n    project.werf.io/env: \"\"\n    project.werf.io/name: test\n    werf.io/version: v1.2.162\nspec:\n  secretName: nginx\n  issuerRef:\n    kind: ClusterIssuer\n    name: letsencrypt\n  dnsNames:\n    - \"example.com\"\n---\n# Helm Apps Library: apps-stateless.nginx.verticalPodAutoscaler\napiVersion: autoscaling.k8s.io/v1\nkind: VerticalPodAutoscaler\nmetadata:\n  name: \"nginx\"\n  labels:\n    app: \"nginx\"\n    chart: \"tests\"\n    repo: \"\"\n  annotations:\n    project.werf.io/env: \"\"\n    project.werf.io/name: test\n    werf.io/version: v1.2.162\nspec:\n  targetRef:\n    apiVersion: \"apps/v1\"\n    kind: Deployment\n    name: \"nginx\"\n  updatePolicy:\n    updateMode: \"Off\"\n  resourcePolicy: {}\n```\n\u003c/details\u003e\n\nСамостоятельно можно отрендерить следующей командой:\n\n```bash\n$ cd tests \u0026\u0026 werf render --dev --set \"apps-ingresses.nginx.enabled=true\" --set \"apps-stateless.nginx.enabled=true\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflant%2Fhelm-apps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflant%2Fhelm-apps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflant%2Fhelm-apps/lists"}