summaryrefslogtreecommitdiff
path: root/README.md
blob: 30772bb135d28705b520091a61ad23bbb55958c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# Landau site suite

## Quick start guide

Состоит из трёх репозиториев:

Внешние репозитории:

- landau.git (путь на сервере /home/landaudeploy/landau.git)
  Это репозиторий со статьями, новостями, контентом и т.д. сюда входит только ползная информация без лишней инфрастурктуры, также сюда могут входить checkpatch, проверка офрфографии и т.п. всё что связано с конкретным способом сборки и обработки (например hugo), сюда входить не должны.

- landau-hacker (путь на сервере /home/landaudeploy/landau_suite/template/themes/landau-hacker)
  Это просто наша тема для сайта, выделенная в отдельный репозиторий.

Внутренний репозиторий:

- landau_suite (путь на сервере /home/landaudeploy/landau_suite)
  Сюда входит вся инфраструктура, в данном случае для hugo:
    - tempalate (конфиг и файлы hugo необходимые для сборки сайта)
    - template/themes (куда также входит landau-hacker как сабмодуль)

### Общая схема работы

landau.git - лежит на сервере как bare git репозиторий для которого настроен git hook post-recieve:

```hooks/post-receive
#!/bin/bash

echo "post-receive launched $(date)" >> /tmp/hook_debug.log

set -x

unset GIT_DIR

BASE_DIR="/home/landaudeploy/landau_suite"
HUGO="$BASE_DIR/hugo"

while read oldrev newrev refname
do
    branch="${refname#refs/heads/}"
    [[ "$refname" = refs/heads/* ]] || continue

    CONTENT_DIR="$BASE_DIR/content/$branch"
    mkdir -p "$CONTENT_DIR"

    DEPLOY_DIR="$BASE_DIR/deploy/$branch"
    mkdir -p "$DEPLOY_DIR"

    git --work-tree="$CONTENT_DIR" checkout -f "$branch"

    make -C "$BASE_DIR" HUGO="$HUGO" CONTENT="$CONTENT_DIR" DEPLOY="$DEPLOY_DIR" || {
        echo "Build failed for branch $branch" >&2
        exit 1
    }
done
```

Общий смысл следующий, когда мы делаем push в landau.git:

- каждая измененная ветка разворачивается в $BASE_DIR/content/$branch с помощью worktree;
- затем для каждой вызывается сборка и результатирущие файлы появляются в $BASE_DIR/deploy/$branch;

Корень сайта указывает на /home/landaudeploy/landau_suite/deploy/public, что является символической ссылкой на main.

Для работы git hook требуется указание директории landau_suite.

То есть на данный момент обновление сайта происходит простым push в ветку main.

## Makefile structure

В `landau_suite` используется Makefile со следующими основными переменными и целями:

- `HUGO` – путь к исполняемому файлу Hugo (по умолчанию `hugo`).
- `CONTENT` – директория с исходным контентом (например, `./content/main`).
- `DEPLOY` – целевая директория для сгенерированного сайта (например, `./deploy/main`).

Основная цель сборки (по умолчанию) выполняет:
  - проверку наличия `HUGO` и `CONTENT`;
  - вызов `hugo --source ... --destination ... --cleanDestinationDir ...`;
  - опциональные пост-обработки (минификация, проверка ссылок).

Для ручного запуска сборки вне хука:

```bash
make HUGO=/path/to/hugo CONTENT=/path/to/content DEPLOY=/path/to/deploy
```

## Hugo

Сам hugo, одно жизненно важное исправление, которое позволяет держать contentDir отдельно от шаблона сайта (ветка nshubin/git_purism) остальные исправления комплиментарные:

- https://gitflic.ru/project/maquefel/hugo.git (nshubin/git_purism)

Использован zig-0.15.1 для статической сборки с musl (не glibc)

```
$ CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC="zig cc -target x86_64-linux-musl" CXX="zig c++ -target x86_64-linux-musl" go build --tags extended -ldflags '-extldflags "-static"' -o hugo
$ ls -lah hugo
-rwxr-xr-x 1 maquefel users 139M May 17 08:09 hugo
$ strip hugo
$ ls -lah hugo
-rwxr-xr-x 1 maquefel users 53M May 17 08:13 hugo
$ file hugo
hugo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=u2UlnDikg6PiLZpmb49r/fzU1KYICg3ZTYqp8o1z3/CDiKIZ7CkmOcQoabnJdp/F3rP0MwJRD9ZxEV04ux1, stripped
```

## Mermaid

Есть условная поддержка mermaid. Hugo не умеет "рендерить" блоки mermaid в png/svg и автоматически вставлять их как картинки. Вся поддержка осуществляется внешним js скриптом. Тем не менее будет работать вот такое:

```mermaid
graph TD;
    A-->B;
    A-->C;
    B-->D;
```

И другие mermaid диаграммы.