Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit bf07f1c
Author: Jean Demeusy <[email protected]>
Date:   Tue May 21 11:51:38 2024 +0200

    Fix catch provider error gql (#519)

commit 71f6003
Author: Jean Demeusy <[email protected]>
Date:   Mon May 20 23:01:23 2024 +0200

    chore: Handle additional error cases in GraphQLProvider (#518)

commit 65da931
Author: ausias-armesto <[email protected]>
Date:   Thu May 16 15:02:20 2024 +0200

    Add documentation on how to connect to database (#517)

    * Add documentation on how to connect to database

    * Update helm/README.md

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

    ---------

    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit e1b4c0c
Author: ausias-armesto <[email protected]>
Date:   Tue May 14 21:54:20 2024 +0200

    Create automatic database backups (#516)

    * Create automatic database backups

    * remove character

    * rename backup

commit 61357f9
Author: ausias-armesto <[email protected]>
Date:   Mon May 13 18:06:06 2024 +0200

    Upgrade to version "saint-louis" (#515)

commit 930e8a5
Author: ausias-armesto <[email protected]>
Date:   Wed May 8 14:39:04 2024 +0200

    Upgrade clusterhoprd helm chart (#514)

    * Upgrade to make it work for new version of hoprd-operator

    * Upgrade version

commit f61036e
Author: ausias-armesto <[email protected]>
Date:   Wed May 8 14:32:16 2024 +0200

    Upgrade to make it work for new version of hoprd-operator (#513)

commit c28dc2a
Author: ausias-armesto <[email protected]>
Date:   Fri May 3 16:15:48 2024 +0200

    Fix typo in namespace (#511)

commit 59c6905
Author: ausias-armesto <[email protected]>
Date:   Fri May 3 16:10:30 2024 +0200

    Move the repository into the correct child (#510)

    * Move the repository into the correct child

    * Fixing secret rabbitMQ

commit 91307e1
Author: Jean Demeusy <[email protected]>
Date:   Fri May 3 15:35:24 2024 +0200

    Update Docker image repository URLs in values.yaml (#509)

commit 711b2a9
Author: ausias-armesto <[email protected]>
Date:   Fri May 3 14:55:35 2024 +0200

    Fixing pipeline tagging (#508)

commit b2d4773
Author: ausias-armesto <[email protected]>
Date:   Fri May 3 14:30:15 2024 +0200

    Using latest

commit 5f745a3
Author: Jean Demeusy <[email protected]>
Date:   Fri May 3 13:53:36 2024 +0200

    Clean up deployment's helm files (#505)

    * Scale deployment

    * fix

    * Adding envVars

    * quote

    * scale down

    * changing properties

    * updated prod env variables

    * deploy core and postman

    * change bucket name

    * Upgrading

    * fix url

    * add url x

    * adding secret x

    * new metrics

    * changing

    * update safe secrets

    * increase concurrency to 5

    * pointing to instance 0 of the RabbitMQ

    * fix pod name

    * change to static IP

    * updated to correct url

    * revert

    * Distributing auto-funding across different time-zones

    * Update configuration values for ctdapp in staging environment and default values

    * Update configuration values for ctdapp in staging environment and default values

    * Secrets updated

    ---------

    Co-authored-by: ausias-armesto <[email protected]>

commit fdd223c
Author: Jean Demeusy <[email protected]>
Date:   Fri May 3 13:49:24 2024 +0200

    Update Docker image repository URLs (#506)

    * Update Docker image repository URLs in values.yaml

    * Update workflows

    * Updating tag

    ---------

    Co-authored-by: ausias-armesto <[email protected]>
  • Loading branch information
jeandemeusy committed May 21, 2024
1 parent 3ee9710 commit e26ff33
Show file tree
Hide file tree
Showing 19 changed files with 233 additions and 104 deletions.
17 changes: 8 additions & 9 deletions .github/workflows/gcp-tag-artifact.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,31 +14,30 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v2

- name: Set up Google Cloud credentials_json
- name: Set up Google Cloud Credentials
id: auth
uses: google-github-actions/auth@v1
uses: google-github-actions/auth@v2
with:
token_format: "access_token"
credentials_json: ${{ secrets.GOOGLE_CTDAPP_SERVICE_ACCOUNT_CREDENTIALS }}
credentials_json: ${{ secrets.GOOGLE_HOPRASSOCIATION_CREDENTIALS_REGISTRY }}

- name: Set up Google Cloud SDK
uses: google-github-actions/setup-gcloud@v1
uses: google-github-actions/setup-gcloud@v2
with:
project_id: ${{ secrets.GOOGLE_PROJECT }}
project_id: hoprassociation
install_components: beta

- name: Login Google Container Registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.GOOGLE_REGION }}-docker.pkg.dev
registry: europe-west3-docker.pkg.dev
username: oauth2accesstoken
password: ${{ steps.auth.outputs.access_token }}


- name: Apply tag to GCP artifact
run: |
docker_registry=${{ secrets.GOOGLE_REGION }}-docker.pkg.dev
image=${{ secrets.GOOGLE_PROJECT }}/${{ secrets.GOOGLE_REPOSITORY }}/cover-traffic
docker_registry=europe-west3-docker.pkg.dev
image=hoprassociation/docker-images/cover-traffic
commit_tag=$(git rev-parse --short "$GITHUB_SHA")
tag=${{ github.ref_name }}
Expand Down
44 changes: 30 additions & 14 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,21 +50,37 @@ jobs:

- name: Calculate environment variables
shell: sh
run: echo "SHORT_SHA=`echo ${{ github.event.pull_request.head.sha }} | cut -c1-7`" >> $GITHUB_ENV
run: |
commit_hash="${{ github.event.pull_request.head.sha }}"
if [ -z "${commit_hash}" ]; then
echo "docker_tag=latest" >> $GITHUB_ENV
else
echo "docker_tag=`echo ${commit_hash} | cut -c1-7`" >> $GITHUB_ENV
fi
- name: Set up Google Cloud Credentials
id: auth
uses: google-github-actions/auth@v2
with:
token_format: "access_token"
credentials_json: ${{ secrets.GOOGLE_HOPRASSOCIATION_CREDENTIALS_REGISTRY }}

- name: Set up Google Cloud SDK
uses: google-github-actions/setup-gcloud@v2
with:
project_id: hoprassociation
install_components: beta

- name: Login to GCP
id: gcloud
uses: elgohr/gcloud-login-action@v1 #TODO - v2 is bugged, unable to get outputs
- name: Login Google Container Registry
uses: docker/login-action@v3
with:
account_key: ${{ secrets.GOOGLE_CREDENTIALS }}
registry: europe-west3-docker.pkg.dev
username: oauth2accesstoken
password: ${{ steps.auth.outputs.access_token }}

- name: Build and push container image
uses: elgohr/Publish-Docker-Github-Action@v5
- name: Build container image
uses: docker/build-push-action@v5
with:
workdir: "ct-app"
dockerfile: "./Dockerfile"
name: ${{ secrets.GOOGLE_PROJECT }}/${{ secrets.GOOGLE_REPOSITORY }}/cover-traffic
registry: ${{ secrets.GOOGLE_REGION }}-docker.pkg.dev
username: ${{ steps.gcloud.outputs.username }}
password: ${{ steps.gcloud.outputs.password }}
tags: "${{ env.SHORT_SHA }}"
push: true
context: ct-app
tags: europe-west3-docker.pkg.dev/hoprassociation/docker-images/cover-traffic:${{ env.docker_tag }}
10 changes: 8 additions & 2 deletions ct-app/core/components/graphql_providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,11 @@ async def _execute(self, query: DocumentNode, variable_values: dict):
query, variable_values=variable_values
)
except TransportQueryError as err:
raise ProviderError(err.errors[0]["message"])
raise ProviderError(f"TransportQueryError error: {err}")
except TimeoutError as err:
self.error(f"Timeout error: {err}")
except Exception as err:
self.error(f"Unknown error: {err}")

async def _test_query(self, key: str, **kwargs) -> bool:
"""
Expand Down Expand Up @@ -116,7 +118,11 @@ async def test(self, **kwargs):
)
return False

result = await self._test_query(self._default_key, **kwargs)
try:
result = await self._test_query(self._default_key, **kwargs)
except ProviderError as err:
self.error(f"ProviderError error: {err}")
result = None

if result is None:
return False
Expand Down
14 changes: 14 additions & 0 deletions helm/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# ctdApp Deployment docs

## Connect to Database

```bash
gcloud compute instances start --project=hopr-prod --zone=europe-west3-a bastion
gcloud compute ssh bastion --zone=europe-west3-a --project=hopr-prod -- -L 5432:localhost:5432
export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=ctdapp
export PGUSER=ctdapp
export PGPASSWORD=`Get from Bitwarden secret "ctdApp - Postgres Production"`
psql
```
35 changes: 35 additions & 0 deletions helm/ctdapp/templates/configmap-core.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,41 @@ metadata:
argocd.argoproj.io/sync-wave: "1"
name: core-config
data:
FLAG_CORE_HEALTHCHECK: "60"
FLAG_CORE_CHECK_SUBGRAPH_URLS: "200"
FLAG_CORE_GET_FUNDINGS: "900"
FLAG_CORE_GET_TICKET_PRICE: "900"
FLAG_CORE_AGGREGATE_PEERS: "300"
FLAG_CORE_GET_TOPOLOGY_DATA: "300"
FLAG_CORE_GET_SUBGRAPH_DATA: "300"
FLAG_CORE_GET_REGISTERED_NODES: "300"
FLAG_CORE_GET_NFT_HOLDERS: "900"
FLAG_CORE_APPLY_ECONOMIC_MODEL: "600"

FLAG_NODE_HEALTHCHECK: "60"
FLAG_NODE_RETRIEVE_PEERS: "300"
FLAG_NODE_RETRIEVE_OUTGOING_CHANNELS: "600"
FLAG_NODE_RETRIEVE_INCOMING_CHANNELS: "600"
FLAG_NODE_RETRIEVE_BALANCES: "900"
FLAG_NODE_OPEN_CHANNELS: "900"
FLAG_NODE_CLOSE_OLD_CHANNELS: "900"
FLAG_NODE_CLOSE_PENDING_CHANNELS: "1800"
FLAG_NODE_FUND_CHANNELS: "900"
FLAG_NODE_GET_TOTAL_CHANNEL_FUNDS: "900"

DISTRIBUTION_MIN_ELIGIBLE_PEERS: "100"
DISTRIBUTION_MAX_APR_PERCENTAGE: "15.0"

PEER_MIN_VERSION: "2.0.7"

GCP_FILE_PREFIX: expected_reward
GCP_FOLDER: expected_rewards

ECONOMIC_MODEL_MIN_SAFE_ALLOWANCE: "-1"
ECONOMIC_MODEL_NFT_THRESHOLD: "-1"

RABBITMQ_TASK_NAME: send_1_hop_message
RABBITMQ_PROJECT_NAME: ct-app
{{- if .Values.ctdapp.core.extraEnvVars -}}
{{ .Values.ctdapp.core.extraEnvVars | toYaml | nindent 2 }}
{{- end }}
5 changes: 5 additions & 0 deletions helm/ctdapp/templates/configmap-postman.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ metadata:
argocd.argoproj.io/sync-wave: "1"
name: postman-config
data:
PARAM_BATCH_SIZE: "200"
PARAM_DELAY_BETWEEN_TWO_MESSAGES: "0.2"
PARAM_MESSAGE_DELIVERY_TIMEOUT: "15"
PARAM_MAX_ATTEMPTS: "6"
RABBITMQ_PROJECT_NAME: ct-app
{{- if .Values.ctdapp.postman.extraEnvVars -}}
{{ .Values.ctdapp.postman.extraEnvVars | toYaml | nindent 2 }}
{{- end }}
55 changes: 55 additions & 0 deletions helm/ctdapp/templates/cronjob-backup.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
{{- if .Values.backup.enabled }}
apiVersion: batch/v1
kind: CronJob
metadata:
name: ctdapp-backup
spec:
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 2
schedule: "{{ .Values.backup.schedule }}"
jobTemplate:
spec:
backoffLimit: 0
ttlSecondsAfterFinished: 3600
template:
spec:
initContainers:
- name: dump
image: postgres:15-bookworm
command:
- /bin/bash
- -c
- |
set -e
TIMESTAMP=$(date +%Y%m%d%H%M%S)
echo Starting full backup of database ${PGDATABASE} at $(date)
pg_dump --no-privileges --no-owner --format=custom --compress=9 --file=/backup/ctdapp-${TIMESTAMP}.dump
echo Backup finished at $(date)
envFrom:
- secretRef:
name: postgres
volumeMounts:
- name: backup
mountPath: /backup
containers:
- name: backup
image: gcr.io/google.com/cloudsdktool/google-cloud-cli:475.0.0
command:
- /bin/bash
- -c
- |
echo Copying the backup to the bucket
gsutil cp /backup/*.dump gs://hoprnet-backup-{{ .Values.environmentName }}/postgres/ctdapp/
echo Keep only the 7 most recent backups
gsutil ls gs://hoprnet-backup-{{ .Values.environmentName }}/postgres/ctdapp | sort -r | tail -n +8 | xargs -I {} gsutil rm {}
volumeMounts:
- name: backup
mountPath: /backup
volumes:
- name: backup
emptyDir: {}
restartPolicy: OnFailure
serviceAccount: sa-backup
{{- end }}
4 changes: 2 additions & 2 deletions helm/ctdapp/templates/deployment-core.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ spec:
serviceAccountName: {{ include "ctdapp.serviceAccountName" . }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.ctdapp.image.core.repository }}:{{ .Values.ctdapp.image.core.tag }}"
imagePullPolicy: {{ .Values.ctdapp.image.core.pullPolicy }}
image: "{{ .Values.ctdapp.core.repository }}:{{ .Values.ctdapp.core.tag }}"
imagePullPolicy: {{ .Values.ctdapp.core.pullPolicy }}
ports:
- name: http
containerPort: {{ .Values.ctdapp.service.port }}
Expand Down
4 changes: 2 additions & 2 deletions helm/ctdapp/templates/deployment-postman.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ spec:
serviceAccountName: {{ include "ctdapp.serviceAccountName" . }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.ctdapp.image.postman.repository }}:{{ .Values.ctdapp.image.postman.tag }}"
imagePullPolicy: {{ .Values.ctdapp.image.postman.pullPolicy }}
image: "{{ .Values.ctdapp.postman.repository }}:{{ .Values.ctdapp.postman.tag }}"
imagePullPolicy: {{ .Values.ctdapp.postman.pullPolicy }}
envFrom:
- configMapRef:
name: postman-config
Expand Down
19 changes: 16 additions & 3 deletions helm/ctdapp/templates/secret-rabbitmq.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@
---
apiVersion: v1
kind: Secret
metadata:
annotations:
argocd.argoproj.io/sync-wave: "1"
replicator.v1.mittwald.de/replicate-to: rabbitmq
name: rabbitmq-ctdapp
namespace: ctdapp
data:
CELERY_BROKER_URL: {{ .Values.ctdapp.rabbitmq.celeryBrokerUrl | b64enc }}
RABBITMQ_HOST: {{ .Values.ctdapp.rabbitmq.host | b64enc }}
RABBITMQ_PASSWORD: {{ .Values.ctdapp.rabbitmq.password | b64enc }}
RABBITMQ_USERNAME: {{ .Values.ctdapp.rabbitmq.username | b64enc }}
RABBITMQ_VIRTUALHOST: {{ .Values.ctdapp.rabbitmq.virtualhost | b64enc }}
password: {{ .Values.ctdapp.rabbitmq.password | b64enc }}
username: {{ .Values.ctdapp.rabbitmq.username | b64enc }}
---
apiVersion: v1
kind: Secret
metadata:
namespace: rabbitmq
name: rabbitmq-ctdapp
data:
CELERY_BROKER_URL: {{ .Values.ctdapp.rabbitmq.celeryBrokerUrl | b64enc }}
Expand Down
10 changes: 10 additions & 0 deletions helm/ctdapp/templates/serviceaccount-backup.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
{{- if .Values.backup.enabled }}
apiVersion: v1
automountServiceAccountToken: true
kind: ServiceAccount
metadata:
name: sa-backup
annotations:
iam.gke.io/gcp-service-account: "backup@hopr-{{ .Values.environmentName }}.iam.gserviceaccount.com"
{{- end }}
20 changes: 9 additions & 11 deletions helm/ctdapp/values.yaml
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
environmentName: ""
backup:
enabled: false
schedule:
ctdapp:

image:
core:
repository: europe-west6-docker.pkg.dev/ctdapp-391309/ctdapp/cover-traffic
pullPolicy: Always
tag: ba586d0
postman:
repository: europe-west6-docker.pkg.dev/ctdapp-391309/ctdapp/cover-traffic
pullPolicy: Always
tag: ba586d0

nameOverride: ""
fullnameOverride: ""

Expand All @@ -35,6 +28,9 @@ ctdapp:


core:
repository: europe-west3-docker.pkg.dev/hoprassociation/docker-images/cover-traffic
pullPolicy: Always
tag: ""
replicas: 1
extraEnvVars: {}
resources:
Expand All @@ -44,8 +40,10 @@ ctdapp:
requests:
cpu: 250m
memory: 256Mi

postman:
repository: europe-west3-docker.pkg.dev/hoprassociation/docker-images/cover-traffic
pullPolicy: Always
tag: ""
replicas: 1
extraEnvVars: {}
resources:
Expand Down
6 changes: 3 additions & 3 deletions helm/helmfile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ releases:
namespace: ctdapp
chart: hoprassociation/cluster-hoprd
condition: legacy-nodes.enabled
version: 0.3.0
version: 0.3.1
wait: true
timeout: 5
values:
Expand All @@ -49,7 +49,7 @@ releases:
namespace: ctdapp
chart: hoprassociation/cluster-hoprd
condition: blue-nodes.enabled
version: 0.3.0
version: 0.3.1
wait: true
timeout: 5
values:
Expand All @@ -62,7 +62,7 @@ releases:
namespace: ctdapp
chart: hoprassociation/cluster-hoprd
condition: green-nodes.enabled
version: 0.3.0
version: 0.3.1
wait: true
timeout: 5
values:
Expand Down
9 changes: 6 additions & 3 deletions helm/secrets-staging.sops.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,12 @@ ctdapp:
username: ENC[AES256_GCM,data:8kx+G5x7,iv:7Iuaab3j1P0Fa+zvvLk0KiaxiqA7gAR/c0L73o9u7CU=,tag:1AlE0bLsLKj1kKif3sB/eg==,type:str]
virtualhost: ENC[AES256_GCM,data:quiqbqQN,iv:en9oeMNGGXM6oGwkX4KfnHhON/1NIQ2i5OFRAJO7NXQ=,tag:SdveTPa2Hr8JUo9ykl2ehg==,type:str]
subgraph:
stakingUrl: ENC[AES256_GCM,data:UXoyoipM5CVDrvkSb5TVhUVnnUcb1Hfhz7QLH5UvIX+YgUShXwhL+KV/Hkp7CZhk2mPtML04P2RpFNyHx/X3bVINpC01C+vUBVGlsu8G3RkWYm3NZdcu6/EWlTcx5QGsLDg3F6LHmRMEiq6cYQ+kYmDo87e1ZByOOXUb,iv:yQqCJOqDnCEmHScL9IGR1AyVldofsSAEbInmH84kaas=,tag:xS32cZngQ5x5gJLBTads5A==,type:str]
stakingUrlBackup: ENC[AES256_GCM,data:1RFSxyDt+rjjyeBW54hga2UQJ3iyxiWFHSVmJ4KWbsyO7UCa3km0WWMM/RUy8WG1v3jMHMf0mnd6Lv5ROHAE4dWUm+8vV855wt8=,iv:iFiHu8MVDn0986OQqIRcqaUSAn6TZJBrsk+nfsP/ABM=,tag:aGMhZP03QYI5s4AjaiLksw==,type:str]
safesBalanceUrl: ENC[AES256_GCM,data:7yp7I4/JKaWe/rKAndSV9RZjVRnnjrBz5S5Wc+Ju4+etrWmXNP+ZsSu0fqjus3p8vcF/RfCS2i15HLR+Bh8qISGRnVFAMOFHJYiIFqOIAefnGnGJIZTF5yTgMUhoY98dgq77XAuiqtTSDZQ4hmvpFemMM/L1sQFv+GjZ,iv:RcoYo91coC2lW3vDiPF0FTcM+FEC8J8lZ6TFNfZ/3D8=,tag:gTomJ1/hJKhYsASQOZvxZQ==,type:str]
safesBalanceUrlBackup: ENC[AES256_GCM,data:oP6dVIxme8VAukzmhMTY3aCJTGiMtkKhK5Ext/857I3hiIsBhJ4Hv28/+Ys7X7jRdD0h4VnjCVByO3OSygeJAs1Sf9aBQuvCi4WYpQ==,iv:uZwldoiN+wADGtimX05+2/T8irp1O3OA9WyWHke538Y=,tag:f+dbpP/CEm56Xmg1B5PaiA==,type:str]
wxhporTxsUrl: ENC[AES256_GCM,data:dFClzw3WomvblSNcYPACXOU4p7Y+Hbp1lNrIxXPvU4wo39eg0S+SZeplhgQtCVDnOLrFo2B8TISmR2Dc+gXs8T6FfHkR,iv:21HVwIjtpDJppFUctm849EwMq3rZeEssBwwqnqcN/p8=,tag:kyo/GU+uBrupY9dAz5xefg==,type:str]
wxhoprTxsUrl: ENC[AES256_GCM,data:FirJ4hbxjMbou5o6K+0WVCwKYUPhmit+Iy88atrgtPaOYdXEhWzzs2zuIJ+ZnNXJElPMYr9KQf9Rhpn1AIt4drWH23URtfxMhsFZSguTT9CWX+qBnDXlx493LOFDBCufrAwYcXFOyey5AmDIO1WVEJxHfIoqgrrbHNk8,iv:bbHjIS6iCdB+mJ8935eIk0IRV9FJaSavQm/43hvh0/s=,tag:L8ioVhfx//fu2QQAUju9WQ==,type:str]
wxhoprTxsUrlBackup: ENC[AES256_GCM,data:zyc7R1s3EjnoxImzzB0QimkR/YTFp3JH0iy2qcKIhecosyYfXy+/KrHG6DhkFWVWzCmFZV81vmG9fRk2L1XK/kM2Yi1e,iv:+GwEL4ajYTG7OZTU1/kFFHQCMOwq1pUp+mWEvFsByTY=,tag:LoIzQTXVBwegd8faO6qJoQ==,type:str]
sops:
shamir_threshold: 1
kms: []
Expand All @@ -35,8 +38,8 @@ sops:
U1Y1U3hub0Q1eVlWZS9HU3dYelpGbHcK8zlP32ezjRDORF9Z8OdKib/Hm0gdL4v5
oakH+9etUi3LoXowDza9ZocCwfgCjmx4WhKFCw/n3eRT0zBk4o+OaQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-04-11T15:07:37Z"
mac: ENC[AES256_GCM,data:lw4NEcxtTLxkCcE/ckn2uvCi7NJpFQVoR4bfWm6Nvul2g/b/5r1yoOzcIAiDuWHSG/WBPbSMAJfzefhonuu8smdxZh4U38aSTRSFI7RQlW67qBrRjOhBaUIQxQkn3UpSOYgIm/v+V/ErDhc4HtHieDqmH4OvWubMrANBiDzQyQQ=,iv:KmfzbtVxi2fkva2Den/U3tv9vkHelgKWjmtqClOaSLs=,tag:OUEfR8yWFEcqpSnyP70gPA==,type:str]
lastmodified: "2024-05-02T08:47:13Z"
mac: ENC[AES256_GCM,data:XYT2u/WfKcSAN7ymC6YRfGzHKly/HFkOjnBfLJr8lWXoWZrmjNdqMZD8YTVSk9sDAz1hqt+HPm7jNZxFezqqg+fosTwittpkJo/YPd2faZoCoZQF9N88YuIuOKZMc8fw88PdIUG/HRbPSbeWvYNsH3c+V0JFCAHH+KMv6ld4alk=,iv:zlmTLfZwbb+peP/RW9jUnSYecg/Z5ocRVsTANk7KRiU=,tag:tkjwriloWB9p3wqmc2WjrQ==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.0
Loading

0 comments on commit e26ff33

Please sign in to comment.