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
|
# 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"
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.
## 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
```
|