Giter Club home page Giter Club logo

topgrade's People

Contributors

0xmrtt avatar 9999years avatar alexanderwillner avatar bors[bot] avatar br1ght0ne avatar dependabot[bot] avatar derphilipp avatar drrlvn avatar ericmarkmartin avatar funky185540 avatar guihkx avatar hugoh avatar idanski avatar jasikpark avatar lesnake04 avatar mcofficer avatar nistee avatar pan93412 avatar r-darwish avatar s34m avatar samhanic avatar signed-log avatar slowsage avatar smcavoy avatar stevelauc avatar supersandro2000 avatar tranzystorekk avatar utkarshgupta137 avatar vzze avatar xeruf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

topgrade's Issues

tlmgr failing?

What did you expect to happen?

tlmgr to succeed updating all the TeXLive stuff upon invocation.

What actually happened?

―― 07:28:34 - TeX Live package manager ―――――――――――――――――――――――――――――――――――――――――
Enter PIN for 'Certificate For PIV Authentication xxxxxxxx': 

/Library/TeX/texbin/tlmgr: signature verification error of /usr/local/texlive/2022/tlpkg/texlive.tlpdb.main.2fdb20874d4fe1a3267a99dbbf353926 from https://mirror.ctan.org/systems/texlive/tlnet/tlpkg/texlive.tlpdb: cryptographic signature verification of
  /tmp/BQmzF5UvJT/6ox4ZGeQ7I
against
  https://mirror.ctan.org/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
failed. Output was:
gpg: Signature made Thu Sep 29 19:53:42 2022 EDT
gpg:                using RSA key 4CE1877E19438C70
gpg: BAD signature from "TeX Live Distribution <[email protected]>" [ultimate]

Please try from a different mirror and/or wait a few minutes
and try again; usually this is because of transient updates.
If problems persist, feel free to report to [email protected].

Occasionally (only within tlmgr - other stuff gets updated OK), a couple of packages would fail to update. And all the packages seem to take a long time to download, as if network had a problem - except that other apps don't seem to notice.

Additional Details

  • OS? MacOS Monterey 12.6
  • How did you install Topgrade? cargo install topgrade (don't want to use Macports version)
  • Which version are you running? 9.0.1

tmux + ssh + fish breaks. $SHELL gets evaluated locally / escaping problems?

What did you expect to happen?

Executing my upgrades for other machines works, unless I start using them inside tmux.

Having them as a dry-run exposes (for example):
/usr/bin/ssh -t flexo env TOPGRADE_PREFIX=flexo $SHELL -lc topgrade

What actually happened?
The remote side gives back an error:

env: ‘/usr/local/bin/fish’: No such file or directory

But of course that cannot be executed like that: Although locally there is a /usr/local/bin/fish - no such thing exists remotely. The remote shell would be /usr/bin/fish (and is set as a default anyway).

So I guess $SHELL shouldn't be evaluated locally - so if I escape it manually (on the commandline) to be...

/usr/bin/ssh -t flexo env TOPGRADE_PREFIX=flexo '$SHELL' -lc topgrade

(pay attention to the single quotes around $SHELL)
... it works.

Now another error occurs if we have the yes flag activated, as it tries to run, but fails being unable to parse the commandline correctly. Weird.

Again, if I escape the given commandline to:

(Before)

/usr/bin/ssh -t flexo env TOPGRADE_PREFIX=flexo $SHELL -lc topgrade -y

(After)

/usr/bin/ssh -t flexo env TOPGRADE_PREFIX=flexo '$SHELL' -lc topgrade\ -y

it works.

Additional details:

Which operating system or Linux distribution are you using?
macOS, from here trying to connect to multiple Linux hosts of different flavors. They all behave the same.
How did you install Topgrade?
* Manually downloaded and placed in /usr/local/bin (linux) or ~/bin/topgrade (macos)
* Installting via Homebrew
* Manually compiling

Run topgrade --dry-run to see which commands Topgrade is running. If the command seems wrong and you know why pleaes tell us so.
If the command seems fine try to run it yourself and tell us if you got a different result from Topgrade.

Additional information:

Adding a '-v' to tmux for debbuging purposes outputs the called commands for tmux:

==> tmux-client-22626.log <==
1618514975.156154 sending message 106 to peer 0x7fc150008000 (0 bytes)
1618514975.156174 cmd_pack_argv: argv[0]=new-window
1618514975.156181 cmd_pack_argv: argv[1]=-a
1618514975.156188 cmd_pack_argv: argv[2]=-t
1618514975.156194 cmd_pack_argv: argv[3]=topgrade:1
1618514975.156201 cmd_pack_argv: argv[4]=ssh -t flexo env TOPGRADE_PREFIX=flexo $SHELL -lc topgrade --keep
1618514975.156216 sending message 200 to peer 0x7fc150008000 (98 bytes)
1618514975.156225 client loop enter
1618514975.166874 peer 0x7fc150008000 message 203
1618514975.166907 client loop exit

Even activating assume_yes without activating tmux generates an error - but it does not do so if I use -y.

I would assume the problem lies in using fish as the default shell for my machines
It used to work in a quite old version (This broke around 2021)

topgrade-rs fails to self rename on Windows when tempdir and topgrade.exe reside on different volumes

What did you expect to happen?

topgrade.exe would succeed at self renaming, or it would rename falling back to a different directory.

What actually happened?

It fails with OSError 17: CrossedDevices

Additional Details

  • Windows 10 (version 21H2, OS Build 19044.2130)
  • How did you install Topgrade?
    cargo install topgrade-rs
  • Which version are you running?
    9.1.0

Here's the offending line of code in self_renamer.rs

impl SelfRenamer {
    pub fn create() -> Result<Self> {
        let tempdir = tempfile::tempdir()?;
        let temp_path = tempdir.path().join("topgrade.exe");
        let exe_path = current_exe()?;

        debug!("Current exe in {:?}. Moving it to {:?}", exe_path, temp_path);

        fs::rename(&exe_path, &temp_path)?; // <-- this line

        Ok(SelfRenamer { exe_path, temp_path })
    }
}

Looking at the fs::rename docs, the reason seems to be this:

This function currently corresponds to the rename function on Unix and the MoveFileEx function with the MOVEFILE_REPLACE_EXISTING flag on Windows.

Because of this, the behavior when both from and to exist differs. On Unix, if from is a directory, to must also be an (empty) directory. If from is not a directory, to must also be not a directory. In contrast, on Windows, from can be anything, but to must not be a directory.

I could make a pull request to resolve this. I have some ideas below, but I don't really know what should be done.

PS> topgrade-rs -nv
 2022-10-20T01:51:32.102Z DEBUG topgrade_rs::config > Configuration at ~\AppData\Roaming\topgrade.toml
 2022-10-20T01:51:32.103Z DEBUG topgrade_rs::config > Path ~\Home\Applications\hydrus\hydownloader expanded to ~\Home\Applications\hydrus\hydownloader
 2022-10-20T01:51:32.103Z DEBUG topgrade_rs::config > Loaded configuration: ConfigFile { pre_commands: Some({}), post_commands: None, commands: Some({"Hydownloader Python Environment": "pwsh.exe -WorkingDirectory ~\\Home\\Applications\\hydrus\\hydownloader -Command 'poetry install --sync --without=dev'", "tinynvidiaupdate": "tinynvidiaupdatechecker.exe --quiet --confirm-dl"}), git_repos: None, predefined_git_repos: None, disable: None, ignore_failures: None, remote_topgrades: None, remote_topgrade_path: None, ssh_arguments: None, git_arguments: None, tmux_arguments: None, set_title: None, display_time: Some(true), assume_yes: None, yay_arguments: None, no_retry: None, run_in_tmux: None, cleanup: None, notify_each_step: None, accept_all_windows_updates: None, skip_notify: None, bashit_branch: None, only: None, composer: Some(Composer { self_update: None }), brew: Some(Brew { greedy_cask: None, autoremove: None }), linux: Some(Linux { yay_arguments: None, arch_package_manager: None, show_arch_news: None, trizen_arguments: None, pikaur_arguments: None, pamac_arguments: None, dnf_arguments: None, apt_arguments: None, enable_tlmgr: None, redhat_distro_sync: None, rpm_ostree: None, emerge_sync_flags: None, emerge_update_flags: None }), git: Some(Git { max_concurrency: Some(5), arguments: None, repos: Some(["~\\Home\\Applications\\hydrus\\hydownloader"]), pull_predefined: None }), windows: Some(Windows { accept_all_updates: None, self_rename: Some(true), open_remotes_in_new_terminal: None, enable_winget: None }), npm: Some(NPM { use_sudo: None }), yarn: None, vim: None, firmware: Some(Firmware { upgrade: Some(true) }), vagrant: None, flatpak: Some(Flatpak { use_sudo: None }) }
 2022-10-20T01:51:32.103Z DEBUG topgrade_rs         > Version: 9.1.0
 2022-10-20T01:51:32.103Z DEBUG topgrade_rs         > OS: x86_64-pc-windows-msvc
 2022-10-20T01:51:32.103Z DEBUG topgrade_rs         > Args { inner: ["~\\.cargo\\bin\\topgrade-rs.exe", "-nv"] }
 2022-10-20T01:51:32.103Z DEBUG topgrade_rs         > Binary path: Ok("~\\.cargo\\bin\\topgrade-rs.exe")
 2022-10-20T01:51:32.104Z DEBUG topgrade_rs         > Self Update: false
 2022-10-20T01:51:32.108Z DEBUG topgrade_rs::utils  > Detected "~\\scoop\\shims\\git.exe" as "git"
 2022-10-20T01:51:32.116Z DEBUG topgrade_rs::utils  > Cannot find "doas"
 2022-10-20T01:51:32.121Z DEBUG topgrade_rs::utils  > Detected "~\\scoop\\shims\\sudo.cmd" as "sudo"
 2022-10-20T01:51:32.121Z DEBUG topgrade_rs::self_renamer > Current exe in "~\\.cargo\\bin\\topgrade-rs.exe". Moving it to "~\\AppData\\Local\\Temp\\.tmpTAfK4D\\topgrade.exe"
Error: The system cannot move the file to a different disk drive. (os error 17)

Possible solutions

MoveFileEx

I'm not sure what the best way to fix this is. I noticed that MoveFileEx supports moving files across mount points.

When moving a file, the destination can be on a different file system or volume. If the destination is on another drive, you must set the MOVEFILE_COPY_ALLOWED flag in dwFlags.

When moving a directory, the destination must be on the same drive.

diff --git a/src/self_renamer.rs b/src/self_renamer.rs
index ef55639..3649455 100644
--- a/src/self_renamer.rs
+++ b/src/self_renamer.rs
@@ -2,7 +2,8 @@
 
 use anyhow::Result;
 use log::{debug, error};
-use std::{env::current_exe, fs, path::PathBuf};
+use std::{env::current_exe, fs, io, iter::once, os::windows::prelude::OsStrExt, path::PathBuf};
+use winapi::um::winbase::{MoveFileExW, MOVEFILE_COPY_ALLOWED, MOVEFILE_REPLACE_EXISTING};
 
 pub struct SelfRenamer {
     exe_path: PathBuf,
@@ -17,9 +18,29 @@ impl SelfRenamer {
 
         debug!("Current exe in {:?}. Moving it to {:?}", exe_path, temp_path);
 
-        fs::rename(&exe_path, &temp_path)?;
+        // ref 3f80bee53a5f3acb273c01fdf98fccaf877793e3
+        // Previously used fs::rename which doesn't permit renaming files across mount points despite using MoveFileEx internally.
+        // MoveFileEx with flag MOVEFILE_COPY_ALLOWED lets us transfer files across volumes.
+        // See:
+        //   * https://doc.rust-lang.org/std/fs/fn.rename.html
+        //   * https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-movefileexw
+        //   * https://github.com/retep998/winapi-rs/tree/796a8e6c2971dc2ff1bcff166e6671284f9b5b6b/#example
+        let temp_path_copy: Vec<u16> = temp_path.as_os_str().clone().encode_wide().chain(once(0)).collect();
+        let exe_path_copy: Vec<u16> = exe_path.as_os_str().clone().encode_wide().chain(once(0)).collect();
 
-        Ok(SelfRenamer { exe_path, temp_path })
+        let ret = unsafe {
+            MoveFileExW(
+                exe_path_copy.as_ptr(),
+                temp_path_copy.as_ptr(),
+                MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED,
+            )
+        };
+
+        if ret == 0 {
+            Err(anyhow::Error::from(io::Error::last_os_error()))
+        } else {
+            Ok(SelfRenamer { exe_path, temp_path })
+        }
     }
 }

Copy and delete

MoveFileEx with the MOVEFILE_REPLACE_EXISTING just copies then deletes the original file. So it'd be possible to implement that using fs::copy and fs::remove_file, though fs::remove_file will error out trying to delete the running executable.

Local directory rename

Another approach could be to fallback to renaming the file in the local directory. But this obviously has some other drawbacks.

diff --git a/src/self_renamer.rs b/src/self_renamer.rs
index ef55639..efee194 100644
--- a/src/self_renamer.rs
+++ b/src/self_renamer.rs
@@ -1,6 +1,6 @@
 #![cfg(windows)]
 
-use anyhow::Result;
+use anyhow::{Result, bail};
 use log::{debug, error};
 use std::{env::current_exe, fs, path::PathBuf};
 
@@ -17,9 +17,26 @@ impl SelfRenamer {
 
         debug!("Current exe in {:?}. Moving it to {:?}", exe_path, temp_path);
 
-        fs::rename(&exe_path, &temp_path)?;
-
-        Ok(SelfRenamer { exe_path, temp_path })
+        match fs::rename(&exe_path, &temp_path) {
+            Ok(_) => {
+                Ok(SelfRenamer { exe_path, temp_path })
+            }
+            Err(e) => {
+                // TODO: use io::ErrorKind::CrossesDevices when stable
+                // e.kind() == io::ErrorKind::CrossesDevices
+                // ref https://github.com/rust-lang/rust/issues/86442
+                if e.raw_os_error().unwrap_or_default() == 0x11 {
+                    debug!("When moving {:?} to {:?} caught {:?}", exe_path, temp_path, e);
+                    let temp_path = exe_path.with_extension("exe.bak");
+                    debug!("Moving {:?} to {:?}", exe_path, temp_path);
+                    fs::rename(&exe_path, &temp_path)?;
+                    Ok(SelfRenamer { exe_path, temp_path })
+                }
+                else {
+                    bail!(e);
+                }
+            }
+        }
     }
 }

