Before Jonas suggestions
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/.direnv
|
||||
result*
|
17
Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
OUT_DIR ?= ../out/
|
||||
AUX_DIR ?= ../aux/
|
||||
TOP_LIB ?= ../latex/mk/
|
||||
|
||||
PROJECTS := tex
|
||||
DEPS_EXTS := tex png pdf
|
||||
|
||||
EXTRA_LATEXMK_ARGS=-pdfxelatex="xelatex --shell-escape %O %S"
|
||||
|
||||
.PHONY: all
|
||||
all: $(PROJECTS)
|
||||
clean:
|
||||
rm -r out aux
|
||||
|
||||
include $(TOP_LIB)/build_project.mk
|
||||
|
||||
$(eval $(call build_projects,$(PROJECTS)))
|
BIN
figures/blender.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
figures/buildbot-view.png
Normal file
After Width: | Height: | Size: 128 KiB |
BIN
figures/forgejo.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
figures/gentoo.png
Normal file
After Width: | Height: | Size: 80 KiB |
24
figures/gentoo.svg
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="594.7" height="622.5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>Gentoo Linux logo (matte)</title>
|
||||
<defs>
|
||||
<linearGradient id="vlpa">
|
||||
<stop style="stop-color:#fff" offset="0"/>
|
||||
<stop style="stop-color:#fff" offset=".3421"/>
|
||||
<stop style="stop-color:#bebdf3" offset=".52"/>
|
||||
<stop style="stop-color:#8f82f9" offset=".7541"/>
|
||||
<stop style="stop-color:#9f99c7" offset=".8711"/>
|
||||
<stop style="stop-color:#524c76" offset="1"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="vlpe" x1="464" x2="368.6" y1="697.4" y2="269.7" gradientTransform="matrix(1.237 0 0 1.237 -161.1 -377.3)" gradientUnits="userSpaceOnUse" xlink:href="#vlpa"/>
|
||||
<linearGradient id="vlpd" x1="783.9" x2="1100" y1="-313.5" y2="1341" gradientTransform="matrix(1.237 0 0 1.237 -1037 -1010)" gradientUnits="userSpaceOnUse" xlink:href="#vlpa"/>
|
||||
<radialGradient id="vlpc" cx="332.7" cy="590.6" r="218" gradientTransform="matrix(-.06604 4.19 -3.574 -.05627 2168 -1171)" gradientUnits="userSpaceOnUse" xlink:href="#vlpa"/>
|
||||
<radialGradient id="vlpb" cx="49.53" cy="320.1" r="31.95" gradientTransform="matrix(3.287 0 0 2.52 111.7 -642.7)" gradientUnits="userSpaceOnUse" xlink:href="#vlpa"/>
|
||||
</defs>
|
||||
<g transform="translate(-25.69 -25.52)">
|
||||
<path d="m25.76 521.9c0.06818-26.26 22.39-62.92 54.11-96.23 21.2-22.26 42.73-41.8 89.66-81.81-32.46-17.81-82.95-39.3-108.3-67.45-9.374-10.41-26.36-34.01-23.07-65.53 6.716-64.25 86.01-161.7 198.7-182.4 37.5-6.859 80.56-1.908 116 14.02 111.2 49.98 247.1 174.2 263.9 234.8 5.888 21.34 4.757 55.36-5.395 74.32-12.58 23.5-56.14 71.22-115.7 120.5-93.5 77.27-224.5 160.2-322.4 174.2-31.61 4.511-63.91-0.194-86.57-12.98-35.46-20.01-47.23-46.72-51.37-54.73-11-21.29-9.637-48.27-9.613-56.73zm263.1-295c1.207-14.89 59.59-0.06577 55.9 11.73-3.892 12.44-57.29 5.355-55.9-11.73z" style="fill-rule:evenodd;fill:url(#vlpd)"/>
|
||||
<path d="m201.1 319.3c-30.72 25.94-51.15 43.43-76.76 66.84-61.68 56.37-103.6 99.28-81.98 157.9 24.92 67.66 79.56 64.23 143.6 51.65 165.1-32.57 436.6-241.3 422.8-318.3-11.2-62.37-162.9-186.4-252.6-230.5-28.05-13.79-60.38-20.91-92.81-19.39-123.5 5.828-219.9 118.2-215 179.2 4.792 59.26 154.6 110.9 152.8 112.7zm-18.53-206.9c-37.15 41.34-13.4 121.3 48.21 164.9 72.1 51.01 188.8 60.24 212.1 20.91 43.34-73.37-3.98-151-74.61-185.6-69.8-34.2-162.5-26.01-185.7-0.245z" style="fill-rule:evenodd;fill:url(#vlpe)"/>
|
||||
<path d="m309.3 275.6c52.16 7.25 97.12-13.64 104.1-65.14 5.355-39.23-54.69-82.1-90.79-91.99-30.15-8.256-95.6 2.36-100 59.38-4.587 59.27 56.24 93.53 86.65 97.75zm-25.54-98.58c-34.28 53.1 49.77 69.43 62.64 59.75 55.48-41.75-47.54-83.14-62.64-59.75z" style="fill-rule:evenodd;fill:url(#vlpb)"/>
|
||||
<path d="m253.4 41.57c-60.63 6.39-72.25 14.19-127.2 55.75-18.41 13.93-52.29 47.82-60.98 88.03-3.307 15.31 0.6019 28.53 11.63 37.8 35.31 29.69 94.42 53.77 142.9 77.06 14.2 6.82 4.799 19.19-18.1 39.01-57.79 50.03-135.9 110.9-141.4 157.3-2.57 21.87 4.916 51.58 31.46 66.79 31.01 17.76 95.37 6.17 138.4-9.835 62.81-23.39 145.3-75 210.8-125.7 68.11-52.76 131.4-119.8 134.6-130.7 3.847-13.42 3.463-25.82-3.96-40.07-11.66-22.38-27.24-39.01-43.98-57.63-44.9-47.34-92.41-88.93-149.3-120.8-41.05-23.02-77.16-42.03-124.9-37zm89.07 106.1c43.81 21.18 88.79 76.81-0.3904 108.8-24.25 8.706-101.2-21.38-98.8-62.44 3.433-60.66 45.71-72.24 99.19-46.38z" style="fill-rule:evenodd;fill:url(#vlpc)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
BIN
figures/gh-status-ex01.png
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
figures/github.png
Normal file
After Width: | Height: | Size: 16 KiB |
3
figures/github.svg
Normal file
|
@ -0,0 +1,3 @@
|
|||
<svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github">
|
||||
<path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path>
|
||||
</svg>
|
After Width: | Height: | Size: 911 B |
BIN
figures/how-standards-prolifirate.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
figures/how-standards-prolifirate.xcf
Normal file
BIN
figures/llvm.png
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
figures/nix-community.png
Normal file
After Width: | Height: | Size: 23 KiB |
85
figures/nix-community.svg
Normal file
|
@ -0,0 +1,85 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="136.68491mm"
|
||||
height="136.68491mm"
|
||||
viewBox="0 0 484.31659 484.31659"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="nix-community-logo.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.34760742"
|
||||
inkscape:cx="-173.38017"
|
||||
inkscape:cy="186.45699"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="svg2"
|
||||
showgrid="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<g
|
||||
inkscape:label="print-logo"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:inline"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(-132.5822,958.04022)">
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||
id="path4861"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
|
||||
id="use4863"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
|
||||
id="use4865"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
|
||||
id="use4867"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4873"
|
||||
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="use4875"
|
||||
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.3 KiB |
BIN
figures/openzfs-logo.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
figures/python-buildbot.png
Normal file
After Width: | Height: | Size: 147 KiB |
265
figures/python-logo.svg
Normal file
|
@ -0,0 +1,265 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.0"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
sodipodi:docname="python-logo-only.svg"
|
||||
width="92.070236pt"
|
||||
height="101.00108pt"
|
||||
inkscape:export-filename="python-logo-only.png"
|
||||
inkscape:export-xdpi="232.44"
|
||||
inkscape:export-ydpi="232.44"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata
|
||||
id="metadata371">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-height="2080"
|
||||
inkscape:window-width="1976"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
guidetolerance="10.0"
|
||||
gridtolerance="10.0"
|
||||
objecttolerance="10.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:zoom="2.1461642"
|
||||
inkscape:cx="91.558698"
|
||||
inkscape:cy="47.9926"
|
||||
inkscape:window-x="1092"
|
||||
inkscape:window-y="72"
|
||||
inkscape:current-layer="svg2"
|
||||
width="210mm"
|
||||
height="40mm"
|
||||
units="mm"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="pt"
|
||||
showgrid="false"
|
||||
inkscape:window-maximized="0" />
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
id="linearGradient2795">
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:0.49803922;"
|
||||
offset="0"
|
||||
id="stop2797" />
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2799" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2787">
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0.5;"
|
||||
offset="0"
|
||||
id="stop2789" />
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2791" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3676">
|
||||
<stop
|
||||
style="stop-color:#b2b2b2;stop-opacity:0.5;"
|
||||
offset="0"
|
||||
id="stop3678" />
|
||||
<stop
|
||||
style="stop-color:#b3b3b3;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3680" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3236">
|
||||
<stop
|
||||
style="stop-color:#f4f4f4;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3244" />
|
||||
<stop
|
||||
style="stop-color:white;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3240" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4671">
|
||||
<stop
|
||||
style="stop-color:#ffd43b;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4673" />
|
||||
<stop
|
||||
style="stop-color:#ffe873;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4675" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4689">
|
||||
<stop
|
||||
style="stop-color:#5a9fd4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4691" />
|
||||
<stop
|
||||
style="stop-color:#306998;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4693" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="224.23996"
|
||||
y1="144.75717"
|
||||
x2="-65.308502"
|
||||
y2="144.75717"
|
||||
id="linearGradient2987"
|
||||
xlink:href="#linearGradient4671"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)" />
|
||||
<linearGradient
|
||||
x1="172.94208"
|
||||
y1="77.475983"
|
||||
x2="26.670298"
|
||||
y2="76.313133"
|
||||
id="linearGradient2990"
|
||||
xlink:href="#linearGradient4689"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4689"
|
||||
id="linearGradient2587"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)"
|
||||
x1="172.94208"
|
||||
y1="77.475983"
|
||||
x2="26.670298"
|
||||
y2="76.313133" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4671"
|
||||
id="linearGradient2589"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)"
|
||||
x1="224.23996"
|
||||
y1="144.75717"
|
||||
x2="-65.308502"
|
||||
y2="144.75717" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4689"
|
||||
id="linearGradient2248"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)"
|
||||
x1="172.94208"
|
||||
y1="77.475983"
|
||||
x2="26.670298"
|
||||
y2="76.313133" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4671"
|
||||
id="linearGradient2250"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)"
|
||||
x1="224.23996"
|
||||
y1="144.75717"
|
||||
x2="-65.308502"
|
||||
y2="144.75717" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4671"
|
||||
id="linearGradient2255"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)"
|
||||
x1="224.23996"
|
||||
y1="144.75717"
|
||||
x2="-65.308502"
|
||||
y2="144.75717" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4689"
|
||||
id="linearGradient2258"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)"
|
||||
x1="172.94208"
|
||||
y1="76.176224"
|
||||
x2="26.670298"
|
||||
y2="76.313133" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2795"
|
||||
id="radialGradient2801"
|
||||
cx="61.518883"
|
||||
cy="132.28575"
|
||||
fx="61.518883"
|
||||
fy="132.28575"
|
||||
r="29.036913"
|
||||
gradientTransform="matrix(1,0,0,0.177966,0,108.7434)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4671"
|
||||
id="linearGradient1475"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.562541,0,0,0.567972,-14.99112,-11.702371)"
|
||||
x1="150.96111"
|
||||
y1="192.35176"
|
||||
x2="112.03144"
|
||||
y2="137.27299" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4689"
|
||||
id="linearGradient1478"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.562541,0,0,0.567972,-14.99112,-11.702371)"
|
||||
x1="26.648937"
|
||||
y1="20.603781"
|
||||
x2="135.66525"
|
||||
y2="114.39767" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2795"
|
||||
id="radialGradient1480"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.7490565e-8,-0.23994696,1.054668,3.7915457e-7,-83.7008,142.46201)"
|
||||
cx="61.518883"
|
||||
cy="132.28575"
|
||||
fx="61.518883"
|
||||
fy="132.28575"
|
||||
r="29.036913" />
|
||||
</defs>
|
||||
<path
|
||||
style="fill:url(#linearGradient1478);fill-opacity:1"
|
||||
d="M 54.918785,9.1927389e-4 C 50.335132,0.02221727 45.957846,0.41313697 42.106285,1.0946693 30.760069,3.0991731 28.700036,7.2947714 28.700035,15.032169 v 10.21875 h 26.8125 v 3.40625 h -26.8125 -10.0625 c -7.792459,0 -14.6157588,4.683717 -16.7499998,13.59375 -2.46181998,10.212966 -2.57101508,16.586023 0,27.25 1.9059283,7.937852 6.4575432,13.593748 14.2499998,13.59375 h 9.21875 v -12.25 c 0,-8.849902 7.657144,-16.656248 16.75,-16.65625 h 26.78125 c 7.454951,0 13.406253,-6.138164 13.40625,-13.625 v -25.53125 c 0,-7.2663386 -6.12998,-12.7247771 -13.40625,-13.9374997 C 64.281548,0.32794397 59.502438,-0.02037903 54.918785,9.1927389e-4 Z m -14.5,8.21875012611 c 2.769547,0 5.03125,2.2986456 5.03125,5.1249996 -2e-6,2.816336 -2.261703,5.09375 -5.03125,5.09375 -2.779476,-1e-6 -5.03125,-2.277415 -5.03125,-5.09375 -10e-7,-2.826353 2.251774,-5.1249996 5.03125,-5.1249996 z"
|
||||
id="path1948" />
|
||||
<path
|
||||
style="fill:url(#linearGradient1475);fill-opacity:1"
|
||||
d="m 85.637535,28.657169 v 11.90625 c 0,9.230755 -7.825895,16.999999 -16.75,17 h -26.78125 c -7.335833,0 -13.406249,6.278483 -13.40625,13.625 v 25.531247 c 0,7.266344 6.318588,11.540324 13.40625,13.625004 8.487331,2.49561 16.626237,2.94663 26.78125,0 6.750155,-1.95439 13.406253,-5.88761 13.40625,-13.625004 V 86.500919 h -26.78125 v -3.40625 h 26.78125 13.406254 c 7.792461,0 10.696251,-5.435408 13.406241,-13.59375 2.79933,-8.398886 2.68022,-16.475776 0,-27.25 -1.92578,-7.757441 -5.60387,-13.59375 -13.406241,-13.59375 z m -15.0625,64.65625 c 2.779478,3e-6 5.03125,2.277417 5.03125,5.093747 -2e-6,2.826354 -2.251775,5.125004 -5.03125,5.125004 -2.76955,0 -5.03125,-2.29865 -5.03125,-5.125004 2e-6,-2.81633 2.261697,-5.093747 5.03125,-5.093747 z"
|
||||
id="path1950" />
|
||||
<ellipse
|
||||
style="opacity:0.44382;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15.4174;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path1894"
|
||||
cx="55.816761"
|
||||
cy="127.70079"
|
||||
rx="35.930977"
|
||||
ry="6.9673119" />
|
||||
</svg>
|
After Width: | Height: | Size: 9.4 KiB |
BIN
figures/python.png
Normal file
After Width: | Height: | Size: 6.7 KiB |
93
flake.lock
Normal file
|
@ -0,0 +1,93 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1727826117,
|
||||
"narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1728909085,
|
||||
"narHash": "sha256-WLxED18lodtQiayIPDE5zwAfkPJSjHJ35UhZ8h3cJUg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c0b1da36f7c34a7146501f684e9ebdf15d2bebf8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-24.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"lastModified": 1727825735,
|
||||
"narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1726871744,
|
||||
"narHash": "sha256-V5LpfdHyQkUF7RfOaDPrZDP+oqz88lTJrMT1+stXNwo=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a1d92660c6b3b7c26fb883500a80ea9d33321be2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1729077719,
|
||||
"narHash": "sha256-zayHqZO9gA1U85c4CPvVSnLV8/cBgc2yVrSKWaKeBUs=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "5307ba60125bb024d7e52d71d582eafd511f3fee",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
34
flake.nix
Normal file
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-24.05";
|
||||
inputs.flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
inputs.treefmt-nix.url = "github:numtide/treefmt-nix";
|
||||
|
||||
outputs =
|
||||
{
|
||||
self,
|
||||
nixpkgs,
|
||||
flake-parts,
|
||||
...
|
||||
}@inputs:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
imports = [ inputs.treefmt-nix.flakeModule ];
|
||||
systems = [ "x86_64-linux" ];
|
||||
perSystem =
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
nixfmt-rfc-style
|
||||
texliveFull
|
||||
python3.pkgs.pygments
|
||||
];
|
||||
};
|
||||
|
||||
treefmt = {
|
||||
projectRootFile = "flake.nix";
|
||||
programs.nixfmt-rfc-style.enable = true;
|
||||
programs.latexindent.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
357
tex/main.tex
Normal file
|
@ -0,0 +1,357 @@
|
|||
\documentclass{beamer}
|
||||
|
||||
\usepackage{graphicx}
|
||||
\usepackage[outputdir=../aux/tex]{minted}
|
||||
\usepackage[showboxes,absolute,overlay]{textpos}
|
||||
\usepackage{tikz}
|
||||
\usepackage{svg}
|
||||
\usetikzlibrary{calc,tikzmark}
|
||||
|
||||
\title{buildbot-nix}
|
||||
\author{Richard Brežák}
|
||||
\date{2024}
|
||||
|
||||
\usetheme[progressbar=frametitle]{moloch}
|
||||
|
||||
\newcommand\beamercoverdeemph{%
|
||||
\setbeamercovered{again covered={\opaqueness<1->{30}}}%
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
\frame{\titlepage}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
There is no good open-source Nix CI/CD
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Hydra}
|
||||
\beamercoverdeemph{}
|
||||
\centering
|
||||
\begin{itemize}
|
||||
\item<2>{heavy-weight, keeps track of every store path}
|
||||
\item<3>{lots of legacy Perl}
|
||||
\item<4>{hard to deploy, administer and hack on}
|
||||
\item<5>{\texttt{nixpkgs} scale CI for \texttt{nixpkgs} scale problems}
|
||||
\item<6,7>{doesn't integrate well with GitHub/Gitea\only<7>{, especially PRs}}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\begin{columns}[c]
|
||||
\begin{column}{0.49\textwidth}
|
||||
\centering
|
||||
I attempted to run Hydra
|
||||
\end{column}
|
||||
\begin{column}{0.02\textwidth}
|
||||
\rule{.1mm}{0.7\textheight}
|
||||
\end{column}
|
||||
\begin{column}{0.49\textwidth}
|
||||
\centering
|
||||
I've succeeded and I'm still running it
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{GitHub/Gitea Actions}
|
||||
\beamercoverdeemph{}
|
||||
\centering
|
||||
\begin{itemize}
|
||||
\item<2>{not Nix native}
|
||||
\item<3>{cannot use the build sandbox generally}
|
||||
\item<4>{caching is hard to get right or wasteful}
|
||||
\item<5>{build logs become a jumbled mess \textit{OR} may repeat builds}
|
||||
\item<6>{if done naively, you will get an OOM}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\includegraphics[width=1.0\textwidth]{../figures/how-standards-prolifirate.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\begin{center}
|
||||
\verb|buildbot-nix|
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}
|
||||
\begin{columns}[c]
|
||||
\begin{column}{0.49\textwidth}
|
||||
\centering
|
||||
I know of buildbot-nix
|
||||
\end{column}
|
||||
\begin{column}{0.02\textwidth}
|
||||
\rule{.1mm}{0.7\textheight}
|
||||
\end{column}
|
||||
\begin{column}{0.49\textwidth}
|
||||
\centering
|
||||
I've never heard of it
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{buildbot?}
|
||||
\begin{columns}[c]
|
||||
\begin{column}{0.5\textwidth}
|
||||
\beamercoverdeemph{}
|
||||
\begin{itemize}
|
||||
\item<1> CI/CD framework
|
||||
\item<2> written in Python
|
||||
\item<3> used by many projects
|
||||
\end{itemize}
|
||||
\vspace{1.0em}
|
||||
\uncover<4->{essentially...} \\
|
||||
\vspace{1.0em}
|
||||
\uncover<5->{Jenkins but in Python}
|
||||
\end{column}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\pgfdeclareimage[width=5em]{openzfs}{../figures/openzfs-logo.png}
|
||||
\pgfdeclareimage[width=5em]{python}{../figures/python.png}
|
||||
\pgfdeclareimage[width=5em]{gentoo}{../figures/gentoo.png}
|
||||
\pgfdeclareimage[width=5em]{blender}{../figures/blender.png}
|
||||
\pgfdeclareimage[width=5em]{llvm}{../figures/llvm.png}
|
||||
\pgfdeclareimage[width=20em]{nix-community}{../figures/nix-community.png}
|
||||
\begin{column}<3->{0.5\textwidth}
|
||||
%% \pgfmathsetseed{2}
|
||||
\begin{tikzpicture}
|
||||
%% \makeatletter
|
||||
%% \pgfmathdeclarefunction{rndx}{0}{
|
||||
%% \pgfmathrandom{-1em, 1em} \pgfmathresult
|
||||
%% }
|
||||
%% \pgfmathdeclarefunction{rndy}{0}{
|
||||
%% \pgfmathrandom{-1em, 1em} \pgfmathresult
|
||||
%% }
|
||||
%% \makeatother
|
||||
%% \draw (0, 0) node {\pgftext{\includesvg[width=1em]{../figures/python-logo.svg}}};
|
||||
\draw (-14em, 7em) node {\pgfuseimage{openzfs}};
|
||||
\draw (-14em, -7em) node {\pgfuseimage{blender}};
|
||||
\draw (-14em, 0) node {\pgfuseimage{gentoo}};
|
||||
\draw (-7em, 3.5em) node {\pgfuseimage{python}};
|
||||
\draw (-7em, -3.5em) node {\pgfuseimage{llvm}};
|
||||
%% \draw (0, 0) node {\pgftext{\includegraphics{silver}}}};
|
||||
\end{tikzpicture}
|
||||
\end{column}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
\begin{frame}{buildbot!}
|
||||
\includegraphics[width=1.0\linewidth]{../figures/python-buildbot.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{buildbot-nix?}
|
||||
\beamercoverdeemph{}
|
||||
\begin{itemize}
|
||||
\item<1> CI/CD for Nix
|
||||
\item<2> plugin for \texttt{buildbot}
|
||||
\item<3> written in Python
|
||||
\item<4> can run on PRs safely -- configuration is server-side
|
||||
\end{itemize}
|
||||
\begin{uncoverenv}<5>
|
||||
\begin{center}
|
||||
\Large Aiming for smaller projects
|
||||
\end{center}
|
||||
\end{uncoverenv}
|
||||
\begin{onlyenv}<6>
|
||||
\begin{tikzpicture}[overlay]
|
||||
\fill[white, opacity=0.7] (-0.2\paperwidth,1.0\paperheight) rectangle (1.0\paperwidth, -0.2\paperheight);
|
||||
\draw (0.45\textwidth,0.175\textheight) node {\pgfuseimage{nix-community}};
|
||||
\end{tikzpicture}
|
||||
\end{onlyenv}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\begin{minted}[linenos=true,bgcolor=bg,breaklines,tabsize=2]{nix}
|
||||
{
|
||||
inputs = { ... };
|
||||
outputs = { ... }:
|
||||
{
|
||||
checks.${system} = {
|
||||
treefmt = treefmt...check;
|
||||
packageTest = runCommand "package-test" { } "exit 1";
|
||||
};
|
||||
formatter.${system} = treefmt...wrapper;
|
||||
};
|
||||
}
|
||||
\end{minted}
|
||||
{\tiny (not true Nix)}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\includegraphics[width=1.0\textwidth]{../figures/gh-status-ex01.png}
|
||||
|
||||
\begin{textblock}{2.5}(12.5,14.5)
|
||||
{\footnotesize(find the bug)}
|
||||
\end{textblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\includegraphics[width=1.0\textwidth]{../figures/buildbot-view.png}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
How do I get this?
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
Easily!
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\newcommand<>{\circletikz}[2]{%
|
||||
\begin{onlyenv}#3
|
||||
\begin{tikzpicture}[overlay,remember picture]
|
||||
\draw[draw = red, line width=0.3mm] let
|
||||
\p1 = ($(pic cs:#1) - (pic cs:#2)$),
|
||||
\p2 = ($1/2*(\x1,\y1)$)
|
||||
in ($(pic cs:#1) - 1/2*(\x1, \y1) + (0, 0.25em)$) ellipse (\x2 and 1em);
|
||||
\end{tikzpicture}%
|
||||
\end{onlyenv}%
|
||||
}
|
||||
\newcommand<>{\underlinetikz}[2]{%
|
||||
\begin{onlyenv}#3
|
||||
\begin{tikzpicture}[overlay,remember picture]
|
||||
\draw[draw = red, line width=0.3mm]
|
||||
($(pic cs:#1) - (0, 0.125em)$) -- ($(pic cs:#2) - (0, 0.125em)$);
|
||||
\end{tikzpicture}%
|
||||
\end{onlyenv}%
|
||||
}
|
||||
\begin{minted}[escapeinside=||,beameroverlays,fontsize=\small,linenos=true,bgcolor=bg,breaklines,tabsize=2]{nix}
|
||||
services.buildbot-nix.master = {
|
||||
enable = true;
|
||||
jobReportLimit = |\tikzmark{jobsS}|null|\tikzmark{jobsE}|;
|
||||
domain = |\tikzmark{domainS}|"buildbot.example.org"|\tikzmark{domainE}|;
|
||||
workersFile = |\tikzmark{workersS}|"/secret/workers.json"|\tikzmark{workersE}|;
|
||||
admins = |\tikzmark{adminsS}|["your-nickname"]|\tikzmark{adminsE}|;
|
||||
authBackend = |\tikzmark{githubS}|"github"|\tikzmark{githubE}|;
|
||||
|\tikzmark{githubS}|github|\tikzmark{githubE}| = {
|
||||
|\tikzmark{githubEnableS}|enable = true|\tikzmark{githubEnableE}|;
|
||||
webhookSecretFile = |\tikzmark{webhookS}|"/secret/github_webhook_secret"|\tikzmark{webhookE}|;
|
||||
oauthId = |\tikzmark{oauthIdS}|"..."|\tikzmark{oauthIdE}|;
|
||||
oauthSecretFile = |\tikzmark{oauthSecretS}|"/secret/github_oauth_secret"|\tikzmark{oauthSecretE}|;
|
||||
topic = |\tikzmark{topicS}|"build-with-buildbot"|\tikzmark{topicE}|;
|
||||
authType.app = {
|
||||
secretKeyFile = |\tikzmark{secretKeyS}|"/secret/github_app_private_key.pem"|\tikzmark{secretKeyE}|;
|
||||
id = |\tikzmark{idS}|881425|\tikzmark{idE}|;
|
||||
};
|
||||
};
|
||||
};
|
||||
\end{minted}
|
||||
\underlinetikz<2>{domainS}{domainE}
|
||||
|
||||
\underlinetikz<3>{githubS}{githubE}
|
||||
\underlinetikz<3>{githubEnableS}{githubEnableE}
|
||||
|
||||
\underlinetikz<4>{workersS}{workersE}
|
||||
\underlinetikz<4>{webhookS}{webhookE}
|
||||
\underlinetikz<4>{oauthIdS}{oauthIdE}
|
||||
\underlinetikz<4>{oauthSecretS}{oauthSecretE}
|
||||
\underlinetikz<4>{secretKeyS}{secretKeyE}
|
||||
\underlinetikz<4>{idS}{idE}
|
||||
|
||||
\underlinetikz<5>{topicS}{topicE}
|
||||
\underlinetikz<5>{jobsS}{jobsE}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\begin{center}
|
||||
and you have buildbot running
|
||||
\end{center}
|
||||
\begin{textblock}{10.0}(5.5,14.5)
|
||||
{\footnotesize(after configuring \verb|services.nginx.virtualHosts|)}
|
||||
\end{textblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
What are the features?
|
||||
\end{frame}
|
||||
|
||||
\newcommand{\imagewithtitle}[2]{%
|
||||
\begin{minipage}[t][1em]{1.0\linewidth}
|
||||
\centering #1
|
||||
\end{minipage}\\
|
||||
\vspace{1.5em}
|
||||
\includegraphics[width=1.0\linewidth, height=0.8\textheight, keepaspectratio]{#2}%
|
||||
}
|
||||
|
||||
%% \begin{frame}[fragile]
|
||||
%% %% \begin{columns}
|
||||
%% %% \begin{column}{0.5\textwidth}
|
||||
%% \centering
|
||||
%% \imagewithtitle{\Large builds \texttt{.\#checks}}{../figures/buildbot-view.png}
|
||||
%% %% \end{column}
|
||||
%% %% \begin{column}{0.5\textwidth}
|
||||
%% \centering
|
||||
%% \imagewithtitle{\Large status reports}{../figures/gh-status-ex01.png}
|
||||
%% %% \end{column}
|
||||
%% %% \end{columns}
|
||||
%% \end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\begin{columns}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\centering
|
||||
\imagewithtitle{\Large Gitea/Forgejo}{../figures/forgejo.png}
|
||||
\end{column}
|
||||
\begin{column}{0.5\textwidth}
|
||||
\centering
|
||||
\imagewithtitle{\Large GitHub}{../figures/github.png}
|
||||
\end{column}
|
||||
\end{columns}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
\imagewithtitle{\Large Cachix}{example-image-a}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
\imagewithtitle{\Large post build steps}{example-image-a}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
\imagewithtitle{\Large per-repository settings}{example-image-a}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
\imagewithtitle{\Large per-repository effects with secrets (soon)}{example-image-a}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\centering
|
||||
Questions?
|
||||
\end{frame}
|
||||
|
||||
%% \begin{frame}
|
||||
%% \centering
|
||||
%% what can it do?
|
||||
%% \end{frame}
|
||||
|
||||
%% \begin{frame}[fragile]
|
||||
%% \centering
|
||||
%% \verb|buildbot-nix| will evaluate \verb|#checks| for all systems
|
||||
%% \end{frame}
|
||||
%% \begin{frame}[fragile]
|
||||
%% \centering
|
||||
%% it will report evaluation failures
|
||||
%% \end{frame}
|
||||
%% \begin{frame}[fragile]
|
||||
%% \centering
|
||||
%% it will build derivations for supported systems
|
||||
%% \end{frame}
|
||||
|
||||
\end{document}
|
||||
|
||||
% there is no good opensource CI
|
||||
% then we built it
|
||||
% why is hydra not great
|
||||
% what is it we built, what does it offer
|
||||
% now there is good opensource CI, check out
|
||||
% call for action
|