mirror of
https://github.com/Cyrix126/gupaxx.git
synced 2024-11-16 15:27:46 +00:00
feat: new update logic
- feat: update xmrig and p2pool only if bundle button is checked - feat: default value for bundle button depends of bundle or standalone version, with feature bundle. - feat: update CI to use the feature bundle and produce different Gupaxx binairies for standalone and bundle version. - feat: ask user to restart Gupaxx after updating. - feat: prevent user to update twice without restart - feat: use bundled XMRig and P2Pool of Gupaxx instead of upstream version. - feat: update test - feat: update DIFFERENCES and ARCHITECTURE to reflect updates differences - fix: temporary directories of updates not deleted introduced in fork - fix: #4
This commit is contained in:
parent
697fd99124
commit
6b27ff499f
12 changed files with 317 additions and 689 deletions
16
.github/workflows/ci.yml
vendored
16
.github/workflows/ci.yml
vendored
|
@ -54,12 +54,22 @@ jobs:
|
||||||
cargo bundle --release --target aarch64-apple-darwin
|
cargo bundle --release --target aarch64-apple-darwin
|
||||||
mv target/release/bundle/osx/Gupaxx.app Gupaxx-macos-x64.app
|
mv target/release/bundle/osx/Gupaxx.app Gupaxx-macos-x64.app
|
||||||
mv target/aarch64-apple-darwin/release/bundle/osx/Gupaxx.app Gupaxx-macos-arm64.app
|
mv target/aarch64-apple-darwin/release/bundle/osx/Gupaxx.app Gupaxx-macos-arm64.app
|
||||||
tar -cf macos.tar Gupaxx-macos-arm64.app Gupaxx-macos-x64.app
|
cargo bundle --release --features=bundle
|
||||||
|
cargo bundle --release --target aarch64-apple-darwin --features=bundle
|
||||||
|
mv target/release/bundle/osx/Gupaxx.app Gupaxx-macos-x64.app_b
|
||||||
|
mv target/aarch64-apple-darwin/release/bundle/osx/Gupaxx.app Gupaxx-macos-arm64.app_b
|
||||||
|
tar -cf macos.tar Gupaxx-macos-arm64.app Gupaxx-macos-x64.app Gupaxx-macos-arm64_b.app Gupaxx-macos-x64_b.app
|
||||||
elif [ "$RUNNER_OS" == "Linux" ]; then
|
elif [ "$RUNNER_OS" == "Linux" ]; then
|
||||||
cargo build --release --target x86_64-unknown-linux-gnu
|
cargo build --release --target x86_64-unknown-linux-gnu
|
||||||
mv target/x86_64-unknown-linux-gnu/release/gupaxx .
|
mv target/x86_64-unknown-linux-gnu/release/gupaxx .
|
||||||
tar -cf linux.tar gupaxx
|
cargo build --release --target x86_64-unknown-linux-gnu --features=bundle
|
||||||
|
mv target/x86_64-unknown-linux-gnu/release/gupaxx gupaxx_b
|
||||||
|
tar -cf linux.tar gupaxx gupaxx_b
|
||||||
cargo build --release --target x86_64-pc-windows-gnu
|
cargo build --release --target x86_64-pc-windows-gnu
|
||||||
|
mv target/x86_64-pc-windows-gnu/release/gupaxx.exe .
|
||||||
|
cargo build --release --target x86_64-pc-windows-gnu --features=bundle
|
||||||
|
mv target/x86_64-pc-windows-gnu/release/gupaxx.exe gupaxx_b.exe
|
||||||
|
tar -cf windows.tar gupaxx.exe gupaxx_b.exe
|
||||||
fi
|
fi
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
@ -68,7 +78,7 @@ jobs:
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: windows
|
name: windows
|
||||||
path: target/x86_64-pc-windows-gnu/release/gupaxx.exe
|
path: windows.tar
|
||||||
|
|
||||||
- name: Archive
|
- name: Archive
|
||||||
if: ${{ runner.os == 'macOS' }}
|
if: ${{ runner.os == 'macOS' }}
|
||||||
|
|
|
@ -29,3 +29,14 @@ Status of process for Xmrig use for some information an image of data when the p
|
||||||
The node of xmrig in upstream can not change without a restart of the process.In this fork, the node used by xmrig needs to be updated without restart (using the config HTTP API of xmrig).
|
The node of xmrig in upstream can not change without a restart of the process.In this fork, the node used by xmrig needs to be updated without restart (using the config HTTP API of xmrig).
|
||||||
So Gupaxx need to refresh the value of status tab submenu process for xmrig where before the values could not change without a restart of the process.
|
So Gupaxx need to refresh the value of status tab submenu process for xmrig where before the values could not change without a restart of the process.
|
||||||
The field node from ImgXmrig needs to be moved to PubXvbApi. This value must be updated by xmrig at start and by XvB process at runtime.
|
The field node from ImgXmrig needs to be moved to PubXvbApi. This value must be updated by xmrig at start and by XvB process at runtime.
|
||||||
|
|
||||||
|
## Updates
|
||||||
|
|
||||||
|
A new option in Gupaxx tab advanced will enable bundled updates.
|
||||||
|
The binary included of gupaxx will have default value for bundled updates depending if it is coming from standalone or bundle release.
|
||||||
|
|
||||||
|
Updates from Gupaxx will do the following differently from upstream:
|
||||||
|
- check if using bundled or standalone with state. Update only Gupaxx binary if the latter or xmrig and p2pool from bundle version if the former.
|
||||||
|
- prevent user to run updates twice without restart.
|
||||||
|
- ask the user to restart Gupaxx
|
||||||
|
- do not verify if file p2pool or xmrig exist. (so that the update can create them).
|
||||||
|
|
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -2075,6 +2075,7 @@ dependencies = [
|
||||||
"benri",
|
"benri",
|
||||||
"bounded-vec-deque",
|
"bounded-vec-deque",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
"cfg-if",
|
||||||
"chrono",
|
"chrono",
|
||||||
"derive_more",
|
"derive_more",
|
||||||
"dirs",
|
"dirs",
|
||||||
|
|
|
@ -25,6 +25,7 @@ incremental = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
bundle = []
|
||||||
distro = []
|
distro = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
@ -73,6 +74,7 @@ readable = "0.16"
|
||||||
chrono = {version="0.4.37", default-features=false, features=["clock", "std"]}
|
chrono = {version="0.4.37", default-features=false, features=["clock", "std"]}
|
||||||
enclose = "1.1.8"
|
enclose = "1.1.8"
|
||||||
bounded-vec-deque = {version="0.1.1", default-features=false}
|
bounded-vec-deque = {version="0.1.1", default-features=false}
|
||||||
|
cfg-if = "1.0"
|
||||||
# Unix dependencies
|
# Unix dependencies
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
eframe = { version = "0.27.2", features = ["wgpu"] }
|
eframe = { version = "0.27.2", features = ["wgpu"] }
|
||||||
|
|
|
@ -23,6 +23,10 @@ The rendering of Tabs has been modified so that the minimum stated size of the w
|
||||||
|
|
||||||
The rendering of the benchmark table and of console outputs were calculating every line at the same time. Now it only renders what you see. It is a significant improvement for your processor, and you can feel the difference if it is not very powerful.
|
The rendering of the benchmark table and of console outputs were calculating every line at the same time. Now it only renders what you see. It is a significant improvement for your processor, and you can feel the difference if it is not very powerful.
|
||||||
|
|
||||||
|
Updates from Gupaxx does not retrieve xmrig and p2pool from upstream anymore, but use versions in the bundled version. This modification prevent bad surprise (see #3).
|
||||||
|
|
||||||
|
It also allows advanced users to use your their own version of p2pool and xmrig.The standalone version of Gupaxx will not replace them.
|
||||||
|
|
||||||
## Security
|
## Security
|
||||||
|
|
||||||
With the upgrade of dependencies, cargo audit show no warnings instead of 5 vulnerabilities and 4 allowed warnings for Gupax.
|
With the upgrade of dependencies, cargo audit show no warnings instead of 5 vulnerabilities and 4 allowed warnings for Gupax.
|
||||||
|
|
|
@ -49,7 +49,7 @@ impl Gupax {
|
||||||
ui.add_sized([width, button], Button::new("Updates are disabled"))
|
ui.add_sized([width, button], Button::new("Updates are disabled"))
|
||||||
.on_disabled_hover_text(DISTRO_NO_UPDATE);
|
.on_disabled_hover_text(DISTRO_NO_UPDATE);
|
||||||
#[cfg(not(feature = "distro"))]
|
#[cfg(not(feature = "distro"))]
|
||||||
ui.set_enabled(!updating);
|
ui.set_enabled(!updating && *lock!(restart) == Restart::No);
|
||||||
#[cfg(not(feature = "distro"))]
|
#[cfg(not(feature = "distro"))]
|
||||||
if ui
|
if ui
|
||||||
.add_sized([width, button], Button::new("Check for updates"))
|
.add_sized([width, button], Button::new("Check for updates"))
|
||||||
|
@ -78,7 +78,7 @@ impl Gupax {
|
||||||
debug!("Gupaxx Tab | Rendering bool buttons");
|
debug!("Gupaxx Tab | Rendering bool buttons");
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.group(|ui| {
|
ui.group(|ui| {
|
||||||
let width = (size.x - SPACE * 12.0) / 6.0;
|
let width = (size.x - SPACE * 15.0) / 7.0;
|
||||||
let height = if self.simple {
|
let height = if self.simple {
|
||||||
size.y / 10.0
|
size.y / 10.0
|
||||||
} else {
|
} else {
|
||||||
|
@ -89,6 +89,9 @@ impl Gupax {
|
||||||
ui.add_sized(size, Checkbox::new(&mut self.auto_update, "Auto-Update"))
|
ui.add_sized(size, Checkbox::new(&mut self.auto_update, "Auto-Update"))
|
||||||
.on_hover_text(GUPAX_AUTO_UPDATE);
|
.on_hover_text(GUPAX_AUTO_UPDATE);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
|
ui.add_sized(size, Checkbox::new(&mut self.bundled, "Bundle"))
|
||||||
|
.on_hover_text(GUPAX_BUNDLED_UPDATE);
|
||||||
|
ui.separator();
|
||||||
ui.add_sized(size, Checkbox::new(&mut self.auto_p2pool, "Auto-P2Pool"))
|
ui.add_sized(size, Checkbox::new(&mut self.auto_p2pool, "Auto-P2Pool"))
|
||||||
.on_hover_text(GUPAX_AUTO_P2POOL);
|
.on_hover_text(GUPAX_AUTO_P2POOL);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
|
@ -100,13 +103,13 @@ impl Gupax {
|
||||||
ui.separator();
|
ui.separator();
|
||||||
ui.add_sized(
|
ui.add_sized(
|
||||||
size,
|
size,
|
||||||
Checkbox::new(&mut self.ask_before_quit, "Ask before quit"),
|
Checkbox::new(&mut self.ask_before_quit, "Confirm quit"),
|
||||||
)
|
)
|
||||||
.on_hover_text(GUPAX_ASK_BEFORE_QUIT);
|
.on_hover_text(GUPAX_ASK_BEFORE_QUIT);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
ui.add_sized(
|
ui.add_sized(
|
||||||
size,
|
size,
|
||||||
Checkbox::new(&mut self.save_before_quit, "Save before quit"),
|
Checkbox::new(&mut self.save_before_quit, "Save on quit"),
|
||||||
)
|
)
|
||||||
.on_hover_text(GUPAX_SAVE_BEFORE_QUIT);
|
.on_hover_text(GUPAX_SAVE_BEFORE_QUIT);
|
||||||
});
|
});
|
||||||
|
|
|
@ -15,13 +15,12 @@
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
use crate::components::update::Pkg;
|
use crate::components::update::get_user_agent;
|
||||||
use crate::{constants::*, macros::*};
|
use crate::{constants::*, macros::*};
|
||||||
use egui::Color32;
|
use egui::Color32;
|
||||||
use log::*;
|
use log::*;
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
use reqwest::{Client, RequestBuilder};
|
use reqwest::{Client, RequestBuilder};
|
||||||
|
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
|
@ -384,7 +383,7 @@ impl Ping {
|
||||||
let client = Client::new();
|
let client = Client::new();
|
||||||
|
|
||||||
// Random User Agent
|
// Random User Agent
|
||||||
let rand_user_agent = Pkg::get_user_agent();
|
let rand_user_agent = get_user_agent();
|
||||||
// Handle vector
|
// Handle vector
|
||||||
let mut handles = Vec::with_capacity(REMOTE_NODE_LENGTH);
|
let mut handles = Vec::with_capacity(REMOTE_NODE_LENGTH);
|
||||||
let node_vec = arc_mut!(Vec::with_capacity(REMOTE_NODE_LENGTH));
|
let node_vec = arc_mut!(Vec::with_capacity(REMOTE_NODE_LENGTH));
|
||||||
|
@ -486,8 +485,7 @@ mod test {
|
||||||
use crate::components::node::{
|
use crate::components::node::{
|
||||||
format_ip, REMOTE_NODES, REMOTE_NODE_LENGTH, REMOTE_NODE_MAX_CHARS,
|
format_ip, REMOTE_NODES, REMOTE_NODE_LENGTH, REMOTE_NODE_MAX_CHARS,
|
||||||
};
|
};
|
||||||
use crate::components::update::Pkg;
|
use crate::components::update::get_user_agent;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn validate_node_ips() {
|
fn validate_node_ips() {
|
||||||
for (ip, location, rpc, zmq) in REMOTE_NODES {
|
for (ip, location, rpc, zmq) in REMOTE_NODES {
|
||||||
|
@ -524,7 +522,7 @@ mod test {
|
||||||
let client = Client::new();
|
let client = Client::new();
|
||||||
|
|
||||||
// Random User Agent
|
// Random User Agent
|
||||||
let rand_user_agent = Pkg::get_user_agent();
|
let rand_user_agent = get_user_agent();
|
||||||
|
|
||||||
// Only fail this test if >50% of nodes fail.
|
// Only fail this test if >50% of nodes fail.
|
||||||
const HALF_REMOTE_NODES: usize = REMOTE_NODE_LENGTH / 2;
|
const HALF_REMOTE_NODES: usize = REMOTE_NODE_LENGTH / 2;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -191,6 +191,7 @@ pub struct Gupax {
|
||||||
pub selected_scale: f32,
|
pub selected_scale: f32,
|
||||||
pub tab: Tab,
|
pub tab: Tab,
|
||||||
pub ratio: Ratio,
|
pub ratio: Ratio,
|
||||||
|
pub bundled: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Eq, PartialEq, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Eq, PartialEq, Debug, Deserialize, Serialize)]
|
||||||
|
@ -288,6 +289,10 @@ impl Default for Gupax {
|
||||||
selected_scale: APP_DEFAULT_SCALE,
|
selected_scale: APP_DEFAULT_SCALE,
|
||||||
ratio: Ratio::Width,
|
ratio: Ratio::Width,
|
||||||
tab: Tab::Xvb,
|
tab: Tab::Xvb,
|
||||||
|
#[cfg(feature = "bundle")]
|
||||||
|
bundled: true,
|
||||||
|
#[cfg(not(feature = "bundle"))]
|
||||||
|
bundled: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ mod test {
|
||||||
selected_scale = 0.0
|
selected_scale = 0.0
|
||||||
tab = "About"
|
tab = "About"
|
||||||
ratio = "Width"
|
ratio = "Width"
|
||||||
|
bundled = false
|
||||||
|
|
||||||
[status]
|
[status]
|
||||||
submenu = "P2pool"
|
submenu = "P2pool"
|
||||||
|
|
|
@ -141,7 +141,7 @@ pub fn get_exe_dir() -> Result<String, std::io::Error> {
|
||||||
#[cold]
|
#[cold]
|
||||||
#[inline(never)]
|
#[inline(never)]
|
||||||
pub fn clean_dir() -> Result<(), anyhow::Error> {
|
pub fn clean_dir() -> Result<(), anyhow::Error> {
|
||||||
let regex = Regex::new("^gupax_update_[A-Za-z0-9]{10}$").unwrap();
|
let regex = Regex::new("^gupaxx_update_[A-Za-z0-9]{10}$").unwrap();
|
||||||
for entry in std::fs::read_dir(get_exe_dir()?)? {
|
for entry in std::fs::read_dir(get_exe_dir()?)? {
|
||||||
let entry = entry?;
|
let entry = entry?;
|
||||||
if !entry.path().is_dir() {
|
if !entry.path().is_dir() {
|
||||||
|
|
|
@ -264,8 +264,10 @@ pub const STATUS_SUBMENU_OTHER_BENCHMARKS: &str =
|
||||||
|
|
||||||
// Gupaxx
|
// Gupaxx
|
||||||
pub const GUPAX_UPDATE: &str =
|
pub const GUPAX_UPDATE: &str =
|
||||||
"Check for updates on Gupaxx, P2Pool, and XMRig via GitHub's API and upgrade automatically";
|
"Check for updates on Gupaxx and bundled versions of P2Pool and XMRig via GitHub's API and upgrade automatically";
|
||||||
pub const GUPAX_AUTO_UPDATE: &str = "Automatically check for updates at startup";
|
pub const GUPAX_AUTO_UPDATE: &str = "Automatically check for updates at startup";
|
||||||
|
pub const GUPAX_BUNDLED_UPDATE: &str =
|
||||||
|
"Update XMRig and P2Pool with bundled versions of latest Gupaxx. It will replace any present xmrig and p2pool binary in their specified path.";
|
||||||
pub const GUPAX_SHOULD_RESTART: &str =
|
pub const GUPAX_SHOULD_RESTART: &str =
|
||||||
"Gupaxx was updated. A restart is recommended but not required";
|
"Gupaxx was updated. A restart is recommended but not required";
|
||||||
// #[cfg(not(target_os = "macos"))]
|
// #[cfg(not(target_os = "macos"))]
|
||||||
|
|
Loading…
Reference in a new issue