GitHub repo

  • since the website is holding the doc, we can disable the wiki
  • change the repo description

add i18n

For many users, English isn't their first language. It'll be cool if topgrade can be translated in other languages using a library called i18n-embed and fluent language

Latest Topgrade release is not in Homebrew

What did you expect to happen?

brew install topgrade should install version 9.1.0 from this repository.

What actually happened?

brew install topgrade installs the old 9.0.1 version

Can you take over maintainership over the Homebrew formulae?

Panic with `--tmux` when tmux is already running

$ cargo run -- --tmux
create window failed: index 0 in use
thread 'main' panicked at 'Error running Topgrade in tmux: exit status: 1', src/steps/tmux.rs:95:35
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

On latest master (a7c2262)

Distrobox

I want to suggest a new step

Which tool is this about? Where is its repository?

Distrobox is a tool to integrate other linux distros into your system.

https://github.com/89luca89/distrobox

Which operating systems are supported by this tool?

Most linux distros
image

What should Topgrade do to figure out if the tool needs to be invoked?

If its installed.

Which exact commands should Topgrade run?

distrobox upgrade -a

More information

I can add it (Assuming there are no extra steps)

If you install the Google Cloud SDK as a snap, it will throw an error every time topgrade runs

What did you expect to happen?

Snap handles upgrades of snaps. Topgrade should ignore snap-install gcloud.

What actually happened?

―― 23:06:18 - gcloud ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Beginning update. This process may take several minutes.
ERROR: (gcloud.components.update) You cannot perform this action because this Google Cloud CLI installation is managed by an external package manager.
Please consider using a separate installation of the Google Cloud CLI created through the default mechanism described at: https://cloud.google.com/sdk/

Retry? (y)es/(N)o/(s)hell/(q)uit

Additional Details

  • Which operating system or Linux distribution are you using? Ubuntu 22.04
  • How did you install Topgrade? cargo
  • Which version are you running?

➜ ~ topgrade -V
Topgrade 10.0.1

―― 23:07:24 - gcloud ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /snap/bin/gcloud components update --quiet

Version naming

The GH-Action for publishing to the AUR require that each version to follow some rules:

==> ERROR: pkgver is not allowed to contain colons, forward slashes, hyphens or whitespace.

Is it possiible to replace the - with a . ?

For example : 10.1.0-cd5 will be 10.1.0.cd5

Topgrade not detecting Linux distribution OpenMandriva Lx 4.90 (Nickel) Cooker

What did you expect to happen?

Topgrade to update OpenMandriva Lx 4.90 (Nickel) Cooker (openmandriva.org)

What actually happened?

Error detecting current distribution: Unknown Linux Distribution

Additional Details

  • Which operating system or Linux distribution are you using? OpenMandriva Lx 4.90 (Nickel) Cooker
  • How did you install Topgrade? cargo install topgrade
  • Which version are you running? Topgrade 9.0.1

Everything runs fine, except the distro update.
Rustup, Cargo, pip3, Vim, Containers, Flatpak, Firmware run ok.

topgrade --dry-run
Error detecting current distribution: Unknown Linux Distribution

―― 09:03:35 - rustup ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /home/technical/.cargo/bin/rustup self update
Dry running: /home/technical/.cargo/bin/rustup update

―― 09:03:35 - Cargo ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /home/technical/.cargo/bin/cargo-install-update install-update --git --all
Dry running: /usr/bin/go env GOPATH

―― 09:03:35 - pip3 ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/python3 -m pip install --upgrade --user pip

―― 09:03:35 - Vim ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/vim -u /home/technical/.vimrc -U NONE -V1 -nNesS /tmp/.tmpyagdEz

―― 09:03:35 - Containers ―――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/docker pull ubuntu:22.04
Dry running: /usr/bin/docker pull portainer/portainer-ce:latest

―― 09:03:35 - Flatpak User Packages ――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/flatpak update --user -y

―― 09:03:35 - Flatpak System Packages ――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/flatpak update --system -y

―― 09:03:35 - Firmware upgrades ――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/fwupdmgr refresh
Dry running: /usr/bin/fwupdmgr get-updates

―― 09:03:35 - Summary ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
config-update: OK
rustup: OK
cargo: OK
pip3: OK
vim: OK
Containers: OK
Flatpak: OK
Firmware upgrades: OK

thread main panicked

―― 09:21:35 - Git repositories ――――――――――――――――――――――――――――――――――――――――――――――――― Pulling /home/x/.config/nvim Up-to-date /home/x/.config/nvim thread 'main' panicked at 'called Option::unwrap()on aNone value', /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/topgrade-10.0.0/src/steps/git.rs:234:15

after that it stops working

Topgrade version 10.0.0

armv7 (raspberry pi) version missing

What did you expect to happen?

armv7 version for e.g. raspberry pi is missing as it existed before in the r-darwish repo.

What actually happened?

Additional Details

  • Which operating system or Linux distribution are you using?
    Distributor ID: Raspbian
    Description: Raspbian GNU/Linux 11 (bullseye)
    Release: 11
    Codename: bullseye
  • How did you install Topgrade?
    cannot, new version missing
  • Which version are you running? Topgrade 9.0.1

Support Different Ports Per SSH Host

I want to suggest some general feature

Topgrade should allow the user to specify (in topgrade.toml) what port to use for each host.
Currently users may only specify port in the ssh arguments that are used for every host.
This means that if the user wants to update multiple hosts with SSH running on different ports (such as behind a NAT) this is not possible.

More information

I would be comfortable helping test this feature.

I would also be willing to work on this feature, but it's a coinflip as to whether I will have the time in the next couple of months, so don't wait on me.

use GitHub pages for adding a documentation

I would suggest to use mdbook and GitHub pages for adding documentation.

So, user will just be able to go to the documentation website instead of the wiki. Maybe a repo in the org for a short URL. I'll glad to work on that if you approve

Getting Failure on Distrobox update when Distrobox is not installed

