aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Jirutka <jakub@jirutka.cz>2022-05-13 03:53:13 +0200
committerJakub Jirutka <jakub@jirutka.cz>2022-05-14 00:26:27 +0000
commitc2b1c717770c4a02e3c9ec8b68b9d4668a286a59 (patch)
tree165cec0e184e1b2986cbcfc0d1878421a6f122f7
parent295706c96516e889c93349c6cc30f73fd2e0a9d5 (diff)
downloadaports-c2b1c717770c4a02e3c9ec8b68b9d4668a286a59.tar.gz
aports-c2b1c717770c4a02e3c9ec8b68b9d4668a286a59.tar.bz2
aports-c2b1c717770c4a02e3c9ec8b68b9d4668a286a59.tar.xz
testing/atuin: new aport
-rw-r--r--testing/atuin/APKBUILD170
-rw-r--r--testing/atuin/atuin-server.pre-install6
-rw-r--r--testing/atuin/atuin.confd19
-rw-r--r--testing/atuin/atuin.initd35
-rw-r--r--testing/atuin/atuin.logrotate6
-rw-r--r--testing/atuin/atuin.post-install7
-rw-r--r--testing/atuin/cargo-lock.patch1174
-rw-r--r--testing/atuin/cleanup-deps.patch21
-rw-r--r--testing/atuin/dont-create-config-dir-if-not-needed.patch45
-rw-r--r--testing/atuin/dont-pollute-shell-env.patch40
-rw-r--r--testing/atuin/server-log-without-ansi-style.patch16
-rw-r--r--testing/atuin/sqlx-use-system-libsqlite.patch15
-rw-r--r--testing/atuin/standalone-server.patch51
-rw-r--r--testing/atuin/use-system-tls.patch23
14 files changed, 1628 insertions, 0 deletions
diff --git a/testing/atuin/APKBUILD b/testing/atuin/APKBUILD
new file mode 100644
index 0000000000..261236c3f9
--- /dev/null
+++ b/testing/atuin/APKBUILD
@@ -0,0 +1,170 @@
+# Contributor: Jakub Jirutka <jakub@jirutka.cz>
+# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
+pkgname=atuin
+pkgver=0.9.1
+pkgrel=0
+# Keep in sync with sqlx version in Cargo.lock.
+_sqlx_ver=0.5.13
+pkgdesc="Magical shell history"
+url="https://github.com/ellie/atuin"
+# armhf: build getting stuck on CI
+# riscv64, s390x: blocked by rust/cargo
+arch="all !armhf !riscv64 !s390x"
+license="MIT"
+makedepends="
+ cargo
+ clang
+ jq
+ libsodium-dev
+ openssl-dev
+ sqlite-dev
+ "
+pkgusers="atuin"
+install="
+ $pkgname-server.pre-install
+ $pkgname.post-install"
+subpackages="
+ $pkgname-sync
+ $pkgname-server
+ $pkgname-server-openrc
+ $pkgname-zsh-plugin:_zsh_plugin:noarch
+ $pkgname-bash-completion
+ $pkgname-fish-completion
+ $pkgname-zsh-completion
+ "
+source="https://github.com/ellie/atuin/archive/v$pkgver/atuin-$pkgver.tar.gz
+ https://github.com/launchbadge/sqlx/archive/v$_sqlx_ver/sqlx-$_sqlx_ver.tar.gz
+ dont-create-config-dir-if-not-needed.patch
+ standalone-server.patch
+ cleanup-deps.patch
+ dont-pollute-shell-env.patch
+
+ use-system-tls.patch
+ sqlx-use-system-libsqlite.patch
+ server-log-without-ansi-style.patch
+ cargo-lock.patch
+
+ $pkgname.initd
+ $pkgname.confd
+ $pkgname.logrotate
+ "
+options="!check" # FIXME: some tests are broken
+
+export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
+export CARGO_PROFILE_RELEASE_LTO="true"
+export CARGO_PROFILE_RELEASE_OPT_LEVEL="s"
+export CARGO_PROFILE_RELEASE_PANIC="abort"
+
+export SODIUM_USE_PKG_CONFIG=1
+
+prepare() {
+ local sqlx_ver
+ sqlx_ver=$(cargo metadata --format-version 1 \
+ | jq -er '.packages[] | select(.name=="sqlx") | .version') \
+ || { error 'Unable to find sqlx version in Cargo.lock'; return 1; }
+ if [ "$_sqlx_ver" != "$sqlx_ver" ]; then
+ error "Bump _sqlx_ver in APKBUILD to: $sqlx_ver"
+ return 1
+ fi
+
+ mkdir -p vendor
+ mv "$srcdir"/sqlx-$_sqlx_ver vendor/sqlx
+
+ # Build with sqlx which we patched to remove bundled libsqlite3.
+ # See https://github.com/launchbadge/sqlx/issues/191.
+ cat >> Cargo.toml <<-EOF
+
+ [patch.crates-io]
+ sqlx = { path = "./vendor/sqlx" }
+ sqlx-core = { path = "./vendor/sqlx/sqlx-core" }
+ EOF
+
+ default_prepare
+
+ cargo fetch --locked
+}
+
+build() {
+ msg2 'Building server'
+ cargo build --frozen --release --no-default-features --features server
+ mv target/release/atuin target/release/atuin-server
+
+ msg2 'Building client with sync'
+ cargo build --frozen --release --no-default-features --features client,sync
+ mv target/release/atuin target/release/atuin-sync
+
+ msg2 'Building client without sync'
+ cargo build --frozen --release --no-default-features --features client
+
+ mkdir -p comp
+ local shell; for shell in bash fish zsh; do
+ ./target/release/atuin gen-completions -s $shell > comp/atuin.$shell
+ done
+}
+
+check() {
+ cargo test --workspace --frozen --features client,sync,server
+}
+
+package() {
+ pkgdesc="$pkgdesc - offline only client"
+ provider_priority=100 # highest
+
+ install -D -m755 target/release/atuin -t "$pkgdir"/usr/bin/
+ install -D -m755 target/release/atuin-server -t "$pkgdir"/usr/bin/
+
+ install -D -m644 comp/atuin.bash "$pkgdir"/usr/share/bash-completion/completions/atuin
+ install -D -m644 comp/atuin.fish "$pkgdir"/usr/share/fish/completions/atuin.fish
+ install -D -m644 comp/atuin.zsh "$pkgdir"/usr/share/zsh/site-functions/_atuin
+
+ install -d -m755 -o atuin "$pkgdir"/etc/$pkgname
+ install -D -m640 -o atuin atuin-server/server.toml -t "$pkgdir"/etc/$pkgname/
+
+ install -D -m755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
+ install -D -m644 "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname
+ install -D -m644 "$srcdir"/$pkgname.logrotate "$pkgdir"/etc/logrotate.d/$pkgname
+}
+
+sync() {
+ pkgdesc="$pkgdesc - client with history sync"
+ provider_priority=10 # lowest
+
+ install -D -m755 "$builddir"/target/release/atuin-sync "$subpkgdir"/usr/bin/atuin
+}
+
+server() {
+ pkgdesc="$pkgdesc - sync server"
+
+ amove etc/atuin/server.toml
+ amove usr/bin/atuin-server
+}
+
+openrc() {
+ default_openrc
+ install_if="openrc $pkgname-server=$pkgver-r$pkgrel"
+}
+
+_zsh_plugin() {
+ pkgdesc="$pkgdesc (Zsh plugin)"
+ depends="cmd:atuin=$pkgver-r$pkgrel"
+ install_if="zsh cmd:atuin=$pkgver-r$pkgrel"
+
+ install -D -m644 "$builddir"/src/shell/atuin.zsh \
+ "$subpkgdir"/usr/share/zsh/plugins/$pkgname/$pkgname.plugin.zsh
+}
+
+sha512sums="
+69c8b8779be7b616eeeba311c74f4dddb39ccd864ddfab74d33c4f8fbf5c7702ab14714a0c31af5a4c007e99c63756d7c63d8ae2427e33dc0a4c16ee814a45ce atuin-0.9.1.tar.gz
+756df570c14d00948d5e94f841e3bc82b1be6b3809b7108870cc69247fc1a7bf09ccb3f9a44eddc8254a74b7aace26951d65e786a73274b9379714e0e68d5289 sqlx-0.5.13.tar.gz
+0c3c872afd6f3651ca97e2d6bef666d308d6418dfcc1e3ef5b6ad75ea2a8b556e17a35a2cdbf092b04960ea8b74d86e81535e7b76b72ad19827ed9b406af62d9 dont-create-config-dir-if-not-needed.patch
+d3bc27493d3e51f65f6c02067936588fabe7e40f4f2bd8e87f2cff2231c9a2764a15cc8b96e1486c9afb54c1728ebfea59df7cd85f767e98b8887ca66939f63a standalone-server.patch
+6c6c2dd8690bcdde798195d29ae4ac0c00f4acfab109bcc185a2346cfaf0cb48d8fceb24f88c2a811529e9aa777346af819958d8e159fac5fe9dcd6254ca63d6 cleanup-deps.patch
+cfff0da150c4b3f21c99f067db0cd8fc43a9c85199602f7c46e4cceb74aad06413735b6d4032f8fbaef6f675512bc79bc49ae291725b9151e7db5b95d35c2907 dont-pollute-shell-env.patch
+46527e0b5b76022fe7259338ec61f3fe2f4c1803c7fc67274a814e7d2ad5dfa9ef5c878f4bcc0b7da1184fd381c4127b48cb27eead91af1d49d5dbe242462f42 use-system-tls.patch
+334f326dbeb9382b2d5d461afe9fd41fc043f4d0432712f484829fc1a697d6aa36d73d3dbafa3add126ee29a562aef005010fd806d17e439eac800aac763617e sqlx-use-system-libsqlite.patch
+8e78e6a562ae310ef40cf62e0bd7dddbca5611e9321df551e07f21292acf3e925568218be17b8afaf4c1a1c104c5210829c1fa0334904227af45043f23db531e server-log-without-ansi-style.patch
+c72559e9c5f6a60f0f957013a53f980365cee0b8d28f6ff4721e1731af39419c4f385c94486d46142e398f4518e91da7fcddf061fbfff64dddb8249eaa26d354 cargo-lock.patch
+c58622c6e3ab16a5d84204f0ef313c5dd6dc912da7295531983e2497d9e7914765c8e1bbe8d67fd5fe47f577c5be792830fb22cd59973f5f796b88c55b5e0534 atuin.initd
+5f1631f0b06f19733025ad3efec6b44ef13937cd8f2f9b7e3cc8c0ba53495850c06fb8c5377d1d003dda00e2d11835056d3fc1b3ba8ecefb575e61a83159f33e atuin.confd
+30946fe22ede072d76331762c862382f03a35735e5741c46367320a116ac285615ae757e20a9cf7adceb8ba24b827581992fa5b7f84e595cd862a3c2ae69dbe0 atuin.logrotate
+"
diff --git a/testing/atuin/atuin-server.pre-install b/testing/atuin/atuin-server.pre-install
new file mode 100644
index 0000000000..8c7c5de45c
--- /dev/null
+++ b/testing/atuin/atuin-server.pre-install
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+addgroup -S atuin 2>/dev/null
+adduser -S -D -H -h /dev/null -s /sbin/nologin -G atuin -g "added by package atuin-server" atuin 2>/dev/null
+
+exit 0
diff --git a/testing/atuin/atuin.confd b/testing/atuin/atuin.confd
new file mode 100644
index 0000000000..cd0f0d1865
--- /dev/null
+++ b/testing/atuin/atuin.confd
@@ -0,0 +1,19 @@
+# Configuration for /etc/init.d/atuin
+
+# Logging level or directives. See env_logger's RUST_LOG variable for more
+# information (https://docs.rs/env_logger/latest/env_logger/#enabling-logging).
+#loglevel="WARN"
+
+# Redirect atuin output to file.
+# If you want to disable this, set both variables to an empty string.
+#output_log="/var/log/atuin-server.log"
+#error_log="/var/log/atuin-server.log"
+
+# Path to directory with the server.toml config.
+#cfgdir="/etc/atuin"
+
+# User (and group) to run atuin server as.
+#command_user="atuin:atuin"
+
+# Uncomment to use process supervisor.
+# supervisor="supervise-daemon"
diff --git a/testing/atuin/atuin.initd b/testing/atuin/atuin.initd
new file mode 100644
index 0000000000..50d973037e
--- /dev/null
+++ b/testing/atuin/atuin.initd
@@ -0,0 +1,35 @@
+#!/sbin/openrc-run
+description="Sync server for shell history"
+
+: ${command_user:="atuin:atuin"}
+: ${output_log="/var/log/atuin-server.log"}
+: ${error_log="/var/log/atuin-server.log"}
+: ${cfgdir:="/etc/atuin"}
+: ${loglevel:="WARN"}
+
+command="/usr/bin/atuin-server"
+command_args="server start $command_args"
+command_background="yes"
+pidfile="/run/$RC_SVCNAME.pid"
+
+start_stop_daemon_args="
+ --env ATUIN_CONFIG_DIR=$cfgdir
+ --env RUST_LOG=$loglevel
+ "
+supervise_daemon_args="$start_stop_daemon_args"
+
+required_files="$cfgdir/server.toml"
+
+depend() {
+ need net
+ use postgresql
+}
+
+start_pre() {
+ if [ "$output_log" ]; then
+ checkpath -f -o "$command_user" -m 640 -q "$output_log" || return 1
+ fi
+ if [ "$error_log" ]; then
+ checkpath -f -o "$command_user" -m 640 -q "$error_log" || return 1
+ fi
+}
diff --git a/testing/atuin/atuin.logrotate b/testing/atuin/atuin.logrotate
new file mode 100644
index 0000000000..8dc3039191
--- /dev/null
+++ b/testing/atuin/atuin.logrotate
@@ -0,0 +1,6 @@
+/var/log/atuin-server.log {
+ compress
+ copytruncate
+ missingok
+ notifempty
+}
diff --git a/testing/atuin/atuin.post-install b/testing/atuin/atuin.post-install
new file mode 100644
index 0000000000..2f01d9b996
--- /dev/null
+++ b/testing/atuin/atuin.post-install
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+cat >&2 <<EOF
+* If you want atuin with sync support, install package atuin-sync.
+EOF
+
+exit 0
diff --git a/testing/atuin/cargo-lock.patch b/testing/atuin/cargo-lock.patch
new file mode 100644
index 0000000000..ffe82f0dc5
--- /dev/null
+++ b/testing/atuin/cargo-lock.patch
@@ -0,0 +1,1174 @@
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -23,15 +23,6 @@
+ ]
+
+ [[package]]
+-name = "ansi_term"
+-version = "0.12.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+-dependencies = [
+- "winapi",
+-]
+-
+-[[package]]
+ name = "anyhow"
+ version = "1.0.57"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -194,7 +185,7 @@
+ "http",
+ "http-body",
+ "hyper",
+- "itoa 1.0.1",
++ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+@@ -232,6 +223,25 @@
+ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+ [[package]]
++name = "bindgen"
++version = "0.59.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
++dependencies = [
++ "bitflags",
++ "cexpr",
++ "clang-sys",
++ "lazy_static",
++ "lazycell",
++ "peeking_take_while",
++ "proc-macro2",
++ "quote",
++ "regex",
++ "rustc-hash",
++ "shlex",
++]
++
++[[package]]
+ name = "bitflags"
+ version = "1.3.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -239,59 +249,20 @@
+
+ [[package]]
+ name = "block-buffer"
+-version = "0.7.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
+-dependencies = [
+- "block-padding",
+- "byte-tools",
+- "byteorder",
+- "generic-array 0.12.4",
+-]
+-
+-[[package]]
+-name = "block-buffer"
+ version = "0.10.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+ dependencies = [
+- "generic-array 0.14.5",
++ "generic-array",
+ ]
+
+ [[package]]
+-name = "block-padding"
+-version = "0.1.5"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
+-dependencies = [
+- "byte-tools",
+-]
+-
+-[[package]]
+-name = "bstr"
+-version = "0.2.17"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+-dependencies = [
+- "lazy_static",
+- "memchr",
+- "regex-automata",
+- "serde",
+-]
+-
+-[[package]]
+ name = "bumpalo"
+ version = "3.9.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
+
+ [[package]]
+-name = "byte-tools"
+-version = "0.3.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+-
+-[[package]]
+ name = "byteorder"
+ version = "1.4.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -316,6 +287,15 @@
+ checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+
+ [[package]]
++name = "cexpr"
++version = "0.6.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
++dependencies = [
++ "nom",
++]
++
++[[package]]
+ name = "cfg-if"
+ version = "1.0.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -355,6 +335,17 @@
+ ]
+
+ [[package]]
++name = "clang-sys"
++version = "1.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4cc00842eed744b858222c4c9faf7243aafc6d33f92f96935263ef4d8a41ce21"
++dependencies = [
++ "glob",
++ "libc",
++ "libloading",
++]
++
++[[package]]
+ name = "clap"
+ version = "3.1.11"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -408,40 +399,22 @@
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "adfbb116d9e2c4be7011360d0c0bee565712c11e969c9609b25b619366dc379d"
+ dependencies = [
+- "cli-table-derive",
+- "csv",
+ "termcolor",
+ "unicode-width",
+ ]
+
+ [[package]]
+-name = "cli-table-derive"
+-version = "0.4.5"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "2af3bfb9da627b0a6c467624fb7963921433774ed435493b5c08a3053e829ad4"
+-dependencies = [
+- "proc-macro2",
+- "quote",
+- "syn",
+-]
+-
+-[[package]]
+ name = "config"
+ version = "0.13.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "3ea917b74b6edfb5024e3b55d3c8f710b5f4ed92646429601a42e96f0812b31b"
+ dependencies = [
+ "async-trait",
+- "json5",
+ "lazy_static",
+ "nom",
+ "pathdiff",
+- "ron",
+- "rust-ini",
+ "serde",
+- "serde_json",
+ "toml",
+- "yaml-rust",
+ ]
+
+ [[package]]
+@@ -458,6 +431,22 @@
+ ]
+
+ [[package]]
++name = "core-foundation"
++version = "0.9.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
++dependencies = [
++ "core-foundation-sys",
++ "libc",
++]
++
++[[package]]
++name = "core-foundation-sys"
++version = "0.8.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
++
++[[package]]
+ name = "cpufeatures"
+ version = "0.2.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -517,48 +506,17 @@
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+ dependencies = [
+- "generic-array 0.14.5",
++ "generic-array",
+ "typenum",
+ ]
+
+ [[package]]
+-name = "csv"
+-version = "1.1.6"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+-dependencies = [
+- "bstr",
+- "csv-core",
+- "itoa 0.4.8",
+- "ryu",
+- "serde",
+-]
+-
+-[[package]]
+-name = "csv-core"
+-version = "0.1.10"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+-dependencies = [
+- "memchr",
+-]
+-
+-[[package]]
+ name = "digest"
+-version = "0.8.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+-dependencies = [
+- "generic-array 0.12.4",
+-]
+-
+-[[package]]
+-name = "digest"
+ version = "0.10.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+ dependencies = [
+- "block-buffer 0.10.2",
++ "block-buffer",
+ "crypto-common",
+ "subtle",
+ ]
+@@ -614,12 +572,6 @@
+ ]
+
+ [[package]]
+-name = "dlv-list"
+-version = "0.3.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
+-
+-[[package]]
+ name = "dotenv"
+ version = "0.15.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -685,10 +637,13 @@
+ ]
+
+ [[package]]
+-name = "fake-simd"
+-version = "0.1.2"
++name = "fastrand"
++version = "1.7.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
++checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
++dependencies = [
++ "instant",
++]
+
+ [[package]]
+ name = "flume"
+@@ -699,7 +654,7 @@
+ "futures-core",
+ "futures-sink",
+ "pin-project",
+- "spin 0.9.2",
++ "spin",
+ ]
+
+ [[package]]
+@@ -709,6 +664,21 @@
+ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+ [[package]]
++name = "foreign-types"
++version = "0.3.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
++dependencies = [
++ "foreign-types-shared",
++]
++
++[[package]]
++name = "foreign-types-shared"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
++
++[[package]]
+ name = "form_urlencoded"
+ version = "1.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -802,15 +772,6 @@
+
+ [[package]]
+ name = "generic-array"
+-version = "0.12.4"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+-dependencies = [
+- "typenum",
+-]
+-
+-[[package]]
+-name = "generic-array"
+ version = "0.14.5"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
+@@ -831,6 +792,12 @@
+ ]
+
+ [[package]]
++name = "glob"
++version = "0.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
++
++[[package]]
+ name = "h2"
+ version = "0.3.13"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -859,21 +826,12 @@
+ ]
+
+ [[package]]
+-name = "hashbrown"
+-version = "0.12.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "8c21d40587b92fa6a6c6e3c1bdbf87d75511db5672f9c93175574b3a00df1758"
+-dependencies = [
+- "ahash",
+-]
+-
+-[[package]]
+ name = "hashlink"
+ version = "0.7.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf"
+ dependencies = [
+- "hashbrown 0.11.2",
++ "hashbrown",
+ ]
+
+ [[package]]
+@@ -915,7 +873,7 @@
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+ dependencies = [
+- "digest 0.10.3",
++ "digest",
+ ]
+
+ [[package]]
+@@ -926,7 +884,7 @@
+ dependencies = [
+ "bytes",
+ "fnv",
+- "itoa 1.0.1",
++ "itoa",
+ ]
+
+ [[package]]
+@@ -988,7 +946,7 @@
+ "http-body",
+ "httparse",
+ "httpdate",
+- "itoa 1.0.1",
++ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+@@ -998,16 +956,16 @@
+ ]
+
+ [[package]]
+-name = "hyper-rustls"
+-version = "0.23.0"
++name = "hyper-tls"
++version = "0.5.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac"
++checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+ dependencies = [
+- "http",
++ "bytes",
+ "hyper",
+- "rustls 0.20.4",
++ "native-tls",
+ "tokio",
+- "tokio-rustls 0.23.3",
++ "tokio-native-tls",
+ ]
+
+ [[package]]
+@@ -1034,7 +992,7 @@
+ checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee"
+ dependencies = [
+ "autocfg",
+- "hashbrown 0.11.2",
++ "hashbrown",
+ ]
+
+ [[package]]
+@@ -1075,12 +1033,6 @@
+
+ [[package]]
+ name = "itoa"
+-version = "0.4.8"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+-
+-[[package]]
+-name = "itoa"
+ version = "1.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+@@ -1095,29 +1047,34 @@
+ ]
+
+ [[package]]
+-name = "json5"
+-version = "0.4.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
+-dependencies = [
+- "pest",
+- "pest_derive",
+- "serde",
+-]
+-
+-[[package]]
+ name = "lazy_static"
+ version = "1.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+ [[package]]
++name = "lazycell"
++version = "1.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
++
++[[package]]
+ name = "libc"
+ version = "0.2.122"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "ec647867e2bf0772e28c8bcde4f0d19a9216916e890543b5a03ed8ef27b8f259"
+
+ [[package]]
++name = "libloading"
++version = "0.7.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
++dependencies = [
++ "cfg-if",
++ "winapi",
++]
++
++[[package]]
+ name = "libsodium-sys"
+ version = "0.2.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1135,18 +1092,12 @@
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14"
+ dependencies = [
+- "cc",
++ "bindgen",
+ "pkg-config",
+ "vcpkg",
+ ]
+
+ [[package]]
+-name = "linked-hash-map"
+-version = "0.5.4"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+-
+-[[package]]
+ name = "lock_api"
+ version = "0.4.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1166,12 +1117,6 @@
+ ]
+
+ [[package]]
+-name = "maplit"
+-version = "1.0.2"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+-
+-[[package]]
+ name = "matchers"
+ version = "0.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1198,7 +1143,7 @@
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "658646b21e0b72f7866c7038ab086d3d5e1cd6271f060fd37defb241949d0582"
+ dependencies = [
+- "digest 0.10.3",
++ "digest",
+ ]
+
+ [[package]]
+@@ -1249,6 +1194,24 @@
+ ]
+
+ [[package]]
++name = "native-tls"
++version = "0.2.10"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
++dependencies = [
++ "lazy_static",
++ "libc",
++ "log",
++ "openssl",
++ "openssl-probe",
++ "openssl-sys",
++ "schannel",
++ "security-framework",
++ "security-framework-sys",
++ "tempfile",
++]
++
++[[package]]
+ name = "nom"
+ version = "7.1.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1373,22 +1336,51 @@
+ checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
+
+ [[package]]
+-name = "opaque-debug"
+-version = "0.2.3"
++name = "openssl"
++version = "0.10.40"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
++checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e"
++dependencies = [
++ "bitflags",
++ "cfg-if",
++ "foreign-types",
++ "libc",
++ "once_cell",
++ "openssl-macros",
++ "openssl-sys",
++]
+
+ [[package]]
+-name = "ordered-multimap"
+-version = "0.4.3"
++name = "openssl-macros"
++version = "0.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
++checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+ dependencies = [
+- "dlv-list",
+- "hashbrown 0.12.0",
++ "proc-macro2",
++ "quote",
++ "syn",
+ ]
+
+ [[package]]
++name = "openssl-probe"
++version = "0.1.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
++
++[[package]]
++name = "openssl-sys"
++version = "0.9.73"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9d5fd19fb3e0a8191c1e34935718976a3e70c112ab9a24af6d7cadccd9d90bc0"
++dependencies = [
++ "autocfg",
++ "cc",
++ "libc",
++ "pkg-config",
++ "vcpkg",
++]
++
++[[package]]
+ name = "os_str_bytes"
+ version = "6.0.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1466,55 +1458,18 @@
+ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+ [[package]]
+-name = "percent-encoding"
+-version = "2.1.0"
++name = "peeking_take_while"
++version = "0.1.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
++checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+ [[package]]
+-name = "pest"
+-version = "2.1.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+-dependencies = [
+- "ucd-trie",
+-]
+-
+-[[package]]
+-name = "pest_derive"
++name = "percent-encoding"
+ version = "2.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
+-dependencies = [
+- "pest",
+- "pest_generator",
+-]
++checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+ [[package]]
+-name = "pest_generator"
+-version = "2.1.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
+-dependencies = [
+- "pest",
+- "pest_meta",
+- "proc-macro2",
+- "quote",
+- "syn",
+-]
+-
+-[[package]]
+-name = "pest_meta"
+-version = "2.1.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
+-dependencies = [
+- "maplit",
+- "pest",
+- "sha-1 0.8.2",
+-]
+-
+-[[package]]
+ name = "pin-project"
+ version = "1.0.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1749,6 +1704,15 @@
+ checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+
+ [[package]]
++name = "remove_dir_all"
++version = "0.5.3"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
++dependencies = [
++ "winapi",
++]
++
++[[package]]
+ name = "reqwest"
+ version = "0.11.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1763,45 +1727,28 @@
+ "http",
+ "http-body",
+ "hyper",
+- "hyper-rustls",
++ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
++ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+- "rustls 0.20.4",
+- "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+- "tokio-rustls 0.23.3",
++ "tokio-native-tls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+- "webpki-roots 0.22.3",
+ "winreg",
+ ]
+
+ [[package]]
+-name = "ring"
+-version = "0.16.20"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+-dependencies = [
+- "cc",
+- "libc",
+- "once_cell",
+- "spin 0.5.2",
+- "untrusted",
+- "web-sys",
+- "winapi",
+-]
+-
+-[[package]]
+ name = "rmp"
+ version = "0.8.11"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1824,17 +1771,6 @@
+ ]
+
+ [[package]]
+-name = "ron"
+-version = "0.7.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678"
+-dependencies = [
+- "base64",
+- "bitflags",
+- "serde",
+-]
+-
+-[[package]]
+ name = "rust-crypto"
+ version = "0.2.36"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1848,14 +1784,10 @@
+ ]
+
+ [[package]]
+-name = "rust-ini"
+-version = "0.18.0"
++name = "rustc-hash"
++version = "1.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
+-dependencies = [
+- "cfg-if",
+- "ordered-multimap",
+-]
++checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+ [[package]]
+ name = "rustc-serialize"
+@@ -1864,40 +1796,6 @@
+ checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+
+ [[package]]
+-name = "rustls"
+-version = "0.19.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+-dependencies = [
+- "base64",
+- "log",
+- "ring",
+- "sct 0.6.1",
+- "webpki 0.21.4",
+-]
+-
+-[[package]]
+-name = "rustls"
+-version = "0.20.4"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921"
+-dependencies = [
+- "log",
+- "ring",
+- "sct 0.7.0",
+- "webpki 0.22.0",
+-]
+-
+-[[package]]
+-name = "rustls-pemfile"
+-version = "0.3.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360"
+-dependencies = [
+- "base64",
+-]
+-
+-[[package]]
+ name = "ryu"
+ version = "1.0.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -1919,29 +1817,42 @@
+ checksum = "088c5d71572124929ea7549a8ce98e1a6fd33d0a38367b09027b382e67c033db"
+
+ [[package]]
++name = "schannel"
++version = "0.1.19"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
++dependencies = [
++ "lazy_static",
++ "winapi",
++]
++
++[[package]]
+ name = "scopeguard"
+ version = "1.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+ [[package]]
+-name = "sct"
+-version = "0.6.1"
++name = "security-framework"
++version = "2.6.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
++checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
+ dependencies = [
+- "ring",
+- "untrusted",
++ "bitflags",
++ "core-foundation",
++ "core-foundation-sys",
++ "libc",
++ "security-framework-sys",
+ ]
+
+ [[package]]
+-name = "sct"
+-version = "0.7.0"
++name = "security-framework-sys"
++version = "2.6.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
++checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+ dependencies = [
+- "ring",
+- "untrusted",
++ "core-foundation-sys",
++ "libc",
+ ]
+
+ [[package]]
+@@ -1970,7 +1881,7 @@
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
+ dependencies = [
+- "itoa 1.0.1",
++ "itoa",
+ "ryu",
+ "serde",
+ ]
+@@ -1982,32 +1893,20 @@
+ checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+ dependencies = [
+ "form_urlencoded",
+- "itoa 1.0.1",
++ "itoa",
+ "ryu",
+ "serde",
+ ]
+
+ [[package]]
+ name = "sha-1"
+-version = "0.8.2"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+-dependencies = [
+- "block-buffer 0.7.3",
+- "digest 0.8.1",
+- "fake-simd",
+- "opaque-debug",
+-]
+-
+-[[package]]
+-name = "sha-1"
+ version = "0.10.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+ dependencies = [
+ "cfg-if",
+ "cpufeatures",
+- "digest 0.10.3",
++ "digest",
+ ]
+
+ [[package]]
+@@ -2018,7 +1917,7 @@
+ dependencies = [
+ "cfg-if",
+ "cpufeatures",
+- "digest 0.10.3",
++ "digest",
+ ]
+
+ [[package]]
+@@ -2040,6 +1939,12 @@
+ ]
+
+ [[package]]
++name = "shlex"
++version = "1.1.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
++
++[[package]]
+ name = "signal-hook-registry"
+ version = "1.4.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -2090,12 +1995,6 @@
+
+ [[package]]
+ name = "spin"
+-version = "0.5.2"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+-
+-[[package]]
+-name = "spin"
+ version = "0.9.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5"
+@@ -2127,8 +2026,6 @@
+ [[package]]
+ name = "sqlx"
+ version = "0.5.13"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "551873805652ba0d912fec5bbb0f8b4cdd96baf8e2ebf5970e5671092966019b"
+ dependencies = [
+ "sqlx-core",
+ "sqlx-macros",
+@@ -2137,8 +2034,6 @@
+ [[package]]
+ name = "sqlx-core"
+ version = "0.5.13"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "e48c61941ccf5ddcada342cd59e3e5173b007c509e1e8e990dafc830294d9dc5"
+ dependencies = [
+ "ahash",
+ "atoi",
+@@ -2163,7 +2058,7 @@
+ "hkdf",
+ "hmac",
+ "indexmap",
+- "itoa 1.0.1",
++ "itoa",
+ "libc",
+ "libsqlite3-sys",
+ "log",
+@@ -2173,10 +2068,9 @@
+ "paste",
+ "percent-encoding",
+ "rand 0.8.5",
+- "rustls 0.19.1",
+ "serde",
+ "serde_json",
+- "sha-1 0.10.0",
++ "sha-1",
+ "sha2",
+ "smallvec",
+ "sqlformat",
+@@ -2185,16 +2079,12 @@
+ "thiserror",
+ "tokio-stream",
+ "url",
+- "webpki 0.21.4",
+- "webpki-roots 0.21.1",
+ "whoami",
+ ]
+
+ [[package]]
+ name = "sqlx-macros"
+ version = "0.5.13"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "bc0fba2b0cae21fc00fe6046f8baa4c7fcb49e379f0f592b04696607f69ed2e1"
+ dependencies = [
+ "dotenv",
+ "either",
+@@ -2212,12 +2102,11 @@
+ [[package]]
+ name = "sqlx-rt"
+ version = "0.5.13"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "4db708cd3e459078f85f39f96a00960bd841f66ee2a669e90bf36907f5a79aae"
+ dependencies = [
++ "native-tls",
+ "once_cell",
+ "tokio",
+- "tokio-rustls 0.22.0",
++ "tokio-native-tls",
+ ]
+
+ [[package]]
+@@ -2269,6 +2158,20 @@
+ ]
+
+ [[package]]
++name = "tempfile"
++version = "3.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
++dependencies = [
++ "cfg-if",
++ "fastrand",
++ "libc",
++ "redox_syscall",
++ "remove_dir_all",
++ "winapi",
++]
++
++[[package]]
+ name = "termcolor"
+ version = "1.1.3"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -2391,28 +2294,16 @@
+ ]
+
+ [[package]]
+-name = "tokio-rustls"
+-version = "0.22.0"
++name = "tokio-native-tls"
++version = "0.3.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
++checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+ dependencies = [
+- "rustls 0.19.1",
++ "native-tls",
+ "tokio",
+- "webpki 0.21.4",
+ ]
+
+ [[package]]
+-name = "tokio-rustls"
+-version = "0.23.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e"
+-dependencies = [
+- "rustls 0.20.4",
+- "tokio",
+- "webpki 0.22.0",
+-]
+-
+-[[package]]
+ name = "tokio-stream"
+ version = "0.1.8"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -2535,7 +2426,6 @@
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596"
+ dependencies = [
+- "ansi_term",
+ "lazy_static",
+ "matchers",
+ "regex",
+@@ -2571,12 +2461,6 @@
+ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+ [[package]]
+-name = "ucd-trie"
+-version = "0.1.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+-
+-[[package]]
+ name = "unicode-bidi"
+ version = "0.3.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -2616,12 +2500,6 @@
+ checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+ [[package]]
+-name = "untrusted"
+-version = "0.7.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+-
+-[[package]]
+ name = "url"
+ version = "2.2.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -2776,44 +2654,6 @@
+ ]
+
+ [[package]]
+-name = "webpki"
+-version = "0.21.4"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+-dependencies = [
+- "ring",
+- "untrusted",
+-]
+-
+-[[package]]
+-name = "webpki"
+-version = "0.22.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+-dependencies = [
+- "ring",
+- "untrusted",
+-]
+-
+-[[package]]
+-name = "webpki-roots"
+-version = "0.21.1"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+-dependencies = [
+- "webpki 0.21.4",
+-]
+-
+-[[package]]
+-name = "webpki-roots"
+-version = "0.22.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf"
+-dependencies = [
+- "webpki 0.22.0",
+-]
+-
+-[[package]]
+ name = "whoami"
+ version = "1.2.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -2904,13 +2744,4 @@
+ checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+ dependencies = [
+ "winapi",
+-]
+-
+-[[package]]
+-name = "yaml-rust"
+-version = "0.4.5"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+-dependencies = [
+- "linked-hash-map",
+ ]
diff --git a/testing/atuin/cleanup-deps.patch b/testing/atuin/cleanup-deps.patch
new file mode 100644
index 0000000000..51313f4d22
--- /dev/null
+++ b/testing/atuin/cleanup-deps.patch
@@ -0,0 +1,21 @@
+Patch-Source: https://github.com/ellie/atuin/pull/407 (modified)
+--
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Sat, 14 May 2022 01:17:19 +0200
+Subject: [PATCH] Cleanup dependencies – disable unnecessary or unused features
+
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -61,1 +61,1 @@ itertools = "0.10.3"
+-cli-table = "0.4"
++cli-table = { version = "0.4", default-features = false }
+--- a/atuin-client/Cargo.toml
++++ b/atuin-client/Cargo.toml
+@@ -35,1 +35,1 @@ directories = "4"
+-config = "0.13"
++config = { version = "0.13", default-features = false, features = ["toml"] }
+--- a/atuin-server/Cargo.toml
++++ b/atuin-server/Cargo.toml
+@@ -19,1 +19,1 @@ chrono = { version = "0.4", features = ["serde"] }
+-config = "0.13"
++config = { version = "0.13", default-features = false, features = ["toml"] }
diff --git a/testing/atuin/dont-create-config-dir-if-not-needed.patch b/testing/atuin/dont-create-config-dir-if-not-needed.patch
new file mode 100644
index 0000000000..2cadb2c8f2
--- /dev/null
+++ b/testing/atuin/dont-create-config-dir-if-not-needed.patch
@@ -0,0 +1,45 @@
+Patch-Source: https://github.com/ellie/atuin/pull/406
+--
+From 6ee7c089e01acdd62ff92801ebcaa474e6bead56 Mon Sep 17 00:00:00 2001
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Fri, 13 May 2022 03:32:28 +0200
+Subject: [PATCH] Don't create config dir for server in default location if not
+ needed
+
+...respect ATUIN_CONFIG_DIR.
+
+The current behaviour is problematic when running atuin server as a
+system service with config dir in /etc/atuin.
+---
+ atuin-server/src/settings.rs | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/atuin-server/src/settings.rs b/atuin-server/src/settings.rs
+index 8e8961e9..e6745173 100644
+--- a/atuin-server/src/settings.rs
++++ b/atuin-server/src/settings.rs
+@@ -17,15 +17,11 @@ pub struct Settings {
+
+ impl Settings {
+ pub fn new() -> Result<Self> {
+- let config_dir = atuin_common::utils::config_dir();
+- let config_dir = config_dir.as_path();
+-
+- create_dir_all(config_dir)?;
+-
+ let mut config_file = if let Ok(p) = std::env::var("ATUIN_CONFIG_DIR") {
+ PathBuf::from(p)
+ } else {
+ let mut config_file = PathBuf::new();
++ let config_dir = atuin_common::utils::config_dir();
+ config_file.push(config_dir);
+ config_file
+ };
+@@ -50,6 +46,7 @@ impl Settings {
+ ))
+ } else {
+ let example_config = include_bytes!("../server.toml");
++ create_dir_all(config_file.parent().unwrap())?;
+ let mut file = File::create(config_file)?;
+ file.write_all(example_config)?;
+
diff --git a/testing/atuin/dont-pollute-shell-env.patch b/testing/atuin/dont-pollute-shell-env.patch
new file mode 100644
index 0000000000..b5c12835a1
--- /dev/null
+++ b/testing/atuin/dont-pollute-shell-env.patch
@@ -0,0 +1,40 @@
+Patch-Source: https://github.com/ellie/atuin/pull/408
+--
+From 0837c46983a1f0a15748318fab3ed618671714ea Mon Sep 17 00:00:00 2001
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Sat, 14 May 2022 02:22:00 +0200
+Subject: [PATCH] Don't pollute shell environment - remove 'id' variable
+
+---
+ src/shell/atuin.bash | 3 +--
+ src/shell/atuin.zsh | 3 +--
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/shell/atuin.bash b/src/shell/atuin.bash
+index e47e3c98..f0302291 100644
+--- a/src/shell/atuin.bash
++++ b/src/shell/atuin.bash
+@@ -2,8 +2,7 @@ ATUIN_SESSION=$(atuin uuid)
+ export ATUIN_SESSION
+
+ _atuin_preexec() {
+- id=$(atuin history start "$1")
+- export ATUIN_HISTORY_ID="$id"
++ export ATUIN_HISTORY_ID=$(atuin history start "$1")
+ }
+
+ _atuin_precmd() {
+diff --git a/src/shell/atuin.zsh b/src/shell/atuin.zsh
+index 32cbe6a1..2326c3b2 100644
+--- a/src/shell/atuin.zsh
++++ b/src/shell/atuin.zsh
+@@ -13,8 +13,7 @@ export ATUIN_SESSION=$(atuin uuid)
+ export ATUIN_HISTORY="atuin history list"
+
+ _atuin_preexec(){
+- id=$(atuin history start "$1")
+- export ATUIN_HISTORY_ID="$id"
++ export ATUIN_HISTORY_ID=$(atuin history start "$1")
+ }
+
+ _atuin_precmd(){
diff --git a/testing/atuin/server-log-without-ansi-style.patch b/testing/atuin/server-log-without-ansi-style.patch
new file mode 100644
index 0000000000..145dd2f8a5
--- /dev/null
+++ b/testing/atuin/server-log-without-ansi-style.patch
@@ -0,0 +1,16 @@
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Fri, 13 May 2022 03:08:00 +0200
+Subject: [PATCH] Build server without ANSI styles
+
+This is not very useful for textual log files...
+
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -72,7 +72,6 @@
+ version = "0.3"
+ default-features = false
+ features = [
+- "ansi",
+ "fmt",
+ "registry",
+ "env-filter",
diff --git a/testing/atuin/sqlx-use-system-libsqlite.patch b/testing/atuin/sqlx-use-system-libsqlite.patch
new file mode 100644
index 0000000000..157c5f259e
--- /dev/null
+++ b/testing/atuin/sqlx-use-system-libsqlite.patch
@@ -0,0 +1,15 @@
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Fri, 13 May 2022 01:44:00 +0200
+Subject: [PATCH] Build sqlx-core with system libsqlite3
+
+--- a/vendor/sqlx/sqlx-core/Cargo.toml
++++ b/vendor/sqlx/sqlx-core/Cargo.toml
+@@ -135,6 +135,6 @@
+ libsqlite3-sys = { version = "0.24.1", optional = true, default-features = false, features = [
+ "pkg-config",
+ "vcpkg",
+- "bundled",
+- "unlock_notify"
++ "unlock_notify",
++ "buildtime_bindgen"
+ ] }
diff --git a/testing/atuin/standalone-server.patch b/testing/atuin/standalone-server.patch
new file mode 100644
index 0000000000..847afce7ee
--- /dev/null
+++ b/testing/atuin/standalone-server.patch
@@ -0,0 +1,51 @@
+Patch-Source: https://github.com/ellie/atuin/pull/404 (backported)
+--
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Fri, 13 May 2022 02:30:49 +0200
+Subject: [PATCH] Allow to build atuin server without client
+
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -33,13 +33,14 @@ members = ["./atuin-client", "./atuin-server", "./atuin-common"]
+ # TODO(conradludgate)
+ # Currently, this keeps the same default built behaviour for v0.8
+ # We should rethink this by the time we hit a new breaking change
+-default = ["sync", "server"]
++default = ["client", "sync", "server"]
++client = ["atuin-client"]
+ sync = ["atuin-client/sync"]
+ server = ["atuin-server", "tracing-subscriber"]
+
+ [dependencies]
+ atuin-server = { path = "atuin-server", version = "0.9.1", optional = true }
+-atuin-client = { path = "atuin-client", version = "0.9.1", default-features = false }
++atuin-client = { path = "atuin-client", version = "0.9.1", optional = true, default-features = false }
+ atuin-common = { path = "atuin-common", version = "0.9.1" }
+
+ log = "0.4"
+--- a/src/command/mod.rs
++++ b/src/command/mod.rs
+@@ -1,6 +1,7 @@
+ use clap::Subcommand;
+ use eyre::Result;
+
++#[cfg(feature = "client")]
+ mod client;
+
+ #[cfg(feature = "server")]
+@@ -9,6 +10,7 @@
+ #[derive(Subcommand)]
+ #[clap(infer_subcommands = true)]
+ pub enum AtuinCmd {
++ #[cfg(feature = "client")]
+ #[clap(flatten)]
+ Client(client::Cmd),
+
+@@ -21,6 +23,7 @@
+ impl AtuinCmd {
+ pub async fn run(self) -> Result<()> {
+ match self {
++ #[cfg(feature = "client")]
+ Self::Client(client) => client.run().await,
+ #[cfg(feature = "server")]
+ Self::Server(server) => server.run().await,
diff --git a/testing/atuin/use-system-tls.patch b/testing/atuin/use-system-tls.patch
new file mode 100644
index 0000000000..d3405ed43d
--- /dev/null
+++ b/testing/atuin/use-system-tls.patch
@@ -0,0 +1,23 @@
+From: Jakub Jirutka <jakub@jirutka.cz>
+Date: Fri, 13 May 2022 01:42:00 +0200
+Subject: [PATCH] Build with system OpenSSL instead of bundled rusttls
+
+--- a/atuin-client/Cargo.toml
++++ b/atuin-client/Cargo.toml
+@@ -41,3 +41,3 @@
+ sqlx = { version = "0.5", features = [
+- "runtime-tokio-rustls",
++ "runtime-tokio-native-tls",
+ "chrono",
+@@ -55,5 +55,5 @@
+ reqwest = { version = "0.11", features = [
+ "json",
+- "rustls-tls",
++ "default-tls",
+ ], default-features = false, optional = true }
+ rust-crypto = { version = "^0.2", optional = true }
+--- a/atuin-server/Cargo.toml
++++ b/atuin-server/Cargo.toml
+@@ -27,1 +27,1 @@
+-sqlx = { version = "0.5", features = [ "runtime-tokio-rustls", "chrono", "postgres" ] }
++sqlx = { version = "0.5", features = [ "runtime-tokio-native-tls", "chrono", "postgres" ] }