From 1ce720327fc3d1bd10bd21b6f8d5042dc202dd96 Mon Sep 17 00:00:00 2001 From: kirinnee Date: Sat, 30 Sep 2023 20:01:32 +0800 Subject: [PATCH] feat: initial commit --- .envrc | 2 + .github/dependabot.yml | 6 + .github/workflows/deployment.yaml | 31 ++ .gitignore | 8 + .gitlint | 6 + Changelog.md | 25 + README.MD | 17 + Taskfile.yml | 40 ++ atomi_release.yaml | 142 ++++++ chart/.helmignore | 23 + chart/Chart.lock | 6 + chart/Chart.yaml | 10 + chart/README.md | 28 ++ chart/charts/external-secrets-0.9.5.tgz | Bin 0 -> 82191 bytes chart/templates/NOTES.txt | 1 + chart/templates/_helpers.tpl | 75 +++ chart/templates/secret.yaml | 11 + chart/templates/secret_store.yaml | 18 + chart/values.example.yaml | 29 ++ chart/values.yaml | 99 ++++ config/dev.yaml | 3 + docs/developer/.gitkeep | 0 docs/developer/CommitConventions.md | 141 ++++++ flake.lock | 611 ++++++++++++++++++++++++ flake.nix | 70 +++ infra/k3d.lapras.yaml | 20 + nix/env.nix | 40 ++ nix/fmt.nix | 24 + nix/packages.nix | 52 ++ nix/pre-commit.nix | 98 ++++ nix/shells.nix | 18 + scripts/ci/pre-commit.sh | 5 + scripts/ci/publish.sh | 14 + scripts/ci/release.sh | 6 + scripts/local/create-k3d-cluster.sh | 47 ++ scripts/local/delete-k3d-cluster.sh | 34 ++ tasks/Taskfile.cluster.yaml | 30 ++ tasks/Taskfile.util.yaml | 10 + 38 files changed, 1800 insertions(+) create mode 100644 .envrc create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/deployment.yaml create mode 100644 .gitignore create mode 100644 .gitlint create mode 100644 Changelog.md create mode 100644 README.MD create mode 100644 Taskfile.yml create mode 100644 atomi_release.yaml create mode 100644 chart/.helmignore create mode 100644 chart/Chart.lock create mode 100644 chart/Chart.yaml create mode 100644 chart/README.md create mode 100644 chart/charts/external-secrets-0.9.5.tgz create mode 100644 chart/templates/NOTES.txt create mode 100644 chart/templates/_helpers.tpl create mode 100644 chart/templates/secret.yaml create mode 100644 chart/templates/secret_store.yaml create mode 100644 chart/values.example.yaml create mode 100644 chart/values.yaml create mode 100644 config/dev.yaml create mode 100644 docs/developer/.gitkeep create mode 100644 docs/developer/CommitConventions.md create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 infra/k3d.lapras.yaml create mode 100644 nix/env.nix create mode 100644 nix/fmt.nix create mode 100644 nix/packages.nix create mode 100644 nix/pre-commit.nix create mode 100644 nix/shells.nix create mode 100755 scripts/ci/pre-commit.sh create mode 100755 scripts/ci/publish.sh create mode 100755 scripts/ci/release.sh create mode 100755 scripts/local/create-k3d-cluster.sh create mode 100755 scripts/local/delete-k3d-cluster.sh create mode 100644 tasks/Taskfile.cluster.yaml create mode 100644 tasks/Taskfile.util.yaml diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..b819d1c --- /dev/null +++ b/.envrc @@ -0,0 +1,2 @@ +nix_direnv_watch_file "./nix/env.nix" "./nix/fmt.nix" "./nix/packages.nix" "./nix/shells.nix" "./nix/pre-commit.nix" "./flake.nix" "./parse.nix" +use flake diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..253bcb7 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily diff --git a/.github/workflows/deployment.yaml b/.github/workflows/deployment.yaml new file mode 100644 index 0000000..9385c25 --- /dev/null +++ b/.github/workflows/deployment.yaml @@ -0,0 +1,31 @@ +name: CI-CD + +on: + push: + +jobs: + precommit: + name: Pre-commit Check + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + - uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + - name: Run pre-commit + run: nix develop .#ci -c ./scripts/ci/pre-commit.sh + + release: + name: Semantic Release + needs: + - precommit + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + - uses: rlespinasse/github-slug-action@v3.x + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: nix develop .#releaser -c scripts/ci/release.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cf95946 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.direnv +.task +.pre-commit-config.yaml +.idea +.env +dist +debug.yaml +.DS_Store \ No newline at end of file diff --git a/.gitlint b/.gitlint new file mode 100644 index 0000000..96b180f --- /dev/null +++ b/.gitlint @@ -0,0 +1,6 @@ +[general] +contrib=CT1 +ignore=B6 + +[contrib-title-conventional-commits] +types = action,chore,config,docs,feat,fix,release,upstream diff --git a/Changelog.md b/Changelog.md new file mode 100644 index 0000000..7374737 --- /dev/null +++ b/Changelog.md @@ -0,0 +1,25 @@ +## [1.1.0](https://github.com/AtomiCloud/sulfoxide.chlorine/compare/v1.0.1...v1.1.0) (2023-09-30) + + +### ๐Ÿš€ New Features + +* values.yaml example ([323720f](https://github.com/AtomiCloud/sulfoxide.chlorine/commit/323720fc32f4f05d58cafe3ecaa12a7a7ec4dfdd)) + + +### ๐Ÿ› Bug Fixes + +* migrate to sulfoxide-chlorine for Chart.yaml and Taskfile.yaml ([9b3eda1](https://github.com/AtomiCloud/sulfoxide.chlorine/commit/9b3eda1524b02ae9ff2a82fcc227bb8d2f6e4b9c)) + +## [1.0.1](https://github.com/AtomiCloud/sulfoxide.chlorine/compare/v1.0.0...v1.0.1) (2023-09-27) + + +### ๐Ÿ› Bug Fixes + +* incorrect k3d configuration ([f5ecdab](https://github.com/AtomiCloud/sulfoxide.chlorine/commit/f5ecdab1de6097ee04e32afe9337feb2bd2d6821)) + +## 1.0.0 (2023-09-27) + + +### ๐Ÿš€ New Features + +* initial commit ([4bd320e](https://github.com/AtomiCloud/sulfoxide.chlorine/commit/4bd320e576c1afee2e23ab0ff6409d906ec1defd)) diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..a1ee52f --- /dev/null +++ b/README.MD @@ -0,0 +1,17 @@ +# Sulfoxide Coblat + +Helm Chart to install External Secrets, our secret operator, and SecretStore to AtomiCloud's Kubernetes Cluster + +## Prerequisites +- nix +- direnv +- docker + +## Helm Docs + +You can view the helm documentation generated at [helm-docs](./chart/README.md) +## Contributing + +Please contact contributors and read the [developer docs](./docs/developer/CommitConventions.md) for information on contributing to this project. + +- [ernest@atomi.cloud](mailto:ernest@atomi.cloud) diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..7a6722f --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,40 @@ +version: "3" + +env: + RELEASE_NAME: sulfoxide-cobalt + +includes: + util: tasks/Taskfile.util.yaml + pichu:opal: + taskfile: tasks/Taskfile.cluster.yaml + vars: + LANDSCAPE: pichu + CLUSTER: opal + +tasks: + # Utility + start:cluster: + desc: Starts the playground cluster to test helm charts + cmds: + - ./scripts/local/create-k3d-cluster.sh + + stop:cluster: + desc: Destroys the playground cluster to test helm charts + cmds: + - ./scripts/local/delete-k3d-cluster.sh + + # Helm Operations + update: + desc: Update Helm dependencies + dir: chart + cmds: + - helm dependency update + + latest: + desc: Get the latest version of External Secrets Operator + cmds: + - task: util:latest + vars: + REPO_NAME: external-secrets + REPO_URL: https://charts.external-secrets.io + CHART_NAME: external-secrets diff --git a/atomi_release.yaml b/atomi_release.yaml new file mode 100644 index 0000000..122b4f0 --- /dev/null +++ b/atomi_release.yaml @@ -0,0 +1,142 @@ +gitlint: .gitlint + +conventionMarkdown: + path: docs/developer/CommitConventions.md + template: | + --- + id: commit-conventions + title: Commit Conventions + --- + var___convention_docs___ +keywords: + - BREAKING CHANGE + - BREAKING CHANGES + - BREAKING + +branches: + - main + +specialScopes: + no-release: + desc: Prevent release from happening + release: false + +plugins: + - module: "@semantic-release/changelog" + config: + changelogFile: Changelog.md + - module: "@semantic-release/exec" + config: + prepareCmd: ./scripts/ci/publish.sh ${nextRelease.version} + - module: "@semantic-release/git" + config: + message: "release: ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" + assets: + - chart/**/*.* + - Changelog.md + - docs/developer/CommitConventions.md + - module: "semantic-release-major-tag" + config: + customTags: + - "v${major}" + - "v${major}.${minor}" + - module: "@semantic-release/github" + +# Helm +types: + - type: upstream + desc: "Changes from dependencies upstream" + section: ๐Ÿ“ฆ Upstreams Changes + scopes: + default: + desc: Generic update from upstream dependencies + release: "minor" + vae: + verb: update upstream + application: , + example: "upstream(mysql): from v5.7 to v8.0" + + - type: config + desc: "Changes to configuration files and scripts" + scopes: + default: + desc: Updates the configuration of the repository, not related to the other scopes + release: false + lint: + desc: Add, update or remove linters + release: false + fmt: + desc: Add, updatge or remove formatters + release: false + build: + desc: Add, update or change build pipelines and generators + release: false + nix: + desc: Add, update or change nix shell + release: false + env: + desc: Add, update or change environment + release: false + ignore: + desc: Add, update or change ignore configurations + release: false + ci: + desc: Add, update or change CI configuration files + release: false + vae: + verb: configure + application: <scope> to <title> + example: "config(ci): setup nix before executing" + + - type: release + desc: Initiate a release (machine initiated) + scopes: + default: + desc: Machine initiated release + release: false + + - type: docs + section: ๐Ÿ“ Documentation Updates + desc: Documentation only changes + scopes: + default: + desc: Update generic documentation file + release: false + vae: + verb: add + application: <scope> documention <title> + example: "docs(developer): on how to install dependency packages" + - type: feat + section: ๐Ÿš€ New Features + desc: A new feature + vae: + verb: add + application: <scope> <title> + example: "feat(rapid): new withdraw api" + scopes: + default: + desc: Release a new features + release: minor + - type: action + desc: Imperative action, mainly changing the values files + scopes: + default: + desc: Imperative action, mainly changing the values files + release: false + - type: fix + section: ๐Ÿ› Bug Fixes + desc: A bug fix + vae: + verb: fix + application: <title> + example: "fix(rapid): deposit api for rapid" + scopes: + default: + desc: Generic fixes + release: patch + - type: chore + desc: Menial Tasks + scopes: + default: + desc: Menial Tasks + release: false diff --git a/chart/.helmignore b/chart/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/chart/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/chart/Chart.lock b/chart/Chart.lock new file mode 100644 index 0000000..ef34c13 --- /dev/null +++ b/chart/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: external-secrets + repository: https://charts.external-secrets.io + version: 0.9.5 +digest: sha256:024c10e7d3d1b0dd9adc23bebf6b3cf12aca8b1d4d2a9b881a292c6f80bf4e54 +generated: "2023-09-30T19:26:31.766839+08:00" diff --git a/chart/Chart.yaml b/chart/Chart.yaml new file mode 100644 index 0000000..7c300ca --- /dev/null +++ b/chart/Chart.yaml @@ -0,0 +1,10 @@ +apiVersion: v2 +name: sulfoxide-cobalt +description: Helm Chart to install External Secrets, our secret operator, and SecretStore to AtomiCloud's Kubernetes Cluster +type: application +version: 1.1.0 +appVersion: "v0.9.5" +dependencies: + - name: external-secrets + version: v0.9.5 + repository: https://charts.external-secrets.io diff --git a/chart/README.md b/chart/README.md new file mode 100644 index 0000000..a130a77 --- /dev/null +++ b/chart/README.md @@ -0,0 +1,28 @@ +# sulfoxide-cobalt + +![Version: 1.1.0](https://img.shields.io/badge/Version-1.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.9.5](https://img.shields.io/badge/AppVersion-v0.9.5-informational?style=flat-square) + +Helm Chart to install External Secrets, our secret operator, and SecretStore to AtomiCloud's Kubernetes Cluster + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| https://charts.external-secrets.io | external-secrets | v0.9.5 | + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| external-secrets | object | `{"certController":{"podAnnotations":{"<<":{"atomi.cloud/layer":"1","atomi.cloud/platform":"sulfoxide","atomi.cloud/service":"chlorine"},"atomi.cloud/module":"cert-controller"},"podLabels":{"<<":{"atomi.cloud/layer":"1","atomi.cloud/platform":"sulfoxide","atomi.cloud/service":"chlorine"},"atomi.cloud/module":"cert-controller"},"podSecurityContext":{"fsGroup":1000,"runAsGroup":1000,"runAsNonRoot":true,"runAsUser":1000},"resources":{"limits":{"cpu":"200m","memory":"256Mi"},"requests":{"cpu":"50m","memory":"128Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsGroup":1000,"runAsNonRoot":true,"runAsUser":1000}},"installCRDs":true,"podAnnotations":{"<<":{"atomi.cloud/layer":"1","atomi.cloud/platform":"sulfoxide","atomi.cloud/service":"chlorine"},"atomi.cloud/module":"operator"},"podLabels":{"<<":{"atomi.cloud/layer":"1","atomi.cloud/platform":"sulfoxide","atomi.cloud/service":"chlorine"},"atomi.cloud/module":"operator"},"podSecurityContext":{"fsGroup":1000,"runAsGroup":1000,"runAsNonRoot":true,"runAsUser":1000},"resources":{"limits":{"cpu":"200m","memory":"256Mi"},"requests":{"cpu":"50m","memory":"128Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsGroup":1000,"runAsNonRoot":true,"runAsUser":1000},"serviceMonitor":{"enabled":true},"webhook":{"podAnnotations":{"<<":{"atomi.cloud/layer":"1","atomi.cloud/platform":"sulfoxide","atomi.cloud/service":"chlorine"},"atomi.cloud/module":"webhook"},"podLabels":{"<<":{"atomi.cloud/layer":"1","atomi.cloud/platform":"sulfoxide","atomi.cloud/service":"chlorine"},"atomi.cloud/module":"webhook"},"podSecurityContext":{"fsGroup":1000,"runAsGroup":1000,"runAsNonRoot":true,"runAsUser":1000},"resources":{"limits":{"cpu":"200m","memory":"256Mi"},"requests":{"cpu":"50m","memory":"128Mi"}},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsGroup":1000,"runAsNonRoot":true,"runAsUser":1000}}}` | External Secrets Configuration. See [External Secrets Operator Documentation](https://github.com/external-secrets/external-secrets/tree/main/deploy/charts/external-secrets) | +| podSecurityContext | object | `{"fsGroup":1000,"runAsGroup":1000,"runAsNonRoot":true,"runAsUser":1000}` | YAML Anchor for PodSecurityContext | +| rootToken | object | `{"key":"DOPPLER_TOKEN","value":""}` | The Root Doppler Token for deploying SecretStore | +| rootToken.key | string | `"DOPPLER_TOKEN"` | The Kubernetes Secret Key holding the Root Doppler Token | +| rootToken.value | string | `""` | The Root Doppler Token Value for deploying SecretStore. This value is sensitive | +| securityContext | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsGroup":1000,"runAsNonRoot":true,"runAsUser":1000}` | YAML Anchor for SecurityContext | +| serviceTree | object | `{"layer":"1","platform":"sulfoxide","service":"chlorine"}` | AtomiCloud Service Tree. See [ServiceTree](https://atomicloud.larksuite.com/wiki/OkfJwTXGFiMJkrk6W3RuwRrZs64?theme=DARK&contentTheme=DARK#MHw5d76uDo2tBLx86cduFQMRsBb) | +| storeName | string | `"doppler"` | The name of the doppler ClusterSecretStore that is going to be deployed | +| tags | object | `{"atomi.cloud/layer":"1","atomi.cloud/platform":"sulfoxide","atomi.cloud/service":"chlorine"}` | Kubernetes labels and annotations, following Service Tree | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.11.1](https://github.com/norwoodj/helm-docs/releases/v1.11.1) \ No newline at end of file diff --git a/chart/charts/external-secrets-0.9.5.tgz b/chart/charts/external-secrets-0.9.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..717bbbe8f25acff6a35536b211a2d4cfa53d418f GIT binary patch literal 82191 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 literal 0 HcmV?d00001 diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt new file mode 100644 index 0000000..bbf72a8 --- /dev/null +++ b/chart/templates/NOTES.txt @@ -0,0 +1 @@ +Install AtomiCloud's Secret Operator diff --git a/chart/templates/_helpers.tpl b/chart/templates/_helpers.tpl new file mode 100644 index 0000000..f652f03 --- /dev/null +++ b/chart/templates/_helpers.tpl @@ -0,0 +1,75 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "sulfoxide-cobalt.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "sulfoxide-cobalt.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "sulfoxide-cobalt.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "sulfoxide-cobalt.labels" -}} +helm.sh/chart: {{ include "sulfoxide-cobalt.chart" . }} +{{- range $k, $v := .Values.serviceTree }} +"atomi.cloud/{{ $k }}": "{{ $v }}" +{{- end }} +{{ include "sulfoxide-cobalt.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Common annotations +*/}} +{{- define "sulfoxide-cobalt.annotations" -}} +helm.sh/chart: {{ include "sulfoxide-cobalt.chart" . }} +{{- range $k, $v := .Values.serviceTree }} +"atomi.cloud/{{ $k }}": "{{ $v }}" +{{- end }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "sulfoxide-cobalt.selectorLabels" -}} +app.kubernetes.io/name: {{ include "sulfoxide-cobalt.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "sulfoxide-cobalt.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "sulfoxide-cobalt.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/chart/templates/secret.yaml b/chart/templates/secret.yaml new file mode 100644 index 0000000..505825c --- /dev/null +++ b/chart/templates/secret.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "sulfoxide-cobalt.fullname" . }} + labels: {{- include "sulfoxide-cobalt.labels" . | nindent 4 }} + atomi.cloud/module: "credentials" + annotations: {{- include "sulfoxide-cobalt.annotations" . | nindent 4 }} + atomi.cloud/module: "credentials" +type: Opaque +data: + "{{ .Values.rootToken.key }}": "{{ .Values.rootToken.value | b64enc }}" \ No newline at end of file diff --git a/chart/templates/secret_store.yaml b/chart/templates/secret_store.yaml new file mode 100644 index 0000000..0b038bb --- /dev/null +++ b/chart/templates/secret_store.yaml @@ -0,0 +1,18 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ClusterSecretStore +metadata: + name: "{{ .Values.storeName }}" + labels: {{- include "sulfoxide-cobalt.labels" . | nindent 4 }} + atomi.cloud/module: "cluster-store" + annotations: {{- include "sulfoxide-cobalt.annotations" . | nindent 4 }} + atomi.cloud/module: "cluster-store" + helm.sh/hook: post-install,post-upgrade +spec: + provider: + doppler: + auth: + secretRef: + dopplerToken: + name: {{ include "sulfoxide-cobalt.fullname" . }} + key: {{ .Values.rootToken.key }} + namespace: {{ .Release.Namespace }} \ No newline at end of file diff --git a/chart/values.example.yaml b/chart/values.example.yaml new file mode 100644 index 0000000..9c3b35f --- /dev/null +++ b/chart/values.example.yaml @@ -0,0 +1,29 @@ +serviceTree: + landscape: &landscape lapras + cluster: &cluster opal + +tags: &tags + atomi.cloud/landscape: *landscape + atomi.cloud/cluster: *cluster + +rootToken: + value: "supersecret" + +external-secrets: + podAnnotations: + <<: *tags + podLabels: + <<: *tags + + webhook: + podLabels: + <<: *tags + podAnnotations: + <<: *tags + + certController: + podLabels: + <<: *tags + podAnnotations: + <<: *tags + diff --git a/chart/values.yaml b/chart/values.yaml new file mode 100644 index 0000000..70ac982 --- /dev/null +++ b/chart/values.yaml @@ -0,0 +1,99 @@ +# -- AtomiCloud Service Tree. See [ServiceTree](https://atomicloud.larksuite.com/wiki/OkfJwTXGFiMJkrk6W3RuwRrZs64?theme=DARK&contentTheme=DARK#MHw5d76uDo2tBLx86cduFQMRsBb) +serviceTree: + platform: &platform sulfoxide + service: &service chlorine + layer: &layer "1" + +# -- Kubernetes labels and annotations, following Service Tree +tags: &tags + atomi.cloud/platform: *platform + atomi.cloud/service: *service + atomi.cloud/layer: *layer + +# -- YAML Anchor for PodSecurityContext +podSecurityContext: &podSecurityContext + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + runAsNonRoot: true + +# -- YAML Anchor for SecurityContext +securityContext: &securityContext + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + capabilities: + drop: + - ALL + +# -- The Root Doppler Token for deploying SecretStore +rootToken: + # -- The Kubernetes Secret Key holding the Root Doppler Token + key: "DOPPLER_TOKEN" + # -- The Root Doppler Token Value for deploying SecretStore. This value is sensitive + value: "" + +# -- The name of the doppler ClusterSecretStore that is going to be deployed +storeName: doppler + +# -- External Secrets Configuration. See [External Secrets Operator Documentation](https://github.com/external-secrets/external-secrets/tree/main/deploy/charts/external-secrets) +external-secrets: + + installCRDs: true + + serviceMonitor: + enabled: true + + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + cpu: 200m + memory: 256Mi + + podSecurityContext: *podSecurityContext + securityContext: *securityContext + podAnnotations: + <<: *tags + atomi.cloud/module: operator + podLabels: + <<: *tags + atomi.cloud/module: operator + + webhook: + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + cpu: 200m + memory: 256Mi + podSecurityContext: *podSecurityContext + securityContext: *securityContext + podLabels: + <<: *tags + atomi.cloud/module: webhook + podAnnotations: + <<: *tags + atomi.cloud/module: webhook + + certController: + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + cpu: 200m + memory: 256Mi + podSecurityContext: *podSecurityContext + securityContext: *securityContext + podLabels: + <<: *tags + atomi.cloud/module: cert-controller + podAnnotations: + <<: *tags + atomi.cloud/module: cert-controller + diff --git a/config/dev.yaml b/config/dev.yaml new file mode 100644 index 0000000..235b44d --- /dev/null +++ b/config/dev.yaml @@ -0,0 +1,3 @@ +landscape: lapras +platform: sulfoxide +service: app-of-apps diff --git a/docs/developer/.gitkeep b/docs/developer/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer/CommitConventions.md b/docs/developer/CommitConventions.md new file mode 100644 index 0000000..f6c038a --- /dev/null +++ b/docs/developer/CommitConventions.md @@ -0,0 +1,141 @@ +--- +id: commit-conventions +title: Commit Conventions +--- +This project uses [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) loosely as the specification +for our commits. + +Commit message will be in the format: + +``` +type(scope): title + +body +``` + +This page will document the types and scopes used. + +# Types + +| Type | Description | +| --------------------- | --------------------------------------------------- | +| [upstream](#upstream) | Changes from dependencies upstream | +| [config](#config) | Changes to configuration files and scripts | +| [release](#release) | Initiate a release (machine initiated) | +| [docs](#docs) | Documentation only changes | +| [feat](#feat) | A new feature | +| [action](#action) | Imperative action, mainly changing the values files | +| [fix](#fix) | A bug fix | +| [chore](#chore) | Menial Tasks | + +## upstream + +Changes from dependencies upstream + +| **V.A.E** | V.A.E values | +| --------------- | ------------------------------------------------------------------------------------- | +| verb | update upstream | +| application | when this commit is applied, it will _update upstream_ `<scope>, <title>` | +| example | upstream(mysql): from v5.7 to v8.0 | +| example applied | when this commit is applied, it will _update upstream_ `mysql`, **from v5.7 to v8.0** | + +| Scope | Description | Bump | +| ------- | ----------------------------------------- | ------- | +| default | Generic update from upstream dependencies | `minor` | + +## config + +Changes to configuration files and scripts + +| **V.A.E** | V.A.E values | +| --------------- | --------------------------------------------------------------------------------------- | +| verb | configure | +| application | when this commit is applied, it will _configure_ `<scope> to <title>` | +| example | config(ci): setup nix before executing | +| example applied | when this commit is applied, it will _configure_ `ci` to **setup nix before executing** | + +| Scope | Description | Bump | +| -------- | ---------------------------------------------------------------------------- | ----- | +| default | Updates the configuration of the repository, not related to the other scopes | `nil` | +| `lint` | Add, update or remove linters | `nil` | +| `fmt` | Add, updatge or remove formatters | `nil` | +| `build` | Add, update or change build pipelines and generators | `nil` | +| `nix` | Add, update or change nix shell | `nil` | +| `env` | Add, update or change environment | `nil` | +| `ignore` | Add, update or change ignore configurations | `nil` | +| `ci` | Add, update or change CI configuration files | `nil` | + +## release + +Initiate a release (machine initiated) + +| Scope | Description | Bump | +| ------- | ------------------------- | ----- | +| default | Machine initiated release | `nil` | + +## docs + +Documentation only changes + +| **V.A.E** | V.A.E values | +| --------------- | ------------------------------------------------------------------------------------------------------------ | +| verb | add | +| application | when this commit is applied, it will _add_ `<scope> documention <title>` | +| example | docs(developer): on how to install dependency packages | +| example applied | when this commit is applied, it will _add_ `developer` documention **on how to install dependency packages** | + +| Scope | Description | Bump | +| ------- | --------------------------------- | ----- | +| default | Update generic documentation file | `nil` | + +## feat + +A new feature + +| **V.A.E** | V.A.E values | +| --------------- | ----------------------------------------------------------------------- | +| verb | add | +| application | when this commit is applied, it will _add_ `<scope> <title>` | +| example | feat(rapid): new withdraw api | +| example applied | when this commit is applied, it will _add_ `rapid` **new withdraw api** | + +| Scope | Description | Bump | +| ------- | ---------------------- | ------- | +| default | Release a new features | `minor` | + +## action + +Imperative action, mainly changing the values files + +| Scope | Description | Bump | +| ------- | --------------------------------------------------- | ----- | +| default | Imperative action, mainly changing the values files | `nil` | + +## fix + +A bug fix + +| **V.A.E** | V.A.E values | +| --------------- | -------------------------------------------------------------------- | +| verb | fix | +| application | when this commit is applied, it will _fix_ `<title>` | +| example | fix(rapid): deposit api for rapid | +| example applied | when this commit is applied, it will _fix_ **deposit api for rapid** | + +| Scope | Description | Bump | +| ------- | ------------- | ------- | +| default | Generic fixes | `patch` | + +## chore + +Menial Tasks + +| Scope | Description | Bump | +| ------- | ------------ | ----- | +| default | Menial Tasks | `nil` | + +# Special Scopes + +| Scope | Description | Bump | +| ------------ | ------------------------------ | ----- | +| `no-release` | Prevent release from happening | `nil` | diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..ef1e5a3 --- /dev/null +++ b/flake.lock @@ -0,0 +1,611 @@ +{ + "nodes": { + "atomipkgs": { + "inputs": { + "dev-atomi_classic": "dev-atomi_classic", + "dev-npkgs": "dev-npkgs", + "dev-npkgs-unstable-05-Oct-2022": "dev-npkgs-unstable-05-Oct-2022", + "dev-npkgs-unstable-11-Dec-2022": "dev-npkgs-unstable-11-Dec-2022", + "dev-npkgs-unstable-20-Sep-2023": "dev-npkgs-unstable-20-Sep-2023", + "fenix": "fenix", + "flake-utils": "flake-utils_2", + "npkgs": "npkgs", + "npkgs-unstable": "npkgs-unstable" + }, + "locked": { + "lastModified": 1695526514, + "narHash": "sha256-kDwlfpgEqS/hrktjbZfpKldPFZKS68/d2zxfMPobK6c=", + "owner": "kirinnee", + "repo": "test-nix-repo", + "rev": "82cce29ae2d3c150247d112c513e8be274218b91", + "type": "github" + }, + "original": { + "owner": "kirinnee", + "ref": "v21.0.0", + "repo": "test-nix-repo", + "type": "github" + } + }, + "atomipkgs_classic": { + "inputs": { + "flake-utils": "flake-utils_3", + "pkgs": "pkgs_2", + "pkgs_25_Jul_2021": "pkgs_25_Jul_2021_2" + }, + "locked": { + "lastModified": 1689236000, + "narHash": "sha256-MEqyIPlD4ueJji6FtfDs8qqZifM9hyYH1svBs3oxrrc=", + "owner": "kirinnee", + "repo": "test-nix-repo", + "rev": "2d9d80544d2e81ff736fa23345ad0a9cc5a6c8ab", + "type": "github" + }, + "original": { + "owner": "kirinnee", + "ref": "classic", + "repo": "test-nix-repo", + "type": "github" + } + }, + "dev-atomi_classic": { + "inputs": { + "flake-utils": "flake-utils", + "pkgs": "pkgs", + "pkgs_25_Jul_2021": "pkgs_25_Jul_2021" + }, + "locked": { + "lastModified": 1689236000, + "narHash": "sha256-MEqyIPlD4ueJji6FtfDs8qqZifM9hyYH1svBs3oxrrc=", + "owner": "kirinnee", + "repo": "test-nix-repo", + "rev": "2d9d80544d2e81ff736fa23345ad0a9cc5a6c8ab", + "type": "github" + }, + "original": { + "owner": "kirinnee", + "ref": "classic", + "repo": "test-nix-repo", + "type": "github" + } + }, + "dev-npkgs": { + "locked": { + "lastModified": 1689048911, + "narHash": "sha256-pODI2CkjWbSLo5nPMZoLtkRNJU/Nr3VSITXZqqmNtIk=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "8163a64662b43848802092d52015ef60777d6129", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "dev-npkgs-unstable-05-Oct-2022": { + "locked": { + "lastModified": 1664847737, + "narHash": "sha256-Wxl0CtRH3Vo8+qEZ/PbCcx+9D8wEEi56tJPmROum2ss=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "de80d1d04ee691279e1302a1128c082bbda3ab01", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "de80d1d04ee691279e1302a1128c082bbda3ab01", + "type": "indirect" + } + }, + "dev-npkgs-unstable-11-Dec-2022": { + "locked": { + "lastModified": 1670681895, + "narHash": "sha256-kZH9DSU36W4fn1z81a/24JCGkU517TcY50VE0RFJ9k4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f82f0ec1b70b2879c3f3d9a1015a05c73a90a17c", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "f82f0ec1b70b2879c3f3d9a1015a05c73a90a17c", + "type": "indirect" + } + }, + "dev-npkgs-unstable-20-Sep-2023": { + "locked": { + "lastModified": 1694959747, + "narHash": "sha256-CXQ2MuledDVlVM5dLC4pB41cFlBWxRw4tCBsFrq3cRk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "970a59bd19eff3752ce552935687100c46e820a5", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "970a59bd19eff3752ce552935687100c46e820a5", + "type": "indirect" + } + }, + "fenix": { + "inputs": { + "nixpkgs": "nixpkgs", + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1695709315, + "narHash": "sha256-XKzbb4NqYmUVlORwjCT//RGeQiJa+6LuGYllpaLP5lQ=", + "owner": "nix-community", + "repo": "fenix", + "rev": "f5845b16d889d8bf9930fe1098820074da4cbce9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "inputs": { + "systems": "systems_5" + }, + "locked": { + "lastModified": 1685518550, + "narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1660459072, + "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1695360818, + "narHash": "sha256-JlkN3R/SSoMTa+CasbxS1gq+GpGxXQlNZRUh9+LIy/0=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "e35dcc04a3853da485a396bdd332217d0ac9054f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-sep-24-23": { + "locked": { + "lastModified": 1695360818, + "narHash": "sha256-JlkN3R/SSoMTa+CasbxS1gq+GpGxXQlNZRUh9+LIy/0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e35dcc04a3853da485a396bdd332217d0ac9054f", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "e35dcc04a3853da485a396bdd332217d0ac9054f", + "type": "indirect" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1685801374, + "narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c37ca420157f4abc31e26f436c1145f8951ff373", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1695360818, + "narHash": "sha256-JlkN3R/SSoMTa+CasbxS1gq+GpGxXQlNZRUh9+LIy/0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e35dcc04a3853da485a396bdd332217d0ac9054f", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "e35dcc04a3853da485a396bdd332217d0ac9054f", + "type": "indirect" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1685866647, + "narHash": "sha256-4jKguNHY/edLYImB+uL8jKPL/vpfOvMmSlLAGfxSrnY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a53a3bec10deef6e1cc1caba5bc60f53b959b1e8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1680945546, + "narHash": "sha256-8FuaH5t/aVi/pR1XxnF0qi4WwMYC+YxlfdsA0V+TEuQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d9f759f2ea8d265d974a6e1259bd510ac5844c5d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "npkgs": { + "locked": { + "lastModified": 1689048911, + "narHash": "sha256-pODI2CkjWbSLo5nPMZoLtkRNJU/Nr3VSITXZqqmNtIk=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "8163a64662b43848802092d52015ef60777d6129", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "npkgs-unstable": { + "locked": { + "lastModified": 1689008574, + "narHash": "sha256-VFMgyHDiqsGDkRg73alv6OdHJAqhybryWHv77bSCGIw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4a729ce4b1fe5ec4fffc71c67c96aa5184ebb462", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "pkgs": { + "locked": { + "lastModified": 1643805626, + "narHash": "sha256-AXLDVMG+UaAGsGSpOtQHPIKB+IZ0KSd9WS77aanGzgc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "554d2d8aa25b6e583575459c297ec23750adb6cb", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "554d2d8aa25b6e583575459c297ec23750adb6cb", + "type": "indirect" + } + }, + "pkgs_2": { + "locked": { + "lastModified": 1643805626, + "narHash": "sha256-AXLDVMG+UaAGsGSpOtQHPIKB+IZ0KSd9WS77aanGzgc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "554d2d8aa25b6e583575459c297ec23750adb6cb", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "554d2d8aa25b6e583575459c297ec23750adb6cb", + "type": "indirect" + } + }, + "pkgs_25_Jul_2021": { + "locked": { + "lastModified": 1627107260, + "narHash": "sha256-CwvSwz3kvpp7uEFyOj2Dq6bdtY6P2N0Bzd7ZVgsIICw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "537678cb1ead06fca831077c3b193566cbc3f406", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "537678cb1ead06fca831077c3b193566cbc3f406", + "type": "indirect" + } + }, + "pkgs_25_Jul_2021_2": { + "locked": { + "lastModified": 1627107260, + "narHash": "sha256-CwvSwz3kvpp7uEFyOj2Dq6bdtY6P2N0Bzd7ZVgsIICw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "537678cb1ead06fca831077c3b193566cbc3f406", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "537678cb1ead06fca831077c3b193566cbc3f406", + "type": "indirect" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_5", + "gitignore": "gitignore", + "nixpkgs": "nixpkgs_3", + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1689328505, + "narHash": "sha256-9B3+OeUn1a/CvzE3GW6nWNwS5J7PDHTyHGlpL3wV5oA=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "5e28316db471d1ac234beb70031b635437421dd6", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "atomipkgs": "atomipkgs", + "atomipkgs_classic": "atomipkgs_classic", + "flake-utils": "flake-utils_4", + "nixpkgs": "nixpkgs_2", + "nixpkgs-sep-24-23": "nixpkgs-sep-24-23", + "pre-commit-hooks": "pre-commit-hooks", + "treefmt-nix": "treefmt-nix" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1695642814, + "narHash": "sha256-xR1+YaPcutqXN7BYYCyHPU8VVh/gjW+bVFTfA+vHpv0=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "d3cc3bc00e310ff49268ce0c593eaa6bf4724bbd", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1689243103, + "narHash": "sha256-IfBt2AD8qCwZs+m6BlOGEitBIkVJ0iMscMueb6QYUk4=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "f1dca68b908f3dd656b923b9fb62f7d755133662", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..5a5f7be --- /dev/null +++ b/flake.nix @@ -0,0 +1,70 @@ +{ + inputs = { + # util + flake-utils.url = "github:numtide/flake-utils"; + treefmt-nix.url = "github:numtide/treefmt-nix"; + pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix"; + + # registry + nixpkgs.url = "nixpkgs/e35dcc04a3853da485a396bdd332217d0ac9054f"; + nixpkgs-sep-24-23.url = "nixpkgs/e35dcc04a3853da485a396bdd332217d0ac9054f"; + atomipkgs.url = "github:kirinnee/test-nix-repo/v21.0.0"; + atomipkgs_classic.url = "github:kirinnee/test-nix-repo/classic"; + + }; + outputs = + { self + + # utils + , flake-utils + , treefmt-nix + , pre-commit-hooks + + # registries + , atomipkgs + , atomipkgs_classic + , nixpkgs + , nixpkgs-sep-24-23 + + } @inputs: + (flake-utils.lib.eachDefaultSystem + ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + pkgs-sep-24-23 = nixpkgs-sep-24-23.legacyPackages.${system}; + atomi = atomipkgs.packages.${system}; + atomi_classic = atomipkgs_classic.packages.${system}; + pre-commit-lib = pre-commit-hooks.lib.${system}; + in + with rec { + pre-commit = import ./nix/pre-commit.nix { + inherit packages pre-commit-lib formatter; + }; + formatter = import ./nix/fmt.nix { + inherit treefmt-nix pkgs; + }; + packages = import ./nix/packages.nix + { + inherit pkgs pkgs-sep-24-23 atomi atomi_classic; + }; + env = import ./nix/env.nix { + inherit pkgs packages; + }; + devShells = import ./nix/shells.nix { + inherit pkgs env packages; + shellHook = checks.pre-commit-check.shellHook; + }; + checks = { + pre-commit-check = pre-commit; + format = formatter; + }; + }; + { + inherit checks formatter packages devShells; + } + ) + ) + ; + +} diff --git a/infra/k3d.lapras.yaml b/infra/k3d.lapras.yaml new file mode 100644 index 0000000..84f1ca5 --- /dev/null +++ b/infra/k3d.lapras.yaml @@ -0,0 +1,20 @@ +apiVersion: k3d.io/v1alpha4 +kind: Simple +metadata: + name: lapras +servers: 1 +agents: 0 +network: lapras +image: rancher/k3s:v1.25.12-k3s1 +ports: + - port: 20010:80 + nodeFilters: + - loadbalancer + - port: 20011:443 + nodeFilters: + - loadbalancer +registries: + create: + name: lapras.registry.lvh.me + host: "0.0.0.0" + hostPort: "20012" diff --git a/nix/env.nix b/nix/env.nix new file mode 100644 index 0000000..72cfe9b --- /dev/null +++ b/nix/env.nix @@ -0,0 +1,40 @@ +{ pkgs, packages }: +with packages; +{ + system = [ + coreutils + sd + bash + jq + yq-go + ]; + + dev = [ + pls + git + ]; + + infra = [ + k3d + helm + kubectl + ]; + + main = [ + ]; + + lint = [ + # core + treefmt + + helm-docs + + gitlint + shellcheck + ]; + + releaser = [ + nodejs_20 + sg + ]; +} diff --git a/nix/fmt.nix b/nix/fmt.nix new file mode 100644 index 0000000..66809f9 --- /dev/null +++ b/nix/fmt.nix @@ -0,0 +1,24 @@ +{ treefmt-nix, pkgs, ... }: +let + fmt = { + projectRootFile = "flake.nix"; + + # enable or disable formatters, see https://github.com/numtide/treefmt-nix#supported-programs + programs = { + nixpkgs-fmt = { + enable = true; + }; + prettier = { + enable = true; + }; + shfmt = { + enable = true; + }; + }; + + + }; +in +(treefmt-nix.lib.evalModule pkgs fmt).config.build.wrapper + + diff --git a/nix/packages.nix b/nix/packages.nix new file mode 100644 index 0000000..c8543e8 --- /dev/null +++ b/nix/packages.nix @@ -0,0 +1,52 @@ +{ pkgs, atomi, atomi_classic, pkgs-sep-24-23 }: +let + + all = { + atomipkgs = ( + with atomi; + { + inherit + infisical + pls; + } + ); + atomipkgs_classic = ( + with atomi_classic; + { + inherit + sg; + } + ); + sep-24-23 = ( + with pkgs-sep-24-23; + { + inherit + coreutils + sd + bash + git + jq + yq-go + + nodejs_20 + + # lint + treefmt + + # infra + k3d + helm-docs + kubectl + gitlint + shellcheck + ; + helm = kubernetes-helm; + + } + ); + }; +in +with all; +atomipkgs // +atomipkgs_classic // +sep-24-23 diff --git a/nix/pre-commit.nix b/nix/pre-commit.nix new file mode 100644 index 0000000..f2373ad --- /dev/null +++ b/nix/pre-commit.nix @@ -0,0 +1,98 @@ +{ packages, formatter, pre-commit-lib }: +pre-commit-lib.run { + src = ./.; + + # hooks + hooks = { + # formatter + treefmt = { + enable = true; + excludes = [ "chart/.*(yaml|yml)" "chart/README.md" "Changelog.md" "docs/developer/CommitConventions.md" ]; + }; + + # linters From https://github.com/cachix/pre-commit-hooks.nix + shellcheck = { + enable = false; + }; + + a-infisical = { + enable = true; + name = "Secrets Scanning (Past Commits)"; + description = "Scan for possible secrets in past commits"; + entry = "${packages.infisical}/bin/infisical scan . -v"; + language = "system"; + pass_filenames = false; + }; + + a-infisical-staged = { + enable = true; + name = "Secrets Scanning (Staged)"; + description = "Scan for possible secrets in staged files"; + entry = "${packages.infisical}/bin/infisical scan git-changes --staged -v"; + language = "system"; + pass_filenames = false; + }; + + a-helm-lint = { + enable = true; + name = "Helm Lint"; + description = "Lints helm"; + entry = "${packages.helm}/bin/helm lint -f chart/values.yaml chart"; + files = "chart/.*"; + language = "system"; + pass_filenames = false; + }; + + a-gitlint = { + enable = true; + name = "Gitlint"; + description = "Lints git commit message"; + entry = "${packages.gitlint}/bin/gitlint --staged --msg-filename .git/COMMIT_EDITMSG"; + language = "system"; + pass_filenames = false; + stages = [ "commit-msg" ]; + }; + + a-enforce-gitlint = { + enable = true; + name = "Enforce gitlint"; + description = "Enforce atomi_releaser conforms to gitlint"; + entry = "${packages.sg}/bin/sg gitlint"; + files = "(atomi_release\\.yaml|\\.gitlint)"; + language = "system"; + pass_filenames = false; + }; + + a-shellcheck = { + enable = true; + name = "Shell Check"; + entry = "${packages.shellcheck}/bin/shellcheck"; + files = ".*sh$"; + language = "system"; + pass_filenames = true; + }; + + a-enforce-exec = { + enable = true; + name = "Enforce Shell Script executable"; + entry = "${packages.coreutils}/bin/chmod +x"; + files = ".*sh$"; + language = "system"; + pass_filenames = true; + }; + a-helm-docs = { + enable = true; + name = "Helm Docs"; + entry = "${packages.helm-docs}/bin/helm-docs"; + files = ".*"; + language = "system"; + pass_filenames = false; + }; + }; + + settings = { + treefmt = { + package = formatter; + }; + }; +} diff --git a/nix/shells.nix b/nix/shells.nix new file mode 100644 index 0000000..ae01149 --- /dev/null +++ b/nix/shells.nix @@ -0,0 +1,18 @@ +{ pkgs, packages, env, shellHook }: +with env; +{ + default = pkgs.mkShell { + buildInputs = system ++ main ++ dev ++ env.lint ++ infra; + inherit shellHook; + }; + + ci = pkgs.mkShell { + buildInputs = system ++ main ++ lint ++ infra; + inherit shellHook; + }; + + releaser = pkgs.mkShell { + buildInputs = system ++ main ++ lint ++ infra ++ releaser; + inherit shellHook; + }; +} diff --git a/scripts/ci/pre-commit.sh b/scripts/ci/pre-commit.sh new file mode 100755 index 0000000..af245ca --- /dev/null +++ b/scripts/ci/pre-commit.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -eou pipefail + +pre-commit run --all-files -v diff --git a/scripts/ci/publish.sh b/scripts/ci/publish.sh new file mode 100755 index 0000000..1516d43 --- /dev/null +++ b/scripts/ci/publish.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +version="$1" + +set -eou pipefail + +echo "๐Ÿš€ Publishing version ${version}" + +yq eval ".version = \"${version}\"" ./chart/Chart.yaml >"Chart.tmp" +mv "Chart.tmp" ./chart/Chart.yaml + +echo "๐Ÿ“ Generating Documentation" +helm-docs +echo "โœ… Documentation Generated" diff --git a/scripts/ci/release.sh b/scripts/ci/release.sh new file mode 100755 index 0000000..a0950a9 --- /dev/null +++ b/scripts/ci/release.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -eou pipefail + +rm .git/hooks/* || true +sg release diff --git a/scripts/local/create-k3d-cluster.sh b/scripts/local/create-k3d-cluster.sh new file mode 100755 index 0000000..2e5601b --- /dev/null +++ b/scripts/local/create-k3d-cluster.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +dev_config="$1" + +set -eou pipefail + +[ "$dev_config" = '' ] && dev_config="./config/dev.yaml" + +# check if dev config exists +if [ ! -f "$dev_config" ]; then + echo "โŒ Dev config '$dev_config' does not exist!" + exit 1 +fi + +input="$(yq '.landscape' "$dev_config")" +config="./infra/k3d.$input.yaml" +echo "๐Ÿงฌ Attempting to start cluster '$input' using '$config'..." + +# obtain existing cluster +current="$(k3d cluster ls -o json | jq -r --arg input "${input}" '.[] | select(.name == $input) | .name')" +if [ "$current" = "$input" ]; then + echo "โœ… Cluster already exist!" +else + # ask if to create cluster + echo "๐ŸฅŸ Cluster does not exist, creating..." + k3d cluster create "$input" --config "$config" --wait + echo "๐Ÿš€ Cluster created!" +fi + +echo "๐Ÿ›  Generating kubeconfig" +mkdir -p "$HOME/.kube/configs" +mkdir -p "$HOME/.kube/k3dconfigs" + +echo "๐Ÿ“ Writing to '$HOME/.kube/k3dconfigs/k3d-$input'" +k3d kubeconfig get "$input" >"$HOME/.kube/k3dconfigs/k3d-$input" +KUBECONFIG=$(cd ~/.kube/configs && find "$(pwd)"/* | awk 'ORS=":"')$(cd ~/.kube/k3dconfigs && find "$(pwd)"/* | awk 'ORS=":"') kubectl config view --flatten >~/.kube/config +chmod 600 ~/.kube/config +echo "โœ… Generated kube config file" +# wait for cluster to be ready +echo "๐Ÿ•‘ Waiting for cluster to be ready..." +kubectl --context "k3d-$input" -n kube-system wait --for=jsonpath=.status.readyReplicas=1 --timeout=300s deployment metrics-server +kubectl --context "k3d-$input" -n kube-system wait --for=jsonpath=.status.readyReplicas=1 --timeout=300s deployment coredns +kubectl --context "k3d-$input" -n kube-system wait --for=jsonpath=.status.readyReplicas=1 --timeout=300s deployment local-path-provisioner +kubectl --context "k3d-$input" -n kube-system wait --for=jsonpath=.status.succeeded=1 --timeout=300s job helm-install-traefik-crd +kubectl --context "k3d-$input" -n kube-system wait --for=jsonpath=.status.succeeded=1 --timeout=300s job helm-install-traefik +kubectl --context "k3d-$input" -n kube-system wait --for=jsonpath=.status.readyReplicas=1 --timeout=300s deployment traefik +echo "โœ… Cluster is ready!" diff --git a/scripts/local/delete-k3d-cluster.sh b/scripts/local/delete-k3d-cluster.sh new file mode 100755 index 0000000..0ee6c1c --- /dev/null +++ b/scripts/local/delete-k3d-cluster.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +dev_config="$1" + +set -eou pipefail + +[ "$dev_config" = '' ] && dev_config="./config/dev.yaml" + +# check if dev config exists +if [ ! -f "$dev_config" ]; then + echo "โŒ Dev config '$dev_config' does not exist!" + exit 1 +fi + +input="$(yq '.landscape' "$dev_config")" + +echo "๐Ÿ› ๏ธ Attempting to delete cluster '$input'..." + +# obtain existing cluster +current="$(k3d cluster ls -o json | jq -r --arg input "${input}" '.[] | select(.name == $input) | .name')" +if [ "$current" = "$input" ]; then + echo "๐Ÿ—‘๏ธ Cluster found! Deleting cluster..." + k3d cluster delete "$input" + echo "โœ… Cluster deleted!" +else + echo "โš ๏ธ Cluster does not exist!" +fi +echo "๐Ÿงน Cleaning up kubeconfig files..." +mkdir -p "$HOME/.kube/configs" +mkdir -p "$HOME/.kube/k3dconfigs" +rm "$HOME/.kube/k3dconfigs/k3d-$input" || true +KUBECONFIG=$(cd ~/.kube/configs && find "$(pwd)"/* | awk 'ORS=":"')$(cd ~/.kube/k3dconfigs && find "$(pwd)"/* | awk 'ORS=":"') kubectl config view --flatten >~/.kube/config +chmod 600 ~/.kube/config +echo "โœ… Config is cleared!" diff --git a/tasks/Taskfile.cluster.yaml b/tasks/Taskfile.cluster.yaml new file mode 100644 index 0000000..71d8bb5 --- /dev/null +++ b/tasks/Taskfile.cluster.yaml @@ -0,0 +1,30 @@ +version: "3" + +tasks: + debug: + desc: Debug the helm chart + dir: chart + cmds: + - helm dependency update + - helm template $RELEASE_NAME . --debug --values values.yaml --values values.{{.LANDSCAPE}}.{{.CLUSTER}}.yaml {{.CLI_ARGS}} + + render: + desc: Render the helm chart + dir: chart + cmds: + - helm dependency update + - >- + helm template $RELEASE_NAME . --values values.yaml --values values.{{.LANDSCAPE}}.{{.CLUSTER}}.yaml + {{.CLI_ARGS}} > rendered/{{.LANDSCAPE}}/{{.CLUSTER}}/manifest.yaml + + install: + desc: Installs the chart + dir: chart + cmds: + - helm dependency update + - helm upgrade --kube-context {{.LANDSCAPE}}-{{.CLUSTER}} --install $RELEASE_NAME . --values values.yaml --values values.{{.LANDSCAPE}}.{{.CLUSTER}}.yaml {{.CLI_ARGS}} + + remove: + desc: Removes an installed release + cmds: + - helm uninstall --kube-context {{.LANDSCAPE}}-{{.CLUSTER}} $RELEASE_NAME diff --git a/tasks/Taskfile.util.yaml b/tasks/Taskfile.util.yaml new file mode 100644 index 0000000..0a69559 --- /dev/null +++ b/tasks/Taskfile.util.yaml @@ -0,0 +1,10 @@ +version: "3" + +tasks: + latest: + internal: true + desc: Get the latest version of a Helm Chart + cmds: + - helm repo add {{.REPO_NAME}} {{.REPO_URL}} + - helm repo update + - helm search repo {{.REPO_NAME}}/{{.CHART_NAME}} --versions --max-col-width=0 | grep {{.REPO_NAME}}/{{.CHART_NAME}} | head -n 1 | awk '{print $2}'