What did you expect to happen?

I expect it would detect that Distrobox is not installed and bypass that section entirely. Instead it gives a "Retry? (y)es/(N)o/(s)hell/(q)uit" message

What actually happened?

I am running topgrade update on my Fedora 37 based system and it gives this error message when it gets to the Distrobox section and shows Distrobox Failure at the end.

Additional Details

  • Which operating system or Linux distribution are you using? RisiOS 37 (based on Fedora 37)
  • How did you install Topgrade? cargo
  • Which version are you running? 10.1.0

All commands look fine. It appears that it is just failing when it tries to run "distrobox upgrade --all" because distrobox is not installed.


Binary release archive topgrade-10.0.0-x86_64-linux-gnu.tar.gz contains uneccessary directories target/x86_64-unknown-linux-gnu/release

What did you expect to happen?

When I download and extract https://github.com/topgrade-rs/topgrade/releases/download/v10.0.0/topgrade-10.0.0-x86_64-linux-gnu.tar.gz I should directly have the topgrade binary without any subfolders.

What actually happened?

When I extract topgrade-10.0.0-x86_64-linux-gnu.tar.gz then I have the directory structure target/x86_64-unknown-linux-gnu/release/topgrade.

Can you remove all the subdirectories so that the topgrade binary is in the root of the archive?

Self update error message with standalone versions

Hi, first of all many thanks for keeping this project updated 👍

What did you expect to happen?

With the standalone binaries at self updating step show a message that Topgrade has been updated or that Topgrade is up to date

What actually happened?

With the standalone binaries at self updating step an error message is shown at each execution of Topgrade :
------------- Self update ------------------------------------------------------
[00:00:00] [========================================] 3.60MiB/3.60MiB (0s) Done
Self update error: UpdateError: Could not find the required path in the archive: "topgrade-rs"

Additional Details

  • Which operating system or Linux distribution are you using?
    Tried on OpenSUSE Tumbleweed and Linux Mint 21

  • How did you install Topgrade?
    By extracting topgrade-v10.1.1-x86_64-unknown-linux-gnu.tar.gz or topgrade-v10.1.1-x86_64-unknown-linux-musl.tar.gz to ~/.local/bin

  • Which version are you running?
    Show Topgrade 10.1.0 but the binaries are tagged 10.1.1
    user@localhost:~> topgrade --version
    Topgrade 10.1.0

Updating oh my zsh triggers failed debug assert

What did you expect to happen?

A successful update

What actually happened?

There's a debug_assert!() call in src/steps/git.rs:311:9 that fails on popping $HOME/.oh-my-zsh from the repositories HashSet. I added a couple debug assert's to determine which path causes the panic:

[src/steps/git.rs:309] "{:#?}" = "{:#?}"
[src/steps/git.rs:309] &self.repositories = {
    "/Users/nagybotond/.omzcustom/plugins/evalcache",
    "/Users/nagybotond/.omzcustom/plugins/msfvenom",
    "/Users/nagybotond/.dotfiles",
    "/Users/nagybotond/.omzcustom/plugins/zsh-autosuggestions",
}
[src/steps/git.rs:310] "{:#?}" = "{:#?}"

this one >>>>> [src/steps/git.rs:310] path = "/Users/nagybotond/.oh-my-zsh"

thread 'main' panicked at 'assertion failed: _removed', src/steps/git.rs:311:9
stack backtrace:
   0: rust_begin_unwind
             at /rustc/758f19645b8ebce61ea52d1f6672fd057bc8dbee/library/std/src/panicking.rs:575:5
   1: core::panicking::panic_fmt
             at /rustc/758f19645b8ebce61ea52d1f6672fd057bc8dbee/library/core/src/panicking.rs:65:14
   2: core::panicking::panic
             at /rustc/758f19645b8ebce61ea52d1f6672fd057bc8dbee/library/core/src/panicking.rs:115:5
   3: topgrade::steps::git::Repositories::remove
             at ./src/steps/git.rs:311:9
   4: topgrade::steps::zsh::run_oh_my_zsh
             at ./src/steps/zsh.rs:161:5
   5: topgrade::run::{{closure}}
             at ./src/main.rs:289:53
   6: topgrade::runner::Runner::execute
             at ./src/runner.rs:37:19
   7: topgrade::run
             at ./src/main.rs:289:9
   8: topgrade::main
             at ./src/main.rs:489:11
   9: core::ops::function::FnOnce::call_once
             at /rustc/758f19645b8ebce61ea52d1f6672fd057bc8dbee/library/core/src/ops/function.rs:251:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Additional Details

  • Which operating system or Linux distribution are you using?
    MacOS 13.0
  • How did you install Topgrade?
    cargo install topgrade at first, then I realised it's unmaintained and I ended up here, so I installed it from this repo's main branch
  • Which version are you running?
    10.0.0

Dry running finishes the update successfully

cargo run -- --verbose
    Finished dev [unoptimized + debuginfo] target(s) in 0.08s
     Running `target/debug/topgrade --verbose`
 2022-10-25T23:00:42.725Z DEBUG topgrade::config > Configuration at /Users/nagybotond/.config/topgrade.toml
 2022-10-25T23:00:42.727Z DEBUG topgrade::config > Loaded configuration: ConfigFile { pre_commands: Some({}), post_commands: None, commands: Some({}), git_repos: None, predefined_git_repos: None, disable: Some([Mas, Vim, System, GithubCliExtensions, Containers, Pip3, Node, Gem, GitRepos]), ignore_failures: None, remote_topgrades: None, remote_topgrade_path: None, ssh_arguments: None, git_arguments: None, tmux_arguments: None, set_title: None, display_time: None, assume_yes: Some(true), yay_arguments: None, aura_aur_arguments: None, aura_pacman_arguments: None, no_retry: None, run_in_tmux: None, cleanup: Some(true), notify_each_step: None, accept_all_windows_updates: None, skip_notify: None, bashit_branch: None, only: None, composer: Some(Composer { self_update: None }), brew: Some(Brew { greedy_cask: None, autoremove: None }), linux: Some(Linux { yay_arguments: None, aura_aur_arguments: None, aura_pacman_arguments: None, arch_package_manager: None, show_arch_news: None, trizen_arguments: None, pikaur_arguments: None, pamac_arguments: None, dnf_arguments: None, apt_arguments: None, enable_tlmgr: None, redhat_distro_sync: None, rpm_ostree: None, emerge_sync_flags: None, emerge_update_flags: None }), git: Some(Git { max_concurrency: None, arguments: None, repos: None, pull_predefined: None }), windows: Some(Windows { accept_all_updates: None, self_rename: None, open_remotes_in_new_terminal: None, enable_winget: None }), npm: Some(NPM { use_sudo: None }), yarn: None, vim: None, firmware: Some(Firmware { upgrade: None }), vagrant: None, flatpak: Some(Flatpak { use_sudo: None }) }
 2022-10-25T23:00:42.728Z DEBUG topgrade         > Version: 10.0.0
 2022-10-25T23:00:42.728Z DEBUG topgrade         > OS: aarch64-apple-darwin
 2022-10-25T23:00:42.728Z DEBUG topgrade         > Args { inner: ["target/debug/topgrade", "--verbose"] }
 2022-10-25T23:00:42.728Z DEBUG topgrade         > Binary path: Ok("/Users/nagybotond/dev/forks/topgrade/target/debug/topgrade")
 2022-10-25T23:00:42.728Z DEBUG topgrade         > Self Update: false
 2022-10-25T23:00:42.729Z DEBUG topgrade::utils  > Detected "/opt/homebrew/bin/git" as "git"
 2022-10-25T23:00:42.729Z DEBUG topgrade::utils  > Cannot find "doas"
 2022-10-25T23:00:42.729Z DEBUG topgrade::utils  > Detected "/usr/bin/sudo" as "sudo"
 2022-10-25T23:00:42.730Z DEBUG topgrade::utils  > Cannot find "pwsh"
 2022-10-25T23:00:42.730Z DEBUG topgrade::utils  > Cannot find "powershell"
 2022-10-25T23:00:42.730Z DEBUG topgrade::runner > Step "Brew (ARM)"
 2022-10-25T23:00:42.730Z DEBUG topgrade::utils  > Detected "/opt/homebrew/bin/brew" as "/opt/homebrew/bin/brew"

―― 02:00:42 - Brew ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-25T23:00:42.731Z DEBUG topgrade::executor > Running "/opt/homebrew/bin/brew" "update"
Already up-to-date.
2022-10-25T23:00:43.983Z DEBUG topgrade::executor > Running "/opt/homebrew/bin/brew" "upgrade" "--ignore-pinned" "--formula"
2022-10-25T23:00:45.166Z DEBUG topgrade::executor > Running "/opt/homebrew/bin/brew" "cleanup"
2022-10-25T23:00:54.580Z DEBUG topgrade::runner > Step "Brew (Intel)"
2022-10-25T23:00:54.580Z DEBUG topgrade::runner > Step "Brew"
2022-10-25T23:00:54.580Z DEBUG topgrade::utils > Detected "/opt/homebrew/bin/brew" as "brew"
2022-10-25T23:00:54.580Z DEBUG topgrade::runner > Step "Brew Cask (ARM)"
2022-10-25T23:00:54.580Z DEBUG topgrade::utils > Detected "/opt/homebrew/bin/brew" as "/opt/homebrew/bin/brew"

―― 02:00:54 - Brew - Cask ――――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-25T23:00:55.242Z DEBUG topgrade::executor > Running "/opt/homebrew/bin/brew" "upgrade" "--cask"
2022-10-25T23:00:55.938Z DEBUG topgrade::executor > Running "/opt/homebrew/bin/brew" "cleanup"
2022-10-25T23:01:05.550Z DEBUG topgrade::runner > Step "Brew Cask (Intel)"
2022-10-25T23:01:05.550Z DEBUG topgrade::runner > Step "Brew Cask"
2022-10-25T23:01:05.550Z DEBUG topgrade::utils > Detected "/opt/homebrew/bin/brew" as "brew"
2022-10-25T23:01:05.550Z DEBUG topgrade::runner > Step "MacPorts"
2022-10-25T23:01:05.551Z DEBUG topgrade::runner > Step "yadm"
2022-10-25T23:01:05.551Z DEBUG topgrade::runner > Step "nix"
2022-10-25T23:01:05.551Z DEBUG topgrade::runner > Step "guix"
2022-10-25T23:01:05.551Z DEBUG topgrade::runner > Step "home-manager"
2022-10-25T23:01:05.551Z DEBUG topgrade::runner > Step "asdf"
2022-10-25T23:01:05.552Z DEBUG topgrade::runner > Step "pkgin"
2022-10-25T23:01:05.552Z DEBUG topgrade::runner > Step "bun"
2022-10-25T23:01:05.552Z DEBUG topgrade::utils > Detected "/Users/nagybotond/.bun/bin/bun" as "bun"

