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 }} diff --git a/Cargo.lock b/Cargo.lock index f9f2252f..92f82cc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/Cargo.toml b/Cargo.toml index 88a85823..f39702a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,29 @@ [package] name = "atuin" -version = "0.6.1" +version = "0.6.2" authors = ["Ellie Huxtable "] 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 " +copyright = "2021, Ellie Huxtable " +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" - diff --git a/README.md b/README.md index 1a4b2701..a0fc9be7 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,17 @@

- + +

+ animated +

+ +

+exit code, duration, time and command shown +

+ - 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 "] 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 "] 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 "] edition = "2018" license = "MIT" diff --git a/demo.gif b/demo.gif new file mode 100644 index 00000000..1da6c0b6 Binary files /dev/null and b/demo.gif differ diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 index 162602c0..b540a38b --- 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