# Gitea

- [Gitea](#gitea)
  - [Staging](#staging)
  - [Install](#install)
  - [Backup and Restore](#backup-and-restore)
  - [Gitea Runners](#gitea-runners)

Gitea provides a helm chart [here](https://gitea.com/gitea/helm-chart/). We're not
going to modify much, but we are going to solidify some of the default values in case
they decide to change things. This is the first chart (besides ingress-nginx) where
we need to pay attention to the MetalLB annotation. This has been set in the values.yaml
file.

## Staging

There is a `gitea-staging.yaml` file with staging values. This should be installed in
the `gitea-staging` namespace. Follow the instructions below, but replace the `gitea`
namespace with `gitea-staging`. Staging is useful for testing major release upgrades,
especially since Gitea tends to change how `values.yaml` is structured.

## Install

First we need to create the gitea admin secret

```bash
kubectl create namespace gitea
kubectl create secret generic gitea-admin-secret \
    -n gitea \
    --from-literal=username='gitea-admin' \
    --from-literal=password="$(pwgen -c -s 64 | head -n 1)" \
    --from-literal=email=''
```

```bash
helm repo add gitea-charts https://dl.gitea.io/charts/
helm repo update
helm upgrade --install \
    gitea \
    gitea-charts/gitea \
    --values kubernetes/graduated/gitea/gitea-values.yaml \
    --namespace gitea \
    --create-namespace
```

## Backup and Restore

If you need to backup your database you can run:

```bash
# Backup
kubectl exec -it -n gitea gitea-postgresql-0 -- \
    pg_dump \
    --no-owner \
    --dbname=postgresql://gitea:gitea@localhost:5432 > gitea_backup.db

# Take gitea down to zero pods
kubectl scale statefulset gitea --replicas 0

# Drop the existing database
kubectl exec -it -n gitea gitea-postgresql-0 -- psql -U gitea

\c postgres;
drop database gitea;
CREATE DATABASE gitea WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
exit

# restore from backup
kubectl exec -it -n gitea gitea-postgresql-0 -- \
    psql \
    postgresql://gitea:gitea@localhost:5432 gitea < gitea_backup.db

# Restore gitea to 1 pod
kubectl scale statefulset gitea --replicas 1
```

## Gitea Runners

<https://docs.gitea.com/next/usage/actions/act-runner/#install-with-the-docker-image>

```bash
touch config.yaml

# Add `-e CONFIG_FILE=/config.yaml` to mount a config file

docker run \
    -v $PWD/config.yaml:/config.yaml \
    -v $PWD/data:/data \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e GITEA_INSTANCE_URL=https://gitea.reeseapps.com \
    -e GITEA_RUNNER_REGISTRATION_TOKEN=m8ZJGE5yEys6oC0trni1o2CkKrmufTnI7dxXZfIi \
    -e GITEA_RUNNER_NAME=kube_runner \
    -e GITEA_RUNNER_LABELS="ubuntu-latest:docker://catthehacker/ubuntu:act-latest", \
    --restart always \
    --name kube_runner \
    -d gitea/act_runner:latest
```