―― 02:01:05 - Bun ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-25T23:01:05.552Z DEBUG topgrade::executor > Running "/Users/nagybotond/.bun/bin/bun" "upgrade"
Congrats! You're already on the latest version of bun (which is v0.2.1)
2022-10-25T23:01:05.987Z DEBUG topgrade::utils > Path "/Users/nagybotond/.config/emacs" doesn't exist
2022-10-25T23:01:05.987Z DEBUG topgrade::utils > Path "/Users/nagybotond/.emacs.d" doesn't exist
2022-10-25T23:01:05.987Z DEBUG topgrade::steps::git > /Users/nagybotond/.doom.d does not exists
2022-10-25T23:01:05.987Z DEBUG topgrade::steps::git > /Users/nagybotond/.ideavimrc does not exists
2022-10-25T23:01:05.987Z DEBUG topgrade::steps::git > /Users/nagybotond/.intellimacs does not exists
2022-10-25T23:01:05.987Z DEBUG topgrade::steps::git > /Users/nagybotond/.dotfiles/zshrc is a file. Checking /Users/nagybotond/.dotfiles
2022-10-25T23:01:05.987Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.dotfiles is a git repository
2022-10-25T23:01:05.998Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/Users/nagybotond/.dotfiles\n", stderr: "" }
2022-10-25T23:01:05.998Z DEBUG topgrade::steps::git > /Users/nagybotond/.tmux does not exists
2022-10-25T23:01:05.998Z DEBUG topgrade::steps::git > /Users/nagybotond/.config/fish does not exists
2022-10-25T23:01:05.999Z DEBUG topgrade::steps::git > /Users/nagybotond/Library/Application Support/openbox does not exists
2022-10-25T23:01:05.999Z DEBUG topgrade::steps::git > /Users/nagybotond/Library/Application Support/bspwm does not exists
2022-10-25T23:01:05.999Z DEBUG topgrade::steps::git > /Users/nagybotond/Library/Application Support/i3 does not exists
2022-10-25T23:01:05.999Z DEBUG topgrade::steps::git > /Users/nagybotond/Library/Application Support/sway does not exists
2022-10-25T23:01:05.999Z DEBUG topgrade::runner > Step "zr"
2022-10-25T23:01:05.999Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.000Z DEBUG topgrade::runner > Step "antibody"
2022-10-25T23:01:06.000Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.001Z DEBUG topgrade::runner > Step "antigen"
2022-10-25T23:01:06.001Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.001Z DEBUG topgrade::utils > Path "/Users/nagybotond/.zshrc" exists
2022-10-25T23:01:06.001Z DEBUG topgrade::runner > Step "zgenom"
2022-10-25T23:01:06.001Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.001Z DEBUG topgrade::utils > Path "/Users/nagybotond/.zshrc" exists
2022-10-25T23:01:06.001Z DEBUG topgrade::runner > Step "zplug"
2022-10-25T23:01:06.001Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.001Z DEBUG topgrade::utils > Path "/Users/nagybotond/.zshrc" exists
2022-10-25T23:01:06.002Z DEBUG topgrade::runner > Step "zinit"
2022-10-25T23:01:06.002Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.002Z DEBUG topgrade::utils > Path "/Users/nagybotond/.zshrc" exists
2022-10-25T23:01:06.002Z DEBUG topgrade::runner > Step "zi"
2022-10-25T23:01:06.002Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.002Z DEBUG topgrade::utils > Path "/Users/nagybotond/.zshrc" exists
2022-10-25T23:01:06.002Z DEBUG topgrade::runner > Step "zim"
2022-10-25T23:01:06.002Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.013Z TRACE topgrade::executor > Output of "zsh" "-c" "[[ -n ${ZIM_HOME} ]] && print -n ${ZIM_HOME}": Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }
2022-10-25T23:01:06.013Z DEBUG topgrade::runner > Step "oh-my-zsh"
2022-10-25T23:01:06.013Z DEBUG topgrade::utils > Detected "/bin/zsh" as "zsh"
2022-10-25T23:01:06.013Z DEBUG topgrade::utils > Path "/Users/nagybotond/.oh-my-zsh" exists

―― 02:01:06 - oh-my-zsh ――――――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-25T23:01:06.014Z DEBUG topgrade::steps::zsh > oh-my-zsh custom dir: /Users/nagybotond/.omzcustom/
2022-10-25T23:01:06.014Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom is a git repository
2022-10-25T23:01:06.022Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(32768)), stdout: "", stderr: "fatal: not a git repository (or any of the parent directories): .git\n" }
2022-10-25T23:01:06.022Z DEBUG topgrade::steps::git > /Users/nagybotond/.dotfiles/omzcustom/aliases.zsh is a file. Checking /Users/nagybotond/.dotfiles/omzcustom
2022-10-25T23:01:06.022Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.dotfiles/omzcustom is a git repository
2022-10-25T23:01:06.029Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/Users/nagybotond/.dotfiles\n", stderr: "" }
2022-10-25T23:01:06.029Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom/plugins is a git repository
2022-10-25T23:01:06.035Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(32768)), stdout: "", stderr: "fatal: not a git repository (or any of the parent directories): .git\n" }
2022-10-25T23:01:06.035Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom/plugins/evalcache is a git repository
2022-10-25T23:01:06.040Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/Users/nagybotond/.omzcustom/plugins/evalcache\n", stderr: "" }
2022-10-25T23:01:06.040Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom/plugins/zsh-autosuggestions is a git repository
2022-10-25T23:01:06.045Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/Users/nagybotond/.omzcustom/plugins/zsh-autosuggestions\n", stderr: "" }
2022-10-25T23:01:06.045Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom/plugins/msfvenom is a git repository
2022-10-25T23:01:06.049Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/Users/nagybotond/.omzcustom/plugins/msfvenom\n", stderr: "" }
2022-10-25T23:01:06.049Z DEBUG topgrade::steps::git > /Users/nagybotond/.dotfiles/omzcustom/environment.zsh is a file. Checking /Users/nagybotond/.dotfiles/omzcustom
2022-10-25T23:01:06.049Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.dotfiles/omzcustom is a git repository
2022-10-25T23:01:06.053Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/Users/nagybotond/.dotfiles\n", stderr: "" }
2022-10-25T23:01:06.053Z DEBUG topgrade::steps::git > /Users/nagybotond/.omzcustom/example.zsh is a file. Checking /Users/nagybotond/.omzcustom
2022-10-25T23:01:06.053Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom is a git repository
2022-10-25T23:01:06.056Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(32768)), stdout: "", stderr: "fatal: not a git repository (or any of the parent directories): .git\n" }
2022-10-25T23:01:06.057Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom/zcompdump is a git repository
2022-10-25T23:01:06.060Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(32768)), stdout: "", stderr: "fatal: not a git repository (or any of the parent directories): .git\n" }
2022-10-25T23:01:06.061Z DEBUG topgrade::steps::git > /Users/nagybotond/.dotfiles/omzcustom/path.zsh is a file. Checking /Users/nagybotond/.dotfiles/omzcustom
2022-10-25T23:01:06.061Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.dotfiles/omzcustom is a git repository
2022-10-25T23:01:06.065Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/Users/nagybotond/.dotfiles\n", stderr: "" }
2022-10-25T23:01:06.065Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom/themes is a git repository
2022-10-25T23:01:06.068Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(32768)), stdout: "", stderr: "fatal: not a git repository (or any of the parent directories): .git\n" }
2022-10-25T23:01:06.068Z DEBUG topgrade::steps::git > /Users/nagybotond/.omzcustom/themes/example.zsh-theme is a file. Checking /Users/nagybotond/.omzcustom/themes
2022-10-25T23:01:06.068Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.omzcustom/themes is a git repository
2022-10-25T23:01:06.071Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(32768)), stdout: "", stderr: "fatal: not a git repository (or any of the parent directories): .git\n" }
2022-10-25T23:01:06.071Z DEBUG topgrade::steps::git > /Users/nagybotond/.dotfiles/omzcustom/themes/apple_custom.zsh-theme is a file. Checking /Users/nagybotond/.dotfiles/omzcustom/themes
2022-10-25T23:01:06.071Z DEBUG topgrade::steps::git > Checking if /Users/nagybotond/.dotfiles/omzcustom/themes is a git repository
2022-10-25T23:01:06.074Z TRACE topgrade::executor > Output of "/opt/homebrew/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/Users/nagybotond/.dotfiles\n", stderr: "" }
[src/steps/git.rs:309] "{:#?}" = "{:#?}"
[src/steps/git.rs:309] &self.repositories = {
"/Users/nagybotond/.omzcustom/plugins/evalcache",
"/Users/nagybotond/.omzcustom/plugins/msfvenom",
"/Users/nagybotond/.dotfiles",
"/Users/nagybotond/.omzcustom/plugins/zsh-autosuggestions",
}
[src/steps/git.rs:310] "{:#?}" = "{:#?}"
[src/steps/git.rs:310] path = "/Users/nagybotond/.oh-my-zsh"
thread 'main' panicked at 'assertion failed: _removed', src/steps/git.rs:311:9
stack backtrace:
0: rust_begin_unwind
at /rustc/758f19645b8ebce61ea52d1f6672fd057bc8dbee/library/std/src/panicking.rs:575:5
1: core::panicking::panic_fmt
at /rustc/758f19645b8ebce61ea52d1f6672fd057bc8dbee/library/core/src/panicking.rs:65:14
2: core::panicking::panic
at /rustc/758f19645b8ebce61ea52d1f6672fd057bc8dbee/library/core/src/panicking.rs:115:5
3: topgrade::steps::git::Repositories::remove
at ./src/steps/git.rs:311:9
4: topgrade::steps::zsh::run_oh_my_zsh
at ./src/steps/zsh.rs:161:5
5: topgrade::run::{{closure}}
at ./src/main.rs:289:53
6: topgrade::runner::Runner::execute
at ./src/runner.rs:37:19
7: topgrade::run
at ./src/main.rs:289:9
8: topgrade::main
at ./src/main.rs:489:11
9: core::ops::function::FnOnce::call_once
at /rustc/758f19645b8ebce61ea52d1f6672fd057bc8dbee/library/core/src/ops/function.rs:251:5
note: Some details are omitted, run with RUST_BACKTRACE=full for a verbose backtrace.

