aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2023-03-29 07:43:28 -0300
committerEuAndreh <eu@euandre.org>2023-03-29 09:03:33 -0300
commit08a26600584190fd3e740f51ccfcbb2263a48780 (patch)
tree15d4afa254764f0b20aa155f947b2a29bc5373ce
parent.envrc: Do not "set -eu" so one can manually source it (diff)
downloadpackage-repository-08a26600584190fd3e740f51ccfcbb2263a48780.tar.gz
package-repository-08a26600584190fd3e740f51ccfcbb2263a48780.tar.xz
Use abuild(1) to build ".apk" packages
-rw-r--r--.envrc2
-rw-r--r--.gitignore1
-rw-r--r--Makefile9
-rw-r--r--paku.lock10
-rw-r--r--src/alpine/git-permalink-0-1-0/APKBUILD31
-rw-r--r--src/alpine/git-permalink-0-2-0/APKBUILD31
-rw-r--r--src/alpine/guile-heredoc/APKBUILD31
-rw-r--r--src/alpine/remembering-0-1-2/APKBUILD31
-rw-r--r--src/alpine/td/APKBUILD31
-rwxr-xr-xsrc/bin/paku.in159
-rw-r--r--src/secrets/eu@euandre.org.rsa.gpg69
-rw-r--r--src/secrets/eu@euandre.org.rsa.pub14
12 files changed, 328 insertions, 91 deletions
diff --git a/.envrc b/.envrc
index 25194d1..647d929 100644
--- a/.envrc
+++ b/.envrc
@@ -1,3 +1,5 @@
#!/bin/sh
export PATH="$PWD/src/bin:$PATH"
+export PACKAGER_PRIVKEY="$PWD"/src/secrets/eu@euandre.org.rsa
+export ABUILD_APK_INDEX_OPTS='--allow-untrusted'
diff --git a/.gitignore b/.gitignore
index adc299e..959faf9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
/.paku/
/public/
/src/bin/paku
+/src/secrets/
diff --git a/Makefile b/Makefile
index 24ba899..844521b 100644
--- a/Makefile
+++ b/Makefile
@@ -92,7 +92,8 @@ alpine.sentinel: alpine.mk
touch $@
alpine.mk: paku.lock
- paku alpine > $@
+ mkdir -p src/alpine
+ paku alpine src/alpine > $@
homebrew: Formula
@@ -126,7 +127,8 @@ upload: public
clean: src/bin/paku
rm -rf "`paku -C datadir`"
rm -rf \
- $(derived-assets) result* *.mk *.sentinel *.out.txt
+ $(derived-assets) result* *.mk *.sentinel *.out.txt \
+ src/secrets/*.rsa
check-shellcheck:
@@ -165,9 +167,8 @@ check-debian-x86_64-deb:
check-debian: check-debian-x86_64-deb
-# FIXME: add -x
check-alpine-x86_64-apk:
- sh tests/vm-check.sh -H alpine-x86_64-headless -r $(HTTP-REMOTE) -t apk -- -k "`paku -C maintainer.email`"
+ sh tests/vm-check.sh -x -H alpine-x86_64-headless -r $(HTTP-REMOTE) -t apk -- -k "`paku -C maintainer.email`"
check-alpine: check-alpine-x86_64-apk
diff --git a/paku.lock b/paku.lock
index 46afc78..923ccbd 100644
--- a/paku.lock
+++ b/paku.lock
@@ -34,10 +34,12 @@
"native-inputs": [],
"inputs": [],
"version": "v0.1.0",
+ "date": "2021-06-13",
"label": "0-1-0",
"sha256": "252c98e349fed8df180ace540675b69a811ff56a9f06fa505eb475e047648a1f",
"sha256guix": "07waci3y0xdlbr8gl1lzdbsiz0csnrshcm6f18cdzn7y97irhb15",
"sha256nix": "1jb0rgcj5b4bkm5gds3l0dymf3gd644r2njmirs9345vf54if45y",
+ "sha512": "4d508704333c7c19432a5e021e561e5fe96175631230b09a672cfca984c55ee83dc55e82f4c29e7666db55997ddff59e54fc1d3c4cd72f78dc688fd1dd68a091",
"url": "https://euandre.org/git/git-permalink/snapshot/git-permalink-v0.1.0.tar.xz",
"base-url": "https://euandre.org/s/git-permalink",
"homepage": "https://euandre.org/s/git-permalink/",
@@ -59,10 +61,12 @@
"native-inputs": [],
"inputs": [],
"version": "v0.2.0",
+ "date": "2021-06-19",
"label": "0-2-0",
"sha256": "9ea6562812f6127771bc2b86919ea63056fcc0f5c1e556875855c924ee8b1183",
"sha256guix": "10qiigp29jamb23mdrf1yp0gqmihlsg931ibpiqpf4pn28l5d9ly",
"sha256nix": "1bzx4gdfc87jfshaqifxpc3llp2j98wkzjjslzwbrqn59jzakxc9",
+ "sha512": "c75da25709b6b074812d34dfa5371a6dd53d31f1ce2828c594cf3c62bdd90b421d14f5733782fcaed178db830236eeb87a8ae2fb90e773270222ae64750625d0",
"url": "https://euandre.org/git/git-permalink/snapshot/git-permalink-v0.2.0.tar.xz",
"base-url": "https://euandre.org/s/git-permalink",
"homepage": "https://euandre.org/s/git-permalink/",
@@ -84,10 +88,12 @@
"native-inputs": [],
"inputs": [],
"version": "v0.1.2",
+ "date": "2021-01-26",
"label": "0-1-2",
"sha256": "bbf0fd451d3de3b09a01cfbcc74482741463f9d8ac73ba6024e538c203b1dfeb",
"sha256guix": "1syzn41w4f754ihblwxcv3wn653lh92cgg6g06db1qrx3m2zvw5v",
"sha256nix": "1mrkyfcgz77hw7mpgqrnsaws9qng2awf8flslzf1s1gikk3zljns",
+ "sha512": "9611c50963e9db2a2732e07e64d4435ececff291bd2302ffca93fbe596144a97cb06b1f464385de19151841b44e0bf151cc92ce28eb01d836e3dfcca05170999",
"url": "https://euandre.org/git/remembering/snapshot/remembering-v0.1.2.tar.xz",
"base-url": "https://euandre.org/s/remembering",
"homepage": "https://euandre.org/s/remembering/",
@@ -109,10 +115,12 @@
"native-inputs": [],
"inputs": [],
"version": "4a8a7a2662c94b2581f587e9a4b81feba4f5e7d8",
+ "date": "2022-03-27",
"label": "latest",
"sha256": "a25561ae8062788bfb79df2de5f26e5f1100638fbeabff934490cdf0a9dde105",
"sha256guix": "01g1vnlz1kch8j9zzaxyixih04azdvrfabfzg7xqny32h2p62md2",
"sha256nix": "1xqr2vc270jydk508pbkhcchmbg74w4bf83ch2d85nqja14r64n9",
+ "sha512": "59071e6fbe3a70a8c0b435a050f274f768e1476759e8645d960e5f1a12d88f9eab6765b3ecc7a2696a9205f454d6d3ae5a080d63b133b3574baeb48f048a1952",
"url": "https://euandre.org/git/td/snapshot/td-4a8a7a2662c94b2581f587e9a4b81feba4f5e7d8.tar.xz",
"base-url": "https://euandre.org/s/td",
"homepage": "https://euandre.org/s/td/",
@@ -145,10 +153,12 @@
],
"type": "latest",
"version": "065435cdce609604e33b879b9be3e81ab89f3e7b",
+ "date": "2022-11-16",
"label": "latest",
"sha256": "4d6e5171f36d48ab2341cc9e3346262f9ec7c9f0fd3d88ec6e204ef2160821f8",
"sha256guix": "1y1110bg4ki0dvn8hggxy34wg7ig4r3377nc84isnj3dydqm2vjd",
"sha256nix": "179qq17mgi4kakhj9w1dk26afljh5yad4j9ih9d8wms70x6h211m",
+ "sha512": "09071e6fbe3a70a8c0b435a050f274f768e1476759e8645d960e5f1a12d88f9eab6765b3ecc7a2696a9205f454d6d3ae5a080d63b133b3574baeb48f048a1952",
"url": "https://euandre.org/git/guile-heredoc/snapshot/guile-heredoc-065435cdce609604e33b879b9be3e81ab89f3e7b.tar.xz",
"base-url": "https://euandre.org/s/guile-heredoc",
"homepage": "https://euandre.org/s/guile-heredoc/",
diff --git a/src/alpine/git-permalink-0-1-0/APKBUILD b/src/alpine/git-permalink-0-1-0/APKBUILD
new file mode 100644
index 0000000..a6a2191
--- /dev/null
+++ b/src/alpine/git-permalink-0-1-0/APKBUILD
@@ -0,0 +1,31 @@
+# Maintainer: EuAndreh <eu@euandre.org>
+pkgname='git-permalink'
+pkgver='v0.1.0'
+pkgrel='0'
+pkgdesc='Git extension to generate web permalinks of files in a repository'
+url='https://euandre.org/s/git-permalink/'
+arch='noarch'
+license='AGPL-3.0-or-later'
+depends=''
+makedepends=''
+checkdepends=''
+install=''
+subpackages='git-permalink-doc'
+source='https://euandre.org/git/git-permalink/snapshot/git-permalink-v0.1.0.tar.xz'
+builddir="$srcdir/git-permalink-v0.1.0"
+
+build() {
+ make PREFIX=/usr
+}
+
+check() {
+ make check
+}
+
+package() {
+ make install DESTDIR="$pkgdir" PREFIX=/usr
+}
+
+sha512sums='
+4d508704333c7c19432a5e021e561e5fe96175631230b09a672cfca984c55ee83dc55e82f4c29e7666db55997ddff59e54fc1d3c4cd72f78dc688fd1dd68a091 git-permalink-v0.1.0.tar.xz
+'
diff --git a/src/alpine/git-permalink-0-2-0/APKBUILD b/src/alpine/git-permalink-0-2-0/APKBUILD
new file mode 100644
index 0000000..7779a1d
--- /dev/null
+++ b/src/alpine/git-permalink-0-2-0/APKBUILD
@@ -0,0 +1,31 @@
+# Maintainer: EuAndreh <eu@euandre.org>
+pkgname='git-permalink'
+pkgver='v0.2.0'
+pkgrel='0'
+pkgdesc='Git extension to generate web permalinks of files in a repository'
+url='https://euandre.org/s/git-permalink/'
+arch='noarch'
+license='AGPL-3.0-or-later'
+depends=''
+makedepends=''
+checkdepends=''
+install=''
+subpackages='git-permalink-doc'
+source='https://euandre.org/git/git-permalink/snapshot/git-permalink-v0.2.0.tar.xz'
+builddir="$srcdir/git-permalink-v0.2.0"
+
+build() {
+ make PREFIX=/usr
+}
+
+check() {
+ make check
+}
+
+package() {
+ make install DESTDIR="$pkgdir" PREFIX=/usr
+}
+
+sha512sums='
+c75da25709b6b074812d34dfa5371a6dd53d31f1ce2828c594cf3c62bdd90b421d14f5733782fcaed178db830236eeb87a8ae2fb90e773270222ae64750625d0 git-permalink-v0.2.0.tar.xz
+'
diff --git a/src/alpine/guile-heredoc/APKBUILD b/src/alpine/guile-heredoc/APKBUILD
new file mode 100644
index 0000000..a276952
--- /dev/null
+++ b/src/alpine/guile-heredoc/APKBUILD
@@ -0,0 +1,31 @@
+# Maintainer: EuAndreh <eu@euandre.org>
+pkgname='guile-heredoc'
+pkgver='0.0.1_git20221116'
+pkgrel='0'
+pkgdesc='Guile heredoc syntax'
+url='https://euandre.org/s/guile-heredoc/'
+arch='noarch'
+license='AGPL-3.0-or-later'
+depends=''
+makedepends=''
+checkdepends=''
+install=''
+subpackages='guile-heredoc-doc'
+source='https://euandre.org/git/guile-heredoc/snapshot/guile-heredoc-065435cdce609604e33b879b9be3e81ab89f3e7b.tar.xz'
+builddir="$srcdir/guile-heredoc-065435cdce609604e33b879b9be3e81ab89f3e7b"
+
+build() {
+ make PREFIX=/usr
+}
+
+check() {
+ make check
+}
+
+package() {
+ make install DESTDIR="$pkgdir" PREFIX=/usr
+}
+
+sha512sums='
+09071e6fbe3a70a8c0b435a050f274f768e1476759e8645d960e5f1a12d88f9eab6765b3ecc7a2696a9205f454d6d3ae5a080d63b133b3574baeb48f048a1952 guile-heredoc-065435cdce609604e33b879b9be3e81ab89f3e7b.tar.xz
+'
diff --git a/src/alpine/remembering-0-1-2/APKBUILD b/src/alpine/remembering-0-1-2/APKBUILD
new file mode 100644
index 0000000..3295a98
--- /dev/null
+++ b/src/alpine/remembering-0-1-2/APKBUILD
@@ -0,0 +1,31 @@
+# Maintainer: EuAndreh <eu@euandre.org>
+pkgname='remembering'
+pkgver='v0.1.2'
+pkgrel='0'
+pkgdesc='Add memory to dmenu, fzf and similar tools'
+url='https://euandre.org/s/remembering/'
+arch='noarch'
+license='AGPL-3.0-or-later'
+depends=''
+makedepends=''
+checkdepends=''
+install=''
+subpackages='remembering-doc'
+source='https://euandre.org/git/remembering/snapshot/remembering-v0.1.2.tar.xz'
+builddir="$srcdir/remembering-v0.1.2"
+
+build() {
+ make PREFIX=/usr
+}
+
+check() {
+ make check
+}
+
+package() {
+ make install DESTDIR="$pkgdir" PREFIX=/usr
+}
+
+sha512sums='
+9611c50963e9db2a2732e07e64d4435ececff291bd2302ffca93fbe596144a97cb06b1f464385de19151841b44e0bf151cc92ce28eb01d836e3dfcca05170999 remembering-v0.1.2.tar.xz
+'
diff --git a/src/alpine/td/APKBUILD b/src/alpine/td/APKBUILD
new file mode 100644
index 0000000..3112b35
--- /dev/null
+++ b/src/alpine/td/APKBUILD
@@ -0,0 +1,31 @@
+# Maintainer: EuAndreh <eu@euandre.org>
+pkgname='td'
+pkgver='0.0.1_git20220327'
+pkgrel='0'
+pkgdesc='Minimalistic bug tracker CLI'
+url='https://euandre.org/s/td/'
+arch='noarch'
+license='AGPL-3.0-or-later'
+depends=''
+makedepends=''
+checkdepends=''
+install=''
+subpackages='td-doc'
+source='https://euandre.org/git/td/snapshot/td-4a8a7a2662c94b2581f587e9a4b81feba4f5e7d8.tar.xz'
+builddir="$srcdir/td-4a8a7a2662c94b2581f587e9a4b81feba4f5e7d8"
+
+build() {
+ make PREFIX=/usr
+}
+
+check() {
+ make check
+}
+
+package() {
+ make install DESTDIR="$pkgdir" PREFIX=/usr
+}
+
+sha512sums='
+59071e6fbe3a70a8c0b435a050f274f768e1476759e8645d960e5f1a12d88f9eab6765b3ecc7a2696a9205f454d6d3ae5a080d63b133b3574baeb48f048a1952 td-4a8a7a2662c94b2581f587e9a4b81feba4f5e7d8.tar.xz
+'
diff --git a/src/bin/paku.in b/src/bin/paku.in
index e7c43f3..b7b06d7 100755
--- a/src/bin/paku.in
+++ b/src/bin/paku.in
@@ -477,7 +477,7 @@ sub emit_debian() {
\$(DIR)/debian/public-key.asc debian.out.txt
debian.out.txt:
- \@printf '\$(DIR)/debian/\\n' > \$\@
+ \@printf '\$(DIR)/debian/*\\n' > \$\@
\$(DIR)/debian/Packages: \$(debs)
@@ -501,79 +501,74 @@ sub emit_debian() {
}
sub emit_alpine() {
+ my $d = $ARGV[0] or die 'Missing "src/alpine/" directory';
my $json = load_json();
+ for my $pkg (@{$json->{packages}}) {
+ my $date = $pkg->{date} =~ s/-//gr;
+ my $ver = $pkg->{label} eq 'latest' ? "0.0.1_git$date" : $pkg->{version};
+ my $dir = "$d/$pkg->{name}" . (
+ $pkg->{label} eq 'latest' ? '' : "-$pkg->{label}"
+ );
+ mkdir "$dir";
+ open(my $fh, '>', "$dir/APKBUILD");
+ print $fh <<~EOF;
+ # Maintainer: $pkg->{maintainer}
+ pkgname='$pkg->{name}'
+ pkgver='$ver'
+ pkgrel='0'
+ pkgdesc='$pkg->{description}'
+ url='$pkg->{homepage}'
+ arch='noarch'
+ license='$pkg->{license}'
+ depends=''
+ makedepends=''
+ checkdepends=''
+ install=''
+ subpackages='$pkg->{name}-doc'
+ source='$pkg->{url}'
+ builddir="\$srcdir/$pkg->{name}-$pkg->{version}"
+
+ build() {
+ make PREFIX=/usr
+ }
+
+ check() {
+ make check
+ }
+
+ package() {
+ make install DESTDIR="\$pkgdir" PREFIX=/usr
+ }
+
+ sha512sums='
+ $pkg->{sha512} $pkg->{fname}
+ '
+ EOF
+ close $fh;
+ }
my @apks = ();
my @targets = ();
for my $pkg (@{$json->{packages}}) {
- push @targets, <<~EOF;
- \$(DIR)/tarballs/$pkg->{fname}:
- mkdir -p \$(\@D)
- wget -O \$\@ \\
- '$pkg->{url}'
-
- \$(DIR)/checkouts/$pkg->{name}-$pkg->{version}: \$(DIR)/tarballs/$pkg->{fname}
- mkdir -p \$(\@D)
- tar -C \$(\@D) -xf \$(DIR)/tarballs/$pkg->{fname}
- touch \$\@
-
- EOF
-
-
next if $pkg->{architectures} ne 'any';
+ my $date = $pkg->{date} =~ s/-//gr;
+ my $ver = $pkg->{label} eq 'latest' ? "0.0.1_git$date" : $pkg->{version};
- my $deb_name = "$pkg->{name}_" . (
- $pkg->{label} eq 'latest' ? 'latest' : $pkg->{version}
- ) . "_all.deb";
- my $deb_path = "\$(DIR)/debian/$deb_name";
-
- push @apks, "\t$deb_path \\\n";
+ my $recipe_dir = "src/alpine/$pkg->{name}" . (
+ $pkg->{label} eq 'latest' ? '' : "-$pkg->{label}"
+ ) . '/';
+ my $apk_name = "$pkg->{name}-$ver-r0.apk";
+ my $apk_path = "\$(DIR)/alpine/REPODEST/alpine/x86_64/$apk_name";
- my $ver = $pkg->{label} eq 'latest' ? '0.' . $pkg->{version} . '.latest' : $pkg->{version};
- $ver =~ s/^v//;
+ push @apks, "\t$apk_path \\\n";
push @targets, <<~EOF;
- \$(DIR)/builddirs/$pkg->{name}-$pkg->{version}/DEBIAN: \$(DIR)/checkouts/$pkg->{name}-$pkg->{version}
- \$(MAKE) \\
- -C \$(DIR)/checkouts/$pkg->{name}-$pkg->{version} \\
- install \\
- PREFIX=/usr \\
- DESTDIR="\$\$PWD"/\$(\@D)
- mkdir -p \$\@
- touch \$\@
-
- \$(DIR)/builddirs/$pkg->{name}-$pkg->{version}/DEBIAN/control: \$(DIR)/builddirs/$pkg->{name}-$pkg->{version}/DEBIAN
- printf '' > \$\@
- printf 'Package: $pkg->{name}\\n' >> \$\@
- printf 'Version: $ver\\n' >> \$\@
- printf 'Section: custom\\n' >> \$\@
- printf 'Depends:\\n' >> \$\@
- printf 'Priority: optional\\n' >> \$\@
- printf 'Architecture: all\\n' >> \$\@
- printf 'Essential: no\\n' >> \$\@
-
- printf 'Maintainer: ' >> \$\@
- printf '$pkg->{"maintainer-b64"}' | base64 -d >> \$\@
- printf '\\n' >> \$\@
-
- printf 'Description: ' >> \$\@
- printf '$pkg->{"description-b64"}' | base64 -d >> \$\@
- printf '\\n' >> \$\@
-
- printf '$pkg->{'long-description-b64'}' | \\
- base64 -d | \\
- sed 's|^\$\$|.|' | \\
- sed 's|^| |' >> \$\@
- printf '\\n' >> \$\@
-
- \$(DIR)/builddirs/$pkg->{name}-$pkg->{version}.deb: \$(DIR)/builddirs/$pkg->{name}-$pkg->{version}/DEBIAN/control
- dpkg-deb --build \$(DIR)/builddirs/$pkg->{name}-$pkg->{version}
-
- $deb_path: \$(DIR)/builddirs/$pkg->{name}-$pkg->{version}.deb
- mkdir -p \$(\@D)
- cp \$(DIR)/builddirs/$pkg->{name}-$pkg->{version}.deb \$\@
-
+ $apk_path: $recipe_dir/APKBUILD
+ cd $recipe_dir && abuild \\
+ -s \$\$OLDPWD/\$(DIR)/alpine/SRCDEST \\
+ -P \$\$OLDPWD/\$(DIR)/alpine/REPODEST \\
+ sanitycheck clean fetch verify unpack build check rootpkg index clean
EOF
}
@@ -583,42 +578,32 @@ sub emit_alpine() {
.POSIX:
DIR = $json->{datadir}
+ RSAKEY = $json->{maintainer}{email}
+
apks = \\
EOF
- # print @apks, "\n";
+ print @apks, "\n";
print "\n\n";
print <<~EOF;
- RSAKEY = '$json->{maintainer}{email}'
-
-
- all: \$(DIR)/alpine/public/x86_64/APKINDEX.tar.gz \$(DIR)/alpine/public/\$(RSAKEY).rsa.pub
-
- public-dir:
- \@printf '\$(DIR)/alpine/public'
+ all: \$(apks) \$(DIR)/alpine/REPODEST/alpine/\$(RSAKEY).rsa.pub alpine.out.txt
+ alpine.out.txt:
+ \@printf '\$(DIR)/alpine/REPODEST/alpine/*\\n' > \$\@
- \$(DIR)/alpine/x86_64/APKINDEX: \$(apks)
- mkdir -p \$(\@D) # FIXME
- touch \$\@
+ \$(apks): src/secrets/\$(RSAKEY).rsa
- \$(DIR)/alpine/x86_64/DESCRIPTION: \$(DIR)/alpine/x86_64/APKINDEX
- echo xablau > \$\@
-
- \$(DIR)/alpine/public/x86_64/APKINDEX.tar.gz: \$(DIR)/alpine/x86_64/APKINDEX \\
- \$(DIR)/alpine/x86_64/DESCRIPTION
- mkdir -p \$(\@D) # FIXME
- tar -C \$(DIR)/alpine/x86_64 -cvf \$\@ APKINDEX DESCRIPTION
-
-
- \$(DIR)/alpine/public/\$(RSAKEY).rsa.pub: \$(apks)
- mkdir -p \$(\@D) # FIXME
- gpg --export-ssh-key \$(RSAKEY) | ssh-keygen -f/dev/stdin -e -m pem > \$\@
+ \$(DIR)/alpine/REPODEST/alpine/\$(RSAKEY).rsa.pub: src/secrets/\$(RSAKEY).rsa
+ mkdir -p \$(\@D)
+ cp src/secrets/\$(RSAKEY).rsa.pub \$\@
+ src/secrets/\$(RSAKEY).rsa: src/secrets/\$(RSAKEY).rsa.gpg
+ gpg -d -o \$\@ \$\@.gpg
+ chmod 400 \$\@
EOF
- # print @targets;
+ print @targets;
}
sub pascal_case($s) {
diff --git a/src/secrets/eu@euandre.org.rsa.gpg b/src/secrets/eu@euandre.org.rsa.gpg
new file mode 100644
index 0000000..eac229e
--- /dev/null
+++ b/src/secrets/eu@euandre.org.rsa.gpg
@@ -0,0 +1,69 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+=LrOJ
+-----END PGP MESSAGE-----
diff --git a/src/secrets/eu@euandre.org.rsa.pub b/src/secrets/eu@euandre.org.rsa.pub
new file mode 100644
index 0000000..8988ec8
--- /dev/null
+++ b/src/secrets/eu@euandre.org.rsa.pub
@@ -0,0 +1,14 @@
+-----BEGIN PUBLIC KEY-----
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6GlUBiBFJj0oZcHf1h/F
+fapiLpmfBE1W4D5AQ/7WlSSYhlof54iL4iQGTsS2plTNC6a6nSBNGMskO7mpg5Na
+jgnOoAAgOXi5jOix3l3QCdBlImI9TVumyRMKyIOzjS4nnitdyZdovLkxuKXU9akV
+fKHNR9yGeAfbY4SPS+SC9kTyQyBvljiO5NhUeN6tFyD+QidIFjty/uBX+xGhSRc2
+7Jh0+FsLe5etGYUGV3b1z9KjQBlBbhhgTOJuj3nGQtFau7mjkmdI0o3Ve87O2+Is
+poPFbrVTJc8s5XKm5OmkJm/C//ZvUQE4zXPpwe8/VORwfqRxfWeQxjNOqZGK3I4I
+bdR+eyo2pEDMTdNvImsucdCP9TGPgsoCFe4i8QAKn3zMns5TVwoFjVfkH0+MZdX5
+AnwZfp6JJNLcod1+jNIpiQXP1QRb5voboEjcB4HjEtT9N2l7URdDb/qMEe+k0w+y
+hIjqzySBO1ty0MgD4SLAtMCS2ZSetQuIBGgdPmluvFhyKA/EgjAEvJi/Bujv0oou
+zPOleJpp8CRnwCm3nuSKpIc1DYk75URWXAh7VK/Onxsf8kptuv2Ft3hGIy7NBSx3
+Sco0WYxLnCmRlu8sQs1XUfkyeUhOitLiq17+nFbm+yxAVjIGOOJVENYSSrrhqEAI
+RS6IjDqkNRR7KOx4D2/TCjMCAwEAAQ==
+-----END PUBLIC KEY-----