Update CV #42

Closed
allanger wants to merge 7 commits from update-cv into main
75 changed files with 449 additions and 137 deletions

View File

@ -1,4 +1,17 @@
.git/**/*
.git
node_modules/**/*
node_modules
static/**/*
static
scripts/**/*
scripts
chart/**/*
chart
kube/**/*
kube

View File

@ -1,5 +1,28 @@
---
# ----------------------------------------------
# -- Update the helm chart
# ----------------------------------------------
kind: pipeline
type: kubernetes
name: Publish the helm chart
trigger:
event:
- push
steps:
- name: Publish the Helm chart
image: alpine/helm
environment:
GITEA_TOKEN:
from_secret: GITEA_TOKEN
commands:
- helm plugin install https://github.com/chartmuseum/helm-push
- helm package chart -d chart-package
- helm repo add --username allanger --password $GITEA_TOKEN badhouseplants-net https://git.badhouseplants.net/api/packages/badhouseplants/helm
- helm cm-push "./chart-package/$(ls chart-package)" badhouseplants-net
---
# ----------------------------------------------
# -- Build the site and push it to the registry
# ----------------------------------------------
kind: pipeline
@ -8,137 +31,149 @@ name: Build badhouseplants.net
trigger:
event:
- push
- push
steps:
- name: Publish the Helm chart
image: alpine/helm
environment:
GITEA_TOKEN:
from_secret: GITEA_TOKEN
commands:
- helm plugin install https://github.com/chartmuseum/helm-push
- helm package chart -d chart-package
- helm repo add --username allanger --password $GITEA_TOKEN badhouseplants-net https://git.badhouseplants.net/api/packages/badhouseplants/helm
- helm cm-push "./chart-package/$(ls chart-package)" badhouseplants-net
- name: Download submodules with themes
image: alpine/git
commands:
- git submodule update --init --recursive
- name: Init git submodules with themes
image: alpine/git
commands:
- git submodule update --init --recursive
- name: Test a build
image: git.badhouseplants.net/badhouseplants/hugo-builder
commands:
- hugo
- name: Test a build
image: git.badhouseplants.net/badhouseplants/hugo-builder
commands:
- hugo
- name: Build and push the docker image
image: plugins/docker
when:
branch:
exclude:
- main
settings:
registry: git.badhouseplants.net
username: allanger
password:
from_secret: GITEA_TOKEN
repo: git.badhouseplants.net/${DRONE_REPO}
tags: ${DRONE_COMMIT_SHA}
- name: Build and push the docker image
image: plugins/docker
when:
branch:
exclude:
- name: Build and push the docker image with latest
image: plugins/docker
when:
branch:
- main
settings:
registry: git.badhouseplants.net
username: allanger
password:
from_secret: GITEA_TOKEN
repo: git.badhouseplants.net/${DRONE_REPO}
tags: ${DRONE_COMMIT_SHA}
settings:
registry: git.badhouseplants.net
username: allanger
password:
from_secret: GITEA_TOKEN
repo: git.badhouseplants.net/${DRONE_REPO}
tags:
- ${DRONE_COMMIT_SHA}
- latest
- name: Build and push the docker image with latest
image: plugins/docker
when:
branch:
- main
settings:
registry: git.badhouseplants.net
username: allanger
password:
from_secret: GITEA_TOKEN
repo: git.badhouseplants.net/${DRONE_REPO}
tags:
- ${DRONE_COMMIT_SHA}
- latest
- name: Download media files
image: alpine/git
commands:
- git lfs pull
- name: Deploy a preview ApplicationSet
image: alpine/k8s:1.24.10
when:
branch:
exclude:
- name: Sync pictures from lfs to Minio
image: rclone/rclone:latest
environment:
RCLONE_CONFIG_CONTENT:
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
RCLONE_CONFIG: /tmp/rclone.conf
GITEA_TOKEN:
from_secret: GITEA_TOKEN
commands:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- apk update
- apk add git make
- make upload_static
- name: Deploy a preview ApplicationSet
image: alpine/k8s:1.24.10
when:
branch:
exclude:
- main
environment:
KUBECONFIG_CONTENT:
from_secret: KUBECONFIG_CONTENT
commands:
- mkdir $HOME/.kube
- echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config
- apk update --no-cache && apk add yq gettext openssl
- export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'`
- export ARGO_APP_BRANCH=$DRONE_BRANCH
- export ARGO_APP_HOSTNAME="${DRONE_BRANCH}-dev.badhouseplants.net"
- export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA
- export ARGO_REMARK42_SECRET=$(openssl rand -hex 12)
- kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml
- yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml
- yq -i "del(.metadata.generation)" /tmp/appset.yaml
- yq -i "del(.metadata.uid)" /tmp/appset.yaml
- yq -i "del(.status)" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml
- envsubst < ./kube/template.yaml > /tmp/elements.yaml
- yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml
- kubectl apply -f /tmp/appset.yaml
- name: Deploy a main ApplicationSet
image: alpine/k8s:1.24.10
when:
branch:
- main
environment:
KUBECONFIG_CONTENT:
from_secret: KUBECONFIG_CONTENT
commands:
- mkdir $HOME/.kube
- echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config
- apk update --no-cache && apk add yq gettext openssl
- export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'`
- export ARGO_APP_BRANCH=$DRONE_BRANCH
- export ARGO_APP_HOSTNAME="${DRONE_BRANCH}-dev.badhouseplants.net"
- export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA
- export ARGO_REMARK42_SECRET=$(openssl rand -hex 12)
- kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml
- yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml
- yq -i "del(.metadata.generation)" /tmp/appset.yaml
- yq -i "del(.metadata.uid)" /tmp/appset.yaml
- yq -i "del(.status)" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml
- envsubst < ./kube/template.yaml > /tmp/elements.yaml
- yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml
- kubectl apply -f /tmp/appset.yaml
- name: Deploy a main ApplicationSet
image: alpine/k8s:1.24.10
when:
branch:
- main
environment:
KUBECONFIG_CONTENT:
from_secret: KUBECONFIG_CONTENT
ARGO_GITHUB_OAUTH_KEY:
from_secret: GITHUB_OAUTH_KEY
ARGO_GOOGLE_OAUTH_KEY:
from_secret: GOOGLE_OAUTH_KEY
commands:
- mkdir $HOME/.kube
- echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config
- apk update --no-cache && apk add yq gettext
- export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'`
- export ARGO_APP_BRANCH=$DRONE_BRANCH
- export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA
- kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml
- yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml
- yq -i "del(.metadata.generation)" /tmp/appset.yaml
- yq -i "del(.metadata.uid)" /tmp/appset.yaml
- yq -i "del(.status)" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.commit_sha == \"$ARGO_APP_IMAGE_TAG\"))" /tmp/appset.yaml
- envsubst < ./kube/main.yaml > /tmp/elements.yaml
- yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml
- kubectl apply -f /tmp/appset.yaml
- name: Sync application
image: argoproj/argocd
environment:
ARGOCD_SERVER:
from_secret: ARGOCD_SERVER
ARGOCD_AUTH_TOKEN:
from_secret: ARGOCD_AUTH_TOKEN
commands:
- argocd app sync -l app=badhouseplants -l branch=$DRONE_BRANCH
- argocd app wait -l app=badhouseplants -l branch=$DRONE_BRANCH
- name: Cleanup container registry
image: alpine
environment:
GITEA_TOKEN:
from_secret: GITEA_TOKEN
commands:
- apk update
- apk add curl jq perl git
- ./scripts/cleanup.pl
environment:
KUBECONFIG_CONTENT:
from_secret: KUBECONFIG_CONTENT
ARGO_GITHUB_OAUTH_KEY:
from_secret: GITHUB_OAUTH_KEY
ARGO_GOOGLE_OAUTH_KEY:
from_secret: GOOGLE_OAUTH_KEY
commands:
- mkdir $HOME/.kube
- echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config
- apk update --no-cache && apk add yq gettext
- export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'`
- export ARGO_APP_BRANCH=$DRONE_BRANCH
- export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA
- kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml
- yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml
- yq -i "del(.metadata.generation)" /tmp/appset.yaml
- yq -i "del(.metadata.uid)" /tmp/appset.yaml
- yq -i "del(.status)" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml
- yq -i "del(.spec.generators[].list.elements[] | select(.commit_sha == \"$ARGO_APP_IMAGE_TAG\"))" /tmp/appset.yaml
- envsubst < ./kube/main.yaml > /tmp/elements.yaml
- yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml
- kubectl apply -f /tmp/appset.yaml
- name: Sync application
image: argoproj/argocd
environment:
ARGOCD_SERVER:
from_secret: ARGOCD_SERVER
ARGOCD_AUTH_TOKEN:
from_secret: ARGOCD_AUTH_TOKEN
commands:
- argocd app sync -l app=badhouseplants -l branch=$DRONE_BRANCH
- argocd app wait -l app=badhouseplants -l branch=$DRONE_BRANCH
- name: Cleanup everything
image: rclone/rclone:latest
environment:
RCLONE_CONFIG_CONTENT:
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
RCLONE_CONFIG: /tmp/rclone.conf
GITEA_TOKEN:
from_secret: GITEA_TOKEN
commands:
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
- apk update
- apk add curl jq perl git
- ./scripts/cleanup.pl
---
# ----------------------------------------------

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
static/* filter=lfs diff=lfs merge=lfs -text

2
.gitignore vendored
View File

@ -1,5 +1,5 @@
node_modules
static
#static
content/cv/index.pdf
public
resources

View File

@ -1,4 +1,5 @@
FROM git.badhouseplants.net/badhouseplants/hugo-builder
WORKDIR /src
COPY . /src
RUN ls -la /src
ENTRYPOINT ["hugo"]

View File

@ -1,9 +1,12 @@
upload_static:
rclone copy -P static badhouseplants-minio:/badhouseplants-static
rclone copy -P static badhouseplants-minio:/badhouseplants-net/$(shell git rev-parse HEAD)/
get_static:
rclone copy -P badhouseplants-public:/badhouseplants-static static
init_static:
rclone copy -P badhouseplants-public:/badhouseplants-static badhouseplants-minio:/badhouseplants-net/$(shell git rev-parse HEAD)/
submodules:
git submodule update --init --recursive

View File

@ -2,7 +2,7 @@ apiVersion: v2
name: badhouseplants-net
description: A Helm chart for Kubernetes
type: application
version: 0.5.8
version: 0.6.0
appVersion: "4.20.0"
dependencies:
- name: remark42

View File

@ -35,7 +35,7 @@ spec:
- sh
args:
- "-c"
- "rclone copy -P badhouseplants-public:/badhouseplants-static /static"
- {{ .Values.rclone.command }}
volumeMounts:
- name: rclone-config
mountPath: "/tmp"

View File

@ -7,20 +7,21 @@ namespace:
enabled: true
name: badhouseplants-application
nginx:
nginx:
container:
name: nginx
resources: {}
image:
image:
repository: nginx
pullPolicy: Always
tag: latest
rclone:
command: "rclone copy -P badhouseplants-public:/badhouseplants-net-main /static"
container:
name: rclone
resources: {}
image:
image:
repository: rclone/rclone
pullPolicy: Always
tag: latest

View File

@ -35,8 +35,23 @@ Also, I think it's important that before implementing anything, an engineer has
## Experience
**Grandcentrix**: SRE
> 02.2023 - until now
```
| Microsoft Azure
| Containers - Kubernetes
| Helm - Kustomize
| PostgreSQL
| Bash - Python
| Prometheus - Grafana - Loki
| ArgoCD - Github Actions
| Sops
| Terraform
```
**Klöckner-i**: DevOps Engineer
> 01.2022 - until now
> 01.2022 - 01.2023
```
| GCloud - Microsoft Azure

View File

@ -0,0 +1,26 @@
---
title: "Design a Scalable System"
date: 2023-03-06T21:18:23+01:00
draft: true
ShowToc: true
cover:
image: "cover.png"
caption: "Design a Scalable System"
relative: false
responsiveImages: false
---
Well, after I've posted my argo serie, I've found out that I couldn't really make myself understood. So now I want to talk more not about the way of implementation, but rather about the consequinces of different implementations. And maybe I will e able to finally make a point about why I don't like Terraform and why I think that ArgoCD is mostly mis-used by almost any SRE team I know.
But first I'll try to describe how I see myself as a part of a team, the team as a part of a bigger team, and all the teams across different companies as links in the bigger chain.
This is how I used to see development teams before:
![Chain](/posts/design-a-scalable-system/chain-1.png)
The whole team is using something as a service, for example `AWS`, the whole team is working together and producing something that is passed to a customer. But apparently this approach is only applicable to small teams, and I think it's working just fine. But there is a problem. Teams tend to grow without an understanding that they are growing, hence they keep acting like they're small but in the same time they don't change the workflow, and brick-by-brick they are building something that eventually is something unscalable at first and later unmaintanble.
Example of an evolution like this:
Let's take a regular Java(backend) + JS(frontend) web application

View File

@ -34,3 +34,5 @@
auth:
anonymous: true
secretKey: $ARGO_REMARK42_SECRET
rclone:
command: "rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static"

View File

@ -30,18 +30,40 @@ my $commits = "git fetch && git log --format=format:%H --all";
my @commits_out = `$commits`;
chomp @commits_out;
push @commits_out, 'latest';
# --------------------------------------
# -- Rclone variables
# -------------------------------------
my $dirs = "rclone lsf badhouseplants-minio:/badhouseplants-net";
my @dirs_out = `$dirs`;
chomp @dirs_out;
# ---------------------------------------
# -- Compare builds to commits
# -- And remove obsolete imgages from
# -- registry
# ---------------------------------------
print "Cleaning up the container registry\n";
foreach my $line (@builds_out)
{
if ( ! grep( /^$line$/, @commits_out ) ) {
my $cmd = "curl -X 'DELETE' -s \"$gitea_api/$line\" -H 'accept: application/json' -u $gitea_user:$gitea_token || true";
print "Removing ${line}\n\n";
my $output = `$cmd`;
print "$output \n";
}
print "Checking if $line is in @commits_out\n\n";
if ( ! grep( /^$line$/, @commits_out ) ) {
my $cmd = "curl -X 'DELETE' -s \"$gitea_api/$line\" -H 'accept: application/json' -u $gitea_user:$gitea_token || true";
print "Removing ${line}\n\n";
my $output = `$cmd`;
print "$output \n";
}
}
print "Cleaning up Minio\n";
foreach my $line (@dirs_out)
{
print "Checking if $line is in @commits_out\n\n";
chop($line);
if ( ! grep( /^$line$/, @commits_out ) ) {
my $cmd = "rclone purge badhouseplants-minio:/badhouseplants-net/$line";
print "Removing ${line}\n\n";
my $output = `$cmd`;
print "$output \n";
}
}

10
scripts/upload-media.sh Executable file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -e
#=== 'prev-commit' solution by o_O Tync
#commit_hash=$(git rev-parse --verify HEAD)
commit=$(git log -1 --pretty="%H%n%ci") # hash \n date
commit_date=$(echo "$commit" | head -2 | tail -1) # 2010-12-28 05:16:23 +0300
commit_hash=$(echo "$commit" | head -1)
echo "$(git rev-parse HEAD)" > /tmp/test
echo "prev_commit='$commit_hash'\ndate='$commit_date'\nbranch='$branch'\n" > /tmp/test.txt

BIN
static/Finish.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/Logo.jpg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/Type.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/android-chrome-192x192.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/android-chrome-512x512.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/apple-touch-icon.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/argocd-vs-helmfile/app-of-apps-main.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/argocd-vs-helmfile/applicationset-test.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/argocd-vs-helmfile/diff-in-ui.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/argocd-vs-helmfile/goldilocks-ui.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/argocd-vs-helmfile/update-in-ui.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/assets/favicon.ico (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
static/dont-use-argocd-for-infrastructure/3-clusters.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/dyn-envs/drone-pipeline.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/favicon-16x16.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/favicon-32x32.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/favicon.ico (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/music/Oveleane - Four Steps Behind.jpg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/music/allanger-Anymore.jpg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/music/allanger-Let_Me_Kill.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/music/allanger-Out_of_Law.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/music/allanger-Waster_Time.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/camel-crush.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/glitchmachines.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/glitchmaker-carla.gif (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/glitchmakesrs-glitch.gif (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/ott-xfer.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/snap-heap.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/tal-chorus.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/valhalla.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-1/wider.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/cardinal.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/deelay-glitch.gif (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/deelay.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/fire.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/gatelab.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/noise-engineering.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/panflow.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/paulxstretch.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/runia-plugin.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/sirt-plugin.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/surge.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-2/virt-vereor.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/eventide-pendulate.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/labs-example.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/mdrummer-example-lfo.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/mdrummer-example.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/mdrummer-lfo-carla.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/mdrummer.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/mguitar-architect.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/mpower-synth.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/native-access.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/protoverb.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/space-piano.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/spitfire-labs-app.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/tyrell.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/vallhalla.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/vcv-rack.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/vital.mp4 (Stored with Git LFS) Normal file

Binary file not shown.

BIN
static/vst-on-linux-3/vst-on-linix-3-cover.png (Stored with Git LFS) Normal file

Binary file not shown.