It seems to me that even though the update happens for oh-my-zsh, for some reason it's not present in topgrade::steps::git::repositories, so the remove call on `repositories returns false:

#[cfg(unix)]
    pub fn remove(&mut self, path: &str) {
        let _removed = self.repositories.remove(path);
        debug_assert!(_removed);
    }

Emacs step: Do not remove recentf-entries

What did you expect to happen?

I expect an upgrade utility not to alter my recentf-entries. If I do not need these entries, I turn of rencentf-mode.

What actually happened?

Topgrade's emacs step removes such entries

Additional Details

  • Which operating system or Linux distribution are you using? Arch Linux
  • How did you install Topgrade? AUR-package topgrade-git (I am the maintainer)
  • Which version are you running? 10.0.1
topgrade --only=emacs

―― 19:43:55 - Emacs ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Loading /home/haawda/.emacs.d/recentf...
Cleaning up the recentf list...
Cleaning up the recentf list...done (0 removed)

―― 19:44:00 - Summary ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Emacs: OK

Disable protonup

What did you expect to happen?

Nothing, since I already have GE-Proton7-37 installed.

What actually happened?

It tried to download the same version and failed. It appears to be an unresolved upstream issue:

AUNaseef/protonup#25
AUNaseef/protonup#37

Additional Details

  • Which operating system or Linux distribution are you using?
    Manjaro (unstable branch)
  • How did you install Topgrade?
    My Manjaro PKGBUILD
  • Which version are you running?
    Topgrade 9.1.0
2022-10-17T22:07:03.196Z DEBUG topgrade_rs::runner          > Step "protonup"
 2022-10-17T22:07:03.196Z DEBUG topgrade_rs::utils           > Detected "/usr/bin/protonup" as "protonup"

