diff options
author | Ellie Huxtable <e@elm.sh> | 2021-04-26 14:25:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-26 13:25:57 +0000 |
commit | 0610ae197f41c0439665c97d914809bd0b10c2fa (patch) | |
tree | 9b2f2f31cb4befbdad26f7801c3fc1ea8c3b6a7f | |
parent | 646fec893ed611fe9bc1f27fbf18ce292364b3ba (diff) |
Pre release polishing (#42)
* Improve readme
* Add demo gif
* Update readme
* Add mac build
* Amend release config
* Update gif
-rw-r--r-- | .github/workflows/rust.yml | 40 | ||||
-rw-r--r-- | Cargo.lock | 8 | ||||
-rw-r--r-- | Cargo.toml | 20 | ||||
-rw-r--r-- | README.md | 12 | ||||
-rw-r--r-- | atuin-client/Cargo.toml | 2 | ||||
-rw-r--r-- | atuin-client/src/database.rs | 6 | ||||
-rw-r--r-- | atuin-common/Cargo.toml | 2 | ||||
-rw-r--r-- | atuin-server/Cargo.toml | 2 | ||||
-rw-r--r-- | demo.gif | bin | 0 -> 469064 bytes | |||
-rwxr-xr-x[-rw-r--r--] | install.sh | 159 |
10 files changed, 236 insertions, 15 deletions
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 54bbbb4f..d547606b 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -23,8 +23,17 @@ jobs: override: true - name: Run cargo build - run: cargo build - + run: cargo build --all --release && strip target/release/atuin && mv target/release/atuin target/release/atuin_linux + + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + files: | + target/release/atuin_linux + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + test: runs-on: ubuntu-latest @@ -71,3 +80,30 @@ jobs: - name: Format run: cargo fmt -- --check + + build-mac: + runs-on: macos-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install latest rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: x86_64-apple-darwin + default: true + override: true + + - name: Build for mac + run: cargo build --all --release && strip target/release/atuin && mv target/release/atuin target/release/atuin_darwin + + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + files: | + target/release/atuin_darwin + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -82,7 +82,7 @@ dependencies = [ [[package]] name = "atuin" -version = "0.6.1" +version = "0.6.2" dependencies = [ "async-trait", "atuin-client", @@ -114,7 +114,7 @@ dependencies = [ [[package]] name = "atuin-client" -version = "0.6.1" +version = "0.6.2" dependencies = [ "async-trait", "atuin-common", @@ -148,7 +148,7 @@ dependencies = [ [[package]] name = "atuin-common" -version = "0.6.1" +version = "0.6.2" dependencies = [ "chrono", "eyre", @@ -164,7 +164,7 @@ dependencies = [ [[package]] name = "atuin-server" -version = "0.6.1" +version = "0.6.2" dependencies = [ "async-trait", "atuin-common", @@ -1,12 +1,29 @@ [package] name = "atuin" -version = "0.6.1" +version = "0.6.2" authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"] edition = "2018" license = "MIT" description = "atuin - magical shell history" homepage = "https://atuin.sh" repository = "https://github.com/ellie/atuin" +readme = "README.md" + +[package.metadata.deb] +maintainer = "Ellie Huxtable <ellie@elliehuxtable.com>" +copyright = "2021, Ellie Huxtable <ellie@elliehuxtable.com>" +license-file = ["LICENSE"] +depends = "$auto" +section = "utility" + +[package.metadata.rpm] +package = "atuin" + +[package.metadata.rpm.cargo] +buildflags = ["--release"] + +[package.metadata.rpm.targets] +atuin = { path = "/usr/bin/atuin" } [workspace] members = ["./atuin-client", "./atuin-server", "./atuin-common"] @@ -39,4 +56,3 @@ base64 = "0.13.0" humantime = "2.1.0" tabwriter = "1.2.1" crossbeam-channel = "0.5.1" - @@ -12,9 +12,17 @@ <a href="https://crates.io/crates/atuin"><img src="https://img.shields.io/crates/d/atuin.svg?style=flat-square" /></a> <a href="https://github.com/ellie/atuin/blob/main/LICENSE"><img src="https://img.shields.io/crates/l/atuin.svg?style=flat-square" /></a> </p> - + +<p align="center"> + <img src="demo.gif" alt="animated" width="80%" /> +</p> + +<p align="center"> +<em>exit code, duration, time and command shown</em> +</p> + - store shell history in a sqlite database -- backup shell history to the cloud +- backup encrypted shell history to the cloud - the same history across terminals, across session, and across machines - log exit code, cwd, hostname, session, command duration, etc - smart interactive history search to replace ctrl-r diff --git a/atuin-client/Cargo.toml b/atuin-client/Cargo.toml index bd09ca42..434a7b03 100644 --- a/atuin-client/Cargo.toml +++ b/atuin-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "atuin-client" -version = "0.6.1" +version = "0.6.2" authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"] edition = "2018" license = "MIT" diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs index 057b399c..e56a8df0 100644 --- a/atuin-client/src/database.rs +++ b/atuin-client/src/database.rs @@ -274,8 +274,12 @@ impl Database for Sqlite { let res = sqlx::query( format!( - "select * from history + "select * from history h where command like ?1 || '%' + and timestamp = ( + select max(timestamp) from history + where h.command = history.command + ) order by timestamp desc {}", limit.clone() ) diff --git a/atuin-common/Cargo.toml b/atuin-common/Cargo.toml index 23d1ac82..2282f52d 100644 --- a/atuin-common/Cargo.toml +++ b/atuin-common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "atuin-common" -version = "0.6.1" +version = "0.6.2" authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"] edition = "2018" license = "MIT" diff --git a/atuin-server/Cargo.toml b/atuin-server/Cargo.toml index 969aac9b..1a5c06cb 100644 --- a/atuin-server/Cargo.toml +++ b/atuin-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "atuin-server" -version = "0.6.1" +version = "0.6.2" authors = ["Ellie Huxtable <ellie@elliehuxtable.com>"] edition = "2018" license = "MIT" diff --git a/demo.gif b/demo.gif Binary files differnew file mode 100644 index 00000000..1da6c0b6 --- /dev/null +++ b/demo.gif diff --git a/install.sh b/install.sh index 162602c0..b540a38b 100644..100755 --- a/install.sh +++ b/install.sh @@ -1 +1,158 @@ -#!/ +#! /usr/bin/env sh + +set -euo pipefail + +cat << EOF + _______ _______ __ __ ___ __ _ +| _ || || | | || | | | | | +| |_| ||_ _|| | | || | | |_| | +| | | | | |_| || | | | +| | | | | || | | _ | +| _ | | | | || | | | | | +|__| |__| |___| |_______||___| |_| |__| + +Magical shell history + +Atuin setup +https://github.com/ellie/atuin + +Please file an issue if you encounter any problems! + +=============================================================================== + +EOF + +LATEST_RELEASE=$(curl -L -s -H 'Accept: application/json' https://github.com/ellie/atuin/releases/latest) +LATEST_VERSION=$(echo $LATEST_RELEASE | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/') + +__atuin_install_arch(){ + echo "Arch Linux detected!" + echo "Attempting AUR install" + + if command -v yaourt &> /dev/null; then + echo "Found yaourt" + yaourt -S atuin + elif command -v yay &> /dev/null; then + echo "Found yay" + yay -S atuin + elif command -v pakku &> /dev/null; then + echo "Found pakku" + pakku -S atuin + elif command -v pamac &> /dev/null; then + echo "Found pamac" + pamac install atuin + else + echo "Failed to install atuin! Please try manually: https://aur.archlinux.org/packages/atuin/" + fi + +} + +__atuin_install_ubuntu(){ + echo "Ubuntu detected" + # TODO: select correct AARCH too + ARTIFACT_URL="https://github.com/account/project/releases/download/$LATEST_VERSION/atuin_$LATEST_VERSION_amd64.deb" + + TEMP_DEB="$(mktemp)" && + wget -O "$TEMP_DEB" $ARTIFACT_URL + sudo dpkg -i "$TEMP_DEB" + rm -f "$TEMP_DEB" +} + +__atuin_install_fedora(){ + echo "Fedora detected" + # TODO: select correct AARCH too + ARTIFACT_URL="https://github.com/account/project/releases/download/$LATEST_VERSION/atuin_$LATEST_VERSION_amd64.rpm" + + TEMP_DEB="$(mktemp)" && + wget -O "$TEMP_DEB" $ARTIFACT_URL + sudo dpkg -i "$TEMP_DEB" + rm -f "$TEMP_DEB" +} + +__atuin_install_linux(){ + echo "Detected Linux!" + echo "Checking distro..." + + if $(uname -a | grep -qi "Microsoft"); then + OS="UbuntuWSL" + else + if ! command -v lsb_release &> /dev/null; then + echo "lsb_release could not be found, unable to determine your distribution" + echo "If you are using Arch, please get lsb_release from AUR" + exit 1 + fi + OS=$(lsb_release -i | awk '{ print $3 }') + fi + + if [ $OS == "Arch" ] || [ $OS == "ManjaroLinux" ]; then + __atuin_install_arch + elif [ $OS == "Ubuntu" ] || [ $OS == "Debian" ] || [ $OS == "Linuxmint" ] || [ $OS == "Parrot" ] || [ $OS == "Kali" ]; then + __atuin_install_ubuntu + elif [ $OS == "Fedora" ]; then + __atuin_install_fedora + else + # TODO: download a binary or smth + __atuin_install_unsupported + fi +} + +__atuin_install_mac(){ + echo "Detected Mac!" + + if command -v brew &> /dev/null + then + echo "Installing with brew" + brew tap ellie/atuin + brew install atuin + else + echo "Could not find brew, installing with Cargo" + __atuin_install_unsupported + fi + +} + +__atuin_install_cargo(){ + echo "Attempting install with cargo" + + if ! command -v cargo &> /dev/null + then + echo "cargo not found! Attempting to install rustup" + + if command -v rustup &> /dev/null + then + echo "rustup was found, but cargo wasn't. Something is up with your install" + exit 1 + fi + + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -q + + echo "rustup installed! Attempting cargo install" + + cargo install atuin + fi +} + +__atuin_install_unsupported(){ + echo "Unknown or unsupported OS" + echo "Please check the README at https://github.com/ellie/atuin for manual install instructions" + echo "If you have any problems, please open an issue!" + + while true; do + read -p "Do you wish to attempt an install with `cargo`?" yn + case $yn in + [Yy]* ) __atuin_install_cargo; break;; + [Nn]* ) exit;; + * ) echo "Please answer yes or no.";; + esac + done +} + +# TODO: would be great to support others! +case "$OSTYPE" in + linux*) __atuin_install_linux ;; + darwin*) __atuin_install_mac ;; + msys*) __atuin_install_unsupported ;; + solaris*) __atuin_install_unsupported ;; + bsd*) __atuin_install_unsupported ;; + *) __atuin_install_unsupported ;; +esac |