Commit
+117 -117 +/-7 browse
1 | diff --git a/scripts/generate_arch_artifact.sh b/scripts/generate_arch_artifact.sh |
2 | deleted file mode 100755 |
3 | index ac9ead2..0000000 |
4 | --- a/scripts/generate_arch_artifact.sh |
5 | +++ /dev/null |
6 | @@ -1,26 +0,0 @@ |
7 | - #!/bin/bash |
8 | - set -e |
9 | - |
10 | - VERSION="$1" |
11 | - |
12 | - TARBALL="note-glibc-$VERSION.tar.gz" |
13 | - REMOTE_URL="https://github.com/kevinschoon/note/releases/download/$VERSION/$TARBALL" |
14 | - MD5SUM="$(cat "pkg/$TARBALL.md5" |cut -d ' ' -f 1)" |
15 | - |
16 | - cat >pkg/PKGBUILD-$VERSION<<EOF |
17 | - pkgname=note |
18 | - pkgver=$VERSION |
19 | - pkgrel=1 |
20 | - pkgdesc="Simple Note Taking CLI" |
21 | - url="https://github.com/kevinschoon/note" |
22 | - arch=(x86_64) |
23 | - license=('AGPL3') |
24 | - source=("$TARBALL::$REMOTE_URL") |
25 | - md5sums=($MD5SUM) |
26 | - |
27 | - package() { |
28 | - install -Dm755 usr/bin/note -t "\${pkgdir}/usr/bin/" |
29 | - install -Dm644 usr/share/bash-completion/completion/note -t \${pkgdir}/usr/share/bash-completion/completion/note |
30 | - install -Dm644 usr/share/man/man1/note.1.gz -t \${pkgdir}/usr/share/man/man1/ |
31 | - } |
32 | - EOF |
33 | diff --git a/scripts/generate_build.sh b/scripts/generate_build.sh |
34 | new file mode 100755 |
35 | index 0000000..1feed75 |
36 | --- /dev/null |
37 | +++ b/scripts/generate_build.sh |
38 | @@ -0,0 +1,48 @@ |
39 | + #!/bin/bash |
40 | + # Generate a compiled build artifact. This is a hack because |
41 | + # to the best of my knowledge the distribution story for OCaml |
42 | + # binaries is terrible. Dynamic linking means we need to |
43 | + # compile against the oldest version of GLIBC we wish to support. |
44 | + # We also link against Alpine muslc for convenience. It is not |
45 | + # possible to compile Mach-O Darwin executables from Linux, again, |
46 | + # AFAICT. ARM binaries would be nice too. TODO: Use a Docker buildx |
47 | + # workflow or perferably something without Docker at all. |
48 | + set -e |
49 | + |
50 | + DOCKER_FILE="$1" |
51 | + PREFIX="$2" |
52 | + |
53 | + _usage() { |
54 | + echo "USAGE: " |
55 | + echo "generate_build_artifact.sh DOCKERFILE PREFIX" |
56 | + } |
57 | + |
58 | + [[ -z "$DOCKER_FILE" ]] || [[ -z "$PREFIX" ]] && { |
59 | + _usage |
60 | + exit 1 |
61 | + } |
62 | + |
63 | + # TODO: Capture more build specifics |
64 | + VERSION="$(git describe --always)" |
65 | + |
66 | + PKG="note-$PREFIX-$VERSION" |
67 | + PKG_PATH="pkg/$PKG" |
68 | + PKG_TARGET="pkg/$PKG.tar.gz" |
69 | + SOURCE="$(realpath "_build/install/default")" |
70 | + |
71 | + mkdir -p "$PKG_PATH" |
72 | + pushd "$PKG_PATH" |
73 | + mkdir -p usr/bin |
74 | + mkdir -p usr/share/man/man1 |
75 | + cp "$SOURCE/man/man1/note.1" usr/share/man/man1/ |
76 | + mkdir -p usr/share/bash-completion/completions |
77 | + cp "$SOURCE/share/note/note" usr/share/bash-completion/completions/ |
78 | + gzip usr/share/man/man1/note.1 |
79 | + popd |
80 | + |
81 | + docker build -t "$PKG" -f "$DOCKER_FILE" . |
82 | + container_id="$(docker create $PKG)" |
83 | + docker cp "$container_id:/usr/bin/note" "$PKG_PATH/usr/bin/note" |
84 | + docker rm "$container_id" 1>/dev/null |
85 | + tar --owner root --group root -C "$PKG_PATH" -czvf "$PKG_TARGET" . |
86 | + md5sum "$PKG_TARGET" > "$PKG_TARGET.md5" |
87 | diff --git a/scripts/generate_build_artifact.sh b/scripts/generate_build_artifact.sh |
88 | deleted file mode 100755 |
89 | index 5942030..0000000 |
90 | --- a/scripts/generate_build_artifact.sh |
91 | +++ /dev/null |
92 | @@ -1,51 +0,0 @@ |
93 | - #!/bin/bash |
94 | - # Generate a compiled build artifact. This is a hack because |
95 | - # to the best of my knowledge the distribution story for OCaml |
96 | - # binaries is terrible. Dynamic linking means we need to |
97 | - # compile against the oldest version of GLIBC we wish to support. |
98 | - # We also link against Alpine muslc for convenience. It is not |
99 | - # possible to compile Mach-O Darwin executables from Linux, again, |
100 | - # AFAICT. ARM binaries would be nice too. TODO: Use a Docker buildx |
101 | - # workflow or perferably something without Docker at all. |
102 | - set -e |
103 | - |
104 | - DOCKER_FILE="$1" |
105 | - PREFIX="$2" |
106 | - |
107 | - _usage() { |
108 | - echo "USAGE: " |
109 | - echo "generate_build_artifact.sh DOCKERFILE PREFIX" |
110 | - } |
111 | - |
112 | - [[ -z "$DOCKER_FILE" ]] || [[ -z "$PREFIX" ]] && { |
113 | - _usage |
114 | - exit 1 |
115 | - } |
116 | - |
117 | - # TODO: Capture more build specifics |
118 | - VERSION="$(git describe --always)" |
119 | - |
120 | - dune clean |
121 | - dune build |
122 | - |
123 | - PKG="note-$PREFIX-$VERSION" |
124 | - PKG_PATH="pkg/$PKG" |
125 | - PKG_TARGET="pkg/$PKG.tar.gz" |
126 | - SOURCE="$(realpath "_build/install/default")" |
127 | - |
128 | - mkdir -p "$PKG_PATH" |
129 | - pushd "$PKG_PATH" |
130 | - mkdir -p usr/bin |
131 | - mkdir -p usr/share/man/man1 |
132 | - cp "$SOURCE/man/man1/note.1" usr/share/man/man1/ |
133 | - mkdir -p usr/share/bash-completion/completion |
134 | - cp "$SOURCE/share/note/note" usr/share/bash-completion/completion/ |
135 | - gzip usr/share/man/man1/note.1 |
136 | - popd |
137 | - |
138 | - docker build -t "$PKG" -f "$DOCKER_FILE" . |
139 | - container_id="$(docker create $PKG)" |
140 | - docker cp "$container_id:/usr/bin/note" "$PKG_PATH/usr/bin/note" |
141 | - docker rm "$container_id" 1>/dev/null |
142 | - tar --owner root --group root -C "$PKG_PATH" -czvf "$PKG_TARGET" . |
143 | - md5sum "$PKG_TARGET" > "$PKG_TARGET.md5" |
144 | diff --git a/scripts/generate_deb.sh b/scripts/generate_deb.sh |
145 | new file mode 100755 |
146 | index 0000000..f602af9 |
147 | --- /dev/null |
148 | +++ b/scripts/generate_deb.sh |
149 | @@ -0,0 +1,36 @@ |
150 | + #!/bin/bash |
151 | + # generate a deb package for debian based systems |
152 | + set -e |
153 | + |
154 | + |
155 | + _usage () { |
156 | + echo "USAGE: " |
157 | + echo "generate_debian_artifact.sh VERSION" |
158 | + } |
159 | + |
160 | + VERSION="$1" |
161 | + |
162 | + [[ -z "$VERSION" ]] && { |
163 | + _usage |
164 | + exit 1 |
165 | + } |
166 | + |
167 | + BUILD_ARTIFACT="pkg/note-glibc-$VERSION" |
168 | + PKG="note-$VERSION-debian" |
169 | + PKG_PATH="pkg/$PKG" |
170 | + PKG_TARGET="$PKG_PATH.deb" |
171 | + mkdir -p "$PKG_PATH/DEBIAN" |
172 | + |
173 | + cat >"$PKG_PATH/DEBIAN/control"<<EOF |
174 | + Package: note-ocaml |
175 | + Version: $VERSION |
176 | + Maintainer: Kevin Schoon <kevinschoon@gmail.com> |
177 | + Architecture: amd64 |
178 | + Description: simple note taking cli |
179 | + EOF |
180 | + |
181 | + cp -r "$BUILD_ARTIFACT"/* "$PKG_PATH/" |
182 | + |
183 | + # TODO: dune doesn't allow this path somehow |
184 | + dpkg-deb --root-owner-group -b "$PKG_PATH" |
185 | + md5sum "$PKG_TARGET" > "$PKG_TARGET.md5" |
186 | diff --git a/scripts/generate_deb_artifact.sh b/scripts/generate_deb_artifact.sh |
187 | deleted file mode 100755 |
188 | index f602af9..0000000 |
189 | --- a/scripts/generate_deb_artifact.sh |
190 | +++ /dev/null |
191 | @@ -1,36 +0,0 @@ |
192 | - #!/bin/bash |
193 | - # generate a deb package for debian based systems |
194 | - set -e |
195 | - |
196 | - |
197 | - _usage () { |
198 | - echo "USAGE: " |
199 | - echo "generate_debian_artifact.sh VERSION" |
200 | - } |
201 | - |
202 | - VERSION="$1" |
203 | - |
204 | - [[ -z "$VERSION" ]] && { |
205 | - _usage |
206 | - exit 1 |
207 | - } |
208 | - |
209 | - BUILD_ARTIFACT="pkg/note-glibc-$VERSION" |
210 | - PKG="note-$VERSION-debian" |
211 | - PKG_PATH="pkg/$PKG" |
212 | - PKG_TARGET="$PKG_PATH.deb" |
213 | - mkdir -p "$PKG_PATH/DEBIAN" |
214 | - |
215 | - cat >"$PKG_PATH/DEBIAN/control"<<EOF |
216 | - Package: note-ocaml |
217 | - Version: $VERSION |
218 | - Maintainer: Kevin Schoon <kevinschoon@gmail.com> |
219 | - Architecture: amd64 |
220 | - Description: simple note taking cli |
221 | - EOF |
222 | - |
223 | - cp -r "$BUILD_ARTIFACT"/* "$PKG_PATH/" |
224 | - |
225 | - # TODO: dune doesn't allow this path somehow |
226 | - dpkg-deb --root-owner-group -b "$PKG_PATH" |
227 | - md5sum "$PKG_TARGET" > "$PKG_TARGET.md5" |
228 | diff --git a/scripts/generate_pkgbuild.sh b/scripts/generate_pkgbuild.sh |
229 | new file mode 100755 |
230 | index 0000000..9e25950 |
231 | --- /dev/null |
232 | +++ b/scripts/generate_pkgbuild.sh |
233 | @@ -0,0 +1,26 @@ |
234 | + #!/bin/bash |
235 | + set -e |
236 | + |
237 | + VERSION="$1" |
238 | + |
239 | + TARBALL="note-glibc-$VERSION.tar.gz" |
240 | + REMOTE_URL="https://github.com/kevinschoon/note/releases/download/$VERSION/$TARBALL" |
241 | + MD5SUM="$(cat "pkg/$TARBALL.md5" |cut -d ' ' -f 1)" |
242 | + |
243 | + cat >pkg/PKGBUILD-$VERSION<<EOF |
244 | + pkgname=note |
245 | + pkgver=$VERSION |
246 | + pkgrel=1 |
247 | + pkgdesc="Simple Note Taking CLI" |
248 | + url="https://github.com/kevinschoon/note" |
249 | + arch=(x86_64) |
250 | + license=('AGPL3') |
251 | + source=("$TARBALL::$REMOTE_URL") |
252 | + md5sums=($MD5SUM) |
253 | + |
254 | + package() { |
255 | + install -Dm755 usr/bin/note -t "\${pkgdir}/usr/bin/" |
256 | + install -Dm644 usr/share/bash-completion/completions/note -t \${pkgdir}/usr/share/bash-completion/completions/ |
257 | + install -Dm644 usr/share/man/man1/note.1.gz -t \${pkgdir}/usr/share/man/man1/ |
258 | + } |
259 | + EOF |
260 | diff --git a/scripts/release.sh b/scripts/release.sh |
261 | index 2e931a0..e8499ec 100755 |
262 | --- a/scripts/release.sh |
263 | +++ b/scripts/release.sh |
264 | @@ -3,9 +3,12 @@ set -e |
265 | |
266 | VERSION="$(git describe --always)" |
267 | |
268 | - scripts/generate_build_artifact.sh docker/Dockerfile.debian glibc |
269 | - scripts/generate_deb_artifact.sh "$VERSION" |
270 | + dune clean |
271 | + dune build |
272 | |
273 | - scripts/generate_build_artifact.sh docker/Dockerfile.alpine muslc |
274 | + scripts/generate_build.sh docker/Dockerfile.debian glibc |
275 | + scripts/generate_deb.sh "$VERSION" |
276 | |
277 | - scripts/generate_arch_artifact.sh "$VERSION" |
278 | + scripts/generate_build.sh docker/Dockerfile.alpine muslc |
279 | + |
280 | + scripts/generate_pkgbuild.sh "$VERSION" |