―― 16:07:03 - protonup ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-17T22:07:03.196Z DEBUG topgrade_rs::executor > Running "/usr/bin/protonup"
Ready to download Proton-GE-Proton7-37
Size : 397.0 MiB
Published : 2022-10-05
Continue? (Y/n):
Downloaded 100.00% - 397.1 MiB / 397.0 MiB
Traceback (most recent call last):
File "/usr/bin/protonup", line 8, in
sys.exit(main())
File "/usr/lib/python3.10/site-packages/protonup/init.py", line 4, in main
return main()
File "/usr/lib/python3.10/site-packages/protonup/cli.py", line 33, in main
get_proton(version=args.tag, yes=args.yes, dl_only=args.download,
File "/usr/lib/python3.10/site-packages/protonup/api.py", line 151, in get_proton
tarfile.open(destination, "r:gz").extractall(install_directory())
File "/usr/lib/python3.10/tarfile.py", line 2059, in extractall
self.extract(tarinfo, path, set_attrs=not tarinfo.isdir(),
File "/usr/lib/python3.10/tarfile.py", line 2100, in extract
self._extract_member(tarinfo, os.path.join(path, tarinfo.name),
File "/usr/lib/python3.10/tarfile.py", line 2173, in _extract_member
self.makefile(tarinfo, targetpath)
File "/usr/lib/python3.10/tarfile.py", line 2214, in makefile
with bltn_open(targetpath, "wb") as target:
PermissionError: [Errno 13] Permission denied: '/home/yochanan/.steam/root/compatibilitytools.d/GE-Proton7-37/files/lib64/wine/vkd3d-proton/libvkd3d-proton-utils-3.dll'
2022-10-17T22:07:18.685Z DEBUG topgrade_rs::runner > Step "protonup" failed: exit status: 1
2022-10-17T22:07:18.685Z DEBUG topgrade_rs::terminal > Desktop notification: protonup failed

Please disable functionality for now until upstream resolves the issue.

Consistent casing: `Topgrade` vs. `topgrade`

Based on discussion started in #82.


Consistent casing for the name of this project would be great, primarily concerning the README, documentation and outputs of the tool.
The question is whether to use Topgrade or topgrade.

This is how the discussion has gone so far:

@DottoDev

Consistency would be great, but I don't really know if topgrade or Topgrade should be used. But probably would be topgrade the better option.

@paescuj

Thanks for your feedback! I'm not sure either... I would probably have said "topgrade" too.
However, "Topgrade" is currently used a little more in the source code:

grep " Topgrade " * -r | wc -l
      16grep " topgrade " * -r | wc -l
       6

Should we just go with "topgrade" "Topgrade"? I mean we can always change it back at a later time.
I'd happy to provide a PR for this.

Edit: Okay, I briefly tested how the documentation looks when "topgrade" is used everywhere and I must say IMO it looks better with "Topgrade". I think same goes for the README.

Distrobox always fails

I installed Garuda yesterday and have been slowly building it up. Shortly after installing I installed you version of Topgrade. Everytime it's run it gets to a tool called Distrobox and won't do anything with it, it just fails and I'm asked if I want to try again. I looked for Distrobox using Pamac and of the 3 versions listed according to Pamac none are installed. I contacted Garuda to see if it was something they added and according to them no. I'm at a lost on how to either fix Distrobox or remove it since it's not liusted as installed. Any help with this would be greatly appreciated. Thanks

Additional Details

  • Garuda - Arch based distro
  • Use pamac to install Topgrade - it just updated
  • Topgrade version 10.0.1
╭─locutus@Unimatrix in ~ 
╰─λ topgrade

―― 07:06:53 - System update ――――――――――――――――――――――――――――――――――――――――――――――――――――
[sudo] password for locutus:
:: Synchronizing package databases...
garuda is up to date
core is up to date
extra is up to date
community is up to date
multilib is up to date
chaotic-aur                              2.3 MiB  4.89 MiB/s 00:00 [-------------------------------------] 100%
arcolinux_repo                         131.7 KiB   775 KiB/s 00:00 [-------------------------------------] 100%
arcolinux_repo_3party                  283.3 KiB  1445 KiB/s 00:00 [-------------------------------------] 100%
arcolinux_repo_xlarge                   34.6 KiB   324 KiB/s 00:00 [-------------------------------------] 100%
nemesis_repo is up to date
endeavouros is up to date
xerolinux_repo is up to date
xerolinux_repo_xl is up to date
:: Starting full system upgrade...
warning: topgrade-git: local (10.0.1.r1163.5a6f0d2-1) is newer than arcolinux_repo_3party (r1080.57f38a0-1)
there is nothing to do
:: Searching databases for updates...
:: Searching AUR for updates...
-> topgrade-git: local (10.0.1.r1163.5a6f0d2-1) is newer than arcolinux_repo_3party (r1080.57f38a0-1)
-> Flagged Out Of Date AUR Packages:  komga
there is nothing to do

―― 07:07:05 - Configuration update ―――――――――――――――――――――――――――――――――――――――――――――
==> pacnew file found for /etc/pamac.conf
:: (V)iew, (M)erge, (S)kip, (R)emove pacnew, (O)verwrite with pacnew, (Q)uit: [v/m/s/r/o/q] s

―― 07:07:09 - oh-my-zsh ――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Pulling custom plugins and themes
Pulling /home/locutus/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
Pulling /home/locutus/.oh-my-zsh/custom/themes/powerlevel10k
Pulling /home/locutus/.oh-my-zsh/custom/plugins/zsh-autosuggestions
Pulling /home/locutus/.oh-my-zsh/custom/plugins/zsh-completions
Up-to-date /home/locutus/.oh-my-zsh/custom/themes/powerlevel10k
Up-to-date /home/locutus/.oh-my-zsh/custom/plugins/zsh-completions
Up-to-date /home/locutus/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
Up-to-date /home/locutus/.oh-my-zsh/custom/plugins/zsh-autosuggestions
Updating Oh My Zsh
__                                     __
____  / /_     ____ ___  __  __   ____  _____/ /_
/ __ \/ __ \   / __ `__ \/ / / /  /_  / / ___/ __ \
/ /_/ / / / /  / / / / / / /_/ /    / /_(__  ) / / /
\____/_/ /_/  /_/ /_/ /_/\__, /    /___/____/_/ /_/
/____/

Oh My Zsh is already at the latest version.

To keep up with the latest news and updates, follow us on Twitter: https://twitter.com/ohmyzsh
Want to get involved in the community? Join our Discord: https://discord.gg/ohmyzsh
Get your Oh My Zsh swag at: https://shop.planetargon.com/collections/oh-my-zsh

―― 07:07:10 - TLDR ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Successfully updated cache.

―― 07:07:10 - micro ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Checking for plugin updates
Nothing to install / update

―― 07:07:11 - Flatpak User Packages ――――――――――――――――――――――――――――――――――――――――――――
Looking for updates…

Nothing to do.

―― 07:07:11 - Flatpak System Packages ――――――――――――――――――――――――――――――――――――――――――
Looking for updates…

Nothing to do.

―― 07:07:11 - Distrobox ――――――――――――――――――――――――――――――――――――――――――――――――――――――――

Retry? (y)es/(N)o/(s)hell/(q)uit

―― 07:07:13 - Firmware upgrades ――――――――――――――――――――――――――――――――――――――――――――――――
Firmware metadata last refresh: 18 hours ago. Use --force to refresh again.
Devices with no available firmware updates:
• System Firmware
• Unifying Receiver
• Unifying Receiver
• WD Blue SN570 500GB
Devices with the latest available firmware version:
• UEFI dbx
No updates available

―― 07:07:13 - Summary ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
System update: OK
config-update: OK
oh-my-zsh: OK
TLDR: OK
micro: OK
Flatpak: OK
distrobox: FAILED
Firmware upgrades: OK

Pacman backup configuration files found:
/etc/pamac.conf.pacnew
/etc/paru.conf.pacsave
╭─locutus@Unimatrix in ~ as 🧙 took 1ms
╰─λ topgrade --dry-run

―― 07:09:36 - System update ――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/yay --pacman pacman -Syu

―― 07:09:37 - Configuration update ―――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/sudo --preserve-env=DIFFPROG /usr/bin/pacdiff

―― 07:09:37 - oh-my-zsh ――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Pulling custom plugins and themes
Would pull /home/locutus/.oh-my-zsh/custom/plugins/zsh-autosuggestions
Would pull /home/locutus/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
Would pull /home/locutus/.oh-my-zsh/custom/plugins/zsh-completions
Would pull /home/locutus/.oh-my-zsh/custom/themes/powerlevel10k
Dry running: zsh /home/locutus/.oh-my-zsh/tools/upgrade.sh

―― 07:09:37 - TLDR ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/tldr --update

―― 07:09:37 - micro ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/micro -plugin update

―― 07:09:37 - Flatpak User Packages ――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/flatpak update --user

―― 07:09:37 - Flatpak System Packages ――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/flatpak update --system

―― 07:09:37 - Distrobox ――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: distrobox upgrade --all

―― 07:09:37 - Firmware upgrades ――――――――――――――――――――――――――――――――――――――――――――――――
Dry running: /usr/bin/fwupdmgr refresh
Dry running: /usr/bin/fwupdmgr get-updates

―― 07:09:37 - Summary ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
System update: OK
config-update: OK
oh-my-zsh: OK
TLDR: OK
Flatpak: OK
distrobox: OK
Firmware upgrades: OK

Pacman backup configuration files found:
/etc/pamac.conf.pacnew
/etc/paru.conf.pacsave

AUR PKGBUILD outdated

Hey

I was wondering how to build package from this fork. PKGBUILD on AUR still points to old Git repo... Am not good at making PKGBUILD files...

Thanks...

Git step errors when current branch has no remote tracking branch set

What did you expect to happen?

I ran the git step via topgrade targeting a repo where I recently created a local branch for some work in progress. This branch was never pushed to the remote. I expected topgrade to 1) fetch all other branches and 2) consider this branch up-to-date, as there can be no more recent refs for a branch that only exists locally.

What actually happened?

Topgrade fails with an error, where git complains that my local branch has no tracking information.

There is no tracking information for the current branch.
Please specify which branch you want to rebase against.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> bence/my-local-branch

Additional Details

  • Which operating system or Linux distribution are you using? macOS
  • How did you install Topgrade? brew
  • Which version are you running? Topgrade 9.0.1

Not working in FreeBSD if sudo not available

In followup to r-darwish/topgrade#1023

I was trying out topgrade and getting polkit errors, preventing topgrade from running.

Installing sudo solved the issue - but not sure topgrade should depend on sudo

(FreeBSD 13.1-RELEASE-p2)

I do not have doas installed!

desinstalled sudo to reproduce error:

root#: topgrade

―― 13:57:08 - FreeBSD Packages

Error checking for authorization org.freedesktop.policykit.exec: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: get_kinfo_proc() failed for pid 3001: No such process

Retry? (y)es/(N)o/(s)hell/(q)uit

―― 13:57:16 - Composer

Changed current directory to /root/.composer

Do not run Composer as root/super user! See https://getcomposer.org/root for details

Loading composer repositories with package information

Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/

Info from https://repo.packagist.org: #StandWithUkraine

Updating dependencies (including require-dev)

Nothing to install or update

Generating autoload files

―― 13:57:17 - FreeBSD Update

Error checking for authorization org.freedesktop.policykit.exec: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: get_kinfo_proc() failed for pid 3001: No such process

Retry? (y)es/(N)o/(s)hell/(q)uit

―― 13:57:21 - Summary

FreeBSD Packages: FAILED

composer: OK

FreeBSD Upgrade: FAILED

Error checking for authorization org.freedesktop.policykit.exec: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: get_kinfo_proc() failed for pid 3001: No such process

Please disable Distrobox by default.

What did you expect to happen?

Not to have Distrobox enabled by default as it's erroring out every time..

What actually happened?

Distrobox

System update: OK
nix: OK
oh-my-zsh: OK
rustup: OK
pip3: OK
Flatpak: OK
distrobox: FAILED
Firmware upgrades: OK

Additional Details

  • Arch based Distro XeroLinux
  • Installed from AUR
  • Topgrade v10.1.0

Dry run going fine Distrobox says ok but not actually...

―― 11:50:29 - Distrobox ――――――――――――――――――――――――――――――――――――――――――――――――――――――――
 2022-11-05T09:50:29.183Z DEBUG topgrade::executor        > Running "distrobox" "upgrade" "--all"
 2022-11-05T09:50:29.183Z DEBUG topgrade::runner          > Step "distrobox" failed: No such file or directory (os error 2)
 2022-11-05T09:50:29.183Z DEBUG topgrade::terminal        > Desktop notification: distrobox failed

Retry? (y)es/(N)o/(s)hell/(q)uit

Yarn always fails if no global packages are present.

What did you expect to happen?

For the script to just continue if there is nothing to update.

What actually happened?

This step always fails.

Additional Details

  • Which operating system or Linux distribution are you using?
    Pop!_OS 22.04
  • How did you install Topgrade?
    cargo install topgrade-rs
  • Which version are you running?
    Topgrade 10.0.1

--dry-run doesn't show me that yarn is being run. The last visible step is pnpm which seems to finish fine.

―― 08:12:42 - Node Package Manager ―――――――――――――――――――――――――――――――――――――――――――――
 2022-11-02T07:12:42.593Z TRACE topgrade_rs::executor        > Output of "/usr/local/bin/pnpm" "--version": Output { status: ExitStatus(unix_wait_status(0)), stdout: "7.5.2\n", stderr: "" }
 2022-11-02T07:12:42.593Z DEBUG topgrade_rs::executor        > Running "/usr/local/bin/pnpm" "update" "-g"
Already up-to-date
Progress: resolved 36, reused 36, downloaded 0, added 0, done
 2022-11-02T07:12:43.849Z DEBUG topgrade_rs::runner          > Step "yarn"
 2022-11-02T07:12:43.849Z DEBUG topgrade_rs::utils           > Detected "/usr/local/bin/yarn" as "yarn"
 2022-11-02T07:12:43.849Z DEBUG topgrade_rs::utils           > Detected "/usr/local/bin/yarn" as "yarn"
 2022-11-02T07:12:44.174Z TRACE topgrade_rs::executor        > Output of "/usr/local/bin/yarn" "global" "dir": Output { status: ExitStatus(unix_wait_status(256)), stdout: "\u{1b}[31m\u{1b}[1mUsage Error\u{1b}[22m\u{1b}[39m: No project found in /home/\n\n\u{1b}[1m$ \u{1b}[22myarn run [--inspect] [--inspect-brk] [-T,--top-level] [-B,--binaries-only]  ...\n", stderr: "" }
 2022-11-02T07:12:44.174Z DEBUG topgrade_rs::runner          > Step "yarn" failed: exit status: 1: 
 2022-11-02T07:12:44.174Z DEBUG topgrade_rs::terminal        > Desktop notification: yarn failed

Retry? (y)es/(N)o/(s)hell/(q)uit

Add support for aura AUR helper

Which tool is this about? Where is its repository?

aura is an AUR helper and can be used for all regular pacman commands

Which operating systems are supported by this tool?

Arch Linux and its derivatives

What should Topgrade do to figure out if the tool needs to be invoked?

check if it is installed and the user has set arch_package_manager to aura

Which exact commands should Topgrade run?

sudo aura -Akux (for aur packages)(this step has a hard dependency on sudo)
sudo aura -Syu (for pacman packages)

Add support of Bedrock Linux

I want to suggest a new step

Which tool is this about? Where is its repository?

https://bedrocklinux.org/

Which operating systems are supported by this tool?

https://bedrocklinux.org/ -> Linux

What should Topgrade do to figure out if the tool needs to be invoked?

Topgrade needs to invoke pmm (package manager manger) and upgrade all strats with (brl)

Which exact commands should Topgrade run?

sudo pmm -Syu and sudo brl update


I would like to work on that (i'm going to submit a PR soon)

pnpm and npm should not be merged in the same command

What did you expect to happen?

I have both npm and pnpm installed, I use npm for global installs and pnpm for projects.

I upgraded topgrade and since this commit 27349b1 it's now using pnpm for global upgrades.

pnpm should not be considered an alternative to npm as most users will have both installed (I don't think you can actually have pnpm and not have npm)

Additionally, topgrade created a ~ directory in my HOME directory with empty Library/pnpm directories

image

Additional Details

  • Which operating system or Linux distribution are you using? Not relevant
  • How did you install Topgrade? Not relevant
  • Which version are you running?
    Topgrade 10.0.0
―― 09:57:13 - Node Package Manager ―――――――――――――――――――――――――――――――――――――――――――――
Dry running: /opt/homebrew/bin/pnpm update -g

This should remain as npm update -g

topgrade panics after update to 10.0.0

What did you expect to happen?

Topgrade performs upgrade sucsessfuly

What actually happened?

Topgrade panics during upgrade

Additional Details

  • Which operating system or Linux distribution are you using? Opensuse tumbleweed
  • How did you install Topgrade? cargo
  • Which version are you running? 10.0.0
❯ topgrade -v 2022-10-26T08:03:56.400Z DEBUG topgrade::config > Configuration at /home/mark/.config/topgrade.toml 2022-10-26T08:03:56.400Z DEBUG topgrade::config > Loaded configuration: ConfigFile { pre_commands: Some({}), post_commands: None, commands: Some({}), git_repos: None, predefined_git_repos: None, disable: None, ignore_failures: None, remote_topgrades: None, remote_topgrade_path: None, ssh_arguments: None, git_arguments: None, tmux_arguments: None, set_title: None, display_time: None, assume_yes: None, yay_arguments: None, aura_aur_arguments: None, aura_pacman_arguments: None, no_retry: None, run_in_tmux: None, cleanup: None, notify_each_step: None, accept_all_windows_updates: None, skip_notify: None, bashit_branch: None, only: None, composer: Some(Composer { self_update: None }), brew: Some(Brew { greedy_cask: None, autoremove: None }), linux: Some(Linux { yay_arguments: None, aura_aur_arguments: None, aura_pacman_arguments: None, arch_package_manager: None, show_arch_news: None, trizen_arguments: None, pikaur_arguments: None, pamac_arguments: None, dnf_arguments: None, apt_arguments: None, enable_tlmgr: None, redhat_distro_sync: None, rpm_ostree: None, emerge_sync_flags: None, emerge_update_flags: None }), git: Some(Git { max_concurrency: None, arguments: None, repos: None, pull_predefined: None }), windows: Some(Windows { accept_all_updates: None, self_rename: None, open_remotes_in_new_terminal: None, enable_winget: None }), npm: Some(NPM { use_sudo: None }), yarn: None, vim: None, firmware: Some(Firmware { upgrade: None }), vagrant: None, flatpak: Some(Flatpak { use_sudo: Some(true) }) } 2022-10-26T08:03:56.400Z DEBUG topgrade::utils > Cannot find "notify-send" 2022-10-26T08:03:56.400Z DEBUG topgrade > Version: 10.0.0 2022-10-26T08:03:56.400Z DEBUG topgrade > OS: x86_64-unknown-linux-gnu 2022-10-26T08:03:56.400Z DEBUG topgrade > Args { inner: ["topgrade", "-v"] } 2022-10-26T08:03:56.400Z DEBUG topgrade > Binary path: Ok("/home/mark/.cargo/bin/topgrade") 2022-10-26T08:03:56.400Z DEBUG topgrade > Self Update: false 2022-10-26T08:03:56.400Z DEBUG topgrade::utils > Detected "/usr/bin/git" as "git" 2022-10-26T08:03:56.400Z DEBUG topgrade::utils > Cannot find "doas" 2022-10-26T08:03:56.400Z DEBUG topgrade::utils > Detected "/usr/bin/sudo" as "sudo" 2022-10-26T08:03:56.400Z DEBUG topgrade::utils > Cannot find "pwsh" 2022-10-26T08:03:56.400Z DEBUG topgrade::utils > Cannot find "powershell" 2022-10-26T08:03:56.400Z DEBUG topgrade::runner > Step "System update"

―― 11:03:56 - System update ――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-26T08:03:56.400Z DEBUG topgrade::executor > Running "/usr/bin/sudo" "zypper" "refresh"
Repository 'Visual Studio Code' is up to date.
Repository 'nVidia Graphics Drivers' is up to date.
Repository 'Main Repository (NON-OSS)' is up to date.
Repository 'Main Repository (OSS)' is up to date.
Repository 'Main Update Repository' is up to date.
Repository 'Packman Repository' is up to date.
Repository 'Rancher stable packages (rpm)' is up to date.
All repositories have been refreshed.
2022-10-26T08:03:57.531Z DEBUG topgrade::executor > Running "/usr/bin/sudo" "zypper" "dist-upgrade"
Loading repository data...
Reading installed packages...
Warning: You are about to do a distribution upgrade with all enabled repositories. Make sure these repositories are compatible before you continue. See 'man zypper' for more information about this command.
Computing distribution upgrade...
Nothing to do.
2022-10-26T08:03:58.615Z DEBUG topgrade::runner > Step "config-update"
2022-10-26T08:03:58.615Z DEBUG topgrade::runner > Step "Brew"
2022-10-26T08:03:58.616Z DEBUG topgrade::utils > Detected "/home/linuxbrew/.linuxbrew/bin/brew" as "brew"

―― 11:03:58 - Brew ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-26T08:03:58.616Z DEBUG topgrade::executor > Running "brew" "update"
Already up-to-date.
2022-10-26T08:04:00.587Z DEBUG topgrade::executor > Running "brew" "upgrade" "--ignore-pinned" "--formula"
2022-10-26T08:04:01.898Z DEBUG topgrade::runner > Step "yadm"
2022-10-26T08:04:01.898Z DEBUG topgrade::runner > Step "nix"
2022-10-26T08:04:01.898Z DEBUG topgrade::runner > Step "guix"
2022-10-26T08:04:01.898Z DEBUG topgrade::runner > Step "home-manager"
2022-10-26T08:04:01.898Z DEBUG topgrade::runner > Step "asdf"
2022-10-26T08:04:01.899Z DEBUG topgrade::utils > Detected "/home/mark/.asdf/bin/asdf" as "asdf"

―― 11:04:01 - asdf ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-26T08:04:01.899Z DEBUG topgrade::executor > Running "/home/mark/.asdf/bin/asdf" "update"
HEAD is now at 7e7a1fa chore: release 0.10.2 (#1233)
Updated asdf to release v0.10.2
2022-10-26T08:04:02.566Z DEBUG topgrade::executor > Running "/home/mark/.asdf/bin/asdf" "plugin" "update" "--all"
Updating golang to master
Already on 'master'
Your branch is up to date with 'origin/master'.
Updating nodejs to master
Already on 'master'
Your branch is up to date with 'origin/master'.
Updating java to master
Already on 'master'
Your branch is up to date with 'origin/master'.
2022-10-26T08:04:03.744Z DEBUG topgrade::runner > Step "pkgin"
2022-10-26T08:04:03.744Z DEBUG topgrade::runner > Step "bun"
2022-10-26T08:04:03.744Z DEBUG topgrade::utils > Path "/home/mark/.config/emacs" doesn't exist
2022-10-26T08:04:03.744Z DEBUG topgrade::utils > Path "/home/mark/.emacs.d" doesn't exist
2022-10-26T08:04:03.744Z DEBUG topgrade::steps::git > /home/mark/.doom.d does not exists
2022-10-26T08:04:03.744Z DEBUG topgrade::steps::git > /home/mark/.vim does not exists
2022-10-26T08:04:03.744Z DEBUG topgrade::steps::git > /home/mark/.config/nvim does not exists
2022-10-26T08:04:03.744Z DEBUG topgrade::steps::git > /home/mark/.ideavimrc does not exists
2022-10-26T08:04:03.744Z DEBUG topgrade::steps::git > /home/mark/.intellimacs does not exists
2022-10-26T08:04:03.744Z DEBUG topgrade::steps::git > /home/mark/.zshrc is a file. Checking /home/mark
2022-10-26T08:04:03.744Z DEBUG topgrade::steps::git > Checking if /home/mark is a git repository
2022-10-26T08:04:03.745Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(32768)), stdout: "", stderr: "fatal: not a git repository (or any parent up to mount point /)\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n" }
2022-10-26T08:04:03.745Z DEBUG topgrade::steps::git > /home/mark/.tmux does not exists
2022-10-26T08:04:03.745Z DEBUG topgrade::steps::git > Checking if /home/mark/.config/fish is a git repository
2022-10-26T08:04:03.747Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(32768)), stdout: "", stderr: "fatal: not a git repository (or any parent up to mount point /)\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n" }
2022-10-26T08:04:03.747Z DEBUG topgrade::steps::git > /home/mark/.config/openbox does not exists
2022-10-26T08:04:03.747Z DEBUG topgrade::steps::git > /home/mark/.config/bspwm does not exists
2022-10-26T08:04:03.747Z DEBUG topgrade::steps::git > /home/mark/.config/i3 does not exists
2022-10-26T08:04:03.747Z DEBUG topgrade::steps::git > /home/mark/.config/sway does not exists
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "Git repositories"
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "zr"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "antibody"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "antigen"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Path "/home/mark/.zshrc" exists
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "zgenom"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Path "/home/mark/.zshrc" exists
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "zplug"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Path "/home/mark/.zshrc" exists
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "zinit"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Path "/home/mark/.zshrc" exists
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "zi"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Path "/home/mark/.zshrc" exists
2022-10-26T08:04:03.747Z DEBUG topgrade::runner > Step "zim"
2022-10-26T08:04:03.747Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.750Z TRACE topgrade::executor > Output of "zsh" "-c" "[[ -n ${ZIM_HOME} ]] && print -n ${ZIM_HOME}": Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }
2022-10-26T08:04:03.750Z DEBUG topgrade::runner > Step "oh-my-zsh"
2022-10-26T08:04:03.750Z DEBUG topgrade::utils > Detected "/usr/bin/zsh" as "zsh"
2022-10-26T08:04:03.750Z DEBUG topgrade::utils > Path "/home/mark/.oh-my-zsh" exists

―― 11:04:03 - oh-my-zsh ――――――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-10-26T08:04:03.753Z TRACE topgrade::executor > Output of "zsh" "-c" "test $ZSH_CUSTOM && echo -n $ZSH_CUSTOM": Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "" }
2022-10-26T08:04:03.753Z DEBUG topgrade::steps::zsh > Running zsh returned exit status: 1: . Using default path: /home/mark/.oh-my-zsh/custom
2022-10-26T08:04:03.753Z DEBUG topgrade::steps::zsh > oh-my-zsh custom dir: /home/mark/.oh-my-zsh/custom
2022-10-26T08:04:03.754Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom is a git repository
2022-10-26T08:04:03.755Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh\n", stderr: "" }
2022-10-26T08:04:03.755Z DEBUG topgrade::steps::git > /home/mark/.oh-my-zsh/custom/example.zsh is a file. Checking /home/mark/.oh-my-zsh/custom
2022-10-26T08:04:03.755Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom is a git repository
2022-10-26T08:04:03.756Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh\n", stderr: "" }
2022-10-26T08:04:03.756Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/plugins is a git repository
2022-10-26T08:04:03.757Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh\n", stderr: "" }
2022-10-26T08:04:03.757Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/plugins/example is a git repository
2022-10-26T08:04:03.759Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh\n", stderr: "" }
2022-10-26T08:04:03.759Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/plugins/zsh-completions is a git repository
2022-10-26T08:04:03.760Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh/custom/plugins/zsh-completions\n", stderr: "" }
2022-10-26T08:04:03.760Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting is a git repository
2022-10-26T08:04:03.762Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting\n", stderr: "" }
2022-10-26T08:04:03.762Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/plugins/zsh-autosuggestions is a git repository
2022-10-26T08:04:03.763Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh/custom/plugins/zsh-autosuggestions\n", stderr: "" }
2022-10-26T08:04:03.763Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/plugins/nerdctl is a git repository
2022-10-26T08:04:03.764Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh/custom/plugins/nerdctl\n", stderr: "" }
2022-10-26T08:04:03.764Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/plugins/telepresence is a git repository
2022-10-26T08:04:03.765Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh/custom/plugins/telepresence\n", stderr: "" }
2022-10-26T08:04:03.765Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/plugins/epinio is a git repository
2022-10-26T08:04:03.766Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh/custom/plugins/epinio\n", stderr: "" }
2022-10-26T08:04:03.766Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/themes is a git repository
2022-10-26T08:04:03.767Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh\n", stderr: "" }
2022-10-26T08:04:03.767Z DEBUG topgrade::steps::git > /home/mark/.oh-my-zsh/custom/themes/example.zsh-theme is a file. Checking /home/mark/.oh-my-zsh/custom/themes
2022-10-26T08:04:03.767Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/themes is a git repository
2022-10-26T08:04:03.769Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh\n", stderr: "" }
2022-10-26T08:04:03.769Z DEBUG topgrade::steps::git > Checking if /home/mark/.oh-my-zsh/custom/themes/powerlevel10k is a git repository
2022-10-26T08:04:03.770Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "--show-toplevel": Output { status: ExitStatus(unix_wait_status(0)), stdout: "/home/mark/.oh-my-zsh/custom/themes/powerlevel10k\n", stderr: "" }
Pulling custom plugins and themes
2022-10-26T08:04:03.771Z TRACE topgrade::executor > Output of "/usr/bin/git" "remote" "show": Output { status: ExitStatus(unix_wait_status(0)), stdout: "origin\n", stderr: "" }
2022-10-26T08:04:03.772Z TRACE topgrade::executor > Output of "/usr/bin/git" "remote" "show": Output { status: ExitStatus(unix_wait_status(0)), stdout: "origin\n", stderr: "" }
2022-10-26T08:04:03.773Z TRACE topgrade::executor > Output of "/usr/bin/git" "remote" "show": Output { status: ExitStatus(unix_wait_status(0)), stdout: "origin\n", stderr: "" }
2022-10-26T08:04:03.774Z TRACE topgrade::executor > Output of "/usr/bin/git" "remote" "show": Output { status: ExitStatus(unix_wait_status(0)), stdout: "origin\n", stderr: "" }
2022-10-26T08:04:03.775Z TRACE topgrade::executor > Output of "/usr/bin/git" "remote" "show": Output { status: ExitStatus(unix_wait_status(0)), stdout: "origin\n", stderr: "" }
2022-10-26T08:04:03.777Z TRACE topgrade::executor > Output of "/usr/bin/git" "remote" "show": Output { status: ExitStatus(unix_wait_status(0)), stdout: "origin\n", stderr: "" }
2022-10-26T08:04:03.778Z TRACE topgrade::executor > Output of "/usr/bin/git" "remote" "show": Output { status: ExitStatus(unix_wait_status(0)), stdout: "origin\n", stderr: "" }
2022-10-26T08:04:03.780Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "655576f336f4c956b59a5f4424c5ffd361964b35\n", stderr: "" }
Pulling /home/mark/.oh-my-zsh/custom/plugins/zsh-completions
2022-10-26T08:04:03.782Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "122dc464392302114556b53ec01a1390c54f739f\n", stderr: "" }
Pulling /home/mark/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
2022-10-26T08:04:03.784Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "dd46501b9c838ad7424569f98c0194fc0e808bed\n", stderr: "" }
Pulling /home/mark/.oh-my-zsh/custom/plugins/telepresence
2022-10-26T08:04:03.785Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "81adf993a1baeaea503fa9d187f97ef6b86e763a\n", stderr: "" }
Pulling /home/mark/.oh-my-zsh/custom/plugins/epinio
2022-10-26T08:04:03.786Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "a411ef3e0992d4839f0732ebeb9823024afaaaa8\n", stderr: "" }
Pulling /home/mark/.oh-my-zsh/custom/plugins/zsh-autosuggestions
2022-10-26T08:04:03.787Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "6f153508a932e25cca2b914ffcddb73eb2f98de9\n", stderr: "" }
Pulling /home/mark/.oh-my-zsh/custom/plugins/nerdctl
2022-10-26T08:04:03.789Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "8091c8a3a8a845c70046684235a01cd500075def\n", stderr: "" }
Pulling /home/mark/.oh-my-zsh/custom/themes/powerlevel10k
2022-10-26T08:04:04.268Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "122dc464392302114556b53ec01a1390c54f739f\n", stderr: "" }
Up-to-date /home/mark/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
2022-10-26T08:04:04.271Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "6f153508a932e25cca2b914ffcddb73eb2f98de9\n", stderr: "" }
Up-to-date /home/mark/.oh-my-zsh/custom/plugins/nerdctl
2022-10-26T08:04:04.284Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "655576f336f4c956b59a5f4424c5ffd361964b35\n", stderr: "" }
Up-to-date /home/mark/.oh-my-zsh/custom/plugins/zsh-completions
2022-10-26T08:04:04.294Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "a411ef3e0992d4839f0732ebeb9823024afaaaa8\n", stderr: "" }
Up-to-date /home/mark/.oh-my-zsh/custom/plugins/zsh-autosuggestions
2022-10-26T08:04:04.324Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "8091c8a3a8a845c70046684235a01cd500075def\n", stderr: "" }
Up-to-date /home/mark/.oh-my-zsh/custom/themes/powerlevel10k
2022-10-26T08:04:05.425Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "dd46501b9c838ad7424569f98c0194fc0e808bed\n", stderr: "" }
Up-to-date /home/mark/.oh-my-zsh/custom/plugins/telepresence
2022-10-26T08:04:05.497Z TRACE topgrade::executor > Output of "/usr/bin/git" "rev-parse" "HEAD": Output { status: ExitStatus(unix_wait_status(0)), stdout: "81adf993a1baeaea503fa9d187f97ef6b86e763a\n", stderr: "" }
Up-to-date /home/mark/.oh-my-zsh/custom/plugins/epinio
thread 'main' panicked at 'called Option::unwrap() on a None value', /home/mark/.cargo/registry/src/github.com-1ecc6299db9ec823/topgrade-10.0.0/src/steps/git.rs:234:15


Paru issue and Distrobox again !

What did you expect to happen?

For it to work....

What actually happened?

Failed for Paru and Distrobox..

Additional Details

  • XeroLinux an Arch based disro
  • Installed from AUR
  • Topgrade 10.1.2
― 18:02:55 - Distrobox ――――――――――――――――――――――――――――――――――――――――――――――――――――――――
 2022-11-06T16:02:55.916Z DEBUG topgrade::executor   > Running "/usr/bin/distrobox" "upgrade" "--all"
Missing dependency: we need a container manager.
Please install one of podman or docker.
You can follow the documentation on:
        man distrobox-compatibility
or:
        https://github.com/89luca89/distrobox/blob/main/docs/compatibility.md

An error occurred
2022-11-06T16:02:55.923Z DEBUG topgrade::runner > Step "distrobox" failed: exit status: 127
2022-11-06T16:02:55.923Z DEBUG topgrade::terminal > Desktop notification: distrobox failed

―― 18:02:46 - System update ――――――――――――――――――――――――――――――――――――――――――――――――――――
2022-11-06T16:02:46.641Z DEBUG topgrade::utils > Cannot find "powerpill"
2022-11-06T16:02:46.641Z DEBUG topgrade::utils > Detected "/usr/bin/paru" as "paru"
/usr/bin/paru: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
2022-11-06T16:02:46.641Z DEBUG topgrade::executor > Running "/usr/bin/paru" "--pacman" "pacman" "-Syu" "--nodevel" "--noconfirm"
/usr/bin/paru: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
2022-11-06T16:02:46.641Z DEBUG topgrade::runner > Step "System update" failed: exit status: 127
2022-11-06T16:02:46.641Z DEBUG topgrade::terminal > Desktop notification: System update failed

FR: Ask to reboot/logout

When you install new kernel or kernel module or something, zypper (OpenSUSE pm) may request to reboot
Also, GNOME Shell extensions expect shell restart to be reapplied (there are enough to logout)

Which operating systems are supported by this tool?

  1. OpenSUSE
  2. Linux+GNOME

What should Topgrade do to figure out if the tool needs to be invoked?

  1. If after update zypper needs-rebooting returns true, ask for reboot (probably, /usr/sbin/reboot)
  2. If any GNOME Shell extension updated:
    a. On Wayland: logout with gnome-session-quit
    b. On X: restart shell with busctl --user call org.gnome.Shell /org/gnome/Shell org.gnome.Shell Eval s 'Meta.restart("Restarting…")' or if Shell version >= 41 logout too

auto exit topgrade after completing with tmux option

I run tmux with below option.

tmux -y -t

At the end I get below option

(R)eboot
(S)hell
(Q)uit

Is it possible to add an option to quit automatically after the update and write the updates to a log file. This can then be used to run using cron job.

Logo

That would be awesome if we can have a logo. I create this issue as a tracker, feel free to comment your ideas.

Aur 404

Hi, in the AUR I get the following error message:

url: (22) The requested URL returned error: 404
==> ERROR: Failure while downloading https://github.com/topgrade-rs/topgrade/archive/v10.1.0.tar.gz

nix: "incompatible with 'nix-env'; please use 'nix profile' instead"

Using nix profile will obsolete/break nix-env

What did you expect to happen?

Nix upgrade uses nix profile when the profile contains manifest.json (like nix-env does the check):
/nix/var/nix/profiles/per-user/manu/profile/manifest.json

The command that is applicable then is:

nix profile upgrade '.*'

What actually happened?

―― 15:28:57 - Nix ―――――――――
this derivation will be built:
  /nix/store/bc8p7vjvhpfrgv3h12h767yv4kbw1prm-home-manager.drv
building '/nix/store/bc8p7vjvhpfrgv3h12h767yv4kbw1prm-home-manager.drv'...
unpacking channels...
error: profile '/nix/var/nix/profiles/per-user/manu/profile' is incompatible with 'nix-env'; please use 'nix profile' instead

Additional Details

  • OS: Fedora beta 37
  • How did you install Topgrade? cargo install topgrade-rs
  • Which version are you running? Topgrade 9.1.0
Dry running: /nix/var/nix/profiles/default/bin/nix-channel --update
Dry running: /nix/var/nix/profiles/default/bin/nix-env --upgrade

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.