Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
f025a25
start work on events
zjaco13 Jan 23, 2025
38e6abd
old cloudevents stuff
zjaco13 Feb 20, 2025
0cd7ff6
Merge branch 'main' into feat/dora-metrics
zjaco13 Feb 26, 2025
6e1140d
remove cloud events and switch to devlake
zjaco13 Mar 5, 2025
25263e9
devlake integ work
zjaco13 Mar 7, 2025
f05fe33
Merge branch 'dev' into feat/dora-metrics
zjaco13 Mar 17, 2025
9d6c457
devlake fixes
zjaco13 Mar 17, 2025
c6499c0
add env to ui
zjaco13 Mar 17, 2025
206e1a5
get rid of ingress
zjaco13 Mar 18, 2025
b94850e
fix kyverno
zjaco13 Mar 18, 2025
40cd482
export mysql for grafana
zjaco13 Mar 18, 2025
1d68307
fixes for mysql
zjaco13 Mar 18, 2025
6dddfd1
more changes for grafana and devlake
zjaco13 Mar 19, 2025
b37eccc
amg tf changes
zjaco13 Mar 19, 2025
546f5f6
changes for grafana
zjaco13 Mar 19, 2025
0f30b35
fix security group
zjaco13 Mar 19, 2025
46fc48d
Merge branch 'dev' into feat/dora-metrics
zjaco13 Mar 20, 2025
d501b6d
fix grafana security group and dora dashboards
zjaco13 Mar 21, 2025
be7bb7c
start devlake init
zjaco13 Mar 24, 2025
d84299e
rename
zjaco13 Mar 25, 2025
16314ce
Merge branch 'dev' into feat/dora-metrics
zjaco13 Mar 25, 2025
026d41a
script fixes
zjaco13 Mar 26, 2025
825d5fd
Merge branch 'dev' into feat/dora-metrics
zjaco13 Mar 26, 2025
0c818fe
start backstage template for onboarding
zjaco13 Apr 2, 2025
98acf2b
updates to backstage templates
zjaco13 Apr 3, 2025
83016cf
start move to templates for cicd
zjaco13 Apr 3, 2025
84ca342
Merge branch 'fix/cicd-templates' into feat/dora-metrics
zjaco13 Apr 3, 2025
76c3a74
changes for move to rds
zjaco13 Apr 7, 2025
4691ca3
fix subnets and yq
zjaco13 Apr 7, 2025
a554bb8
testing for dora
zjaco13 Apr 8, 2025
510e7c5
changes to autogen rds
zjaco13 Apr 11, 2025
5332041
fix mysql component
zjaco13 Apr 15, 2025
237a698
change to crossplane xrd with environment config
zjaco13 Apr 16, 2025
60cd03a
get rid of patch
zjaco13 Apr 16, 2025
471fb2c
Merge branch 'dev' into feat-dora-metrics
zjaco13 Apr 17, 2025
e60a4be
add more subnets to env config
zjaco13 Apr 17, 2025
d3dca0f
fix dbname
zjaco13 Apr 17, 2025
c40eb30
get rid of connection secrets for resources that don't need
zjaco13 Apr 17, 2025
db326ab
fix job
zjaco13 Apr 17, 2025
0c991b9
fix dburl
zjaco13 Apr 17, 2025
7b1c955
Update catalog-info.yaml
zjaco13 Apr 18, 2025
1857497
fix ordering
zjaco13 Apr 18, 2025
9c360eb
fix provisioner
zjaco13 Apr 18, 2025
f1d9129
final fixes
zjaco13 Apr 19, 2025
25069b6
init devlake with data
zjaco13 Apr 19, 2025
3821a70
revert hardcode
zjaco13 Apr 19, 2025
140d979
script fixes
zjaco13 Apr 21, 2025
314ebda
final fixes
zjaco13 Apr 22, 2025
21f034f
change to env selector and yaml.gen
zjaco13 Apr 23, 2025
44aa355
Merge branch 'feat/mgmt-env-config' into feat/dora-metrics
zjaco13 Apr 25, 2025
03b5ce7
fix definition
zjaco13 May 8, 2025
641f0b9
fix devlake update
zjaco13 May 8, 2025
763c320
switch to workflow from job
zjaco13 May 15, 2025
31e593f
Merge branch 'dev' into feat-dora-metrics
zjaco13 May 22, 2025
d76b928
attempt fix for workflow
zjaco13 May 29, 2025
fbc5d30
fix for workflow
zjaco13 May 29, 2025
202f1c2
switch to new serviceaccount
zjaco13 May 29, 2025
8379062
fix exit handler for failed deploy
zjaco13 Jun 9, 2025
59f247d
upgrade to devlake beta version
zjaco13 Jun 17, 2025
d1255c7
update ui image
zjaco13 Jun 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ spec:
metadata: name: "\(context.appName)-\(context.name)-iam-policy"
spec: {
name: "\(context.appName)-\(context.name)-iam-policy"
forProvider: policy: "\(policy)"
forProvider: policy: "\(parameter.policy)"
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions packages/argocd/dev/appproject-modern-engg.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ spec:
server: https://kubernetes.default.svc
- namespace: dapr-system
server: https://kubernetes.default.svc
- namespace: devlake
server: https://kubernetes.default.svc
- namespace: ingress-nginx
server: https://kubernetes.default.svc
- namespace: kyverno
Expand Down
82 changes: 82 additions & 0 deletions packages/devlake/base/values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# dependency chart values
grafana:
enabled: false
external:
url: "http://localhost:4000" # Set to AMG Endpoint in setup-environments - doesn't work - need some sort of ingress maybe?

mysql:
useExternal: true
externalServer: "devlake-mysql-service"
externalPort: "3306"

option:
database: mysql
connectionSecretName: "devlake-mysql-auth"
autoCreateSecret: false


lake:
image:
repository: devlake.docker.scarf.sh/apache/devlake
pullPolicy: Always
tag: v1.0.3-beta1
# storage for config
encryptionSecret:
# The name of secret which contains keys named ENCRYPTION_SECRET
secretName: devlake-encryption-secret
autoCreateSecret: false

securityContext:
runAsNonRoot: true
runAsUser: 1010
runAsGroup: 1010
fsGroup: 1010

containerSecurityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
capabilities:
drop: ["ALL"]
seccompProfile:
type: RuntimeDefault


alpine:
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000

containerSecurityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
capabilities:
drop: ["ALL"]
seccompProfile:
type: RuntimeDefault

ui:
image:
repository: devlake.docker.scarf.sh/apache/devlake-config-ui
pullPolicy: Always
tag: v1.0.3-beta1

securityContext:
runAsNonRoot: true

containerSecurityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
capabilities:
drop: ["ALL"]
seccompProfile:
type: RuntimeDefault

# Look into adding an auth proxy like here: https://github.com/oauth2-proxy/oauth2-proxy/blob/master/contrib/local-environment/docker-compose-keycloak.yaml

service:
# service type: NodePort/ClusterIP
type: ClusterIP

ingress:
enabled: false
19 changes: 19 additions & 0 deletions packages/devlake/dev/external-secrets.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: devlake-encryption-secret
namespace: devlake
spec:
refreshInterval: 5m
secretStoreRef:
name: devlake
kind: SecretStore
target:
name: devlake-encryption-secret
creationPolicy: Owner
data:
- secretKey: ENCRYPTION_SECRET
remoteRef:
key: modern-engg/devlake/encryption
property: ENCRYPTION_SECRET
6 changes: 6 additions & 0 deletions packages/devlake/dev/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- external-secrets.yaml
- mysql-setup-workflow.yaml
- rds-mysql.yaml
86 changes: 86 additions & 0 deletions packages/devlake/dev/mysql-init-job.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: devlake-mysql-access-binding
subjects:
- kind: ServiceAccount
name: devlake-mysql-access
namespace: devlake
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
---
apiVersion: batch/v1
kind: Job
metadata:
name: mysql-user-setup
annotations:
argocd.argoproj.io/sync-wave: "2"
spec:
template:
metadata:
generateName: mysql-user-setup-
spec:
serviceAccountName: devlake-mysql-access
restartPolicy: OnFailure
initContainers:
- name: create-secret
image: bitnami/kubectl
command:
- /bin/bash
- -c
- |
while true; do
CONN_SECRET_NAME=$(kubectl get secrets -n crossplane-system -o custom-columns=NAME:.metadata.name | grep "^devlake-mysql.*cluster-mysql-connection$" || true)
if [ -n "$CONN_SECRET_NAME" ]; then
break
fi
echo "Waiting for secret to be available..."
sleep 5
done
endpoint=$(kubectl get secret ${CONN_SECRET_NAME} -n crossplane-system -o jsonpath='{.data.endpoint}' | base64 --decode)
kubectl create service externalname devlake-mysql-service --external-name=${endpoint} -n devlake
password=$(kubectl get secret ${CONN_SECRET_NAME} -n crossplane-system -o jsonpath='{.data.attribute\.master_password}' | base64 --decode)
kubectl create secret generic devlake-mysql-auth -n devlake \
--from-literal=MYSQL_USER=merico \
--from-literal=MYSQL_PASSWORD=merico \
--from-literal=MYSQL_DATABASE=lake \
--from-literal=MYSQL_ROOT_PASSWORD=$password \
--from-literal=DB_URL="mysql://merico:merico@devlake-mysql-service:3306/lake?charset=utf8mb4&parseTime=True"
containers:
- name: create-grafana-user
image: mysql:8
command:
- /bin/bash
- -c
- |
until mysql -h devlake-mysql-service -P 3306 -u root -p${MYSQL_ROOT_PASSWORD} -e "SELECT 1"; do
echo "Waiting for MySQL to be ready..."
sleep 2
done

mysql -h devlake-mysql-service -P 3306 -u root -p${MYSQL_ROOT_PASSWORD} -e "
CREATE DATABASE IF NOT EXISTS lake;
"

echo "Creating devlake user..."
mysql -h devlake-mysql-service -P 3306 -u root -p${MYSQL_ROOT_PASSWORD} -e "
CREATE USER IF NOT EXISTS 'merico' IDENTIFIED BY 'merico';
GRANT ALL PRIVILEGES ON lake.* TO 'merico';
FLUSH PRIVILEGES;
"

echo "Creating Grafana user..."
mysql -h devlake-mysql-service -P 3306 -u root -p${MYSQL_ROOT_PASSWORD} -e "
CREATE USER IF NOT EXISTS 'grafanaReader' IDENTIFIED BY 'grafana_password';
GRANT SELECT ON lake.* TO 'grafanaReader';
FLUSH PRIVILEGES;
"

echo "User creation completed."
envFrom:
- secretRef:
name: devlake-mysql-auth

149 changes: 149 additions & 0 deletions packages/devlake/dev/mysql-setup-workflow.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: devlake-mysql-setup-sa
namespace: devlake
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: devlake-mysql-setup-access-binding
subjects:
- kind: ServiceAccount
name: devlake-mysql-setup-sa
namespace: devlake
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
---
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: mysql-setup-workflow
namespace: devlake
spec:
serviceAccountName: devlake-mysql-setup-sa
entrypoint: mysql-setup
templates:
- name: mysql-setup
dag:
tasks:
- name: create-secrets
template: create-secrets
- name: wait-for-mysql
template: wait-for-mysql
dependencies: [create-secrets]
- name: create-users
template: create-users
dependencies: [wait-for-mysql]

- name: create-secrets
container:
image: bitnami/kubectl
command: ["/bin/bash", "-c"]
args:
- |
while true; do
CONN_SECRET_NAME=$(kubectl get secrets -n crossplane-system -o custom-columns=NAME:.metadata.name | grep "^devlake-mysql.*cluster-mysql-connection$" || true)
if [ -n "$CONN_SECRET_NAME" ]; then
break
fi
echo "Waiting for secret to be available..."
sleep 10
done

echo "Secret found: ${CONN_SECRET_NAME}"
while true; do
endpoint=$(kubectl get secret ${CONN_SECRET_NAME} -n crossplane-system -o jsonpath='{.data.endpoint}' | base64 --decode)
if [ -n "$endpoint" ]; then
break
fi
echo "Waiting for endpoint to be available..."
sleep 10
done
echo "Retrieved endpoint: $endpoint"

# Create service pointing to the RDS endpoint
kubectl create service externalname devlake-mysql-service --external-name=${endpoint} -n devlake --dry-run=client -o yaml | kubectl apply -f -

while true; do
password=$(kubectl get secret ${CONN_SECRET_NAME} -n crossplane-system -o jsonpath='{.data.attribute\.master_password}' | base64 --decode)
if [ -n "$password" ]; then
break
fi
echo "Waiting for password to be available..."
sleep 10
done
echo "Password retrieved (first 2 chars): ${password:0:2}..."

# Create auth secret with credentials
kubectl create secret generic devlake-mysql-auth -n devlake \
--from-literal=MYSQL_USER=merico \
--from-literal=MYSQL_PASSWORD=merico \
--from-literal=MYSQL_DATABASE=lake \
--from-literal=MYSQL_ROOT_PASSWORD=$password \
--from-literal=DB_URL="mysql://merico:merico@devlake-mysql-service:3306/lake?charset=utf8mb4&parseTime=True" --dry-run=client -o yaml | kubectl apply -f -

- name: wait-for-mysql
retryStrategy:
limit: 40
retryPolicy: "Always"
backoff:
duration: "10"
factor: 2
maxDuration: "300s"
container:
image: mysql:8
command: ["/bin/bash", "-c"]
args:
- |
echo "Waiting for MySQL to be fully initialized..."
sleep 60 # Initial delay to allow RDS to initialize

if mysql -h devlake-mysql-service -P 3306 -u root -p${MYSQL_ROOT_PASSWORD} -e "SELECT 1"; then
echo "MySQL is ready!"
exit 0
else
echo "MySQL not ready yet, will retry..."
exit 1
fi
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: devlake-mysql-auth
key: MYSQL_ROOT_PASSWORD

- name: create-users
container:
image: mysql:8
command: ["/bin/bash", "-c"]
args:
- |
echo "Creating lake database..."
mysql -h devlake-mysql-service -P 3306 -u root -p${MYSQL_ROOT_PASSWORD} -e "
CREATE DATABASE IF NOT EXISTS lake;
"

echo "Creating devlake user..."
mysql -h devlake-mysql-service -P 3306 -u root -p${MYSQL_ROOT_PASSWORD} -e "
CREATE USER IF NOT EXISTS 'merico' IDENTIFIED BY 'merico';
GRANT ALL PRIVILEGES ON lake.* TO 'merico';
FLUSH PRIVILEGES;
"

echo "Creating Grafana user..."
mysql -h devlake-mysql-service -P 3306 -u root -p${MYSQL_ROOT_PASSWORD} -e "
CREATE USER IF NOT EXISTS 'grafanaReader' IDENTIFIED BY 'grafana_password';
GRANT SELECT ON lake.* TO 'grafanaReader';
FLUSH PRIVILEGES;
"

echo "User creation completed."
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: devlake-mysql-auth
key: MYSQL_ROOT_PASSWORD
Loading