Compare commits
60 Commits
create-wub
...
1-developi
Author | SHA1 | Date | |
---|---|---|---|
aa87ad7538 | |||
918b075b62 | |||
253d22592a | |||
0b5eb9da8f | |||
7b86516192 | |||
64fd4b50d9 | |||
012021bd93 | |||
6031309d1c | |||
6d7dc16587 | |||
704f4b037a | |||
688d94584d | |||
21801ef374 | |||
52c3416c99 | |||
1ce93a3a9f | |||
042f905bbb | |||
5036bf28fb | |||
26c8f97789 | |||
38d271958b | |||
0b1dadc557 | |||
04e400c1ba | |||
f569e96f7e | |||
23b1aa6143 | |||
e9c8932766 | |||
0f7c3becc8 | |||
e9dad4adab | |||
a9aeb44e05 | |||
b2e9cb0d7d | |||
f16c18f0e8 | |||
32e7e20a3b | |||
88fe02e604 | |||
83fe25f4a4 | |||
3916ee2a23 | |||
643cd7907d | |||
7597cb244e | |||
e6238ab77c | |||
a02f98af92 | |||
68dea24cf2 | |||
ca8d28d6c2 | |||
4ca35fd637 | |||
efcdc46c24 | |||
792601fbb0 | |||
c081879d09 | |||
1748e2ad5f | |||
9abe51223b | |||
86b0b54f56 | |||
6e84d4b6d8 | |||
aa788f30bc | |||
ae45b107eb | |||
67ff2bbdfd | |||
77447a18da | |||
25461b9bd0 | |||
4d72a93220 | |||
136985328a | |||
996a8ed0df | |||
32b08eac39 | |||
beefd5540f | |||
7545d28790 | |||
add04f888b | |||
71b9ab544b | |||
828559a6a1 |
@ -4,8 +4,8 @@
|
||||
node_modules/**/*
|
||||
node_modules
|
||||
|
||||
static/**/*
|
||||
static
|
||||
src/static/**/*
|
||||
src/static
|
||||
|
||||
scripts/**/*
|
||||
scripts
|
||||
|
152
.drone.yml
152
.drone.yml
@ -3,7 +3,7 @@
|
||||
# -- Update the helm chart
|
||||
# ----------------------------------------------
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
type: docker
|
||||
name: Publish the helm chart
|
||||
|
||||
trigger:
|
||||
@ -26,7 +26,7 @@ steps:
|
||||
# -- Build the site and push it to the registry
|
||||
# ----------------------------------------------
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
type: docker
|
||||
name: Build badhouseplants.net
|
||||
|
||||
trigger:
|
||||
@ -41,20 +41,21 @@ steps:
|
||||
environment:
|
||||
GIT_LFS_SKIP_SMUDGE: 1
|
||||
commands:
|
||||
- git clone $DRONE_REMOTE_URL --recurse-submodules .
|
||||
- git checkout $DRONE_COMMIT
|
||||
- git clone $DRONE_REMOTE_URL .
|
||||
- git checkout $DRONE_BRANCH
|
||||
- git submodule update --init --recursive
|
||||
|
||||
- name: Test a build
|
||||
image: git.badhouseplants.net/badhouseplants/hugo-builder
|
||||
depends_on:
|
||||
depends_on:
|
||||
- clone
|
||||
commands:
|
||||
- hugo
|
||||
|
||||
- hugo -s ./src
|
||||
|
||||
- name: Build and push the docker image
|
||||
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a
|
||||
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532
|
||||
privileged: true
|
||||
depends_on:
|
||||
depends_on:
|
||||
- Test a build
|
||||
environment:
|
||||
GITEA_TOKEN:
|
||||
@ -63,8 +64,8 @@ steps:
|
||||
- ./scripts/build-container.pl
|
||||
|
||||
- name: Sync pictures from lfs to Minio
|
||||
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a
|
||||
depends_on:
|
||||
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532
|
||||
depends_on:
|
||||
- Test a build
|
||||
environment:
|
||||
RCLONE_CONFIG_CONTENT:
|
||||
@ -74,89 +75,27 @@ steps:
|
||||
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
|
||||
- ./scripts/upload-media.pl
|
||||
|
||||
- name: Deploy a preview ApplicationSet
|
||||
image: alpine/k8s:1.24.10
|
||||
when:
|
||||
branch:
|
||||
exclude:
|
||||
- main
|
||||
- name: Deploy the application
|
||||
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532
|
||||
depends_on:
|
||||
- Build and push the docker image
|
||||
- Sync pictures from lfs to Minio
|
||||
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
|
||||
depends_on:
|
||||
- Build and push the docker image
|
||||
- Sync pictures from lfs to Minio
|
||||
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
|
||||
- yq -i '. *= load("./kube/applicationset.yaml")' /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
|
||||
depends_on:
|
||||
- Deploy a main ApplicationSet
|
||||
- Deploy a preview ApplicationSet
|
||||
environment:
|
||||
ARGOCD_SERVER:
|
||||
from_secret: ARGOCD_SERVER
|
||||
ARGOCD_AUTH_TOKEN:
|
||||
from_secret: ARGOCD_AUTH_TOKEN
|
||||
ARGO_GITHUB_OAUTH_KEY:
|
||||
from_secret: GITHUB_OAUTH_KEY
|
||||
ARGO_GOOGLE_OAUTH_KEY:
|
||||
from_secret: GOOGLE_OAUTH_KEY
|
||||
commands:
|
||||
- argocd app sync -l app=badhouseplants -l branch=$DRONE_BRANCH
|
||||
- argocd app wait -l app=badhouseplants -l branch=$DRONE_BRANCH
|
||||
- ./scripts/deploy-app.pl
|
||||
|
||||
- name: Cleanup everything
|
||||
image: rclone/rclone:latest
|
||||
image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532
|
||||
depends_on:
|
||||
- Sync application
|
||||
- Deploy the application
|
||||
environment:
|
||||
RCLONE_CONFIG_CONTENT:
|
||||
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
|
||||
@ -169,44 +108,29 @@ steps:
|
||||
from_secret: ARGOCD_AUTH_TOKEN
|
||||
commands:
|
||||
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
|
||||
- apk update
|
||||
- apk add curl jq perl git yq
|
||||
- curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
|
||||
- install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
|
||||
- rm argocd-linux-amd64
|
||||
- ./scripts/cleanup.pl
|
||||
|
||||
---
|
||||
# ----------------------------------------------
|
||||
# -- Upload a newer version of my CV
|
||||
# ----------------------------------------------
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: CV Builder
|
||||
type: docker
|
||||
name: Spell-Checker
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- main
|
||||
event:
|
||||
- push
|
||||
|
||||
steps:
|
||||
- name: Build the CV
|
||||
image: ghcr.io/puppeteer/puppeteer
|
||||
commands:
|
||||
- cp -R ./content/cv/* $HOME
|
||||
- cd $HOME
|
||||
- npm install md-to-pdf
|
||||
- npx md-to-pdf index.md
|
||||
- mkdir $DRONE_WORKSPACE/cv
|
||||
- mv index.pdf $DRONE_WORKSPACE/cv/n.rodionov.pdf
|
||||
- push
|
||||
clone:
|
||||
disable: true
|
||||
|
||||
- name: Upload the CV
|
||||
image: rclone/rclone:latest
|
||||
steps:
|
||||
- name: clone
|
||||
image: alpine/git
|
||||
environment:
|
||||
RCLONE_CONFIG_CONTENT:
|
||||
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
|
||||
RCLONE_CONFIG: /tmp/rclone.conf
|
||||
GIT_LFS_SKIP_SMUDGE: 1
|
||||
commands:
|
||||
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
|
||||
- rclone copy -P $DRONE_WORKSPACE/cv badhouseplants-minio:/public-download
|
||||
- git clone $DRONE_REMOTE_URL --recurse-submodules .
|
||||
- git checkout $DRONE_BRANCH
|
||||
|
||||
- name: Spell-Checker
|
||||
image: node
|
||||
commands:
|
||||
- npm i markdown-spellcheck -g
|
||||
- mdspell "src/content/**/*.md" -n -r
|
||||
|
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -1,2 +1,2 @@
|
||||
static/** filter=lfs diff=lfs merge=lfs -text
|
||||
static/**/* filter=lfs diff=lfs merge=lfs -text
|
||||
src/static/** filter=lfs diff=lfs merge=lfs -text
|
||||
src/static/**/* filter=lfs diff=lfs merge=lfs -text
|
||||
|
9
.gitignore
vendored
9
.gitignore
vendored
@ -1,5 +1,4 @@
|
||||
node_modules
|
||||
#static
|
||||
content/cv/index.pdf
|
||||
public
|
||||
resources
|
||||
src/node_modules
|
||||
src/public
|
||||
src/resources
|
||||
.hugo_build.lock
|
||||
|
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -1,3 +1,5 @@
|
||||
[submodule "themes/papermod"]
|
||||
path = themes/papermod
|
||||
[submodule "src/themes/papermod"]
|
||||
path = src/themes/papermod
|
||||
url = https://github.com/adityatelange/hugo-PaperMod.git
|
||||
branch = v7.0
|
||||
|
||||
|
144
.spelling
Normal file
144
.spelling
Normal file
@ -0,0 +1,144 @@
|
||||
# markdown-spellcheck spelling configuration file
|
||||
# Format - lines beginning # are comments
|
||||
# global dictionary is at the start, file overrides afterwards
|
||||
# one word per line, to define a file override use ' - filename'
|
||||
# where filename is relative to this configuration file
|
||||
WIP
|
||||
envs
|
||||
anymore
|
||||
hostname
|
||||
hostnames
|
||||
Dockerfile
|
||||
helmfile
|
||||
k8s
|
||||
env
|
||||
dir
|
||||
dev'n'stages
|
||||
oi
|
||||
minio
|
||||
ArgoCD
|
||||
setups
|
||||
SRE
|
||||
autoscaler
|
||||
gitea
|
||||
vendoring
|
||||
cli
|
||||
vpa
|
||||
ok
|
||||
cmp
|
||||
config
|
||||
GitOps
|
||||
argo
|
||||
argocding
|
||||
cluster-1
|
||||
cluster-2
|
||||
cluster-3
|
||||
kubernetes
|
||||
argocd
|
||||
helmfiles
|
||||
plugin
|
||||
helmfile.yaml
|
||||
cleanup
|
||||
serie
|
||||
backend
|
||||
js
|
||||
frontend
|
||||
ShowToc
|
||||
cover.png
|
||||
allanger
|
||||
DIY
|
||||
DevOps
|
||||
funkwhale
|
||||
PSY
|
||||
bandcamp
|
||||
soundcloud
|
||||
spotify
|
||||
deezer
|
||||
prog-rock
|
||||
oveleane
|
||||
IDM
|
||||
gitlab
|
||||
bitwarden
|
||||
elasticsearch
|
||||
grafana
|
||||
lifecycle
|
||||
auditable
|
||||
the-first-production-grafaba
|
||||
grafana
|
||||
applicationsets
|
||||
helm-releases-v2
|
||||
yaml
|
||||
CR
|
||||
minecraft
|
||||
github
|
||||
ddosed
|
||||
VST
|
||||
Xfer
|
||||
plugins
|
||||
yabridgectl
|
||||
yabridge
|
||||
DAW
|
||||
polyverse
|
||||
camelcrusher
|
||||
standalone
|
||||
url
|
||||
glitchmachines
|
||||
MacBook
|
||||
configs
|
||||
behaviour
|
||||
FreqEcho
|
||||
DSP
|
||||
Supermassive
|
||||
Ableton
|
||||
Softube
|
||||
center
|
||||
iZotope
|
||||
V2
|
||||
auth
|
||||
README.md
|
||||
TAL-Chorus-LX
|
||||
badhouseplants
|
||||
Deelay
|
||||
Gatelab
|
||||
Filterstep
|
||||
Panflow
|
||||
PaulXStretch
|
||||
Audiomodern
|
||||
Kushview
|
||||
JUCE
|
||||
Melda
|
||||
MDrummer
|
||||
GBs
|
||||
laggy
|
||||
MDrumReplacer
|
||||
MPowerSynth
|
||||
MGuitarArchitect
|
||||
u-he
|
||||
TyrellN6
|
||||
Tyrell
|
||||
install.sh
|
||||
MGuitarArchitect
|
||||
Amazona.de.
|
||||
Bitwig
|
||||
ProjectSAM
|
||||
Pendulate
|
||||
Protoverb
|
||||
Eurorack
|
||||
S3
|
||||
XT
|
||||
Ruina
|
||||
VCV
|
||||
LFO
|
||||
beatmaker
|
||||
- src/themes/papermod/README.md
|
||||
PaperMod
|
||||
hugo-paper
|
||||
og
|
||||
ExampleSite
|
||||
exampleSite
|
||||
pipelining
|
||||
Fuse.js
|
||||
webpack
|
||||
nodejs
|
||||
Pagespeed
|
||||
Highlight.js
|
4
Containerfile
Normal file
4
Containerfile
Normal file
@ -0,0 +1,4 @@
|
||||
FROM git.badhouseplants.net/badhouseplants/hugo-container:451ffcefe9803644a65172b04e34392564ce8743
|
||||
WORKDIR /src
|
||||
COPY ./src /src
|
||||
ENTRYPOINT ["hugo"]
|
@ -1,4 +0,0 @@
|
||||
FROM git.badhouseplants.net/badhouseplants/hugo-builder
|
||||
WORKDIR /src
|
||||
COPY . /src
|
||||
ENTRYPOINT ["hugo"]
|
@ -1,4 +1,8 @@
|
||||
# Badhouseplants NET
|
||||
## About
|
||||
- To be done
|
||||
|
||||
## Static content
|
||||
Storing static content in the repo is painful, because there are massive. That's why for storing them I'm using a S3 bucket that is publicly available for downstream operations
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@ apiVersion: v2
|
||||
name: badhouseplants-net
|
||||
description: A Helm chart for Kubernetes
|
||||
type: application
|
||||
version: 0.6.0
|
||||
version: 0.7.1
|
||||
appVersion: "4.20.0"
|
||||
dependencies:
|
||||
- name: remark42
|
||||
|
@ -5,7 +5,7 @@ namespace:
|
||||
labels:
|
||||
istio-injection: enabled
|
||||
enabled: true
|
||||
name: badhouseplants-application
|
||||
name: badhouseplants-main
|
||||
|
||||
nginx:
|
||||
container:
|
||||
|
@ -1,27 +0,0 @@
|
||||
---
|
||||
title: About
|
||||
date: 2023-01-24T09:26:52+01:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
|
||||
It was supposed to be just yet another web page with musical releases reviews, but after trying to write something like that, I've found out that I'm not good at it. So I've decided to start a blog where I can write anything that comes to my mind.
|
||||
|
||||
|
||||
<!--  -->
|
||||
|
||||
> The last build is [](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net)
|
||||
|
||||
### What is Bad Houseplants?
|
||||
|
||||
> **allanger**
|
||||
>
|
||||
> *Actually, I'm not sure yet. I wanted it to be something about music, but I found out that musical industry is not very welcoming, and I don't know what exactly I > can do there. Creating music is somehow an intimate process to me, so I can't share a lot about it. The whole distributing thing is a black-box, and I wouldn't like to be a part of it, until anything is changed. I wanted to do musical reviews, but there are tons of guys who already do it a way better than I can. So I've given up on music here. I still hope that one day I'll open a recording studio under this name, but I'm not sure when it's even going to be possible. The second thing that I can talk about is IT. I think it can be interesting, but I don't want to kind of stigmatized as an IT blogger. And then I've decided that I would like to write something about indie culture, about DIY philosophy and all this punk related stuff. So let's say that is a blog about indie*
|
||||
|
||||
### Wanna join?
|
||||
|
||||
If you want to publish anything here, I don't mind. But for doing that you need to have at least basic `git` knowledge because this blog is written as code. You can check the [source code](https://git.badhouseplants.net/badhouseplants/badhouseplants-net) to understand if you're ready or not. I'm hosting my own `Gitea` instance, so you will have to request an account ([just email me](mailto:allanger@zohomail.com) or find me on [telegram](https://t.me/allanger)), when you got one, you're ready to start writing. If you have any questions about how to start, I'm always open for a conversation.
|
||||
|
||||
Thanks,
|
||||
|
||||
Oi!
|
@ -1,108 +0,0 @@
|
||||
---
|
||||
title: "Curriculum Vitae (CV)"
|
||||
date: 2023-02-11T18:29:00+01:00
|
||||
draft: false
|
||||
ShowToc: true
|
||||
---
|
||||
# Nikolai Rodionov
|
||||
|
||||
```
|
||||
> Location: Düsseldorf, Germany
|
||||
> Email: allanger@zohomail.com (preffered)
|
||||
> Phone: 015223284008
|
||||
> Github: https://github.com/allanger
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## About me
|
||||
<p align="center">
|
||||
<img src="./myself.jpeg" alt="drawing" width="30%"/>
|
||||
</p>
|
||||
|
||||
I'm a DevOps engineer (or SRE if you wish) with 5++ years of hands-on experience with a decent amount of tools that are most probably used or going to be used in your company. One of the most important tools that I love working with and want to continue working with, is Kubernetes. At least, while I don't see any better alternative to it. I think that containers themselves are one of coolest inventions in development, and I'm trying to use them as long as it's possible. Also, I believe that every routine must be automated, because routing is a boring job that lets people lose focus and make mistakes.
|
||||
|
||||
I think that there are several things that a good SRE or DevOps engineer must be able to do:
|
||||
- To build reliable and stable infrastructure
|
||||
- Keep this infrastructure up-to-date
|
||||
- Keep all the source and instructions of this infrastructure clean and simple
|
||||
- Avoid a human factor as long as possible
|
||||
- And when it's not possible to avoid it, not to be afraid to take responsibility
|
||||
|
||||
Also, I think it's important that before implementing anything, an engineer has understood all the requirements and checked tools that can fulfil them. I often see, how people try to use a tool for its name but not for its functionality, and hence they have to do a lot of additional work and deal with compromises. And if nothing really can fulfil those requirements, you need not be afraid of writing something new *and open-source it*.
|
||||
|
||||
<div class="page-break"></div>
|
||||
|
||||
## 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 - 01.2023
|
||||
|
||||
```
|
||||
| GCloud - Microsoft Azure
|
||||
| Linux - Containers - Kubernetes - Helm - Helmfile
|
||||
| Percona Mysql - Postgresql
|
||||
| Bash
|
||||
| Prometheus - Grafana - Elasticsearch - Kibana
|
||||
| ArgoCD - Gitlab CI - Github Actions
|
||||
| Sops
|
||||
| Ansible
|
||||
```
|
||||
---
|
||||
|
||||
**Itigris**: DevOps Engineer
|
||||
> 07.2019 - 12.2021
|
||||
|
||||
```
|
||||
| AWS - Yandex Cloud
|
||||
| Linux - Containers - Kubernetes - Helm - Helmfile - Kustomize
|
||||
| Bash
|
||||
| Gitlab CI - Drone - ArgoCD
|
||||
| Postgresql - Redis
|
||||
| Java - JS - Go
|
||||
| Ansible - Terraform
|
||||
| Prometheus - Grafana - Loki - Elasticsearch - Kibana
|
||||
```
|
||||
---
|
||||
|
||||
**Etersoft**: DevOps Engineer
|
||||
> 03.2017 - 06.2019
|
||||
|
||||
```
|
||||
| Bare metal - Proxmox - Virtual Box
|
||||
| Linux - Containers - Networks
|
||||
| Bash - Perl
|
||||
| Mysql - Postgresql
|
||||
| Minio - Ceph
|
||||
| Gitlab CI
|
||||
| Ansible
|
||||
```
|
||||
|
||||
|
||||
## A little bit more about me
|
||||
|
||||
- I love to work with `Kubernetes`, but not with `yaml`.
|
||||
- I'm a huge fan of [Helmfile](https://github.com/helmfile/helmfile).
|
||||
- I have written several small cli tools in Rust, that you might find in my [GitHub profile pins](https://github.com/allanger) (they are not perfect, but I'm working on it).
|
||||
- I'm contributing to [db-operator](https://github.com/kloeckner-i/db-operator).
|
||||
- I'm trying to automate everything until I'm losing control over something that is automated.
|
||||
- I love Perl, although I don't even remember how to write code with it, but I would be somehow thrilled to have any ability to work with it in production
|
||||
- I also think that everything is better in Rust, or at least in Go *(if Bash is not enough)*
|
||||
|
||||
I have a blog (written-as-code) that is deployed to K8s (https://badhouseplants.net/), with the source code stored in a self-hosted Gitea, that is also deployed to K8s alongside the CI/CD system where this blog is being built and published. This CV is also being built as a part of the CI process, and then uploaded to `minio` storage that is also ~~surprisingly~~ running in this cluster. So you can download the latest version of CV here: <https://s3.badhouseplants.net/public-download/n.rodionov.pdf>
|
||||
|
||||
> But I can't guarantee 100% availability because it's a one-node k8s, and sometimes I need to do a maintenance work
|
Binary file not shown.
Before Width: | Height: | Size: 104 KiB |
@ -1,95 +0,0 @@
|
||||
---
|
||||
title: "Music"
|
||||
date: 2023-01-31T13:52:43+01:00
|
||||
draft: false
|
||||
ShowToc: true
|
||||
|
||||
---
|
||||
Everything that's created by me, can be found on my [funkwhale instance](https://funkwhale.badhouseplants.net). But I'm only uploading `lossy` there. I was trying to upload lossless, but then it either doesn't really work with my Android App, or it's hard to manage. And it needs a way more disk that way. So if you want to listnen to lossless, go to my [Bandcamp](https://allanger.bandcamp.com/). *A lot of tracks are still not there, but they will be there soon*. I also have a [SoundCloud account](https://soundcloud.com/allanger) and I try to publish everything there.
|
||||
|
||||
|
||||
---
|
||||
|
||||
### allanger
|
||||
|
||||
[Spotify](https://open.spotify.com/artist/1VPAs75xrhaXhCIIHsgF02) - [Apple Music](https://music.apple.com/us/artist/allanger/1617855325) - [Deezer](https://www.deezer.com/us/artist/117780712) - [SoundCloud](https://soundcloud.com/allanger) - [Bandcamp](https://allanger.bandcamp.com/) - [Funkwhale](https://funkwhale.badhouseplants.net/library/artists/3/)
|
||||
|
||||
|
||||
#### Out of Law
|
||||
>
|
||||
>Release Date: 2022-06-08
|
||||
>
|
||||
>Genre: Alternative
|
||||
>
|
||||
>Sub Genre: Punk
|
||||
|
||||
[Spotify](spotify:album:4RACKNtJqPXZOB6UsmwxKp) - [Apple Music](https://music.apple.com/us/album/1625562031) - [Deezer](https://www.deezer.com/us/album/321014447) - [SoundCloud](https://soundcloud.com/allanger/out-of-law) - [Bandcamp](https://allanger.bandcamp.com/album/out-of-law) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/5/)
|
||||
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=5"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
#### Wasted Time
|
||||
>
|
||||
>Release Date: 2022-05-17
|
||||
>
|
||||
>Genre: Punk/Rock
|
||||
>
|
||||
>Sub Genre: Prog-Rock/Art Rock
|
||||
|
||||
[Spotify](spotify:album:2zOW72GHTTKIZAbwjmxili) - [Apple Music](https://music.apple.com/us/album/1617855666) - [Deezer](https://www.deezer.com/us/album/308544627) - [SoundCloud](https://soundcloud.com/allanger/wasted-time?si=59896836701c48b6a07f7af96043faaf&utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing) - [Bandcamp](https://allanger.bandcamp.com/album/wasted-time) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/4/)
|
||||
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=4"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
#### Let Me Kill
|
||||
> In this song, I'm using samples from a YouTube video, and so I'm not sure that I can distribute on all platforms. That's why it exists only on SoundCloud, Funkwhale, and Bandcamp
|
||||
>
|
||||
>Release Date: 2021-10-15
|
||||
>
|
||||
>Genre: Trap
|
||||
|
||||
[SoundCloud](https://soundcloud.com/allanger/let-me-kill) - [Bandcamp](https://allanger.bandcamp.com/track/let-me-kill) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/7/)
|
||||
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=7"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
#### Anymore
|
||||
> In this song, I'm using samples from a YouTube video, and so I'm not sure that I can distribute on all platforms. That's why it exists only on SoundCloud and Funkwhale
|
||||
>
|
||||
>Release Date: 2018-12-26
|
||||
>
|
||||
>Genre: Indie
|
||||
>
|
||||
>Sub Genre: Lo-Fi Indie
|
||||
|
||||
|
||||
[SoundCloud](https://soundcloud.com/allanger/anymore) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/11/)
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=11"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
### Oveleane
|
||||
|
||||
> It's another project made by me, I just thought that that electronic stuff won't fit well in the allanger's profile, and so decided to separate them. But it's still allanger, you know...
|
||||
|
||||
[Spotify](https://open.spotify.com/artist/2PKE1XvwP82LCacM5q6rCx?si=hJyJWcEgR4mZLkjbCso45A) - [Apple Music](https://music.apple.com/us/artist/oveleane/1654951021) - [Deezer](https://www.deezer.com/us/artist/190392997)
|
||||
|
||||
|
||||
#### Four Steps Behind
|
||||
>
|
||||
>Release Date: 2022-12-05
|
||||
>
|
||||
>Genre: Electronic
|
||||
>
|
||||
>Sub Genre: IDM/Experimental
|
||||
|
||||
[Spotify](https://open.spotify.com/album/1RjB1xLoD2JXmWuBjGegCN?si=fIsGrOfoQRaeKu9f-Oh0dw) - [Apple Music](https://music.apple.com/us/album/1654953305) - [Deezer](https://www.deezer.com/us/album/377293977) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/1/)
|
||||
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="330" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=1"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
|
@ -1,53 +0,0 @@
|
||||
---
|
||||
title: "Argocd Dynamic Environment per Branch Part 2"
|
||||
date: 2023-03-29T17:31:20+02:00
|
||||
draft: true
|
||||
ShowToc: true
|
||||
cover:
|
||||
image: "cover.png"
|
||||
caption: "Argocd Dynamic Environment per Branch Part 2"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
---
|
||||
|
||||
So it's been a while since the last post. And I'd like to continue the topic, because I've updated some things. But at the same time I'd like to talk about the setup that I've got and why I think it is good.
|
||||
|
||||
First, I'd like to show how I fixed the Minio issue from the previous post.
|
||||
|
||||
>I’m using Minio as a storage for pictures, and currently all pictures (and other files) are stored in one folder regardless of the environment.
|
||||
|
||||
I've started using `git lfs` for media data. But I still want to have small docker images so I've decided to add some logi around pushing media files to `Minio`. So I've added a Drone job:
|
||||
```YAML
|
||||
- name: Sync pictures from lfs to Minio
|
||||
image: rclone/rclone:latest
|
||||
when:
|
||||
branch:
|
||||
exclude:
|
||||
- main
|
||||
environment:
|
||||
RCLONE_CONFIG_CONTENT:
|
||||
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
|
||||
RCLONE_CONFIG: /tmp/rclone.conf
|
||||
commands:
|
||||
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
|
||||
- apk update
|
||||
- apk add git make
|
||||
- make upload_static
|
||||
|
||||
- name: Sync pictures to the main Minio bucket
|
||||
image: rclone/rclone:latest
|
||||
when:
|
||||
branch:
|
||||
- main
|
||||
environment:
|
||||
RCLONE_CONFIG_CONTENT:
|
||||
from_secret: RCLONE_CONFIG_CONTENT_PRIVATE
|
||||
RCLONE_CONFIG: /tmp/rclone.conf
|
||||
commands:
|
||||
- echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG
|
||||
- apk update
|
||||
- apk add git make
|
||||
- make sync_static_with_main
|
||||
```
|
||||
|
||||
|
@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "Create wubs with Vital"
|
||||
date: 2023-04-23T17:49:35+02:00
|
||||
draft: true
|
||||
ShowToc: true
|
||||
cover:
|
||||
image: "cover.png"
|
||||
caption: "Create wubs in Vital"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
tags: ['music', 'sound-design', 'vst']
|
||||
---
|
||||
|
||||
First, if you don't know what Vital is, you should definitely check it out. It's an awesome synth plugin that lets you create almost anything that comes to your mind without spending you whole life trying to understand what each button does. I'd say it's a perfect example of good UX/UI design. And in case you don't have it yet, you just [go here and get it](https://vital.audio/).
|
||||
|
||||
If you already have it, we can go further. The only thing that you really need to use to create a cool **wub** synth, it's an `LFO`. What's that, you ask? It's an
|
@ -1,26 +0,0 @@
|
||||
---
|
||||
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:
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
@ -1,10 +0,0 @@
|
||||
---
|
||||
title: "Sounds"
|
||||
date: 2023-01-31T13:52:43+01:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
---
|
||||
|
||||
Here you can download different presets and sounds
|
||||
|
||||
|
@ -2,51 +2,21 @@ apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
labels:
|
||||
application: $APPLICATON
|
||||
branch: $GIT_BRANCH
|
||||
commit_sha: $GIT_COMMIT_SHA
|
||||
name: $APPLICATON-$GIT_BRANCH
|
||||
application: badhouseplants
|
||||
branch: $ARGO_APP_BRANCH
|
||||
commit_sha: $ARGO_APP_IMAGE_TAG
|
||||
name: badhouseplants-$ARGO_APP_BRANCH
|
||||
namespace: argo-system
|
||||
spec:
|
||||
destination:
|
||||
namespace: $APPLICATON-$GIT_BRANCH
|
||||
namespace: badhouseplants-$ARGO_APP_BRANCH
|
||||
server: https://kubernetes.default.svc
|
||||
project: default
|
||||
project: badhouseplants
|
||||
source:
|
||||
chart: badhouseplants-net
|
||||
targetRevision: $HELM_CHART_VERSION
|
||||
targetRevision: $ARGO_APP_CHART_VERSION
|
||||
helm:
|
||||
valueFiles:
|
||||
- values.yaml
|
||||
values: |
|
||||
namespace:
|
||||
name: badhouseplants-create-wubs-in-vital
|
||||
labels:
|
||||
istio-injection: disabled
|
||||
istio:
|
||||
hosts:
|
||||
- create-wubs-in-vital-dev.badhouseplants.net
|
||||
annotations:
|
||||
link.argocd.argoproj.io/env: https://create-wubs-in-vital-dev.badhouseplants.net/
|
||||
link.argocd.argoproj.io/remark42: https://remark42-create-wubs-in-vital-dev.badhouseplants.net/web
|
||||
link.argocd.argoproj.io/build: DRONE_BUILD_LINK
|
||||
hugo:
|
||||
image:
|
||||
tag: ee4efc6107541657f405a3dd9b7ee238d0e69e7b
|
||||
baseURL: https://create-wubs-in-vital-dev.badhouseplants.net/
|
||||
buildDrafts: true
|
||||
env:
|
||||
HUGO_PARAMS_GITBRANCH: create-wubs-in-vital
|
||||
HUGO_PARAMS_REMARK42URL: https://remark42-create-wubs-in-vital-dev.badhouseplants.net
|
||||
remark42:
|
||||
istio:
|
||||
hosts:
|
||||
- remark42-create-wubs-in-vital-dev.badhouseplants.net
|
||||
settings:
|
||||
url: https://remark42-create-wubs-in-vital-dev.badhouseplants.net/
|
||||
auth:
|
||||
anonymous: true
|
||||
secretKey: b8a41781b2c1ba2ecf49e4e7
|
||||
rclone:
|
||||
command: "rclone copy -P badhouseplants-public:/badhouseplants-net/ee4efc6107541657f405a3dd9b7ee238d0e69e7b /static"
|
||||
values: __DUMMY__
|
||||
repoURL: https://git.badhouseplants.net/api/packages/badhouseplants/helm
|
||||
|
34
kube/project.yaml
Normal file
34
kube/project.yaml
Normal file
@ -0,0 +1,34 @@
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: AppProject
|
||||
metadata:
|
||||
name: badhouseplants
|
||||
namespace: argo-system
|
||||
finalizers:
|
||||
- resources-finalizer.argocd.argoproj.io
|
||||
spec:
|
||||
description: BadHouseplants Blog
|
||||
sourceRepos:
|
||||
- '*'
|
||||
|
||||
destinations:
|
||||
- namespace: badhouseplants-*
|
||||
server: https://kubernetes.default.svc
|
||||
name: in-cluster
|
||||
|
||||
# Deny all cluster-scoped resources from being created, except for Namespace
|
||||
clusterResourceWhitelist:
|
||||
- group: ''
|
||||
kind: Namespace
|
||||
|
||||
# Allow all namespaced-scoped resources to be created, except for ResourceQuota, LimitRange, NetworkPolicy
|
||||
namespaceResourceBlacklist:
|
||||
- group: ''
|
||||
kind: ResourceQuota
|
||||
- group: ''
|
||||
kind: LimitRange
|
||||
- group: ''
|
||||
kind: NetworkPolicy
|
||||
|
||||
# Enables namespace orphaned resource monitoring.
|
||||
orphanedResources:
|
||||
warn: false
|
@ -1,24 +1,28 @@
|
||||
- value: |
|
||||
hugo:
|
||||
image:
|
||||
tag: $ARGO_APP_IMAGE_TAG
|
||||
istio:
|
||||
annotations:
|
||||
link.argocd.argoproj.io/env: https://badhouseplants.net/
|
||||
link.argocd.argoproj.io/build: $DRONE_BUILD_LINK
|
||||
link.argocd.argoproj.io/remark42: https://remark42.badhouseplants.net/web
|
||||
remark42:
|
||||
settings:
|
||||
secret: $ARGO_REMARK_SECRET
|
||||
oauth:
|
||||
github:
|
||||
enabled: true
|
||||
key: 1fb3d33a62b074bc0ea0
|
||||
secret: $ARGO_GITHUB_OAUTH_KEY
|
||||
google:
|
||||
enabled: true
|
||||
key: 966815964055-m9t7leuj1arqimqu2pvbs1k10cg54gcg.apps.googleusercontent.com
|
||||
secret: $ARGO_GOOGLE_OAUTH_KEY
|
||||
storage:
|
||||
requestedSize: 300Mi
|
||||
|
||||
---
|
||||
values: |
|
||||
hugo:
|
||||
image:
|
||||
tag: $ARGO_APP_IMAGE_TAG
|
||||
env:
|
||||
HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG
|
||||
istio:
|
||||
annotations:
|
||||
link.argocd.argoproj.io/env: https://badhouseplants.net/
|
||||
link.argocd.argoproj.io/build: $DRONE_BUILD_LINK
|
||||
link.argocd.argoproj.io/remark42: https://remark42.badhouseplants.net/web
|
||||
remark42:
|
||||
settings:
|
||||
secret: $ARGO_REMARK_SECRET
|
||||
admin:
|
||||
sharedEmail: allanger@zohomail.com
|
||||
oauth:
|
||||
github:
|
||||
enabled: true
|
||||
key: 1fb3d33a62b074bc0ea0
|
||||
secret: $ARGO_GITHUB_OAUTH_KEY
|
||||
google:
|
||||
enabled: true
|
||||
key: 966815964055-m9t7leuj1arqimqu2pvbs1k10cg54gcg.apps.googleusercontent.com
|
||||
secret: $ARGO_GOOGLE_OAUTH_KEY
|
||||
storage:
|
||||
requestedSize: 300Mi
|
||||
|
@ -1,32 +1,33 @@
|
||||
---
|
||||
- value: |
|
||||
namespace:
|
||||
name: badhouseplants-$ARGO_APP_BRANCH
|
||||
labels:
|
||||
istio-injection: disabled
|
||||
values: |
|
||||
namespace:
|
||||
name: badhouseplants-$ARGO_APP_BRANCH
|
||||
labels:
|
||||
istio-injection: disabled
|
||||
istio:
|
||||
hosts:
|
||||
- $ARGO_APP_HOSTNAME
|
||||
annotations:
|
||||
link.argocd.argoproj.io/env: https://$ARGO_APP_HOSTNAME/
|
||||
link.argocd.argoproj.io/remark42: https://remark42-$ARGO_APP_HOSTNAME/web
|
||||
link.argocd.argoproj.io/build: $DRONE_BUILD_LINK
|
||||
hugo:
|
||||
image:
|
||||
tag: $ARGO_APP_IMAGE_TAG
|
||||
baseURL: https://$ARGO_APP_HOSTNAME/
|
||||
buildDrafts: true
|
||||
env:
|
||||
HUGO_PARAMS_GITBRANCH: $ARGO_APP_BRANCH
|
||||
HUGO_PARAMS_REMARK42URL: https://remark42-$ARGO_APP_HOSTNAME
|
||||
HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG
|
||||
remark42:
|
||||
istio:
|
||||
hosts:
|
||||
- $ARGO_APP_HOSTNAME
|
||||
annotations:
|
||||
link.argocd.argoproj.io/env: https://$ARGO_APP_HOSTNAME/
|
||||
link.argocd.argoproj.io/remark42: https://remark42-$ARGO_APP_HOSTNAME/web
|
||||
link.argocd.argoproj.io/build: $DRONE_BUILD_LINK
|
||||
hugo:
|
||||
image:
|
||||
tag: $ARGO_APP_IMAGE_TAG
|
||||
baseURL: https://$ARGO_APP_HOSTNAME/
|
||||
buildDrafts: true
|
||||
env:
|
||||
HUGO_PARAMS_GITBRANCH: $ARGO_APP_BRANCH
|
||||
HUGO_PARAMS_REMARK42URL: https://remark42-$ARGO_APP_HOSTNAME
|
||||
remark42:
|
||||
istio:
|
||||
hosts:
|
||||
- remark42-$ARGO_APP_HOSTNAME
|
||||
settings:
|
||||
url: https://remark42-$ARGO_APP_HOSTNAME/
|
||||
auth:
|
||||
anonymous: true
|
||||
secretKey: $ARGO_REMARK42_SECRET
|
||||
rclone:
|
||||
command: "rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static"
|
||||
- remark42-$ARGO_APP_HOSTNAME
|
||||
settings:
|
||||
url: https://remark42-$ARGO_APP_HOSTNAME/
|
||||
auth:
|
||||
anonymous: true
|
||||
secretKey: $ARGO_REMARK_SECRET
|
||||
rclone:
|
||||
command: 'rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static'
|
||||
|
@ -17,16 +17,16 @@ my $image_name = $ENV{'DRONE_REPO'} || "badhouseplants/badhouseplants-net";
|
||||
my $tag = "$container_registry/$image_name:$git_commit_sha";
|
||||
my $username = $ENV{'DRONE_USERNAME'} || "allanger";
|
||||
my $password = $ENV{'GITEA_TOKEN'} || "YOU NOT AUTHORIZED, PAL";
|
||||
print `buildah login --username $username --password $password $container_registry` or die;
|
||||
print `buildah build -t $tag .` or die;
|
||||
print `buildah push $tag` or die;
|
||||
print `buildah login --username $username --password $password $container_registry` or die $!;
|
||||
print `buildah build -t $tag .` or die $!;
|
||||
print `buildah push $tag` or die $!;
|
||||
# -------------------------------------------------
|
||||
# -- Push the lates if the branch is main
|
||||
# -- Push the latest if the branch is main
|
||||
# -------------------------------------------------
|
||||
if ( $git_branch eq $main_branch) {
|
||||
my $latest_tag = "$container_registry/$image_name:latest";
|
||||
print `buildah tag $tag $latest_tag` or die;
|
||||
print `buildah push $latest_tag` or die;
|
||||
print `buildah tag $tag $latest_tag` or die $!;
|
||||
print `buildah push $latest_tag` or die $!;
|
||||
}
|
||||
|
||||
print "Thanks!\n";
|
||||
|
@ -2,26 +2,69 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $chart_version = `cat chart/Chart.yaml | yq '.version'` or die;
|
||||
my $chart_version = `cat chart/Chart.yaml | yq '.version'` or die $1;
|
||||
chomp($chart_version);
|
||||
|
||||
my $git_branch = `git rev-parse --abbrev-ref HEAD`;
|
||||
chomp($git_branch);
|
||||
my $git_commit_sha = `git rev-parse HEAD`;
|
||||
chomp($git_commit_sha);
|
||||
my $main_branch = "main";
|
||||
|
||||
print
|
||||
print $chart_version;
|
||||
# - 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
|
||||
# - yq -i '. *= load("./kube/applicationset.yaml")' /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
|
||||
#
|
||||
my $main_branch = "main";
|
||||
my $values = "";
|
||||
my $remark_secret = `openssl rand -hex 12`;
|
||||
chomp($remark_secret);
|
||||
|
||||
$ENV{'ARGO_APP_CHART_VERSION'} = $chart_version;
|
||||
$ENV{'ARGO_APP_BRANCH'} = $git_branch;
|
||||
$ENV{'ARGO_APP_HOSTNAME'} = "$git_branch-dev.badhouseplants.net";
|
||||
$ENV{'ARGO_APP_IMAGE_TAG'} = $git_commit_sha;
|
||||
$ENV{'ARGO_REMARK_SECRET'} = $remark_secret;
|
||||
|
||||
# ----------------------------------
|
||||
# -- Fill the Application manifest
|
||||
# -- with correct values
|
||||
# ----------------------------------
|
||||
if ($git_branch eq $main_branch) {
|
||||
print "Using the main values file\n";
|
||||
print `envsubst < ./kube/values-main.yaml > /tmp/values.yaml` or die $!;
|
||||
} else {
|
||||
print "Using the preview values file\n";
|
||||
print `envsubst < ./kube/values-preview.yaml > /tmp/values.yaml` or die $!;
|
||||
}
|
||||
print `yq -i '.values' /tmp/values.yaml` or die $!;
|
||||
print `envsubst < ./kube/application.yaml > /tmp/application.yaml` or die $!;
|
||||
print `yq -i '.spec.source.helm.values = load_str("/tmp/values.yaml")' /tmp/application.yaml` or die $!;
|
||||
|
||||
if(!defined $ENV{DEPLOY_SCRIPT_DEBUG}){
|
||||
print `argocd app create -f /tmp/application.yaml --upsert` or die $!;
|
||||
print `argocd app sync -l application=badhouseplants -l branch=$git_branch` or die $!;
|
||||
print `argocd app wait -l application=badhouseplants -l branch=$git_branch` or die $!;
|
||||
}
|
||||
# ----------------------------------
|
||||
# -- Remove all `Applications` for
|
||||
# -- branches that do not exists
|
||||
# ----------------------------------
|
||||
my @all_applications = `argocd app list -l application=badhouseplants -o yaml | yq '.[].metadata.name'` or die $!;
|
||||
chomp(@all_applications);
|
||||
foreach my $app (@all_applications) {
|
||||
$app =~ s/badhouseplants-//;
|
||||
}
|
||||
|
||||
my @all_branches = `git branch --format='%(refname:short)' -r` or die $!;
|
||||
chomp(@all_branches);
|
||||
foreach my $branch (@all_branches) {
|
||||
$branch =~ s/origin\///;
|
||||
}
|
||||
|
||||
foreach my $app (@all_applications) {
|
||||
if ( !grep( /^$app$/, @all_branches ) ) {
|
||||
if ($app ne "application") {
|
||||
print "$app should be removed\n";
|
||||
if(!defined $ENV{DEPLOY_SCRIPT_DEBUG}){
|
||||
print `argocd app delete --yes badhouseplants-$app` or die $!;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,9 +19,9 @@ print `git -C /tmp/$git_commit_sha lfs pull` or die;
|
||||
|
||||
print "Creating a new hashed dir in the common bucket\n";
|
||||
|
||||
print `rclone copy -P /tmp/$git_commit_sha/static "$common_bucket/$git_commit_sha"` or die;
|
||||
print `rclone copy /tmp/$git_commit_sha/src/static "$common_bucket/$git_commit_sha"` or die;
|
||||
|
||||
if ( $git_branch eq $main_branch) {
|
||||
if ($git_branch eq $main_branch) {
|
||||
print "Syncing to the production bucket\n";
|
||||
print `rclone sync -P "$common_bucket/$git_commit_sha" "$main_bucket/"` or die;
|
||||
print `rclone sync "$common_bucket/$git_commit_sha" "$main_bucket/"` or die;
|
||||
}
|
||||
|
0
src/.hugo_build.lock
Normal file
0
src/.hugo_build.lock
Normal file
@ -15,14 +15,15 @@ menu:
|
||||
weight: 12
|
||||
- name: About
|
||||
url: /about
|
||||
weight: 14
|
||||
weight: 13
|
||||
- name: Search
|
||||
url: /search
|
||||
weight: 15
|
||||
weight: 14
|
||||
taxonomies:
|
||||
tag: tags
|
||||
params:
|
||||
GitBranch: main
|
||||
GitCommit: unknown
|
||||
Remark42ID: remark
|
||||
Remark42URL: https://remark42.badhouseplants.net
|
||||
ShowBreadCrumbs: true
|
||||
@ -33,15 +34,17 @@ params:
|
||||
profileMode:
|
||||
enabled: true
|
||||
title: "Bad Houseplants"
|
||||
subtitle: "... by allanger"
|
||||
subtitle: ... by allanger.
|
||||
imageUrl: "main-logo.png"
|
||||
imageWidth: 150
|
||||
imageHeight: 150
|
||||
buttons:
|
||||
- name: Source
|
||||
url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net"
|
||||
- name: My Music
|
||||
url: "https://funkwhale.badhouseplants.net/library/artists"
|
||||
- name: Support
|
||||
url: "https://liberapay.com/allanger/donate"
|
||||
- name: Source
|
||||
url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net"
|
||||
socialIcons:
|
||||
- name: "telegram"
|
||||
url: "https://t.me/allanger"
|
||||
@ -54,7 +57,7 @@ params:
|
||||
- name: instagram
|
||||
url: "https://instagram.com/_allanger"
|
||||
- name: email
|
||||
url: 'mailto:allanger@badhouseplants.net'
|
||||
url: 'mailto:allanger@zohomail.com'
|
||||
ShowShareButtons: true
|
||||
ShareButtons: ["telegram", "twitter", "reddit", "linkedin"]
|
||||
env: production
|
17
src/content/about/_index.md
Normal file
17
src/content/about/_index.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
title: About
|
||||
date: 2023-01-24T09:26:52+01:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
Oi!
|
||||
I'm allanger and currently I'm working as full time SRE, but recently I've found out that I'd like to spend more time doing things related to music and sound. So I'm currently looking for project to add to my portfolio. So if you want somebody do a decent (I hope) mix for you without asking for any money, just let shoot me a message.
|
||||
|
||||
I'm not a pro mixing engineer of course, but it's what I'm aiming for.
|
||||
|
||||
Also, I'm a beatmaker, you can find my bets on this site, just go to the [Beats section]({{< ref "beats" >}}). I'm not leasing them, I want one beat to be used one time by one artist. And again, I'm not a well-known beatmaker, so you can just let me know if you like anything, and we'll figure it out.
|
||||
|
||||
---
|
||||
### Information about the build
|
||||
Built from the commit [{{< param GitCommit >}}](https://git.badhouseplants.net/badhouseplants/badhouseplants-net/commit/{{< param GitCommit >}})
|
||||
[](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net)
|
@ -1,4 +1,7 @@
|
||||
> If you're hiring, you can find [my CV here]({{< ref "cv" >}} )
|
||||
> If you're hiring, you can [download my CV here](https://s3.badhouseplants.net/public-download/n.rodionov.pdf)
|
||||
|
||||
<li href="placeholder.com" target="_blank">download my CV here</a>
|
||||
|
||||
|
||||
I'm a musician and a geek, who works full time as a DevOps engineer, whatever it means. Thanks to my job, I know how to run self-hosted services pretty well, and that's helping me achieve my goal of bringing the indie culture everywhere I can. I'm trying to separate myself from global companies as a user as much as it's possible in my daily life.
|
||||
|
@ -21,11 +21,6 @@ draft: false
|
||||
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=track&id=19"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
### Ark
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=track&id=21"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
### Silk Road
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=track&id=34"></iframe>
|
||||
@ -61,11 +56,6 @@ draft: false
|
||||
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=track&id=28"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
### Vicious Shine
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=track&id=36"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
### Body Drop
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="150" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=track&id=20"></iframe>
|
0
src/content/music/_index.md
Normal file
0
src/content/music/_index.md
Normal file
26
src/content/music/allanger-anymore.md
Normal file
26
src/content/music/allanger-anymore.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
title: "allanger - Anymore"
|
||||
date: 2018-12-26T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "/music/allanger-Anymore.jpg"
|
||||
caption: "Anymore"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- alternative
|
||||
---
|
||||
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/anymore) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/20/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="100%" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=20"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Anymore.zip)*
|
28
src/content/music/allanger-await.md
Normal file
28
src/content/music/allanger-await.md
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "allanger - Await"
|
||||
date: 2022-07-01T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "/music/allanger-Await.jpg"
|
||||
caption: "Await"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- alternative
|
||||
- hiphop
|
||||
- rap
|
||||
---
|
||||
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/await) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/26/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=26"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Await.zip)*
|
27
src/content/music/allanger-desensitized.md
Normal file
27
src/content/music/allanger-desensitized.md
Normal file
@ -0,0 +1,27 @@
|
||||
---
|
||||
title: "allanger - Desensitized"
|
||||
date: 2022-02-06T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "music/allanger-Desensitized.png"
|
||||
caption: "Desensitized"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- edm
|
||||
- electronic
|
||||
---
|
||||
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/desensitized) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/22/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=22"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Desensitized.zip)*
|
25
src/content/music/allanger-four-steps-behind copy.md
Normal file
25
src/content/music/allanger-four-steps-behind copy.md
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
title: "allanger - Under My Pillow"
|
||||
date: 2023-05-15T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "/music/allanger-Under_My_Pillow.png"
|
||||
caption: "Under My Pillow"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- rap
|
||||
- hiphop
|
||||
---
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/under-my-pillow) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/27/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=27"></iframe>{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Under%20My%20Pillow.zip)*
|
25
src/content/music/allanger-four-steps-behind.md
Normal file
25
src/content/music/allanger-four-steps-behind.md
Normal file
@ -0,0 +1,25 @@
|
||||
---
|
||||
title: "allanger - Four Steps Behind"
|
||||
date: 2023-05-15T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "/music/allanger-Four_Steps_Behind.jpg"
|
||||
caption: "Four Steps Behind"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- house
|
||||
- edm
|
||||
---
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/four-steps-behind) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/16/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="350" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=16"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Four%20Steps%20Behind.zip)*
|
27
src/content/music/allanger-let-me-kill.md
Normal file
27
src/content/music/allanger-let-me-kill.md
Normal file
@ -0,0 +1,27 @@
|
||||
---
|
||||
title: "allanger - Let Me Kill"
|
||||
date: 2021-10-15T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "music/allanger-Let_Me_Kill.png"
|
||||
caption: "Let Me Kill"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- trap
|
||||
- spoken-word
|
||||
---
|
||||
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/let-me-kill) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/21/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=21"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Let%20Me%20Kill.zip)*
|
27
src/content/music/allanger-not-alone.md
Normal file
27
src/content/music/allanger-not-alone.md
Normal file
@ -0,0 +1,27 @@
|
||||
---
|
||||
title: "allanger - Not Alone"
|
||||
date: 2022-02-10T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "music/allanger-Not_Alone.png"
|
||||
caption: "Not Alone"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- edm
|
||||
- electronic
|
||||
---
|
||||
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/not-alone) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/23/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=23"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Not%20Alone.zip)*
|
26
src/content/music/allanger-out-of-law.md
Normal file
26
src/content/music/allanger-out-of-law.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
title: "allanger - Out Of Law"
|
||||
date: 2022-01-23T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "music/allanger-Out_of_Law.png"
|
||||
caption: "Out Of Law"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- punk
|
||||
---
|
||||
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/out-of-law) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/18/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=18"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Out%20Of%20Law.zip)*
|
26
src/content/music/allanger-trace.md
Normal file
26
src/content/music/allanger-trace.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
title: "allanger - Trace"
|
||||
date: 2023-05-30T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "music/allanger-Trace.png"
|
||||
caption: "Trace"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- edm
|
||||
- electronic
|
||||
---
|
||||
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/trace) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/17/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=17"></iframe>{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Trace.zip)*
|
26
src/content/music/allanger-wasted-time.md
Normal file
26
src/content/music/allanger-wasted-time.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
title: "allanger - Wasted Time"
|
||||
date: 2021-09-23T00:00:00+02:00
|
||||
draft: false
|
||||
ShowToc: false
|
||||
cover:
|
||||
image: "music/allanger-Waster_Time.png"
|
||||
caption: "Wasted Time"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
hideSummary: true
|
||||
tags:
|
||||
- music
|
||||
- release
|
||||
- indie
|
||||
- punk
|
||||
---
|
||||
|
||||
[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/wasted-time) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/19/)
|
||||
|
||||
---
|
||||
{{< rawhtml >}}
|
||||
<iframe width="100%" height="" scrolling="no" frameborder="no" src="https://funkwhale.badhouseplants.net/front/embed.html?&type=album&id=19"></iframe>
|
||||
{{< /rawhtml >}}
|
||||
|
||||
*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Wasted%20Time.zip)*
|
45
src/content/posts/.spelling
Normal file
45
src/content/posts/.spelling
Normal file
@ -0,0 +1,45 @@
|
||||
# markdown-spellcheck spelling configuration file
|
||||
# Format - lines beginning # are comments
|
||||
# global dictionary is at the start, file overrides afterwards
|
||||
# one word per line, to define a file override use ' - filename'
|
||||
# where filename is relative to this configuration file
|
||||
WIP
|
||||
envs
|
||||
anymore
|
||||
hostname
|
||||
hostnames
|
||||
Dockerfile
|
||||
helmfile
|
||||
k8s
|
||||
env
|
||||
dir
|
||||
dev'n'stages
|
||||
oi
|
||||
minio
|
||||
ArgoCD
|
||||
setups
|
||||
SRE
|
||||
autoscaler
|
||||
gitea
|
||||
vendoring
|
||||
cli
|
||||
vpa
|
||||
ok
|
||||
cmp
|
||||
config
|
||||
GitOps
|
||||
argo
|
||||
argocding
|
||||
cluster-1
|
||||
cluster-2
|
||||
cluster-3
|
||||
kubernetes
|
||||
argocd
|
||||
helmfiles
|
||||
plugin
|
||||
helmfile.yaml
|
||||
cleanup
|
||||
serie
|
||||
backend
|
||||
js
|
||||
frontend
|
0
src/content/posts/_index.md
Normal file
0
src/content/posts/_index.md
Normal file
@ -13,11 +13,11 @@ cover:
|
||||
[Do you remember?]({{< ref "dont-use-argocd-for-infrastructure" >}})
|
||||
> And using `helmfile`, I will install `ArgoCD` to my clusters, of course, because it's an awesome tool, without any doubts. But don't manage your infrastructure with it, because it's a part of your infrastructure, and it's a service that you provide to other teams. And I'll talk about in one of the next posts.
|
||||
|
||||
Yes, I have written 4 posts where I was almost absuletely negative about `ArgoCD`. But I was talking about infrastructure then. I've got some ideas about how to describe it in a better way, but I think I will write another post about it.
|
||||
Yes, I have written 4 posts where I was almost absolutely negative about `ArgoCD`. But I was talking about infrastructure then. I've got some ideas about how to describe it in a better way, but I think I will write another post about it.
|
||||
|
||||
Here, I want to talk about dynamic *(preview)* environments, and I'm going to describe how to create them using my blog as an example. My blog is a pretty easy application. From `Kubernetes` perspective, it's just a container with some static content. And here, you already can notice that static is an opposite of dynamic, so it's the first problem that I'll have to tackle. Turning static content into dynamic. So my blog consists of `markdown` files that are used by `hugo` for a web page generation.
|
||||
|
||||
>Initially I was using `hugo` server to serve the static, but it needs way more resources than `nginx`, so I've decided in favor of `nginx`.
|
||||
>Initially I was using `hugo` server to serve the static, but it needs way more resources than `nginx`, so I've decided in favour of `nginx`.
|
||||
|
||||
I think that I'll write 2 of 3 posts about it, because it's too much to cover in only one. So here, I'd share how I was preparing my blog to be ready for dynamic environments.
|
||||
|
||||
@ -33,7 +33,7 @@ So this is how my workflow looked like before I decided to use dynamic environme
|
||||
- `Keel` spots that images was updated and pulls it.
|
||||
- Pod with a static is being recreated, and I have my blog with a new content
|
||||
|
||||
What I don't like about it? I can't test something unless it's in `production`. And when I stated to work on adding comments (that is still WIP) I've understood that I'd like to have a real environemnt where I can test everything before firing the main pipeline. Even though having a static development environment would be fine for me, because I'm the only one who do the development here, I don't like the concept of static envs, and I want to be able to work on different posts in the same time. Also, adding a new static environemnt for development purposes it kind of the same amount of work as implementing a solution for deploying them dynamically.
|
||||
What I don't like about it? I can't test something unless it's in `production`. And when I stated to work on adding comments (that is still WIP) I've understood that I'd like to have a real environment where I can test everything before firing the main pipeline. Even though having a static development environment would be fine for me, because I'm the only one who do the development here, I don't like the concept of static envs, and I want to be able to work on different posts in the same time. Also, adding a new static environment for development purposes it kind of the same amount of work as implementing a solution for deploying them dynamically.
|
||||
|
||||
Before I can start deploying them, I have to prepare the application for that. At the first glance changes looks like that:
|
||||
|
||||
@ -507,7 +507,7 @@ And then I'm setting an env var `HUGO_PARAMS_GITBRANCH`. And now badge is lookin
|
||||
|
||||
## Some kind of conclusion
|
||||
|
||||
Even though my application is just a simple blog, I still believe that creating dynamic environments is a great idea that should totally replace static dev'n'stages. And it's not only my blog, I've created dynamic envs for. Two biggest pains *as I think* are `Static content` and `Persistent data` (I think, there are more, but these two are most obvious). I've already shown an example how you can handle the first one, and the second is also a big pain in the ass. In my case this data is the one coming from the `Minio` and I'm not doing anything about it, *but I'll write one more post, when it's solved*, other, in my opinion, more obvious example, are databases. You need it to contain all the data that's required for testing, but you also may want it not to be huge, and it most probably should not contain any sensible personal data. So maybe you could stream a database from the production through some kind of anonymizer, clean it up, so it's not too big. And it doesn't sound easy already. But if I'll have to add something like that to my blog once, I'll try to describe it.
|
||||
Even though my application is just a simple blog, I still believe that creating dynamic environments is a great idea that should totally replace static dev'n'stages. And it's not only my blog, I've created dynamic envs for. Two biggest pains *as I think* are `Static content` and `Persistent data` (I think, there are more, but these two are most obvious). I've already shown an example how you can handle the first one, and the second is also a big pain in the ass. In my case this data is the one coming from the `Minio` and I'm not doing anything about it, *but I'll write one more post, when it's solved*, other, in my opinion, more obvious example, are databases. You need it to contain all the data that's required for testing, but you also may want it not to be huge, and it most probably should not contain any sensible personal data. So maybe you could stream a database from the production through some kind of anonymiser, clean it up, so it's not too big. And it doesn't sound easy already. But if I'll have to add something like that to my blog once, I'll try to describe it.
|
||||
|
||||
Thanks,
|
||||
|
@ -65,7 +65,7 @@ But logic would be like this
|
||||
- Add a new application to the `manifests/$CLUSTER` dir
|
||||
- Push
|
||||
- CI/CD
|
||||
- Since it needs to be `GitOps`, you need to check that charts in the `vendor` dir are up-to-date with `helm-freeze.yaml`. *Because if you updated helm-freeze and forgot to execute `helm-freeze sync`, you will have a contradiction between actual and desired states. That's one of the reasons, why I don't like this kind of vendoring. Either it's an addition step in CI, that is verifying that the manual step was done, or it's an additional work for reviewer. You also can add an action that is going to execute it withing the pipeline and push to your branch, but I'm completely against it. (something for another post maybe)*
|
||||
- Since it needs to be `GitOps`, you need to check that charts in the `vendor` dir are up-to-date with `helm-freeze.yaml`. *Because if you updated helm-freeze and forgot to execute `helm-freeze sync`, you will have a contradiction between actual and desired states. That's one of the reasons, why I don't like this kind of vendoring. Either it's an addition step in CI, that is verifying that the manual step was done, or it's an additional work for reviewer. You also can add an action that is going to execute it within the pipeline and push to your branch, but I'm completely against it. (something for another post maybe)*
|
||||
|
||||
- Then depending on a branch:
|
||||
- If not `main`
|
||||
@ -441,7 +441,7 @@ argocd app diff vpa
|
||||
FATA[0000] rpc error: code = NotFound desc = error getting application: applications.argoproj.io "vpa" not found
|
||||
```
|
||||
|
||||
There is a `--local` option, but it still requires a name ~~(why if there is a name in manfiests 🙃🙃🙃)~~
|
||||
There is a `--local` option, but it still requires a name ~~(why if there is a name in manifests 🙃🙃🙃)~~
|
||||
```BASH
|
||||
# Just testing out
|
||||
argocd app diff vpa --local ./manifests/cluster2/
|
||||
@ -543,7 +543,7 @@ Let's try installing apps directly. Remove an app-of-apps from k8s. And let's us
|
||||
## Conclusion
|
||||
So you can check the PR here: <https://git.badhouseplants.net/allanger/helmfile-vs-argo/pulls/2/files>
|
||||
|
||||
I like that `values` can be handled as normal values files. (But for handling secrets you might have to add a [CMP](https://argo-cd.readthedocs.io/en/stable/user-guide/config-management-plugins/), that means an additional work and maintenance) But even if adding CMP is fine, I couldn't get proper `diffs` for my changes, that means that I can't see what's happening without applying manifests. And applying manifests will mean that other team members will not be work on other tickets withing the same scope, so it looks like a bottleneck to me.
|
||||
I like that `values` can be handled as normal values files. (But for handling secrets you might have to add a [CMP](https://argo-cd.readthedocs.io/en/stable/user-guide/config-management-plugins/), that means an additional work and maintenance) But even if adding CMP is fine, I couldn't get proper `diffs` for my changes, that means that I can't see what's happening without applying manifests. And applying manifests will mean that other team members will not be work on other tickets within the same scope, so it looks like a bottleneck to me.
|
||||
|
||||
But I don't like that you need to add a lot of manifests to manage all the applications. We have only 2 manifests that are copied from folder to folder. So we have a lot of repeating code. And repeating code is never good. So I would write a tool that can let you choose applications from the list of all applications and choose clusters where they need to be deployed. So the config looks like this:
|
||||
```YAML
|
||||
@ -565,7 +565,7 @@ But I think that with the whole GitOps pulling concept it will be a hard thing t
|
||||
|
||||
I can only say, that I see no profit in using argo like this. It only seems like either a very complicated setup (most probably you will be able to implement anything you need, the question is, how much time will you spend with that), or a ~~crippled~~ not complete setup.
|
||||
|
||||
And if you compare an amount of lines that area updadated to install these apps as `Applications` to the helmfile stuff, it's going to be ~100 vs ~30. And that's what I also don't like.
|
||||
And if you compare an amount of lines that area updated to install these apps as `Applications` to the helmfile stuff, it's going to be ~100 vs ~30. And that's what I also don't like.
|
||||
|
||||
In the next post I will try doing the same with `ApplicationSets`, and we'll see, if it looks better or not.
|
||||
|
@ -64,7 +64,7 @@ spec:
|
||||
```
|
||||
|
||||
|
||||
Manifests with a setup like thos have only one values that is really different, so we could create just one manifest that would look like that:
|
||||
Manifests with a setup like this have only one values that is really different, so we could create just one manifest that would look like that:
|
||||
```YAML
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: ApplicationSet
|
||||
@ -209,7 +209,7 @@ Those applications should be deployed automatically within a pipeline. So steps
|
||||
- Add new generators
|
||||
- Sync applications with argocd cli
|
||||
|
||||
But I'm not sure what going to happen if you have two different pipelines at the same time. Probably, changes will be overwriten but the pipeline that is a little bit slower. But I think that it can be solved without a lot of additional problems. And also I don't think that it's a situation that you will have to face very often, so you can just rerun your pipeline after all.
|
||||
But I'm not sure what going to happen if you have two different pipelines at the same time. Probably, changes will be overwritten but the pipeline that is a little bit slower. But I think that it can be solved without a lot of additional problems. And also I don't think that it's a situation that you will have to face very often, so you can just rerun your pipeline after all.
|
||||
|
||||
### Diffs
|
||||
Diffs are not supported for `ApplicationSets` at the moment, and I'm not sure when they will be: <https://github.com/argoproj/argo-cd/issues/10895>
|
@ -78,7 +78,7 @@ helmfiles:
|
||||
- path: {{.Environment.Name }}/helmfile.yaml
|
||||
```
|
||||
|
||||
It's going to import helmfiles that are not used across all clusters. So if you want to install something to `cluster-2` accross, you will add it to the `/cluster2/helmfile.yaml` and sync the main helmfile. I will show an example later.
|
||||
It's going to import helmfiles that are not used across all clusters. So if you want to install something to `cluster-2` across, you will add it to the `/cluster2/helmfile.yaml` and sync the main helmfile. I will show an example later.
|
||||
|
||||
So we're all set and ready to begin installing new stuff.
|
||||
|
||||
@ -1575,7 +1575,7 @@ Yeah, it's huge, but you can see everything that's going to happen. So I'd say i
|
||||
It's a short article, because I think the whole setup is super easy, CI is easy too. You still have a full `GitOps` (or almost full) but you also have control. I love this setup and would like to use it for my infrastructure.
|
||||
|
||||
Why do I think it's better that `ArgoCD`?
|
||||
With `ArgoCD` I either have a lot of `yaml` to install things, or I have complicated setups with `ApplicationSets` that are most probably very special and won't be reused in other companies. I need to care about how `ArgoCD` will handle a lot of applications that are added there only for diffing. I need additional applications installed im my clusters not only as a part of infrastructure itself, but also as a service that I'm providing other teams with. Because I want to manage applications that are being developed by other teams with `Argo`, so I'm mixing a lot of different kinds of applications here.
|
||||
With `ArgoCD` I either have a lot of `yaml` to install things, or I have complicated setups with `ApplicationSets` that are most probably very special and won't be reused in other companies. I need to care about how `ArgoCD` will handle a lot of applications that are added there only for diffing. I need additional applications installed in my clusters not only as a part of infrastructure itself, but also as a service that I'm providing other teams with. Because I want to manage applications that are being developed by other teams with `Argo`, so I'm mixing a lot of different kinds of applications here.
|
||||
|
||||
Helmfile lets me separate infra from applications. `ArgoCD` can be only provided as a service, and other teams can use, because it's making k8s easier for those who don't need to understand it so deeply. Also, helmfile lets me use helm-secrets to encrypt values. I can do it with Argo too, but then I need to either have a custom `ArgoCD` image, or support a CMP plugin, that will handle SOPS.
|
||||
|
144
src/content/posts/developing-a-free-alternative-for-splice.md
Normal file
144
src/content/posts/developing-a-free-alternative-for-splice.md
Normal file
@ -0,0 +1,144 @@
|
||||
---
|
||||
title: "Developing a Free Alternative for Splice"
|
||||
date: 2023-05-31T12:05:44+02:00
|
||||
draft: true
|
||||
ShowToc: true
|
||||
cover:
|
||||
image: "cover.png"
|
||||
caption: "Developing a Free Alternative for Splice"
|
||||
relative: false
|
||||
responsiveImages: false
|
||||
---
|
||||
|
||||
## Intro
|
||||
|
||||
I think that almost everybody knows what **Splice** is. Basically, it's just a huge library of sounds and VST presets with some additional sweets. I can't say that I'm not satisfied by Splice, it's an applications that is doing pretty good, until you want to use it on Linux. That's something that I don't understand, (I'm almost sure that )it's an Electron application with and some binary running a gRPC server in a background, that I believe is written in **GO**. Both technologies are working on Linux, so basically, they could have just built a version without promising any real support for that. But they haven't. I've decided to try running it with WINE, but it didn't work. And then I though: There is awesome [freesound](https://freesound.org/), and why wouldn't I use it?
|
||||
|
||||
|
||||
> Freesound is a collaborative database of Creative Commons Licensed sounds. Browse, download and share sounds.
|
||||
|
||||
|
||||
But downloading samples using a browser it not something I'd like to do. I love Splice for their drag-n-drop app. And I've decided to develop one that will work with Freesound.
|
||||
|
||||
## Starting the project
|
||||
|
||||
I've decided to use Rust and try the [Iced](https://iced.rs/) for the UI.
|
||||
Here you will find the project git repository: https://git.badhouseplants.net/allanger/frice
|
||||
|
||||
Basically, there are two things to do so the MVP is ready
|
||||
|
||||
- Make correct API requests to the Freesound
|
||||
- Create a UI
|
||||
|
||||
So the very first thing that I'm doing, I'm initializing a project and creating a very simple **Iced** app using examples
|
||||
|
||||
```bh
|
||||
cargo init
|
||||
cargo add iced
|
||||
```
|
||||
|
||||
```toml
|
||||
# Cargo.toml
|
||||
[package]
|
||||
name = "frice"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
iced = "0.9.0"
|
||||
```
|
||||
```rust
|
||||
// ./src/main.rs
|
||||
use iced::{Sandbox, Settings, widget::Container};
|
||||
|
||||
fn main() -> Result<(), iced::Error> {
|
||||
Frice::run(Settings::default())
|
||||
}
|
||||
|
||||
struct Frice {}
|
||||
|
||||
impl Sandbox for Frice {
|
||||
type Message = String;
|
||||
|
||||
fn new() -> Self {
|
||||
Frice {}
|
||||
}
|
||||
|
||||
fn title(&self) -> String {
|
||||
"Frice".to_string()
|
||||
}
|
||||
|
||||
fn update(&mut self, message: Self::Message) {
|
||||
println!("Updating")
|
||||
}
|
||||
|
||||
fn view(&self) -> iced::Element<'_, Self::Message> {
|
||||
Container::new("frice").center_x().center_y().width(iced::Length::Fill).height(iced::Length::Fill).into() }
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### API
|
||||
And now I want to switch to the API, because the UI without API requests won't be able to do anything. As I see now, I'll need to implement two API calls for the MVP:
|
||||
1. Search sounds
|
||||
2. Download a sound
|
||||
|
||||
So let's start with the first one. They have a basic example of searching on their [documentation page](https://freesound.org/docs/api/overview.html)
|
||||
|
||||
```bash
|
||||
curl "https://freesound.org/apiv2/search/text/?query=dogs&token=YOUR_API_KEY"
|
||||
```
|
||||
|
||||
*API key can be created here: <https://freesound.org/apiv2/apply>*
|
||||
|
||||
So let's create a FreesoundAPI struct and add two methods there
|
||||
|
||||
```rust
|
||||
struct FreesoundAPI {}
|
||||
|
||||
impl FreesoundAPI {
|
||||
fn new() -> Self {
|
||||
Self {}
|
||||
}
|
||||
|
||||
fn search() {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn download() {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
To create an API call I'll need a token, so I need to add a new field to the `FreesoundAPI struct`
|
||||
```rust
|
||||
struct FreesoundAPI {
|
||||
token: String
|
||||
}
|
||||
impl FreesoundAPI {
|
||||
fn new(token: String) -> Self {
|
||||
Self { token }
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
I also need a library for making API calls `cargo add reqwest`
|
||||
|
||||
```rust
|
||||
pub(crate) fn search(&self) {
|
||||
let client = reqwest::blocking::Client::builder().build().unwrap();
|
||||
let res = client.get("https://freesound.org/apiv2/search/text")
|
||||
.query(&[("token", self.token.as_str()), ("query", "dogs")])
|
||||
.send().unwrap();
|
||||
println!("{:?}", res.text());
|
||||
}
|
||||
```
|
||||
|
||||
Let's leave it like this for a moment, and try to implement the `download` method. Freesound API sais that we need to use `Oauth` to download sounds. Let's try.
|
||||
|
||||
```bash
|
||||
cargo add oauth2
|
||||
```
|
@ -179,7 +179,7 @@ They are working but there is one UI glitch
|
||||
|
||||
Because we probably have different system configs, so maybe it's only possible to reproduce this bug with a set of configs and packages I'm using in my Linux. So if you don't face this issue, lucky you!
|
||||
|
||||
It's not very annoying to me, but to avoid this kind of behavior, I can wrap these plugins with **Carla.**
|
||||
It's not very annoying to me, but to avoid this kind of behaviour, I can wrap these plugins with **Carla.**
|
||||

|
||||
It's working perfectly with Carla *(it's not that buggy in real life, only on the record)*
|
||||
|
@ -117,7 +117,7 @@ But when I add **Filterstep**, Ardour stops responding. I'm sure it's possible t
|
||||
|
||||
I was tired after **Audiomodern** plugins, because they were freezing my Ardour and I had to log out and log in again to my system, for Ardour wouldn't run again after that.
|
||||
|
||||
But **PaulXStrech** has a native Linux version too, and it has given me a strength to finish with this top.
|
||||
But **PaulXStretch** has a native Linux version too, and it has given me a strength to finish with this top.
|
||||
|
||||
So I'm just installing it with a package manager.
|
||||
|
@ -22,7 +22,7 @@ All of them are covered in [the first post]({{< ref "vst-on-linux-1" >}})
|
||||
|
||||
## Before we begin
|
||||
|
||||
In the previous post, I was trying to run paulxstretch on Linux, and using it as a plugin in a DAW didn't work out. I've tried to update the JUCE library in the source code, and now it's working. You can find the code here: [https://git.badhouseplants.net/badhouseplants/paulxstretch](https://git.badhouseplants.net/badhouseplants/paulxstretch)
|
||||
In the previous post, I was trying to run PaulXStretch on Linux, and using it as a plugin in a DAW didn't work out. I've tried to update the JUCE library in the source code, and now it's working. You can find the code here: [https://git.badhouseplants.net/badhouseplants/paulxstretch](https://git.badhouseplants.net/badhouseplants/paulxstretch)
|
||||
|
||||
To build, refer to the official build doc or use the `/build_docker.sh` script
|
||||
|
||||
@ -155,7 +155,7 @@ Downloading a Windows version again.
|
||||
|
||||
{{< video "/posts/vst-on-linux-3/eventide-pendulate.mp4" "video-9" >}}
|
||||
|
||||
Runnin just fine
|
||||
Running just fine
|
||||
As you see, this is a pretty interesting Synth, I have enough of synths for everything, but this one may join the ranks too.
|
||||
|
||||
## VCV Rack 👍
|
||||
@ -174,9 +174,9 @@ I didn't have enough time to learn it yet, so that's what I could do with it
|
||||
|
||||
Protoverb is a reverb created by u-he. It has native Linux support
|
||||
|
||||
Download the **Linux** version and install it by running a script. You can finfd everything [here](https://u-he.com/products/protoverb/)
|
||||
Download the **Linux** version and install it by running a script. You can find everything [here](https://u-he.com/products/protoverb/)
|
||||
|
||||
## Paulstretch 👍
|
||||
## PaulXStretch 👍
|
||||
|
||||
It's already covered in the previous article. But since then, one thing is changed. You could've seen it in the very beginning of the post, that I've updated JUCE library in the source code, and now it's running as a VST plugin. If you missed it, try reading the beginning one more time.
|
||||
|
1
src/layouts/_default/_markup/render-link.html
Normal file
1
src/layouts/_default/_markup/render-link.html
Normal file
@ -0,0 +1 @@
|
||||
<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
|
@ -1,7 +1,4 @@
|
||||
<hr>
|
||||
<blockquote>
|
||||
<p> Comments are in the beta testing stage. </p>
|
||||
</blockquote>
|
||||
<div id="remark42"></div>
|
||||
|
||||
<script>
|
BIN
src/static/music/allanger-Await.jpg
(Stored with Git LFS)
Normal file
BIN
src/static/music/allanger-Await.jpg
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
src/static/music/allanger-Desensitized.png
(Stored with Git LFS)
Executable file
BIN
src/static/music/allanger-Desensitized.png
(Stored with Git LFS)
Executable file
Binary file not shown.
3
src/static/music/allanger-Four_Steps_Behind.jpg
Normal file
3
src/static/music/allanger-Four_Steps_Behind.jpg
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2def9a412cba612ccf55cc39deeb82f971418ad27119c93d63844c7c25bc0748
|
||||
size 2045790
|
BIN
src/static/music/allanger-Not_Alone.png
(Stored with Git LFS)
Normal file
BIN
src/static/music/allanger-Not_Alone.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
src/static/music/allanger-Trace.png
(Stored with Git LFS)
Normal file
BIN
src/static/music/allanger-Trace.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
src/static/music/allanger-Under_My_Pillow.png
(Stored with Git LFS)
Normal file
BIN
src/static/music/allanger-Under_My_Pillow.png
(Stored with Git LFS)
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user