fish support (#76)

* Make plans versioned

* Delint

* speeeeeeeeling

* remove file that was dead

* Flesh out docs and improve public API

* Speeling

* Fixups

* Fix doctests

* Do a better job with actionstate

* Add some more docs

* Fix doctest

* Make CLI stuff optional

* Touchup

* Speeling

* Add fish support

* Add shell tests

* Add login shell tests

* Improve provisioning behavior of shell profiles

* Make created shell profiles executable

* Bump nix

* Try interactive shell

* Fixup merge

* Bad yaml, bad

* Tweak ci

* Set GITHUB_PATH

* Do github runner automatically

* Use GITHUB_PATH more

* use login shells again

* Ouytput github path in ci

* Okay so GITHUB_PATH is a UNIX socket?

* Okay yup they are UNIX sockets

* Have the macs dump their github path

* YAML stuff

* Pass github path in invocation

* Bump plans

* Okay it is not a socket

* Remove debugging

* Review fixes

* Pass correct shell arg to mac

* Echo github path

* Echo the path, then...

* Join GITHUB_PATH writes
This commit is contained in:
Ana Hobden 2022-12-07 08:22:24 -08:00 committed by GitHub
parent 90bab4034c
commit f58280a11a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 285 additions and 69 deletions

View file

@ -65,31 +65,49 @@ jobs:
runs-on: ubuntu-22.04
needs: build-x86_64-linux
steps:
- run: sudo apt install fish zsh
- uses: actions/download-artifact@v3
with:
name: harmonic-x86_64-linux
- name: Set executable
run: chmod +x ./harmonic
- name: Initial install
run: sudo RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install linux-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
run: sudo GITHUB_PATH=$GITHUB_PATH RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install linux-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
- name: Initial uninstall (without a `nix run` first)
run: sudo RUST_LOG=harmonic=trace RUST_BACKTRACE=full /nix/harmonic uninstall --no-confirm
run: sudo GITHUB_PATH=$GITHUB_PATH RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm
- name: Repeated install
run: sudo RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install linux-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
run: sudo GITHUB_PATH=$GITHUB_PATH RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install linux-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
- name: echo $PATH
run: echo $PATH
- name: Test `nix`
run: |
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
nix run nixpkgs#fortune
if: success() || failure()
run: nix run nixpkgs#fortune
- name: Test bash
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: bash --login {0}
- name: Test sh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: sh -l {0}
- name: Test zsh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: zsh --login --interactive {0}
## Broken until https://github.com/NixOS/nix/pull/7105 is released due to the version on Ubuntu's runners
# - name: Test fish
# run: nix-instantiate -E 'builtins.currentTime' --eval
# if: success() || failure()
# shell: fish --login {0}
- name: Repeated uninstall
run: sudo RUST_LOG=harmonic=trace RUST_BACKTRACE=full /nix/harmonic uninstall --no-confirm
run: sudo GITHUB_PATH=$GITHUB_PATH RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm
run-steam-deck:
name: Run Steam Deck (mock)
runs-on: ubuntu-22.04
needs: build-x86_64-linux
steps:
- run: sudo apt install fish zsh
- uses: actions/download-artifact@v3
with:
name: harmonic-x86_64-linux
@ -101,24 +119,40 @@ jobs:
echo -e "#! /bin/sh\nexit 0" | sudo tee -a /bin/steamos-readonly
sudo chmod +x /bin/steamos-readonly
sudo useradd -m deck
- name: Initial install
run: sudo PATH=$PATH:$HOME/bin RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install steam-deck --persistence `pwd`/ci-test-nix --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
run: sudo GITHUB_PATH=$GITHUB_PATH PATH=$PATH:$HOME/bin RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install steam-deck --persistence `pwd`/ci-test-nix --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
- name: Initial uninstall (without a `nix run` first)
run: |
cp /nix/harmonic ./harmonic # Since /nix is a mount we must avoid requiring it to remain existing
sudo PATH=$PATH:$HOME/bin RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm
sudo GITHUB_PATH=$GITHUB_PATH PATH=$PATH:$HOME/bin RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm
- name: Repeated install
run: sudo PATH=$PATH:$HOME/bin RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install steam-deck --persistence `pwd`/ci-test-nix --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
run: sudo GITHUB_PATH=$GITHUB_PATH PATH=$PATH:$HOME/bin RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install steam-deck --persistence `pwd`/ci-test-nix --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
- name: echo $PATH
run: echo $PATH
- name: Test `nix`
run: |
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
nix run nixpkgs#fortune
if: success() || failure()
run: nix run nixpkgs#fortune
- name: Test bash
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: bash --login {0}
- name: Test sh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: sh -l {0}
- name: Test zsh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: zsh --login --interactive {0}
## Broken until https://github.com/NixOS/nix/pull/7105 is released due to the version on Ubuntu's runners
# - name: Test fish
# run: nix-instantiate -E 'builtins.currentTime' --eval
# if: success() || failure()
# shell: fish --login {0}
- name: Repeated uninstall
run: |
cp /nix/harmonic ./harmonic # Since /nix is a mount we must avoid requiring it to remain existing
sudo PATH=$PATH:$HOME/bin RUST_LOG=harmonic=trace RUST_BACKTRACE=full /nix/harmonic uninstall --no-confirm
sudo GITHUB_PATH=$GITHUB_PATH PATH=$PATH:$HOME/bin RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm
build-x86_64-darwin:
name: Build x86_64 Darwin
@ -144,27 +178,43 @@ jobs:
runs-on: macos-12
needs: build-x86_64-darwin
steps:
- run: brew install fish
- uses: actions/download-artifact@v3
with:
name: harmonic-x86_64-darwin
- name: Set executable
run: chmod +x ./harmonic
- name: Initial install
run: sudo RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install darwin-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
run: sudo GITHUB_PATH=$GITHUB_PATH RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install darwin-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
- name: Initial uninstall (without a `nix run` first)
run: |
cp /nix/harmonic ./harmonic # Since /nix is a mount we must avoid requiring it to remain existing
sudo RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm
sudo GITHUB_PATH=$GITHUB_PATH RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm
- name: Repeated install
run: sudo RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install darwin-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
run: sudo GITHUB_PATH=$GITHUB_PATH RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic install darwin-multi --extra-conf "access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}" --no-confirm
- name: echo $PATH
run: echo $PATH
- name: Test `nix`
run: |
. /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh
nix run nixpkgs#fortune
if: success() || failure()
run: nix run nixpkgs#fortune
- name: Test bash
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: bash --login {0}
- name: Test sh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: sh -l {0}
- name: Test zsh
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: zsh --login --interactive {0}
- name: Test fish
run: nix-instantiate -E 'builtins.currentTime' --eval
if: success() || failure()
shell: fish --login {0}
- name: Repeated uninstall
run: |
cp /nix/harmonic ./harmonic # Since /nix is a mount we must avoid requiring it to remain existing
sudo RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm
sudo GITHUB_PATH=$GITHUB_PATH RUST_LOG=harmonic=trace RUST_BACKTRACE=full ./harmonic uninstall --no-confirm

View file

@ -1,24 +1,40 @@
use crate::action::base::CreateOrAppendFile;
use crate::action::base::{CreateDirectory, CreateOrAppendFile};
use crate::action::{Action, ActionDescription, ActionError, StatefulAction};
use std::path::Path;
use nix::unistd::User;
use std::path::{Path, PathBuf};
use tokio::task::JoinSet;
// Fish has different syntax than zsh/bash, treat it separate
const PROFILE_FISH_SUFFIX: &str = "conf.d/nix.fish";
/**
Each of these are common values of $__fish_sysconf_dir,
under which Fish will look for a file named
[`PROFILE_FISH_SUFFIX`].
*/
const PROFILE_FISH_PREFIXES: &[&str] = &[
"/etc/fish", // standard
"/usr/local/etc/fish", // their installer .pkg for macOS
"/opt/homebrew/etc/fish", // homebrew
"/opt/local/etc/fish", // macports
];
const PROFILE_TARGETS: &[&str] = &[
"/etc/bashrc",
"/etc/profile.d/nix.sh",
"/etc/zshrc",
"/etc/bash.bashrc",
"/etc/zsh/zshrc",
// TODO(@hoverbear): FIsh
];
const PROFILE_NIX_FILE: &str = "/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh";
const PROFILE_NIX_FILE_SHELL: &str = "/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh";
const PROFILE_NIX_FILE_FISH: &str = "/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.fish";
/**
Configure any detected shell profiles to include Nix support
*/
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)]
pub struct ConfigureShellProfile {
create_directories: Vec<StatefulAction<CreateDirectory>>,
create_or_append_files: Vec<StatefulAction<CreateOrAppendFile>>,
}
@ -26,26 +42,92 @@ impl ConfigureShellProfile {
#[tracing::instrument(skip_all)]
pub async fn plan() -> Result<StatefulAction<Self>, ActionError> {
let mut create_or_append_files = Vec::default();
for profile_target in PROFILE_TARGETS {
let path = Path::new(profile_target);
if !path.exists() {
tracing::trace!("Did not plan to edit `{profile_target}` as it does not exist.");
continue;
}
let buf = format!(
let mut create_directories = Vec::default();
let shell_buf = format!(
"\n\
# Nix\n\
if [ -e '{PROFILE_NIX_FILE}' ]; then\n\
. '{PROFILE_NIX_FILE}'\n\
if [ -e '{PROFILE_NIX_FILE_SHELL}' ]; then\n\
{inde}. '{PROFILE_NIX_FILE_SHELL}'\n\
fi\n\
# End Nix\n
\n",
inde = " ", // indent
);
for profile_target in PROFILE_TARGETS {
let profile_target_path = Path::new(profile_target);
if let Some(parent) = profile_target_path.parent() {
if !parent.exists() {
tracing::trace!(
"Did not plan to edit `{profile_target}` as it's parent folder does not exist."
);
continue;
}
create_or_append_files.push(
CreateOrAppendFile::plan(
profile_target_path,
None,
None,
0o0755,
shell_buf.to_string(),
)
.await?,
);
}
}
let fish_buf = format!(
"\n\
# Nix\n\
if test -e '{PROFILE_NIX_FILE_FISH}'\n\
{inde}. '{PROFILE_NIX_FILE_FISH}'\n\
end\n\
# End Nix\n\
\n",
inde = " ", // indent
);
for fish_prefix in PROFILE_FISH_PREFIXES {
let fish_prefix_path = PathBuf::from(fish_prefix);
if !fish_prefix_path.exists() {
// If the prefix doesn't exist, don't create the `conf.d/nix.fish`
continue;
}
let mut profile_target = fish_prefix_path;
profile_target.push(PROFILE_FISH_SUFFIX);
if let Some(conf_d) = profile_target.parent() {
create_directories.push(
CreateDirectory::plan(conf_d.to_path_buf(), None, None, 0o0644, false).await?,
);
}
create_or_append_files.push(
CreateOrAppendFile::plan(profile_target, None, None, 0o0755, fish_buf.to_string())
.await?,
);
}
// If the `$GITHUB_PATH` environment exists, we're almost certainly running on Github
// Actions, and almost certainly wants the relevant `$PATH` additions added.
if let Ok(github_path) = std::env::var("GITHUB_PATH") {
let mut buf = "/nix/var/nix/profiles/default/bin\n".to_string();
// Actions runners operate as `runner` user by default
if let Ok(Some(runner)) = User::from_name("runner") {
buf += &format!(
"/nix/var/nix/profiles/per-user/{}/profile/bin\n",
runner.uid
);
}
create_or_append_files
.push(CreateOrAppendFile::plan(path, None, None, 0o0644, buf).await?);
.push(CreateOrAppendFile::plan(&github_path, None, None, None, buf).await?)
}
Ok(Self {
create_directories,
create_or_append_files,
}
.into())
@ -70,14 +152,21 @@ impl Action for ConfigureShellProfile {
async fn execute(&mut self) -> Result<(), ActionError> {
let Self {
create_or_append_files,
create_directories,
} = self;
for create_directory in create_directories {
create_directory.try_execute().await?;
}
let mut set = JoinSet::new();
let mut errors = Vec::default();
for (idx, create_or_append_file) in create_or_append_files.iter().enumerate() {
let span = tracing::Span::current().clone();
let mut create_or_append_file_clone = create_or_append_file.clone();
let _abort_handle = set.spawn(async move {
let _ = span.enter();
create_or_append_file_clone.try_execute().await?;
Result::<_, ActionError>::Ok((idx, create_or_append_file_clone))
});
@ -114,6 +203,7 @@ impl Action for ConfigureShellProfile {
#[tracing::instrument(skip_all)]
async fn revert(&mut self) -> Result<(), ActionError> {
let Self {
create_directories,
create_or_append_files,
} = self;
@ -138,6 +228,10 @@ impl Action for ConfigureShellProfile {
};
}
for create_directory in create_directories {
create_directory.try_revert().await?;
}
if !errors.is_empty() {
if errors.len() == 1 {
return Err(errors.into_iter().next().unwrap().into());

View file

@ -23,12 +23,11 @@ arguments. For example, several 'composite' actions accept a [`CommonSettings`](
You can manually plan, execute, then revert an [`Action`] like so:
```rust,no_run
# async fn wrapper() -> Result<(), harmonic::HarmonicError> {
# async fn wrapper() {
use harmonic::action::base::CreateDirectory;
let mut action = CreateDirectory::plan("/nix", None, None, 0o0755, true).await?;
action.try_execute().await?;
action.try_revert().await?;
# Ok(())
let mut action = CreateDirectory::plan("/nix", None, None, 0o0755, true).await.unwrap();
action.try_execute().await.unwrap();
action.try_revert().await.unwrap();
# }
```

View file

@ -10,16 +10,16 @@ use crate::channel_value::ChannelValue;
/// Default [`nix_package_url`](CommonSettings::nix_package_url) for Linux x86_64
pub const NIX_X64_64_LINUX_URL: &str =
"https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz";
"https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-x86_64-linux.tar.xz";
/// Default [`nix_package_url`](CommonSettings::nix_package_url) for Linux aarch64
pub const NIX_AARCH64_LINUX_URL: &str =
"https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-aarch64-linux.tar.xz";
"https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-aarch64-linux.tar.xz";
/// Default [`nix_package_url`](CommonSettings::nix_package_url) for Darwin x86_64
pub const NIX_X64_64_DARWIN_URL: &str =
"https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-darwin.tar.xz";
"https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-x86_64-darwin.tar.xz";
/// Default [`nix_package_url`](CommonSettings::nix_package_url) for Darwin aarch64
pub const NIX_AARCH64_DARWIN_URL: &str =
"https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-aarch64-darwin.tar.xz";
"https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-aarch64-darwin.tar.xz";
/** Common settings used by all [`BuiltinPlanner`](crate::planner::BuiltinPlanner)s

View file

@ -85,7 +85,7 @@
"action": "provision_nix",
"fetch_nix": {
"action": {
"url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-darwin.tar.xz",
"url": "https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-x86_64-darwin.tar.xz",
"dest": "/nix/temp-install-dir"
},
"state": "Uncompleted"
@ -556,14 +556,15 @@
},
"configure_shell_profile": {
"action": {
"create_directories": [],
"create_or_append_files": [
{
"action": {
"path": "/etc/bashrc",
"user": null,
"group": null,
"mode": 420,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
@ -572,8 +573,18 @@
"path": "/etc/zshrc",
"user": null,
"group": null,
"mode": 420,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
{
"action": {
"path": "/etc/bash.bashrc",
"user": null,
"group": null,
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
}
@ -659,7 +670,7 @@
"nix_build_group_id": 3000,
"nix_build_user_prefix": "_nixbld",
"nix_build_user_id_base": 300,
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-darwin.tar.xz",
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-x86_64-darwin.tar.xz",
"extra_conf": [],
"force": false
},

View file

@ -17,7 +17,7 @@
"action": "provision_nix",
"fetch_nix": {
"action": {
"url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz",
"url": "https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-x86_64-linux.tar.xz",
"dest": "/nix/temp-install-dir"
},
"state": "Uncompleted"
@ -488,14 +488,45 @@
},
"configure_shell_profile": {
"action": {
"create_directories": [],
"create_or_append_files": [
{
"action": {
"path": "/etc/bashrc",
"user": null,
"group": null,
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
{
"action": {
"path": "/etc/profile.d/nix.sh",
"user": null,
"group": null,
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
{
"action": {
"path": "/etc/zshrc",
"user": null,
"group": null,
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
{
"action": {
"path": "/etc/bash.bashrc",
"user": null,
"group": null,
"mode": 420,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
}
@ -581,7 +612,7 @@
"nix_build_group_id": 3000,
"nix_build_user_prefix": "nixbld",
"nix_build_user_id_base": 3000,
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz",
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-x86_64-linux.tar.xz",
"extra_conf": [],
"force": false
}

View file

@ -60,7 +60,7 @@
"action": "provision_nix",
"fetch_nix": {
"action": {
"url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz",
"url": "https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-x86_64-linux.tar.xz",
"dest": "/nix/temp-install-dir"
},
"state": "Uncompleted"
@ -531,14 +531,45 @@
},
"configure_shell_profile": {
"action": {
"create_directories": [],
"create_or_append_files": [
{
"action": {
"path": "/etc/bashrc",
"user": null,
"group": null,
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
{
"action": {
"path": "/etc/profile.d/nix.sh",
"user": null,
"group": null,
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
{
"action": {
"path": "/etc/zshrc",
"user": null,
"group": null,
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
},
{
"action": {
"path": "/etc/bash.bashrc",
"user": null,
"group": null,
"mode": 420,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n. '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
"mode": 493,
"buf": "\n# Nix\nif [ -e '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh' ]; then\n . '/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh'\nfi\n# End Nix\n\n \n"
},
"state": "Uncompleted"
}
@ -625,7 +656,7 @@
"nix_build_group_id": 3000,
"nix_build_user_prefix": "nixbld",
"nix_build_user_id_base": 3000,
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.0/nix-2.11.0-x86_64-linux.tar.xz",
"nix_package_url": "https://releases.nixos.org/nix/nix-2.11.1/nix-2.11.1-x86_64-linux.tar.xz",
"extra_conf": [],
"force": false
}

View file

@ -5,7 +5,7 @@ const STEAM_DECK: &str = include_str!("./fixtures/linux/steam-deck.json");
const DARWIN_MULTI: &str = include_str!("./fixtures/darwin/darwin-multi.json");
// Ensure existing plans still parse
// If this breaks and you need to update the fixture, it's time to raise version.
// If this breaks and you need to update the fixture, disable these tests, bump harmonic to a new version, and update the plans.
#[test]
fn plan_compat_linux_multi() -> eyre::Result<()> {
let _: InstallPlan = serde_json::from_str(LINUX_MULTI)?;
@ -13,7 +13,7 @@ fn plan_compat_linux_multi() -> eyre::Result<()> {
}
// Ensure existing plans still parse
// If this breaks and you need to update the fixture, it's time to raise version.
// If this breaks and you need to update the fixture, disable these tests, bump harmonic to a new version, and update the plans.
#[test]
fn plan_compat_steam_deck() -> eyre::Result<()> {
let _: InstallPlan = serde_json::from_str(STEAM_DECK)?;
@ -21,7 +21,7 @@ fn plan_compat_steam_deck() -> eyre::Result<()> {
}
// Ensure existing plans still parse
// If this breaks and you need to update the fixture, it's time to raise version.
// If this breaks and you need to update the fixture, disable these tests, bump harmonic to a new version, and update the plans.
#[test]
fn plan_compat_darwin_multi() -> eyre::Result<()> {
let _: InstallPlan = serde_json::from_str(DARWIN_MULTI)?;