From aebb38df6149f702d55f2f55256eb6d9ad5095a5 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 18:39:19 -0600 Subject: [PATCH 01/32] =?UTF-8?q?First=20Rust=20rewrite=20release!=20?= =?UTF-8?q?=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 8 + Cargo.lock | 758 ++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 10 + README.md | 36 ++- docs/development.md | 47 +++ flake.lock | 96 ++++++ flake.nix | 40 +++ shell.nix | 29 ++ src/main.rs | 380 ++++++++++++++++++++++ 9 files changed, 1389 insertions(+), 15 deletions(-) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 docs/development.md create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 shell.nix create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d1ff78e --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Rust/Carge +/target + +# Nix +result + +# Main nix files +/data diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..5a5e4e6 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,758 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "bindgen" +version = "0.66.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.100", + "which", +] + +[[package]] +name = "bitflags" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" + +[[package]] +name = "cc" +version = "1.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +dependencies = [ + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "curl" +version = "0.4.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9fb4d13a1be2b58f14d60adba57c9834b78c62fd86c3e76a148f732686e9265" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.80+curl-8.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55f7df2eac63200c3ab25bde3b2268ef2ee56af3d238e76d61f01c3c49bff734" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.52.0", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "embed-doc-image" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af36f591236d9d822425cb6896595658fa558fcebf5ee8accac1d4b92c47166e" +dependencies = [ + "base64", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "enum-iterator" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c280b9e6b3ae19e152d8e31cf47f18389781e119d4013a2a2bb0180e5facc635" +dependencies = [ + "enum-iterator-derive", +] + +[[package]] +name = "enum-iterator-derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "indexmap" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "io-kit-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2d4429acc1deff0fbdece0325b4997bdb02b2c245ab7023fd5deca0f6348de" +dependencies = [ + "core-foundation-sys", + "mach2", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.171" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" + +[[package]] +name = "libloading" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +dependencies = [ + "cfg-if", + "windows-targets", +] + +[[package]] +name = "libz-sys" +version = "1.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "log" +version = "0.4.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "nyxi-installer" +version = "2.0.0" +dependencies = [ + "curl", + "nix", + "rsfdisk", + "sys_metrics", +] + +[[package]] +name = "once_cell" +version = "1.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "prettyplease" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +dependencies = [ + "proc-macro2", + "syn 2.0.100", +] + +[[package]] +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rsfdisk" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b3cacc1af2ca434035b8c885b1ef4d64a663581df95134653feba07fccae0c" +dependencies = [ + "embed-doc-image", + "enum-iterator", + "libc", + "log", + "num_enum", + "once_cell", + "pkg-config", + "rsfdisk-sys", + "thiserror", + "typed-builder", +] + +[[package]] +name = "rsfdisk-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39b186475d9df76290bba3de5196eeed64b95e77861095ea8b244f962f47575" +dependencies = [ + "bindgen", + "cc", + "pkg-config", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "socket2" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sys_metrics" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9b266b80f59f86e2e1e0a4938e316e32c3730d94a749f236305152279f77484" +dependencies = [ + "core-foundation-sys", + "glob", + "io-kit-sys", + "lazy_static", + "libc", + "mach", + "serde", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" + +[[package]] +name = "toml_edit" +version = "0.22.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typed-builder" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9d30e3a08026c78f246b173243cf07b3696d274debd26680773b6773c2afc7" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c36781cc0e46a83726d9879608e4cf6c2505237e263a8eb8c24502989cfdb28" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +dependencies = [ + "memchr", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..69aee11 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "nyxi-installer" +version = "2.0.0" +edition = "2021" + +[dependencies] +curl = "0.4.47" +nix = { version = "0.29.0", features = ["mount"] } +rsfdisk = "0.1.0" +sys_metrics = "0.2.7" diff --git a/README.md b/README.md index 4a67414..fd5496f 100644 --- a/README.md +++ b/README.md @@ -2,30 +2,36 @@ This installer is named after my doggo Onyxia. -## Starting the Installer - -```bash -sh <(curl -L https://gitlab.com/ahoneybun/nyxi-installer/-/raw/main/install.sh) -``` - At the core of this installer it does the following: -- Partition the drive of your choice using Disko +- Partition the drive of your choice using the `rsfdisk` crate. - Uses `flake.nix` to set certain modules depending on the system like nixos-hardware for the Pinebook Pro - - Uses home-manager to manage settings for GNOME (current desktop) and other applications for my user - Installs a base of NixOS (`configuration.nix`) nix files are from [this repo](https://gitlab.com/ahoneybun/nix-configs/) but that can be changed as needed. -Tested on the following drives: -- SATA -- NVMe - -Tested on the following architectures: -- x86_64 - This sets the hashedPassword to my own so you will need to update it to match your own as well as the username. I created the hash with this command: ```bash mkpasswd -m sha-512 ``` + +# Usage + +1. Boot from a live disk of NixOS (ideally the minimal image) +2. Connect to network +3. Download from the releases page using curl + +```bash +curl $PATH +``` + +## Older Bash installer + +```bash +sh <(curl -L https://gitlab.com/ahoneybun/nyxi-installer/-/raw/main/install.sh) +``` + +# Development + +![docs/development](https://gitlab.com/ahoneybun/nyxi-installer/-/blob/rust-rewrite/docs/development.md) diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 0000000..5808ad7 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,47 @@ +# Development + +## Clone the repository + +```bash +git clone https://gitlab.com/ahoneybun/nyxi-installer.git +``` + +## Enter the repository that you just cloned + +```bash +cd nyxi-installer +``` + +## Enter nix-shell + +This is if you are already running NixOS or using the `nix` packagemanager on your system where development will take place. This will install the needed system packages, set environment variables and such for development. + +```bash +nix-shell +``` + +## Flakes + +If you have flakes enabled you can use `nix develop` instead. + +```bash +nix develop +``` + +## Ubuntu + +Install these packages for developing using `apt`. + +```bash +sudo apt install build-essential pkg-config libcurl4-openssl-dev libfdisk-dev +``` + +## Building and testing + +You can use normal `cargo` commands like: + +- `cargo test` +- `cargo build` +- `cargo run` + +**NOTE:** you will need to build the program and run it with `sudo` currently so `cargo run` is not the best for testing. diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..1d51da6 --- /dev/null +++ b/flake.lock @@ -0,0 +1,96 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "naersk": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1743800763, + "narHash": "sha256-YFKV+fxEpMgP5VsUcM6Il28lI0NlpM7+oB1XxbBAYCw=", + "owner": "nix-community", + "repo": "naersk", + "rev": "ed0232117731a4c19d3ee93aa0c382a8fe754b01", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "naersk", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "naersk": "naersk", + "nixpkgs": "nixpkgs_2" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..b73e439 --- /dev/null +++ b/flake.nix @@ -0,0 +1,40 @@ +{ + description = "Flake to build and develop Nyxi"; + + inputs = { + flake-utils.url = "github:numtide/flake-utils"; + naersk.url = "github:nix-community/naersk"; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + }; + + outputs = { self, flake-utils, naersk, nixpkgs }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = (import nixpkgs) { + inherit system; + }; + + naersk' = pkgs.callPackage naersk {}; + + # Setting variables that everything uses + LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; + CLANG_PATH = "${pkgs.llvmPackages.clang}/bin/clang"; + + in rec { + # For `nix build` & `nix run`: + defaultPackage = naersk'.buildPackage { + inherit LIBCLANG_PATH CLANG_PATH; + buildInputs = with pkgs; [ pkg-config openssl ]; + nativeBuildInputs = with pkgs; [ util-linux.dev ]; + src = ./.; + }; + + # For `nix develop` (optional, can be skipped): + devShell = pkgs.mkShell { + inherit LIBCLANG_PATH CLANG_PATH; + buildInputs = with pkgs; [ pkg-config openssl ]; + nativeBuildInputs = with pkgs; [ rustc cargo util-linux.dev ]; + }; + } + ); +} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..7f9e443 --- /dev/null +++ b/shell.nix @@ -0,0 +1,29 @@ +{ pkgs ? import {} }: + + pkgs.mkShell { + buildInputs = with pkgs; [ + # Rust + cargo + rustc + + # Compiler + gnumake + clang + llvmPackages.libclang + llvmPackages.clang + + # System + btrfs-progs + e2fsprogs + openssl + pkg-config + util-linux + ]; + + shellHook = '' + export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib" + export CLANG_PATH="${pkgs.llvmPackages.clang}/bin/clang" + export RUST_BACKTRACE=1 + echo "We're ready to make some Rust!" + ''; +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..4b9f9e9 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,380 @@ +use rsfdisk::core::partition::{Guid, Partition, PartitionKind}; +use rsfdisk::core::partition_table::PartitionTableKind; +use rsfdisk::fdisk::Fdisk; +use std::fs::File; +use std::io; +use std::io::Write; +use std::path::Path; +use std::process::{Command, Stdio}; +use sys_metrics::disks; + +use curl::easy::Easy; +use nix::mount::{mount, MsFlags}; + +fn format_drive(drive_name: &str) -> rsfdisk::Result<()> { + let mut disk = Fdisk::builder() + .assign_device(drive_name) + .enable_read_write() + .wipe_device_metadata() + .build()?; + + disk.partition_table_create(PartitionTableKind::GPT)?; + + let partition_type = PartitionKind::builder().guid(Guid::EfiSystem).build()?; + + let boot = Partition::builder() + .partition_type(partition_type) + .name("EFI") + //Assuming 512 bytes per sector, 2_097_152 sectors <=> 1 GiB. + .size_in_sectors(2_097_152) + .build()?; + + let _ = disk.partition_add(boot)?; + + let partition_type = PartitionKind::builder() + .guid(Guid::LinuxRootx86_64) + .build()?; + + let root = Partition::builder() + .partition_type(partition_type) + .name("Root") + .build()?; + + let _ = disk.partition_add(root)?; + + disk.partition_table_write_to_disk()?; + + Ok(()) +} + +fn format_partitions(drive_name: &str) { + let efi_path = format!("{}p1", drive_name); + let root_path = format!("{}p2", drive_name); + + let _efi_partition = Command::new("mkfs.fat") + .arg("-F32") + .arg("-n") + .arg("EFI") + .arg(&efi_path) + .output() + .expect("Failed to format boot partition as FAT32"); + + let _root_partition = Command::new("mkfs.ext4") + .arg(&root_path) + .output() + .expect("Failed to format root partition as ext4"); +} + +fn mount_partitions(drive_name: &str) { + let efi_path = format!("{}p1", drive_name); + let root_path = format!("{}p2", drive_name); + + let root_source = Some(Path::new(&root_path)); + let root_target = Path::new("/mnt"); + + mount( + root_source, + root_target, + Some("ext4"), + MsFlags::empty(), + None::<&[u8]>, + ) + .expect("Failed to mount root partition"); + + // Creates the boot directory in /mnt/boot + let _create_boot_directory = Command::new("mkdir") + .arg("-p") + .arg("/mnt/boot") + .output() + .expect("Failed to create boot directory"); + + let boot_source = Some(Path::new(&efi_path)); + let boot_target = Path::new("/mnt/boot"); + + let _mount_boot = Command::new("mount") + .args(["-t", "vfat"]) + .args(["-o", "umask=0077"]) + .arg(&efi_path) + .arg("/mnt/boot") + .output() + .expect("Failed to mount boot partition"); + + // mount( + // boot_source, + // boot_target, + // Some("vfat"), + // MsFlags::empty(), + // None::<&[u8]>, + // ) + // .expect("Failed to mount boot partition"); +} + +fn grab_flake() { + let mut easy = Easy::new(); + easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/flake.nix") + .unwrap(); + + let mut file = File::create("data/flake.nix").unwrap(); + + { + let mut transfer = easy.transfer(); + transfer + .write_function(|data| { + file.write_all(data).unwrap(); + Ok(data.len()) + }) + .unwrap(); + transfer.perform().unwrap(); + } +} + +fn grab_config() { + let mut easy = Easy::new(); + easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/configuration.nix") + .unwrap(); + + let mut file = File::create("data/configuration.nix").unwrap(); + + { + let mut transfer = easy.transfer(); + transfer + .write_function(|data| { + file.write_all(data).unwrap(); + Ok(data.len()) + }) + .unwrap(); + transfer.perform().unwrap(); + } +} + +fn grab_home() { + let mut easy = Easy::new(); + easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/home.nix") + .unwrap(); + + let mut file = File::create("data/home.nix").unwrap(); + + { + let mut transfer = easy.transfer(); + transfer + .write_function(|data| { + file.write_all(data).unwrap(); + Ok(data.len()) + }) + .unwrap(); + transfer.perform().unwrap(); + } +} + +fn grab_gnome() { + let mut gnome_config = Easy::new(); + gnome_config + .url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/desktops/gnome.nix") + .unwrap(); + + let mut config_file = File::create("data/gnome.nix").unwrap(); + + { + let mut transfer = gnome_config.transfer(); + transfer + .write_function(|data| { + config_file.write_all(data).unwrap(); + Ok(data.len()) + }) + .unwrap(); + transfer.perform().unwrap(); + } +} + +fn main() { + println!("--------------------------------------"); + println!("| Welcome to the Nyxi Installer 2.0! |"); + println!("--------------------------------------"); + println!(""); + + println!("Availble disks for installation:"); + println!("---------------------------------"); + println!(""); + + match disks::get_physical_ioblocks() { + Ok(disk_list) => { + for disk in disk_list { + println!("Disk: {}", disk.device_name); + } + } + Err(_e) => println!("{}", _e), + } + + let mut drive_name = String::new(); + + println!(""); + println!("Use the full drive path such as /dev/nvme0n1 or /dev/sda"); + println!(""); + println!( + "Which drive do we want to use for this installation?: {}", + drive_name + ); + + io::stdin() + .read_line(&mut drive_name) + .expect("Failed to read line"); + + let drive_name = drive_name.trim(); + + // Download nix files + grab_flake(); + grab_config(); + grab_home(); + grab_gnome(); + + // Partitioning the selected drive + let _ = format_drive(drive_name); + + // Formatting the partitions + format_partitions(drive_name); + + // Mounting the partitions + mount_partitions(drive_name); + + // Creates the init nix config in /mnt/etc/nixos + let _nixos_gen_config = Command::new("nixos-generate-config") + .arg("--root") + .arg("/mnt") + .output() + .expect("Failed to execute command"); + + // Copies the nix files to /mnt/etc/nixos/ + let _nix_move = Command::new("mv") + .args([ + "-f", + "data/flake.nix", + "data/configuration.nix", + "data/home.nix", + ]) + .arg("/mnt/etc/nixos") + .output() + .expect("Failed to move nix files over"); + + // Fixes a security issue with boot + let _boot_fix = Command::new("sed") + .arg("-i") + .arg( + r#"/fsType = "vfat"/ { + n + s/\(options = \[.*\)\]/\1"umask=0077 "]/ + }"#, + ) + .arg("/mnt/etc/nixos/hardware-configuration.nix") + .output() + .expect("Failed to apply boot fix"); + + // Host selection + loop { + println!(""); + println!("Host selection:"); + println!("---------------"); + println!(""); + println!("1. Lemur Pro 13 (Garrus)"); + println!("2. Virtual Machine"); + println!("3. Generic"); + println!(""); + + println!("Enter your host for installation:"); + + let mut choice = String::new(); + io::stdin().read_line(&mut choice).unwrap(); + + match choice.trim() { + "1" => { + let mut garrus_config = Easy::new(); + garrus_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/garrus/configuration.nix").unwrap(); + + let mut config_file = File::create("data/garrus.nix").unwrap(); + + { + let mut transfer = garrus_config.transfer(); + transfer + .write_function(|data| { + config_file.write_all(data).unwrap(); + Ok(data.len()) + }) + .unwrap(); + transfer.perform().unwrap(); + } + + // Copies the system nix files to /mnt/etc/nixos/ + let _garrus_nix_copy = Command::new("mv") + .args(["data/garrus.nix", "data/gnome.nix", "/mnt/etc/nixos"]) + .output() + .expect("Failed to copy nix files over"); + + let mut nixos_install = Command::new("nixos-install") + .arg("--flake") + .arg("/mnt/etc/nixos#garrus") + .arg("--no-root-passwd") + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .spawn() + .unwrap(); + + let install_status = nixos_install.wait(); + println!("Exited with status {:?}", install_status); + + break; + } + "2" => { + let mut vm_config = Easy::new(); + vm_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/vm/configuration.nix").unwrap(); + + let mut config_file = File::create("data/vm.nix").unwrap(); + + { + let mut transfer = vm_config.transfer(); + transfer + .write_function(|data| { + config_file.write_all(data).unwrap(); + Ok(data.len()) + }) + .unwrap(); + transfer.perform().unwrap(); + } + + // Copies the system nix files to /mnt/etc/nixos/ + let _garrus_nix_copy = Command::new("mv") + .args(["data/vm.nix", "/mnt/etc/nixos"]) + .output() + .expect("Failed to copy nix files over"); + + let mut nixos_install = Command::new("nixos-install") + .arg("--flake") + .arg("/mnt/etc/nixos#vm") + .arg("--no-root-passwd") + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .spawn() + .unwrap(); + + let install_status = nixos_install.wait(); + println!("Exited with status {:?}", install_status); + + break; + } + "3" => { + let mut nixos_install = Command::new("nixos-install") + .arg("--flake") + .arg("/mnt/etc/nixos#nixos") + .arg("--no-root-passwd") + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .spawn() + .unwrap(); + + let install_status = nixos_install.wait(); + println!("Exited with status {:?}", install_status); + + break; + } + _ => println!("Invalid choice, try again."), + } + } +} From 526f90626652ef12587d94cc1a4b6dcfc04601ee Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 18:43:39 -0600 Subject: [PATCH 02/32] comment out variable to fix warning --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4b9f9e9..7638f49 100644 --- a/src/main.rs +++ b/src/main.rs @@ -88,8 +88,8 @@ fn mount_partitions(drive_name: &str) { .output() .expect("Failed to create boot directory"); - let boot_source = Some(Path::new(&efi_path)); - let boot_target = Path::new("/mnt/boot"); + //let boot_source = Some(Path::new(&efi_path)); + //let boot_target = Path::new("/mnt/boot"); let _mount_boot = Command::new("mount") .args(["-t", "vfat"]) From 3f0a2b17029ad117be0018bc710a3c20ed84811b Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 18:52:08 -0600 Subject: [PATCH 03/32] testing ci --- .gitlab-ci.yml | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 776bc61..9126f09 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,12 +1,27 @@ -# You can override the included template(s) by including variable overrides -# SAST customization: https://docs.gitlab.com/ee/user/application_security/sast/#customizing-the-sast-settings -# Secret Detection customization: https://docs.gitlab.com/ee/user/application_security/secret_detection/#customizing-settings -# Dependency Scanning customization: https://docs.gitlab.com/ee/user/application_security/dependency_scanning/#customizing-the-dependency-scanning-settings -# Note that environment variables can be set in several places -# See https://docs.gitlab.com/ee/ci/variables/#cicd-variable-precedence -stages: -- test -sast: - stage: test -include: -- template: Security/SAST.gitlab-ci.yml +image: "rust:latest" + +variables: + # move cargo data into the project directory so it can be cached + CARGO_HOME: ${CI_PROJECT_DIR}/.cargo + # treat compiler warnings as errors (in clippy, when running tests, etc.) + RUSTFLAGS: -Dwarnings + +default: + # cancel the job if a newer pipeline starts for the same MR or branch + interruptible: true + cache: + # use the git branch or tag as cache key, so the cache will be + # shared among CI runs for the same branch or tag + key: ${CI_COMMIT_REF_SLUG} + # we cache .cargo/ and target/, which effectively enables + # incremental builds across different executions of the CI + # for the same branch or the same merge request + paths: + - .cargo + - target + +# a format check is run in parallel with the rest +cargo:fmt: + script: + - rustup component add rustfmt + - cargo fmt --check From 62f1c96f5b126caf9806b7e46086ef5b82e16abf Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 19:02:56 -0600 Subject: [PATCH 04/32] testing ci --- .gitlab-ci.yml | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9126f09..f9a6bb9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,27 +1,15 @@ image: "rust:latest" -variables: - # move cargo data into the project directory so it can be cached - CARGO_HOME: ${CI_PROJECT_DIR}/.cargo - # treat compiler warnings as errors (in clippy, when running tests, etc.) - RUSTFLAGS: -Dwarnings - -default: - # cancel the job if a newer pipeline starts for the same MR or branch - interruptible: true - cache: - # use the git branch or tag as cache key, so the cache will be - # shared among CI runs for the same branch or tag - key: ${CI_COMMIT_REF_SLUG} - # we cache .cargo/ and target/, which effectively enables - # incremental builds across different executions of the CI - # for the same branch or the same merge request - paths: - - .cargo - - target - -# a format check is run in parallel with the rest -cargo:fmt: +build-job: + stage: build + image: ubuntu:22.04 + needs: + - job: tests-job + - job: prepare-job + artifacts: true script: - - rustup component add rustfmt - - cargo fmt --check + - echo "======== BUILD JOB ========" + - cargo build --release + artifacts: + paths: + - target/release/nyxi-installer From 93e76db0eb0933673d28be9375eb815d50b15600 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 19:05:10 -0600 Subject: [PATCH 05/32] testing ci --- .gitlab-ci.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f9a6bb9..24df212 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,22 @@ image: "rust:latest" +tests-job: + stage: test + image: rust + script: + - echo "======== TESTS JOB ========" + - cargo test + +prepare-job: + stage: prepare + image: rust + rules: + - if: $CI_COMMIT_TAG + when: never # Do not run this job when a tag is created manually + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch + script: + - echo "======== PREPARE JOB ========" + build-job: stage: build image: ubuntu:22.04 From ef2be5c559099ca7ae2c8436244a727c365daf60 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 19:10:43 -0600 Subject: [PATCH 06/32] mario --- .gitlab-ci.yml | 39 +++++++++------------------------------ 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 24df212..d81deae 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,32 +1,11 @@ -image: "rust:latest" - -tests-job: - stage: test - image: rust +run_test: + image: rust:latest + before_script: + - rustup --version + - rustc -vV + - rustup component add clippy + - rustup component add rustfmt script: - - echo "======== TESTS JOB ========" + - cargo clippy -- --deny clippy::pedantic + - cargo fmt --all -- --check - cargo test - -prepare-job: - stage: prepare - image: rust - rules: - - if: $CI_COMMIT_TAG - when: never # Do not run this job when a tag is created manually - - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch - script: - - echo "======== PREPARE JOB ========" - -build-job: - stage: build - image: ubuntu:22.04 - needs: - - job: tests-job - - job: prepare-job - artifacts: true - script: - - echo "======== BUILD JOB ========" - - cargo build --release - artifacts: - paths: - - target/release/nyxi-installer From e54dba7840f5da003971e0cc95122920061d1dbe Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 19:16:47 -0600 Subject: [PATCH 07/32] add fdisk for docker --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d81deae..e6b37d9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,6 +5,7 @@ run_test: - rustc -vV - rustup component add clippy - rustup component add rustfmt + - apt install -y fdisk script: - cargo clippy -- --deny clippy::pedantic - cargo fmt --all -- --check From 1631730a88f1d19eca2c7cf638eb377efd66dc52 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 19:19:11 -0600 Subject: [PATCH 08/32] add fdisk for docker --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e6b37d9..a7c5612 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,7 @@ run_test: - rustc -vV - rustup component add clippy - rustup component add rustfmt - - apt install -y fdisk + - apt install -y libfdisk-dev script: - cargo clippy -- --deny clippy::pedantic - cargo fmt --all -- --check From c2d803c553cfe8d79a7b38566da73573e69f850d Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 19:19:11 -0600 Subject: [PATCH 09/32] CI work --- .gitlab-ci.yml | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e6b37d9..6daa052 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,12 +1,28 @@ -run_test: +stages: + - test + - build + - deploy-prod + +test: + stage: test image: rust:latest before_script: - - rustup --version - - rustc -vV - - rustup component add clippy - - rustup component add rustfmt - - apt install -y fdisk + - apt update -m + - apt install -y libfdisk-dev libclang-19-dev script: - - cargo clippy -- --deny clippy::pedantic - - cargo fmt --all -- --check - - cargo test + - cargo test --verbose + +build: + stage: build + image: rust:latest + before_script: + - apt update -m + - apt install -y libfdisk-dev libclang-19-dev + script: + - cargo build --verbose + +deploy-prod: + stage: deploy + script: + - echo "Let's launch!" + environment: production From 469d3820e28d4f1689b005af60c29e1ee6408df5 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 19:59:58 -0600 Subject: [PATCH 10/32] fix --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6daa052..b4e6278 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ stages: - test - build - - deploy-prod + - deploy test: stage: test @@ -21,8 +21,8 @@ build: script: - cargo build --verbose -deploy-prod: - stage: deploy +deploy: + stage: deploy-prod script: - echo "Let's launch!" environment: production From 3537cce31d2e663f33eb0ab709ea8db6101d6f8b Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 20:00:35 -0600 Subject: [PATCH 11/32] fix --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b4e6278..3242832 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,7 +22,7 @@ build: - cargo build --verbose deploy: - stage: deploy-prod + stage: deploy script: - echo "Let's launch!" environment: production From 563cfda91d792bb90ebe7e8a876acddbfb8b007d Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 20:08:48 -0600 Subject: [PATCH 12/32] remove deploy and testing artifacts --- .gitlab-ci.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3242832..46ba0c0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,9 +20,6 @@ build: - apt install -y libfdisk-dev libclang-19-dev script: - cargo build --verbose - -deploy: - stage: deploy - script: - - echo "Let's launch!" - environment: production + artifacts: + paths: + - builds/ahoneybun/nyxi-installer From bef700b7fc542b84005634dfb3189c0c2adeac8d Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 20:11:03 -0600 Subject: [PATCH 13/32] remove deploy and testing artifacts --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 46ba0c0..ac00656 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,5 +21,5 @@ build: script: - cargo build --verbose artifacts: - paths: + paths: - builds/ahoneybun/nyxi-installer From 99aca9a464b3765a937fdcedd62d4c140cfac40f Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 20:14:48 -0600 Subject: [PATCH 14/32] testing artifacts --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ac00656..8738ddf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,4 +22,4 @@ build: - cargo build --verbose artifacts: paths: - - builds/ahoneybun/nyxi-installer + - /builds/ahoneybun/nyxi-installer From 562f0dac53dbad71c6f59ff319e74f2988a93d15 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 20:20:45 -0600 Subject: [PATCH 15/32] building release version and upload --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8738ddf..bab0665 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,7 +19,7 @@ build: - apt update -m - apt install -y libfdisk-dev libclang-19-dev script: - - cargo build --verbose + - cargo build --release --verbose artifacts: paths: - - /builds/ahoneybun/nyxi-installer + - /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer From aaeb2136a9a0890c3abafc0a1cba95fc64f76e34 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Wed, 23 Apr 2025 20:30:09 -0600 Subject: [PATCH 16/32] chmod the build --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bab0665..bd0d5af 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,6 @@ stages: - test - build - - deploy test: stage: test @@ -20,6 +19,7 @@ build: - apt install -y libfdisk-dev libclang-19-dev script: - cargo build --release --verbose + - chmod +x /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer artifacts: paths: - /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer From a6941102a45a12562f035c06b6dc17826fe34739 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:06:20 -0600 Subject: [PATCH 17/32] testing upload and release --- .gitlab-ci.yml | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bd0d5af..d029b17 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,11 @@ stages: - test - build + - upload + - release + +variables: + PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/nyxi-installer/${CI_COMMIT_TAG}" test: stage: test @@ -18,8 +23,27 @@ build: - apt update -m - apt install -y libfdisk-dev libclang-19-dev script: - - cargo build --release --verbose + - cargo build --release + - mkdir bin + - mv /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer /bin/nyxi-installer - chmod +x /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer + cache: + paths: + - target/release/ artifacts: - paths: - - /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer + paths: + - bin + +upload: + stage: upload + image: curlimages/curl:latest + rules: + - if: $CI_COMMIT_TAG + script: + - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/nyxi-installer ${PACKAGE_REGISTRY_URL}/nyxi-installer' + +release: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + script: + - 'release-cli create --name "nyxi-installer" --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}"' From 1a0de19932150827ada66b847bc1cfe5a2659dd5 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:11:43 -0600 Subject: [PATCH 18/32] fix chmod --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d029b17..5b8e510 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,7 +26,7 @@ build: - cargo build --release - mkdir bin - mv /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer /bin/nyxi-installer - - chmod +x /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer + - chmod +x /bin/nyxi-installer cache: paths: - target/release/ From e6475f738caa89654477f8ef81dce47687b04712 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:19:09 -0600 Subject: [PATCH 19/32] add missing tag-name --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5b8e510..1b9ed98 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -46,4 +46,4 @@ release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest script: - - 'release-cli create --name "nyxi-installer" --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}"' + - 'release-cli create --name "nyxi-installer" --tag-name "v${MAJOR}.${MINOR}.${REVISION}" --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}"' From 55d0ea77d9dbe1a34b7c8a1f129d89b1fe1549e2 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:25:19 -0600 Subject: [PATCH 20/32] fix tag-name --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1b9ed98..caa1849 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -46,4 +46,4 @@ release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest script: - - 'release-cli create --name "nyxi-installer" --tag-name "v${MAJOR}.${MINOR}.${REVISION}" --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}"' + - 'release-cli create --name "nyxi-installer" --tag-name $CI_COMMIT_TAG --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}"' From 45cedd2dc1677515239f12d0b71689f7c996b6b5 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:34:08 -0600 Subject: [PATCH 21/32] fix tag-name --- .gitlab-ci.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index caa1849..1de163c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,22 +28,22 @@ build: - mv /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer /bin/nyxi-installer - chmod +x /bin/nyxi-installer cache: - paths: - - target/release/ + paths: + - target/release/ artifacts: - paths: - - bin + paths: + - bin upload: - stage: upload - image: curlimages/curl:latest - rules: - - if: $CI_COMMIT_TAG - script: - - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/nyxi-installer ${PACKAGE_REGISTRY_URL}/nyxi-installer' + stage: upload + image: curlimages/curl:latest + rules: + - if: $CI_COMMIT_TAG + script: + - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/nyxi-installer ${PACKAGE_REGISTRY_URL}/nyxi-installer' release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest script: - - 'release-cli create --name "nyxi-installer" --tag-name $CI_COMMIT_TAG --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}"' + - release-cli create --name "nyxi-installer" --tag-name $CI_COMMIT_TAG --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}" From 129ef355c89c5599a7bf30f7898f13f7f72fa795 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:39:38 -0600 Subject: [PATCH 22/32] fix tag-name --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1de163c..3e75378 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -46,4 +46,4 @@ release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest script: - - release-cli create --name "nyxi-installer" --tag-name $CI_COMMIT_TAG --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}" + - release-cli create --name "nyxi-installer" --tag-name "the crab strikes" --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}" From 462939f70b74eea2f9a433e6cb78f08215fa64a8 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:46:42 -0600 Subject: [PATCH 23/32] fix tag-name --- .gitlab-ci.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3e75378..6b3936d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -45,5 +45,8 @@ upload: release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest - script: - - release-cli create --name "nyxi-installer" --tag-name "the crab strikes" --assets-link "{\"name\":\"nyxi-installer\", \"url\":\"${PACKAGE_REGISTRY_URL}/nyxi-installer\"}" + rules: + - if: $CI_COMMIT_TAG + release: + tag_name: '$CI_COMMIT_TAG' + description: '$CI_COMMIT_TAG' From dfaba208d83c304517a27c50a43cc38211ff58f0 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:48:11 -0600 Subject: [PATCH 24/32] add script for release --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6b3936d..e6935a2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -47,6 +47,8 @@ release: image: registry.gitlab.com/gitlab-org/release-cli:latest rules: - if: $CI_COMMIT_TAG + script: + - echo "running release_job" release: tag_name: '$CI_COMMIT_TAG' description: '$CI_COMMIT_TAG' From a5475d76da2b5cde7f82e0c33533b7b07b77b780 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 07:57:30 -0600 Subject: [PATCH 25/32] fix upload --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e6935a2..7ec18a9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -40,7 +40,7 @@ upload: rules: - if: $CI_COMMIT_TAG script: - - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/nyxi-installer ${PACKAGE_REGISTRY_URL}/nyxi-installer' + - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file /bin/nyxi-installer ${PACKAGE_REGISTRY_URL}/nyxi-installer' release: stage: release From 010858d4c5ffb41c0f6463d55483de8ce92b044c Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 08:08:01 -0600 Subject: [PATCH 26/32] remove upload --- .gitlab-ci.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7ec18a9..7e53229 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,6 @@ stages: - test - build - - upload - release variables: @@ -34,14 +33,6 @@ build: paths: - bin -upload: - stage: upload - image: curlimages/curl:latest - rules: - - if: $CI_COMMIT_TAG - script: - - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file /bin/nyxi-installer ${PACKAGE_REGISTRY_URL}/nyxi-installer' - release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest From 22eaee4866101c290010226ba03eed8a0d73e6ff Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 08:25:02 -0600 Subject: [PATCH 27/32] more testing --- .gitlab-ci.yml | 87 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 62 insertions(+), 25 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7e53229..3801a8c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,45 +1,82 @@ stages: + - prepare - test - build - release -variables: - PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/nyxi-installer/${CI_COMMIT_TAG}" - -test: +prepare-job: + stage: prepare + image: rust + rules: + - if: $CI_COMMIT_TAG + when: never # Do not run this job when a tag is created manually + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch + script: + - echo "======== PREPARE JOB ========" + - echo "PKG_VERSION=$(awk -F ' = ' '$1 ~ /version/ { gsub(/["]/, "", $2); printf("%s",$2) }' Cargo.toml)" >> variables.env + - echo "PKG_REGISTRY_URL=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic" >> variables.env + - echo $PKG_VERSION + artifacts: + reports: + dotenv: variables.env +test-job: stage: test image: rust:latest - before_script: + script: + - echo "======== TESTS JOB ========" - apt update -m - apt install -y libfdisk-dev libclang-19-dev - script: - cargo test --verbose -build: +build-job: stage: build image: rust:latest - before_script: + script: + - echo "======== BUILD JOB ========" - apt update -m - apt install -y libfdisk-dev libclang-19-dev - script: - cargo build --release - mkdir bin - - mv /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer /bin/nyxi-installer - - chmod +x /bin/nyxi-installer - cache: - paths: - - target/release/ + - mv /builds/ahoneybun/nyxi-installer/target/release/nyxi-installer bin/nyxi-installer-v${PKG_VERSION} artifacts: paths: - - bin + - bin/ -release: - stage: release - image: registry.gitlab.com/gitlab-org/release-cli:latest - rules: - - if: $CI_COMMIT_TAG - script: - - echo "running release_job" - release: - tag_name: '$CI_COMMIT_TAG' - description: '$CI_COMMIT_TAG' +release-job: + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + needs: + - job: prepare-job + artifacts: true + - job: build-job + script: + - echo "======== RELEASE JOB ========" + rules: + - if: $CI_COMMIT_TAG + when: never # Do not run this job when a tag is created manually + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch + release: + tag_name: "v$PKG_VERSION" + description: "NixOS installer in Rust : v$PKG_VERSION" + ref: "$CI_COMMIT_SHA" # The tag is created from the pipeline SHA. + assets: + links: + - name: "v$PKG_VERSION" + url: "${PKG_REGISTRY_URL}/x86_64-unknown-linux-gnu/v${PKG_VERSION}/nyxi-installer" + +upload-job: + stage: release + image: curlimages/curl:latest + needs: + - job: prepare-job + artifacts: true + - job: build-job + artifacts: true + rules: + - if: $CI_COMMIT_TAG + when: never # Do not run this job when a tag is created manually + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch + script: + - echo "======== UPLOAD JOB ========" + - ls -la bin/ + - 'curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/nyxi-installer-v${PKG_VERSION} ${PKG_REGISTRY_URL}/x86_64-unknown-linux-gnu/v${PKG_VERSION}/nyxi-installer' From 6aa6d925f163cc38d85a8b9b577778868bf87f52 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 12:47:12 -0600 Subject: [PATCH 28/32] add version number to release --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3801a8c..0bbca8f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -62,7 +62,7 @@ release-job: assets: links: - name: "v$PKG_VERSION" - url: "${PKG_REGISTRY_URL}/x86_64-unknown-linux-gnu/v${PKG_VERSION}/nyxi-installer" + url: "${PKG_REGISTRY_URL}/x86_64-unknown-linux-gnu/v${PKG_VERSION}/nyxi-installer-v${PKG_VERSION}" upload-job: stage: release From c56acc8a33c70bb5a5953e8db3038cc6d0f78879 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 12:56:56 -0600 Subject: [PATCH 29/32] fix issue with data directory --- src/main.rs | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7638f49..372549f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -114,7 +114,7 @@ fn grab_flake() { easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/flake.nix") .unwrap(); - let mut file = File::create("data/flake.nix").unwrap(); + let mut file = File::create("flake.nix").unwrap(); { let mut transfer = easy.transfer(); @@ -133,7 +133,7 @@ fn grab_config() { easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/configuration.nix") .unwrap(); - let mut file = File::create("data/configuration.nix").unwrap(); + let mut file = File::create("configuration.nix").unwrap(); { let mut transfer = easy.transfer(); @@ -152,7 +152,7 @@ fn grab_home() { easy.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/home.nix") .unwrap(); - let mut file = File::create("data/home.nix").unwrap(); + let mut file = File::create("home.nix").unwrap(); { let mut transfer = easy.transfer(); @@ -172,7 +172,7 @@ fn grab_gnome() { .url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/desktops/gnome.nix") .unwrap(); - let mut config_file = File::create("data/gnome.nix").unwrap(); + let mut config_file = File::create("gnome.nix").unwrap(); { let mut transfer = gnome_config.transfer(); @@ -245,12 +245,7 @@ fn main() { // Copies the nix files to /mnt/etc/nixos/ let _nix_move = Command::new("mv") - .args([ - "-f", - "data/flake.nix", - "data/configuration.nix", - "data/home.nix", - ]) + .args(["-f", "flake.nix", "configuration.nix", "home.nix"]) .arg("/mnt/etc/nixos") .output() .expect("Failed to move nix files over"); @@ -289,7 +284,7 @@ fn main() { let mut garrus_config = Easy::new(); garrus_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/garrus/configuration.nix").unwrap(); - let mut config_file = File::create("data/garrus.nix").unwrap(); + let mut config_file = File::create("garrus.nix").unwrap(); { let mut transfer = garrus_config.transfer(); @@ -304,7 +299,7 @@ fn main() { // Copies the system nix files to /mnt/etc/nixos/ let _garrus_nix_copy = Command::new("mv") - .args(["data/garrus.nix", "data/gnome.nix", "/mnt/etc/nixos"]) + .args(["garrus.nix", "gnome.nix", "/mnt/etc/nixos"]) .output() .expect("Failed to copy nix files over"); @@ -326,7 +321,7 @@ fn main() { let mut vm_config = Easy::new(); vm_config.url("https://gitlab.com/ahoneybun/nix-configs/-/raw/main/hosts/x86_64/vm/configuration.nix").unwrap(); - let mut config_file = File::create("data/vm.nix").unwrap(); + let mut config_file = File::create("vm.nix").unwrap(); { let mut transfer = vm_config.transfer(); @@ -341,7 +336,7 @@ fn main() { // Copies the system nix files to /mnt/etc/nixos/ let _garrus_nix_copy = Command::new("mv") - .args(["data/vm.nix", "/mnt/etc/nixos"]) + .args(["vm.nix", "/mnt/etc/nixos"]) .output() .expect("Failed to copy nix files over"); From 58b2337efa724bf5fa4a12130f7836614468e073 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 13:12:27 -0600 Subject: [PATCH 30/32] run when a tag is manually created --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0bbca8f..f69d56f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -53,7 +53,6 @@ release-job: - echo "======== RELEASE JOB ========" rules: - if: $CI_COMMIT_TAG - when: never # Do not run this job when a tag is created manually - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch release: tag_name: "v$PKG_VERSION" From 40d1209d75f93c791582556753ca389c8b5881a5 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 13:16:45 -0600 Subject: [PATCH 31/32] hotfix with nix file creation --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 69aee11..6a365e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nyxi-installer" -version = "2.0.0" +version = "2.0.1" edition = "2021" [dependencies] From 0d32bf0d6edb67c398537aff1d555f48999b9631 Mon Sep 17 00:00:00 2001 From: Aaron Honeycutt Date: Thu, 24 Apr 2025 13:26:01 -0600 Subject: [PATCH 32/32] fix release upload --- .gitlab-ci.yml | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f69d56f..6bf9262 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -61,7 +61,7 @@ release-job: assets: links: - name: "v$PKG_VERSION" - url: "${PKG_REGISTRY_URL}/x86_64-unknown-linux-gnu/v${PKG_VERSION}/nyxi-installer-v${PKG_VERSION}" + url: "${PKG_REGISTRY_URL}/x86_64-unknown-linux-gnu/v${PKG_VERSION}/nyxi-installer" upload-job: stage: release diff --git a/Cargo.toml b/Cargo.toml index 6a365e2..2e8fa81 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nyxi-installer" -version = "2.0.1" +version = "2.0.2" edition = "2021" [dependencies]