aboutsummaryrefslogtreecommitdiff
path: root/po/eo/LC_MESSAGES/_tils/2020-11-30-storing-ci-data-on-git-notes.po
blob: e9cc227159405c42ab148163a6bbda62dcb8c7b8 (about) (plain) (blame)
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#
msgid ""
msgstr ""

msgid "title: Storing CI data on Git notes"
msgstr ""

msgid "date: 2020-11-30"
msgstr ""

msgid "layout: post"
msgstr ""

msgid "lang: en"
msgstr ""

msgid "ref: storing-ci-data-on-git-notes"
msgstr ""

msgid ""
"Extending the bare bones CI server I've [talked about before][previous-"
"article], divoplade on Freenode suggested storing CI artifacts on [Git "
"notes][git-notes], such as tarballs, binaries, logs, *etc*."
msgstr ""

msgid ""
"I've written a small script that will put log files and CI job data on Git "
"notes, and make it visible on the porcelain log. It is a simple extension of"
" the previous article:"
msgstr ""

msgid ""
"#!/usr/bin/env bash\n"
"set -Eeuo pipefail\n"
"set -x\n"
"\n"
"PREFIX='/srv/ci/vps'\n"
"mkdir -p \"$PREFIX\"\n"
"read -r _ SHA _ # oldrev newrev refname\n"
"FILENAME=\"$(date -Is)-$SHA.log\"\n"
"LOGFILE=\"$PREFIX/$FILENAME\"\n"
"exec &> >(tee -a \"$LOGFILE\")\n"
"\n"
"echo \"Starting CI job at: $(date -Is)\"\n"
"\n"
"finish() {\n"
"  STATUS=\"$?\"\n"
"  printf \"\\n\\n>>> exit status was %s\\n\" \"$STATUS\"\n"
"  echo \"Finishing CI job at: $(date -Is)\"\n"
"  popd\n"
"  NOTE=$(cat <<EOF\n"
"See CI logs with:\n"
"  git notes --ref=refs/notes/ci-logs show $SHA\n"
"  git notes --ref=refs/notes/ci-data show $SHA\n"
"EOF\n"
")\n"
"  git notes --ref=refs/notes/ci-data add -f -m \"$STATUS $FILENAME\"\n"
"  git notes --ref=refs/notes/ci-logs add -f -F \"$LOGFILE\"\n"
"  git notes add -f -m \"$NOTE\"\n"
"  printf \"\\n\\n>>> CI logs added as Git note.\"\n"
"}\n"
"trap finish EXIT\n"
"\n"
"unset GIT_DIR\n"
"CLONE=\"$(mktemp -d)\"\n"
"git clone . \"$CLONE\"\n"
"pushd \"$CLONE\"\n"
"git config --global user.email git@euandre.org\n"
"git config --global user.name 'EuAndreh CI'\n"
"\n"
"./container make check site\n"
"./container make publish\n"
msgstr ""

msgid "The important part is in the `finish()` function:"
msgstr ""

msgid ""
"#25 stores the exit status and the generated filename separated by spaces;"
msgstr ""

msgid "#26 adds the log file in a note using the `refs/notes/ci-logs` ref;"
msgstr ""

msgid "#27 it adds a note to the commit saying how to see the logs."
msgstr ""

msgid ""
"A commit now has an attached note, and shows it whenever you look at it:"
msgstr ""

msgid ""
"$ git show 930ba1888f49f11e52a4a715438cd9f5f413dd9c\n"
"commit 930ba1888f49f11e52a4a715438cd9f5f413dd9c (oldvps/master)\n"
"Author: EuAndreh <eu@euandre.org>\n"
"Date:   Mon Nov 30 01:11:38 2020 -0300\n"
"\n"
"    vps.scm: Uncomment mcron job time marker\n"
"\n"
"Notes:\n"
"    See CI logs with:\n"
"      git notes --ref=refs/notes/ci-logs show 930ba1888f49f11e52a4a715438cd9f5f413dd9c\n"
"      git notes --ref=refs/notes/ci-data show 930ba1888f49f11e52a4a715438cd9f5f413dd9c\n"
"\n"
"diff --git a/sync/vps.scm b/sync/vps.scm\n"
"index 3f6ca69..02b9cc6 100644\n"
"--- a/sync/vps.scm\n"
"+++ b/sync/vps.scm\n"
"@@ -280,7 +280,7 @@ pki \" mail-domain \" key  \\\"\" (tls-priv-for mail-domain) \"\\\"\")))\n"
"              tls-prefixes)))\n"
"\n"
" (define generate-ci-index-html-job\n"
"-  #~(job \"* * * * *\" ;; \"*/5 * * * *\"\n"
"+  #~(job \"*/5 * * * *\"\n"
"          #$(program-file\n"
"             \"generate-ci-index-html.scm\"\n"
"             (with-imported-modules (modules:source-module-closure\n"
msgstr ""

msgid ""
"Other tools such as [cgit][cgit] will also show notes on the web interface: "
"[https://euandreh.xyz/vps.git/commit?id=930ba1888f49f11e52a4a715438cd9f5f413dd9c](https://euandreh.xyz/vps.git/commit?id=930ba1888f49f11e52a4a715438cd9f5f413dd9c)"
msgstr ""

msgid ""
"You can go even further: since cgit can serve raw blob directly, you can "
"even serve such artifacts (log files, release artifacts, binaries) from cgit"
" itself:"
msgstr ""

msgid ""
"$ SHA=\"$(git notes --ref=refs/notes/ci-logs list 930ba1888f49f11e52a4a715438cd9f5f413dd9c)\"\n"
"$ echo \"https://euandreh.xyz/vps.git/blob?id=$SHA\"\n"
"https://euandreh.xyz/vps.git/blob?id=b3a6438a0c7a47864c54c61359b6ef50e864dbff\n"
msgstr ""

msgid ""
"And like that you'll have cgit serving the artifacts for you: "
"[https://euandreh.xyz/vps.git/blob?id=b3a6438a0c7a47864c54c61359b6ef50e864dbff](https://euandreh.xyz/vps.git/blob?id=b3a6438a0c7a47864c54c61359b6ef50e864dbff)"
msgstr ""

msgid ""
"[previous-article]: {% link _tils/2020-11-12-diy-bare-bones-ci-server-with-"
"bash-and-nix.md %} [git-notes]: https://git-scm.com/docs/git-notes [cgit]: "
"https://git.zx2c4.com/cgit/"
msgstr ""

msgid "eu_categories: git,ci"
msgstr ""