nixbot

builds

cancelled aarch64-linux.pytest-impure build #6 · raw · ·

1these 2 derivations will be built:2  /nix/store/8f5bcc9k9d2fh96d0hf87dqzi1f3h04h-python3-3.13.13-env.drv3  /nix/store/x7hglhwnlmjs8d467a6hkin10445ybwa-pytest-impure.drv4Failed to find a machine for remote build!5derivation: ghfwljvv218bclhvr7d6qg36f2xlj2x2-pytest-impure.drv6required (system, features): (aarch64-linux, [ca-derivations])73 available machines:8(systems, maxjobs, supportedFeatures, mandatoryFeatures)9([aarch64-darwin, x86_64-darwin], 8, [big-parallel, recursive-nix], [])10([i686-linux, x86_64-linux], 128, [big-parallel, kvm, nixos-test, recursive-nix, uid-range], [])11([aarch64-linux], 128, [big-parallel, kvm, nixos-test, recursive-nix, uid-range], [])12building '/nix/store/ghfwljvv218bclhvr7d6qg36f2xlj2x2-pytest-impure.drv'13pytest-impure> tribuchet: building on eliza14pytest-impure> ....FF...........FFFF.F                                                  [100%]15pytest-impure> =================================== FAILURES ===================================16pytest-impure> ___________________ TestFlakeService.test_update_flake_input ___________________17pytest-impure> 18pytest-impure> self = <update_flake_inputs.flake_service.FlakeService object at 0xfffff62223f0>19pytest-impure> input_name = 'flake-utils', flake_file = 'flake.nix'20pytest-impure> work_dir = '/build/tmp2cmlv0fq'21pytest-impure> 22pytest-impure>     def update_flake_input(23pytest-impure>         self,24pytest-impure>         input_name: str,25pytest-impure>         flake_file: str,26pytest-impure>         work_dir: str | None = None,27pytest-impure>     ) -> None:28pytest-impure>         """Update a specific flake input.29pytest-impure>     30pytest-impure>         Args:31pytest-impure>             input_name: Name of the input to update32pytest-impure>             flake_file: Path to the flake file33pytest-impure>             work_dir: Optional working directory to resolve flake file path from34pytest-impure>     35pytest-impure>         """36pytest-impure>         try:37pytest-impure>             logger.info("Updating flake input: %s in %s", input_name, flake_file)38pytest-impure>     39pytest-impure>             # If work_dir is provided, resolve the flake file relative to it40pytest-impure>             absolute_flake_path = Path(work_dir) / flake_file if work_dir else Path(flake_file)41pytest-impure>     42pytest-impure>             flake_dir = absolute_flake_path.parent or Path()43pytest-impure>             absolute_flake_dir = flake_dir.resolve()44pytest-impure>     45pytest-impure>             # Use a shallow URL because worktrees may not have the full history.46pytest-impure>             # For subflakes, nix needs the URL to point to the git root47pytest-impure>             # with a dir= parameter rather than the subdirectory directly.48pytest-impure>             if work_dir:49pytest-impure>                 git_root = Path(work_dir).resolve()50pytest-impure>                 relative_dir = absolute_flake_dir.relative_to(git_root)51pytest-impure>                 flake_url = f"git+file://{git_root}?shallow=1"52pytest-impure>                 if str(relative_dir) != ".":53pytest-impure>                     flake_url += f"&dir={relative_dir}"54pytest-impure>             else:55pytest-impure>                 flake_url = f"git+file://{absolute_flake_dir}?shallow=1"56pytest-impure>     57pytest-impure> >           result = subprocess.run(58pytest-impure>                 [59pytest-impure>                     "nix",60pytest-impure>                     "flake",61pytest-impure>                     "update",62pytest-impure>                     "--flake",63pytest-impure>                     flake_url,64pytest-impure>                     input_name,65pytest-impure>                 ],66pytest-impure>                 cwd=str(flake_dir),67pytest-impure>                 capture_output=True,68pytest-impure>                 text=True,69pytest-impure>                 check=True,70pytest-impure>             )71pytest-impure> 72pytest-impure> src/update_flake_inputs/flake_service.py:191: 73pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 74pytest-impure> 75pytest-impure> input = None, capture_output = True, timeout = None, check = True76pytest-impure> popenargs = (['nix', 'flake', 'update', '--flake', 'git+file:///build/tmp2cmlv0fq?shallow=1', 'flake-utils'],)77pytest-impure> kwargs = {'cwd': '/build/tmp2cmlv0fq', 'stderr': -1, 'stdout': -1, 'text': True}78pytest-impure> process = <Popen: returncode: 1 args: ['nix', 'flake', 'update', '--flake', 'git+file:...>79pytest-impure> stdout = ''80pytest-impure> stderr = "warning: you don't have Internet access; disabling some network-dependent features\nerror:\n       … while updating t...b.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com\n"81pytest-impure> retcode = 182pytest-impure> 83pytest-impure>     def run(*popenargs,84pytest-impure>             input=None, capture_output=False, timeout=None, check=False, **kwargs):85pytest-impure>         """Run command with arguments and return a CompletedProcess instance.86pytest-impure>     87pytest-impure>         The returned instance will have attributes args, returncode, stdout and88pytest-impure>         stderr. By default, stdout and stderr are not captured, and those attributes89pytest-impure>         will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them,90pytest-impure>         or pass capture_output=True to capture both.91pytest-impure>     92pytest-impure>         If check is True and the exit code was non-zero, it raises a93pytest-impure>         CalledProcessError. The CalledProcessError object will have the return code94pytest-impure>         in the returncode attribute, and output & stderr attributes if those streams95pytest-impure>         were captured.96pytest-impure>     97pytest-impure>         If timeout (seconds) is given and the process takes too long,98pytest-impure>          a TimeoutExpired exception will be raised.99pytest-impure>     100pytest-impure>         There is an optional argument "input", allowing you to101pytest-impure>         pass bytes or a string to the subprocess's stdin.  If you use this argument102pytest-impure>         you may not also use the Popen constructor's "stdin" argument, as103pytest-impure>         it will be used internally.104pytest-impure>     105pytest-impure>         By default, all communication is in bytes, and therefore any "input" should106pytest-impure>         be bytes, and the stdout and stderr will be bytes. If in text mode, any107pytest-impure>         "input" should be a string, and stdout and stderr will be strings decoded108pytest-impure>         according to locale encoding, or by "encoding" if set. Text mode is109pytest-impure>         triggered by setting any of text, encoding, errors or universal_newlines.110pytest-impure>     111pytest-impure>         The other arguments are the same as for the Popen constructor.112pytest-impure>         """113pytest-impure>         if input is not None:114pytest-impure>             if kwargs.get('stdin') is not None:115pytest-impure>                 raise ValueError('stdin and input arguments may not both be used.')116pytest-impure>             kwargs['stdin'] = PIPE117pytest-impure>     118pytest-impure>         if capture_output:119pytest-impure>             if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:120pytest-impure>                 raise ValueError('stdout and stderr arguments may not be used '121pytest-impure>                                  'with capture_output.')122pytest-impure>             kwargs['stdout'] = PIPE123pytest-impure>             kwargs['stderr'] = PIPE124pytest-impure>     125pytest-impure>         with Popen(*popenargs, **kwargs) as process:126pytest-impure>             try:127pytest-impure>                 stdout, stderr = process.communicate(input, timeout=timeout)128pytest-impure>             except TimeoutExpired as exc:129pytest-impure>                 process.kill()130pytest-impure>                 if _mswindows:131pytest-impure>                     # Windows accumulates the output in a single blocking132pytest-impure>                     # read() call run on child threads, with the timeout133pytest-impure>                     # being done in a join() on those threads.  communicate()134pytest-impure>                     # _after_ kill() is required to collect that and add it135pytest-impure>                     # to the exception.136pytest-impure>                     exc.stdout, exc.stderr = process.communicate()137pytest-impure>                 else:138pytest-impure>                     # POSIX _communicate already populated the output so139pytest-impure>                     # far into the TimeoutExpired exception.140pytest-impure>                     process.wait()141pytest-impure>                 raise142pytest-impure>             except:  # Including KeyboardInterrupt, communicate handled that.143pytest-impure>                 process.kill()144pytest-impure>                 # We don't call process.wait() as .__exit__ does that for us.145pytest-impure>                 raise146pytest-impure>             retcode = process.poll()147pytest-impure>             if check and retcode:148pytest-impure> >               raise CalledProcessError(retcode, process.args,149pytest-impure>                                          output=stdout, stderr=stderr)150pytest-impure> E               subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/tmp2cmlv0fq?shallow=1', 'flake-utils']' returned non-zero exit status 1.151pytest-impure> 152pytest-impure> /nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py:577: CalledProcessError153pytest-impure> 154pytest-impure> The above exception was the direct cause of the following exception:155pytest-impure> 156pytest-impure> self = <tests.test_flake_service.TestFlakeService object at 0xfffff626ac30>157pytest-impure> flake_service = <update_flake_inputs.flake_service.FlakeService object at 0xfffff62223f0>158pytest-impure> fixtures_path = PosixPath('/build/src/tests/fixtures')159pytest-impure> 160pytest-impure>     @pytest.mark.impure161pytest-impure>     def test_update_flake_input(162pytest-impure>         self,163pytest-impure>         flake_service: FlakeService,164pytest-impure>         fixtures_path: Path,165pytest-impure>     ) -> None:166pytest-impure>         """Test updating a flake input and modifying the lock file."""167pytest-impure>         # Create a temporary directory for the test168pytest-impure>         with tempfile.TemporaryDirectory() as temp_dir:169pytest-impure>             temp_path = Path(temp_dir)170pytest-impure>     171pytest-impure>             # Copy minimal flake to temp directory172pytest-impure>             shutil.copy(173pytest-impure>                 fixtures_path / "minimal" / "flake.nix",174pytest-impure>                 temp_path / "flake.nix",175pytest-impure>             )176pytest-impure>             shutil.copy(177pytest-impure>                 fixtures_path / "minimal" / "flake.lock",178pytest-impure>                 temp_path / "flake.lock",179pytest-impure>             )180pytest-impure>     181pytest-impure>             # Initialize git repo in temp directory182pytest-impure>             subprocess.run(["git", "init"], cwd=temp_path, check=True)183pytest-impure>             subprocess.run(["git", "add", "."], cwd=temp_path, check=True)184pytest-impure>             subprocess.run(185pytest-impure>                 ["git", "commit", "-m", "Initial commit"],186pytest-impure>                 cwd=temp_path,187pytest-impure>                 check=True,188pytest-impure>                 env={189pytest-impure>                     **os.environ,190pytest-impure>                     "GIT_AUTHOR_NAME": "Test User",191pytest-impure>                     "GIT_AUTHOR_EMAIL": "test@example.com",192pytest-impure>                     "GIT_COMMITTER_NAME": "Test User",193pytest-impure>                     "GIT_COMMITTER_EMAIL": "test@example.com",194pytest-impure>                 },195pytest-impure>             )196pytest-impure>     197pytest-impure>             # Get the original lock file content198pytest-impure>             original_lock_content = (temp_path / "flake.lock").read_text()199pytest-impure>             original_lock = json.loads(original_lock_content)200pytest-impure>             original_flake_utils_rev = original_lock["nodes"]["flake-utils"]["locked"]["rev"]201pytest-impure>     202pytest-impure>             # Update flake-utils input203pytest-impure> >           flake_service.update_flake_input("flake-utils", "flake.nix", str(temp_path))204pytest-impure> 205pytest-impure> tests/test_flake_service.py:198: 206pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 207pytest-impure> 208pytest-impure> self = <update_flake_inputs.flake_service.FlakeService object at 0xfffff62223f0>209pytest-impure> input_name = 'flake-utils', flake_file = 'flake.nix'210pytest-impure> work_dir = '/build/tmp2cmlv0fq'211pytest-impure> 212pytest-impure>     def update_flake_input(213pytest-impure>         self,214pytest-impure>         input_name: str,215pytest-impure>         flake_file: str,216pytest-impure>         work_dir: str | None = None,217pytest-impure>     ) -> None:218pytest-impure>         """Update a specific flake input.219pytest-impure>     220pytest-impure>         Args:221pytest-impure>             input_name: Name of the input to update222pytest-impure>             flake_file: Path to the flake file223pytest-impure>             work_dir: Optional working directory to resolve flake file path from224pytest-impure>     225pytest-impure>         """226pytest-impure>         try:227pytest-impure>             logger.info("Updating flake input: %s in %s", input_name, flake_file)228pytest-impure>     229pytest-impure>             # If work_dir is provided, resolve the flake file relative to it230pytest-impure>             absolute_flake_path = Path(work_dir) / flake_file if work_dir else Path(flake_file)231pytest-impure>     232pytest-impure>             flake_dir = absolute_flake_path.parent or Path()233pytest-impure>             absolute_flake_dir = flake_dir.resolve()234pytest-impure>     235pytest-impure>             # Use a shallow URL because worktrees may not have the full history.236pytest-impure>             # For subflakes, nix needs the URL to point to the git root237pytest-impure>             # with a dir= parameter rather than the subdirectory directly.238pytest-impure>             if work_dir:239pytest-impure>                 git_root = Path(work_dir).resolve()240pytest-impure>                 relative_dir = absolute_flake_dir.relative_to(git_root)241pytest-impure>                 flake_url = f"git+file://{git_root}?shallow=1"242pytest-impure>                 if str(relative_dir) != ".":243pytest-impure>                     flake_url += f"&dir={relative_dir}"244pytest-impure>             else:245pytest-impure>                 flake_url = f"git+file://{absolute_flake_dir}?shallow=1"246pytest-impure>     247pytest-impure>             result = subprocess.run(248pytest-impure>                 [249pytest-impure>                     "nix",250pytest-impure>                     "flake",251pytest-impure>                     "update",252pytest-impure>                     "--flake",253pytest-impure>                     flake_url,254pytest-impure>                     input_name,255pytest-impure>                 ],256pytest-impure>                 cwd=str(flake_dir),257pytest-impure>                 capture_output=True,258pytest-impure>                 text=True,259pytest-impure>                 check=True,260pytest-impure>             )261pytest-impure>     262pytest-impure>             # Check if there was a warning about non-existent input263pytest-impure>             if result.stderr and "does not match any input" in result.stderr:264pytest-impure>                 logger.warning(265pytest-impure>                     "Failed to update input %s in %s: %s",266pytest-impure>                     input_name,267pytest-impure>                     flake_file,268pytest-impure>                     result.stderr.strip(),269pytest-impure>                 )270pytest-impure>     271pytest-impure>             logger.info(272pytest-impure>                 "Successfully updated flake input: %s in %s",273pytest-impure>                 input_name,274pytest-impure>                 flake_file,275pytest-impure>             )276pytest-impure>         except subprocess.CalledProcessError as e:277pytest-impure>             stderr_output = e.stderr.strip() if e.stderr else "No stderr output"278pytest-impure>             stdout_output = e.stdout.strip() if e.stdout else "No stdout output"279pytest-impure>             logger.exception(280pytest-impure>                 "Failed to update flake input %s in %s. Exit code: %d\nStdout: %s\nStderr: %s",281pytest-impure>                 input_name,282pytest-impure>                 flake_file,283pytest-impure>                 e.returncode,284pytest-impure>                 stdout_output,285pytest-impure>                 stderr_output,286pytest-impure>             )287pytest-impure>             msg = (288pytest-impure>                 f"Failed to update flake input {input_name} in {flake_file}: {e}\n"289pytest-impure>                 f"Stderr: {stderr_output}"290pytest-impure>             )291pytest-impure> >           raise FlakeServiceError(msg) from e292pytest-impure> E           update_flake_inputs.exceptions.FlakeServiceError: Failed to update flake input flake-utils in flake.nix: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/tmp2cmlv0fq?shallow=1', 'flake-utils']' returned non-zero exit status 1.293pytest-impure> E           Stderr: warning: you don't have Internet access; disabling some network-dependent features294pytest-impure> E           error:295pytest-impure> E                  … while updating the lock file of flake 'git+file:///build/tmp2cmlv0fq?ref=refs/heads/master&rev=c612154fdd8ea6da984559356ee0f13da2faa699&shallow=1'296pytest-impure> E           297pytest-impure> E                  … while updating the flake input 'flake-utils'298pytest-impure> E           299pytest-impure> E                  … while fetching the input 'github:numtide/flake-utils'300pytest-impure> E           301pytest-impure> E                  error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com302pytest-impure> 303pytest-impure> src/update_flake_inputs/flake_service.py:235: FlakeServiceError304pytest-impure> ----------------------------- Captured stdout call -----------------------------305pytest-impure> Initialized empty Git repository in /build/tmp2cmlv0fq/.git/306pytest-impure> [master (root-commit) c612154] Initial commit307pytest-impure>  2 files changed, 55 insertions(+)308pytest-impure>  create mode 100644 flake.lock309pytest-impure>  create mode 100644 flake.nix310pytest-impure> ----------------------------- Captured stderr call -----------------------------311pytest-impure> hint: Using 'master' as the name for the initial branch. This default branch name312pytest-impure> hint: will change to "main" in Git 3.0. To configure the initial branch name313pytest-impure> hint: to use in all of your new repositories, which will suppress this warning,314pytest-impure> hint: call:315pytest-impure> hint:316pytest-impure> hint: 	git config --global init.defaultBranch <name>317pytest-impure> hint:318pytest-impure> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and319pytest-impure> hint: 'development'. The just-created branch can be renamed via this command:320pytest-impure> hint:321pytest-impure> hint: 	git branch -m <name>322pytest-impure> hint:323pytest-impure> hint: Disable this message with "git config set advice.defaultBranchName false"324pytest-impure> ------------------------------ Captured log call -------------------------------325pytest-impure> ERROR    update_flake_inputs.flake_service:flake_service.py:223 Failed to update flake input flake-utils in flake.nix. Exit code: 1326pytest-impure> Stdout: No stdout output327pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features328pytest-impure> error:329pytest-impure>        … while updating the lock file of flake 'git+file:///build/tmp2cmlv0fq?ref=refs/heads/master&rev=c612154fdd8ea6da984559356ee0f13da2faa699&shallow=1'330pytest-impure> 331pytest-impure>        … while updating the flake input 'flake-utils'332pytest-impure> 333pytest-impure>        … while fetching the input 'github:numtide/flake-utils'334pytest-impure> 335pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com336pytest-impure> Traceback (most recent call last):337pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input338pytest-impure>     result = subprocess.run(339pytest-impure>         [340pytest-impure>     ...<10 lines>...341pytest-impure>         check=True,342pytest-impure>     )343pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run344pytest-impure>     raise CalledProcessError(retcode, process.args,345pytest-impure>                              output=stdout, stderr=stderr)346pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/tmp2cmlv0fq?shallow=1', 'flake-utils']' returned non-zero exit status 1.347pytest-impure> _________________ TestFlakeService.test_update_subflake_input __________________348pytest-impure> 349pytest-impure> self = <update_flake_inputs.flake_service.FlakeService object at 0xfffff5edbbf0>350pytest-impure> input_name = 'flake-utils', flake_file = 'flake.nix'351pytest-impure> work_dir = '/build/tmprfllca7h'352pytest-impure> 353pytest-impure>     def update_flake_input(354pytest-impure>         self,355pytest-impure>         input_name: str,356pytest-impure>         flake_file: str,357pytest-impure>         work_dir: str | None = None,358pytest-impure>     ) -> None:359pytest-impure>         """Update a specific flake input.360pytest-impure>     361pytest-impure>         Args:362pytest-impure>             input_name: Name of the input to update363pytest-impure>             flake_file: Path to the flake file364pytest-impure>             work_dir: Optional working directory to resolve flake file path from365pytest-impure>     366pytest-impure>         """367pytest-impure>         try:368pytest-impure>             logger.info("Updating flake input: %s in %s", input_name, flake_file)369pytest-impure>     370pytest-impure>             # If work_dir is provided, resolve the flake file relative to it371pytest-impure>             absolute_flake_path = Path(work_dir) / flake_file if work_dir else Path(flake_file)372pytest-impure>     373pytest-impure>             flake_dir = absolute_flake_path.parent or Path()374pytest-impure>             absolute_flake_dir = flake_dir.resolve()375pytest-impure>     376pytest-impure>             # Use a shallow URL because worktrees may not have the full history.377pytest-impure>             # For subflakes, nix needs the URL to point to the git root378pytest-impure>             # with a dir= parameter rather than the subdirectory directly.379pytest-impure>             if work_dir:380pytest-impure>                 git_root = Path(work_dir).resolve()381pytest-impure>                 relative_dir = absolute_flake_dir.relative_to(git_root)382pytest-impure>                 flake_url = f"git+file://{git_root}?shallow=1"383pytest-impure>                 if str(relative_dir) != ".":384pytest-impure>                     flake_url += f"&dir={relative_dir}"385pytest-impure>             else:386pytest-impure>                 flake_url = f"git+file://{absolute_flake_dir}?shallow=1"387pytest-impure>     388pytest-impure> >           result = subprocess.run(389pytest-impure>                 [390pytest-impure>                     "nix",391pytest-impure>                     "flake",392pytest-impure>                     "update",393pytest-impure>                     "--flake",394pytest-impure>                     flake_url,395pytest-impure>                     input_name,396pytest-impure>                 ],397pytest-impure>                 cwd=str(flake_dir),398pytest-impure>                 capture_output=True,399pytest-impure>                 text=True,400pytest-impure>                 check=True,401pytest-impure>             )402pytest-impure> 403pytest-impure> src/update_flake_inputs/flake_service.py:191: 404pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 405pytest-impure> 406pytest-impure> input = None, capture_output = True, timeout = None, check = True407pytest-impure> popenargs = (['nix', 'flake', 'update', '--flake', 'git+file:///build/tmprfllca7h?shallow=1', 'flake-utils'],)408pytest-impure> kwargs = {'cwd': '/build/tmprfllca7h', 'stderr': -1, 'stdout': -1, 'text': True}409pytest-impure> process = <Popen: returncode: 1 args: ['nix', 'flake', 'update', '--flake', 'git+file:...>410pytest-impure> stdout = ''411pytest-impure> stderr = "warning: you don't have Internet access; disabling some network-dependent features\nerror:\n       … while updating t...b.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com\n"412pytest-impure> retcode = 1413pytest-impure> 414pytest-impure>     def run(*popenargs,415pytest-impure>             input=None, capture_output=False, timeout=None, check=False, **kwargs):416pytest-impure>         """Run command with arguments and return a CompletedProcess instance.417pytest-impure>     418pytest-impure>         The returned instance will have attributes args, returncode, stdout and419pytest-impure>         stderr. By default, stdout and stderr are not captured, and those attributes420pytest-impure>         will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them,421pytest-impure>         or pass capture_output=True to capture both.422pytest-impure>     423pytest-impure>         If check is True and the exit code was non-zero, it raises a424pytest-impure>         CalledProcessError. The CalledProcessError object will have the return code425pytest-impure>         in the returncode attribute, and output & stderr attributes if those streams426pytest-impure>         were captured.427pytest-impure>     428pytest-impure>         If timeout (seconds) is given and the process takes too long,429pytest-impure>          a TimeoutExpired exception will be raised.430pytest-impure>     431pytest-impure>         There is an optional argument "input", allowing you to432pytest-impure>         pass bytes or a string to the subprocess's stdin.  If you use this argument433pytest-impure>         you may not also use the Popen constructor's "stdin" argument, as434pytest-impure>         it will be used internally.435pytest-impure>     436pytest-impure>         By default, all communication is in bytes, and therefore any "input" should437pytest-impure>         be bytes, and the stdout and stderr will be bytes. If in text mode, any438pytest-impure>         "input" should be a string, and stdout and stderr will be strings decoded439pytest-impure>         according to locale encoding, or by "encoding" if set. Text mode is440pytest-impure>         triggered by setting any of text, encoding, errors or universal_newlines.441pytest-impure>     442pytest-impure>         The other arguments are the same as for the Popen constructor.443pytest-impure>         """444pytest-impure>         if input is not None:445pytest-impure>             if kwargs.get('stdin') is not None:446pytest-impure>                 raise ValueError('stdin and input arguments may not both be used.')447pytest-impure>             kwargs['stdin'] = PIPE448pytest-impure>     449pytest-impure>         if capture_output:450pytest-impure>             if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:451pytest-impure>                 raise ValueError('stdout and stderr arguments may not be used '452pytest-impure>                                  'with capture_output.')453pytest-impure>             kwargs['stdout'] = PIPE454pytest-impure>             kwargs['stderr'] = PIPE455pytest-impure>     456pytest-impure>         with Popen(*popenargs, **kwargs) as process:457pytest-impure>             try:458pytest-impure>                 stdout, stderr = process.communicate(input, timeout=timeout)459pytest-impure>             except TimeoutExpired as exc:460pytest-impure>                 process.kill()461pytest-impure>                 if _mswindows:462pytest-impure>                     # Windows accumulates the output in a single blocking463pytest-impure>                     # read() call run on child threads, with the timeout464pytest-impure>                     # being done in a join() on those threads.  communicate()465pytest-impure>                     # _after_ kill() is required to collect that and add it466pytest-impure>                     # to the exception.467pytest-impure>                     exc.stdout, exc.stderr = process.communicate()468pytest-impure>                 else:469pytest-impure>                     # POSIX _communicate already populated the output so470pytest-impure>                     # far into the TimeoutExpired exception.471pytest-impure>                     process.wait()472pytest-impure>                 raise473pytest-impure>             except:  # Including KeyboardInterrupt, communicate handled that.474pytest-impure>                 process.kill()475pytest-impure>                 # We don't call process.wait() as .__exit__ does that for us.476pytest-impure>                 raise477pytest-impure>             retcode = process.poll()478pytest-impure>             if check and retcode:479pytest-impure> >               raise CalledProcessError(retcode, process.args,480pytest-impure>                                          output=stdout, stderr=stderr)481pytest-impure> E               subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/tmprfllca7h?shallow=1', 'flake-utils']' returned non-zero exit status 1.482pytest-impure> 483pytest-impure> /nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py:577: CalledProcessError484pytest-impure> 485pytest-impure> The above exception was the direct cause of the following exception:486pytest-impure> 487pytest-impure> self = <tests.test_flake_service.TestFlakeService object at 0xfffff62818c0>488pytest-impure> flake_service = <update_flake_inputs.flake_service.FlakeService object at 0xfffff5edbbf0>489pytest-impure> fixtures_path = PosixPath('/build/src/tests/fixtures')490pytest-impure> 491pytest-impure>     @pytest.mark.impure492pytest-impure>     def test_update_subflake_input(493pytest-impure>         self,494pytest-impure>         flake_service: FlakeService,495pytest-impure>         fixtures_path: Path,496pytest-impure>     ) -> None:497pytest-impure>         """Test updating a flake input in a subdirectory (subflake)."""498pytest-impure>         with tempfile.TemporaryDirectory() as temp_dir:499pytest-impure>             temp_path = Path(temp_dir)500pytest-impure>     501pytest-impure>             # Copy minimal flake to a subdirectory502pytest-impure>             sub_dir = temp_path / "sub"503pytest-impure>             sub_dir.mkdir()504pytest-impure>             shutil.copy(505pytest-impure>                 fixtures_path / "minimal" / "flake.nix",506pytest-impure>                 sub_dir / "flake.nix",507pytest-impure>             )508pytest-impure>             shutil.copy(509pytest-impure>                 fixtures_path / "minimal" / "flake.lock",510pytest-impure>                 sub_dir / "flake.lock",511pytest-impure>             )512pytest-impure>     513pytest-impure>             # Copy minimal flake to root514pytest-impure>             shutil.copy(515pytest-impure>                 fixtures_path / "minimal" / "flake.nix",516pytest-impure>                 temp_path / "flake.nix",517pytest-impure>             )518pytest-impure>             shutil.copy(519pytest-impure>                 fixtures_path / "minimal" / "flake.lock",520pytest-impure>                 temp_path / "flake.lock",521pytest-impure>             )522pytest-impure>     523pytest-impure>             # Initialize git repo in temp directory524pytest-impure>             subprocess.run(["git", "init"], cwd=temp_path, check=True)525pytest-impure>             subprocess.run(["git", "add", "."], cwd=temp_path, check=True)526pytest-impure>             subprocess.run(527pytest-impure>                 ["git", "commit", "-m", "Initial commit"],528pytest-impure>                 cwd=temp_path,529pytest-impure>                 check=True,530pytest-impure>                 env={531pytest-impure>                     **os.environ,532pytest-impure>                     "GIT_AUTHOR_NAME": "Test User",533pytest-impure>                     "GIT_AUTHOR_EMAIL": "test@example.com",534pytest-impure>                     "GIT_COMMITTER_NAME": "Test User",535pytest-impure>                     "GIT_COMMITTER_EMAIL": "test@example.com",536pytest-impure>                 },537pytest-impure>             )538pytest-impure>     539pytest-impure>             original_root_lock = json.loads((temp_path / "flake.lock").read_text())540pytest-impure>             original_root_rev = original_root_lock["nodes"]["flake-utils"]["locked"]["rev"]541pytest-impure>     542pytest-impure>             original_sub_lock = json.loads((sub_dir / "flake.lock").read_text())543pytest-impure>             original_sub_rev = original_sub_lock["nodes"]["flake-utils"]["locked"]["rev"]544pytest-impure>     545pytest-impure>             # Update flake-utils in the root flake546pytest-impure> >           flake_service.update_flake_input("flake-utils", "flake.nix", str(temp_path))547pytest-impure> 548pytest-impure> tests/test_flake_service.py:272: 549pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 550pytest-impure> 551pytest-impure> self = <update_flake_inputs.flake_service.FlakeService object at 0xfffff5edbbf0>552pytest-impure> input_name = 'flake-utils', flake_file = 'flake.nix'553pytest-impure> work_dir = '/build/tmprfllca7h'554pytest-impure> 555pytest-impure>     def update_flake_input(556pytest-impure>         self,557pytest-impure>         input_name: str,558pytest-impure>         flake_file: str,559pytest-impure>         work_dir: str | None = None,560pytest-impure>     ) -> None:561pytest-impure>         """Update a specific flake input.562pytest-impure>     563pytest-impure>         Args:564pytest-impure>             input_name: Name of the input to update565pytest-impure>             flake_file: Path to the flake file566pytest-impure>             work_dir: Optional working directory to resolve flake file path from567pytest-impure>     568pytest-impure>         """569pytest-impure>         try:570pytest-impure>             logger.info("Updating flake input: %s in %s", input_name, flake_file)571pytest-impure>     572pytest-impure>             # If work_dir is provided, resolve the flake file relative to it573pytest-impure>             absolute_flake_path = Path(work_dir) / flake_file if work_dir else Path(flake_file)574pytest-impure>     575pytest-impure>             flake_dir = absolute_flake_path.parent or Path()576pytest-impure>             absolute_flake_dir = flake_dir.resolve()577pytest-impure>     578pytest-impure>             # Use a shallow URL because worktrees may not have the full history.579pytest-impure>             # For subflakes, nix needs the URL to point to the git root580pytest-impure>             # with a dir= parameter rather than the subdirectory directly.581pytest-impure>             if work_dir:582pytest-impure>                 git_root = Path(work_dir).resolve()583pytest-impure>                 relative_dir = absolute_flake_dir.relative_to(git_root)584pytest-impure>                 flake_url = f"git+file://{git_root}?shallow=1"585pytest-impure>                 if str(relative_dir) != ".":586pytest-impure>                     flake_url += f"&dir={relative_dir}"587pytest-impure>             else:588pytest-impure>                 flake_url = f"git+file://{absolute_flake_dir}?shallow=1"589pytest-impure>     590pytest-impure>             result = subprocess.run(591pytest-impure>                 [592pytest-impure>                     "nix",593pytest-impure>                     "flake",594pytest-impure>                     "update",595pytest-impure>                     "--flake",596pytest-impure>                     flake_url,597pytest-impure>                     input_name,598pytest-impure>                 ],599pytest-impure>                 cwd=str(flake_dir),600pytest-impure>                 capture_output=True,601pytest-impure>                 text=True,602pytest-impure>                 check=True,603pytest-impure>             )604pytest-impure>     605pytest-impure>             # Check if there was a warning about non-existent input606pytest-impure>             if result.stderr and "does not match any input" in result.stderr:607pytest-impure>                 logger.warning(608pytest-impure>                     "Failed to update input %s in %s: %s",609pytest-impure>                     input_name,610pytest-impure>                     flake_file,611pytest-impure>                     result.stderr.strip(),612pytest-impure>                 )613pytest-impure>     614pytest-impure>             logger.info(615pytest-impure>                 "Successfully updated flake input: %s in %s",616pytest-impure>                 input_name,617pytest-impure>                 flake_file,618pytest-impure>             )619pytest-impure>         except subprocess.CalledProcessError as e:620pytest-impure>             stderr_output = e.stderr.strip() if e.stderr else "No stderr output"621pytest-impure>             stdout_output = e.stdout.strip() if e.stdout else "No stdout output"622pytest-impure>             logger.exception(623pytest-impure>                 "Failed to update flake input %s in %s. Exit code: %d\nStdout: %s\nStderr: %s",624pytest-impure>                 input_name,625pytest-impure>                 flake_file,626pytest-impure>                 e.returncode,627pytest-impure>                 stdout_output,628pytest-impure>                 stderr_output,629pytest-impure>             )630pytest-impure>             msg = (631pytest-impure>                 f"Failed to update flake input {input_name} in {flake_file}: {e}\n"632pytest-impure>                 f"Stderr: {stderr_output}"633pytest-impure>             )634pytest-impure> >           raise FlakeServiceError(msg) from e635pytest-impure> E           update_flake_inputs.exceptions.FlakeServiceError: Failed to update flake input flake-utils in flake.nix: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/tmprfllca7h?shallow=1', 'flake-utils']' returned non-zero exit status 1.636pytest-impure> E           Stderr: warning: you don't have Internet access; disabling some network-dependent features637pytest-impure> E           error:638pytest-impure> E                  … while updating the lock file of flake 'git+file:///build/tmprfllca7h?ref=refs/heads/master&rev=d2cdb1d9198fb7a86ced6dfb30bc1fa04fce58a8&shallow=1'639pytest-impure> E           640pytest-impure> E                  … while updating the flake input 'flake-utils'641pytest-impure> E           642pytest-impure> E                  … while fetching the input 'github:numtide/flake-utils'643pytest-impure> E           644pytest-impure> E                  error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com645pytest-impure> 646pytest-impure> src/update_flake_inputs/flake_service.py:235: FlakeServiceError647pytest-impure> ----------------------------- Captured stdout call -----------------------------648pytest-impure> Initialized empty Git repository in /build/tmprfllca7h/.git/649pytest-impure> [master (root-commit) d2cdb1d] Initial commit650pytest-impure>  4 files changed, 110 insertions(+)651pytest-impure>  create mode 100644 flake.lock652pytest-impure>  create mode 100644 flake.nix653pytest-impure>  create mode 100644 sub/flake.lock654pytest-impure>  create mode 100644 sub/flake.nix655pytest-impure> ----------------------------- Captured stderr call -----------------------------656pytest-impure> hint: Using 'master' as the name for the initial branch. This default branch name657pytest-impure> hint: will change to "main" in Git 3.0. To configure the initial branch name658pytest-impure> hint: to use in all of your new repositories, which will suppress this warning,659pytest-impure> hint: call:660pytest-impure> hint:661pytest-impure> hint: 	git config --global init.defaultBranch <name>662pytest-impure> hint:663pytest-impure> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and664pytest-impure> hint: 'development'. The just-created branch can be renamed via this command:665pytest-impure> hint:666pytest-impure> hint: 	git branch -m <name>667pytest-impure> hint:668pytest-impure> hint: Disable this message with "git config set advice.defaultBranchName false"669pytest-impure> ------------------------------ Captured log call -------------------------------670pytest-impure> ERROR    update_flake_inputs.flake_service:flake_service.py:223 Failed to update flake input flake-utils in flake.nix. Exit code: 1671pytest-impure> Stdout: No stdout output672pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features673pytest-impure> error:674pytest-impure>        … while updating the lock file of flake 'git+file:///build/tmprfllca7h?ref=refs/heads/master&rev=d2cdb1d9198fb7a86ced6dfb30bc1fa04fce58a8&shallow=1'675pytest-impure> 676pytest-impure>        … while updating the flake input 'flake-utils'677pytest-impure> 678pytest-impure>        … while fetching the input 'github:numtide/flake-utils'679pytest-impure> 680pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com681pytest-impure> Traceback (most recent call last):682pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input683pytest-impure>     result = subprocess.run(684pytest-impure>         [685pytest-impure>     ...<10 lines>...686pytest-impure>         check=True,687pytest-impure>     )688pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run689pytest-impure>     raise CalledProcessError(retcode, process.args,690pytest-impure>                              output=stdout, stderr=stderr)691pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/tmprfllca7h?shallow=1', 'flake-utils']' returned non-zero exit status 1.692pytest-impure> ___________ TestProcessFlakeUpdates.test_with_updatable_flake_input ____________693pytest-impure> 694pytest-impure> self = <tests.test_process_flake_updates.TestProcessFlakeUpdates object at 0xfffff5eb11d0>695pytest-impure> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/test_with_updatable_flake_inpu0')696pytest-impure> fixtures_path = PosixPath('/build/src/tests/fixtures')697pytest-impure> 698pytest-impure>         @pytest.mark.impure699pytest-impure>         def test_with_updatable_flake_input(700pytest-impure>             self,701pytest-impure>             tmp_path: Path,702pytest-impure>             fixtures_path: Path,703pytest-impure>         ) -> None:704pytest-impure>             """Test PR creation when flake input has available updates."""705pytest-impure>             # Create a flake with flake-utils that can be updated706pytest-impure>             flake_content = """{707pytest-impure>       inputs = {708pytest-impure>         flake-utils.url = "github:numtide/flake-utils";709pytest-impure>       };710pytest-impure>     711pytest-impure>       outputs = { self, flake-utils }: {712pytest-impure>         # Test flake with updatable input713pytest-impure>       };714pytest-impure>     }"""715pytest-impure>     716pytest-impure>             (tmp_path / "flake.nix").write_text(flake_content)717pytest-impure>     718pytest-impure>             # Copy old lock file from minimal fixture719pytest-impure>             shutil.copy(720pytest-impure>                 fixtures_path / "minimal" / "flake.lock",721pytest-impure>                 tmp_path / "flake.lock",722pytest-impure>             )723pytest-impure>     724pytest-impure>             _setup_git_repo(tmp_path)725pytest-impure>     726pytest-impure>             # Change to test directory727pytest-impure>             original_cwd = Path.cwd()728pytest-impure>             os.chdir(tmp_path)729pytest-impure>     730pytest-impure>             try:731pytest-impure>                 # Create test services732pytest-impure>                 flake_service = FlakeService()733pytest-impure>                 test_gitea_service = MockGiteaService()734pytest-impure>     735pytest-impure>                 # Process updates736pytest-impure> >               process_flake_updates(737pytest-impure>                     flake_service,738pytest-impure>                     test_gitea_service,739pytest-impure>                     "",740pytest-impure>                     "main",741pytest-impure>                     "",742pytest-impure>                     auto_merge=False,743pytest-impure>                 )744pytest-impure> 745pytest-impure> tests/test_process_flake_updates.py:222: 746pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 747pytest-impure> 748pytest-impure> flake_service = <update_flake_inputs.flake_service.FlakeService object at 0xfffff5e3a850>749pytest-impure> gitea_service = MockGiteaService(api_url='https://gitea.example.com', token='test-token', owner='test-owner', repo='test-repo', git_au...tions[bot]', git_committer_email='gitea-actions[bot]@noreply.gitea.io', merge_style='default', pr_creation_attempts=[])750pytest-impure> exclude_patterns = '', base_branch = 'main', branch_suffix = ''751pytest-impure> 752pytest-impure>     def process_flake_updates(  # noqa: PLR0913753pytest-impure>         flake_service: FlakeService,754pytest-impure>         gitea_service: GiteaService,755pytest-impure>         exclude_patterns: str,756pytest-impure>         base_branch: str,757pytest-impure>         branch_suffix: str,758pytest-impure>         *,759pytest-impure>         auto_merge: bool,760pytest-impure>     ) -> None:761pytest-impure>         """Process all flake updates.762pytest-impure>     763pytest-impure>         Args:764pytest-impure>             flake_service: Flake service instance765pytest-impure>             gitea_service: Gitea service instance766pytest-impure>             exclude_patterns: Patterns to exclude767pytest-impure>             base_branch: Base branch for PRs768pytest-impure>             branch_suffix: Optional suffix to append to branch names769pytest-impure>             auto_merge: Whether to automatically merge PRs770pytest-impure>     771pytest-impure>         """772pytest-impure>         # Discover flake files773pytest-impure>         flakes = flake_service.discover_flake_files(exclude_patterns)774pytest-impure>         if not flakes:775pytest-impure>             logger.info("No flake files found")776pytest-impure>             return777pytest-impure>     778pytest-impure>         logger.info("Found %d flake files to process", len(flakes))779pytest-impure>     780pytest-impure>         failed_inputs: list[str] = []781pytest-impure>     782pytest-impure>         # Process each flake783pytest-impure>         for flake in flakes:784pytest-impure>             logger.info("Processing flake: %s", flake.file_path)785pytest-impure>             logger.info("Inputs to update: %s", ", ".join(flake.inputs))786pytest-impure>     787pytest-impure>             # Don't include '.' for root directory788pytest-impure>             parent_path = Path(flake.file_path).parent789pytest-impure>             parent_suffix = "" if parent_path == Path() else f" in {parent_path}"790pytest-impure>             parent_branch = "" if parent_path == Path() else f"-{parent_path}"791pytest-impure>             suffix = branch_suffix.strip().replace("/", "-").strip("-")792pytest-impure>     793pytest-impure>             # Update each input794pytest-impure>             for input_name in flake.inputs:795pytest-impure>                 try:796pytest-impure>                     branch_name = f"update{parent_branch}-{input_name}"797pytest-impure>                     branch_name = branch_name.replace("/", "-").strip("-")798pytest-impure>                     if suffix:799pytest-impure>                         branch_name = f"{branch_name}-{suffix}"800pytest-impure>     801pytest-impure>                     logger.info(802pytest-impure>                         "Updating input %s in %s (branch: %s)",803pytest-impure>                         input_name,804pytest-impure>                         flake.file_path,805pytest-impure>                         branch_name,806pytest-impure>                     )807pytest-impure>     808pytest-impure>                     # Create worktree and update input809pytest-impure>                     with gitea_service.worktree(branch_name, base_branch) as worktree_path:810pytest-impure>                         # Update the input811pytest-impure>                         flake_service.update_flake_input(812pytest-impure>                             input_name,813pytest-impure>                             flake.file_path,814pytest-impure>                             str(worktree_path),815pytest-impure>                         )816pytest-impure>     817pytest-impure>                         # Commit changes818pytest-impure>                         commit_message = f"Update {input_name}{parent_suffix}"819pytest-impure>                         if gitea_service.commit_changes(820pytest-impure>                             branch_name,821pytest-impure>                             commit_message,822pytest-impure>                             worktree_path,823pytest-impure>                         ):824pytest-impure>                             # Create pull request825pytest-impure>                             pr_title = commit_message826pytest-impure>                             pr_body = (827pytest-impure>                                 f"This PR updates the `{input_name}` input "828pytest-impure>                                 f"in `{flake.file_path}`.\n\n"829pytest-impure>                                 "Generated by update-flake-inputs action."830pytest-impure>                             )831pytest-impure>                             gitea_service.create_pull_request(832pytest-impure>                                 branch_name,833pytest-impure>                                 base_branch,834pytest-impure>                                 pr_title,835pytest-impure>                                 pr_body,836pytest-impure>                                 auto_merge=auto_merge,837pytest-impure>                             )838pytest-impure>                         else:839pytest-impure>                             logger.info(840pytest-impure>                                 "No changes for input %s in %s",841pytest-impure>                                 input_name,842pytest-impure>                                 flake.file_path,843pytest-impure>                             )844pytest-impure>                             gitea_service.delete_branch(branch_name)845pytest-impure>     846pytest-impure>                 except Exception:847pytest-impure>                     logger.exception(848pytest-impure>                         "Failed to update input %s in %s",849pytest-impure>                         input_name,850pytest-impure>                         flake.file_path,851pytest-impure>                     )852pytest-impure>                     failed_inputs.append(f"{input_name} in {flake.file_path}")853pytest-impure>     854pytest-impure>         if failed_inputs:855pytest-impure>             msg = f"Failed to process {len(failed_inputs)} input(s): {', '.join(failed_inputs)}"856pytest-impure> >           raise UpdateFlakeInputsError(msg)857pytest-impure> E           update_flake_inputs.exceptions.UpdateFlakeInputsError: Failed to process 1 input(s): flake-utils in flake.nix858pytest-impure> 859pytest-impure> src/update_flake_inputs/cli.py:268: UpdateFlakeInputsError860pytest-impure> ----------------------------- Captured stdout call -----------------------------861pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/test_with_updatable_flake_inpu0/.git/862pytest-impure> [main (root-commit) 6a74b3a] Initial commit863pytest-impure>  2 files changed, 53 insertions(+)864pytest-impure>  create mode 100644 flake.lock865pytest-impure>  create mode 100644 flake.nix866pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/remote-test_with_updatable_flake_inpu0.git/867pytest-impure> branch 'main' set up to track 'origin/main'.868pytest-impure> branch 'update-flake-utils' set up to track 'origin/main'.869pytest-impure> HEAD is now at 6a74b3a Initial commit870pytest-impure> ----------------------------- Captured stderr call -----------------------------871pytest-impure> hint: Using 'master' as the name for the initial branch. This default branch name872pytest-impure> hint: will change to "main" in Git 3.0. To configure the initial branch name873pytest-impure> hint: to use in all of your new repositories, which will suppress this warning,874pytest-impure> hint: call:875pytest-impure> hint:876pytest-impure> hint: 	git config --global init.defaultBranch <name>877pytest-impure> hint:878pytest-impure> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and879pytest-impure> hint: 'development'. The just-created branch can be renamed via this command:880pytest-impure> hint:881pytest-impure> hint: 	git branch -m <name>882pytest-impure> hint:883pytest-impure> hint: Disable this message with "git config set advice.defaultBranchName false"884pytest-impure> To /build/pytest-of-nixbld/pytest-0/remote-test_with_updatable_flake_inpu0.git885pytest-impure>  * [new branch]      main -> main886pytest-impure> From /build/pytest-of-nixbld/pytest-0/remote-test_with_updatable_flake_inpu0887pytest-impure>  * branch            main       -> FETCH_HEAD888pytest-impure> Preparing worktree (new branch 'update-flake-utils')889pytest-impure> ------------------------------ Captured log call -------------------------------890pytest-impure> ERROR    update_flake_inputs.flake_service:flake_service.py:223 Failed to update flake input flake-utils in flake.nix. Exit code: 1891pytest-impure> Stdout: No stdout output892pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features893pytest-impure> error:894pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-0je849kf/update-flake-utils?ref=refs/heads/update-flake-utils&rev=6a74b3a71186db3178663c227e447cc32eaf4080&shallow=1'895pytest-impure> 896pytest-impure>        … while updating the flake input 'flake-utils'897pytest-impure> 898pytest-impure>        … while fetching the input 'github:numtide/flake-utils'899pytest-impure> 900pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com901pytest-impure> Traceback (most recent call last):902pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input903pytest-impure>     result = subprocess.run(904pytest-impure>         [905pytest-impure>     ...<10 lines>...906pytest-impure>         check=True,907pytest-impure>     )908pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run909pytest-impure>     raise CalledProcessError(retcode, process.args,910pytest-impure>                              output=stdout, stderr=stderr)911pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-0je849kf/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.912pytest-impure> ERROR    update_flake_inputs.cli:cli.py:259 Failed to update input flake-utils in flake.nix913pytest-impure> Traceback (most recent call last):914pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input915pytest-impure>     result = subprocess.run(916pytest-impure>         [917pytest-impure>     ...<10 lines>...918pytest-impure>         check=True,919pytest-impure>     )920pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run921pytest-impure>     raise CalledProcessError(retcode, process.args,922pytest-impure>                              output=stdout, stderr=stderr)923pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-0je849kf/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.924pytest-impure> 925pytest-impure> The above exception was the direct cause of the following exception:926pytest-impure> 927pytest-impure> Traceback (most recent call last):928pytest-impure>   File "/build/src/src/update_flake_inputs/cli.py", line 223, in process_flake_updates929pytest-impure>     flake_service.update_flake_input(930pytest-impure>     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^931pytest-impure>         input_name,932pytest-impure>         ^^^^^^^^^^^933pytest-impure>         flake.file_path,934pytest-impure>         ^^^^^^^^^^^^^^^^935pytest-impure>         str(worktree_path),936pytest-impure>         ^^^^^^^^^^^^^^^^^^^937pytest-impure>     )938pytest-impure>     ^939pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 235, in update_flake_input940pytest-impure>     raise FlakeServiceError(msg) from e941pytest-impure> update_flake_inputs.exceptions.FlakeServiceError: Failed to update flake input flake-utils in flake.nix: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-0je849kf/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.942pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features943pytest-impure> error:944pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-0je849kf/update-flake-utils?ref=refs/heads/update-flake-utils&rev=6a74b3a71186db3178663c227e447cc32eaf4080&shallow=1'945pytest-impure> 946pytest-impure>        … while updating the flake input 'flake-utils'947pytest-impure> 948pytest-impure>        … while fetching the input 'github:numtide/flake-utils'949pytest-impure> 950pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com951pytest-impure> _____ TestProcessFlakeUpdates.test_worktree_based_on_base_branch_not_head ______952pytest-impure> 953pytest-impure> self = <tests.test_process_flake_updates.TestProcessFlakeUpdates object at 0xfffff5e2dba0>954pytest-impure> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/test_worktree_based_on_base_br0')955pytest-impure> fixtures_path = PosixPath('/build/src/tests/fixtures')956pytest-impure> 957pytest-impure>         @pytest.mark.impure958pytest-impure>         def test_worktree_based_on_base_branch_not_head(959pytest-impure>             self,960pytest-impure>             tmp_path: Path,961pytest-impure>             fixtures_path: Path,962pytest-impure>         ) -> None:963pytest-impure>             """Test that update branches are based on base_branch, not current HEAD.964pytest-impure>     965pytest-impure>             When the action is triggered from a non-main branch, the worktree966pytest-impure>             should still be based on origin/<base_branch> so that commits from967pytest-impure>             the triggering branch don't leak into the update branch.968pytest-impure>             """969pytest-impure>             flake_content = """{970pytest-impure>       inputs = {971pytest-impure>         flake-utils.url = "github:numtide/flake-utils";972pytest-impure>       };973pytest-impure>     974pytest-impure>       outputs = { self, flake-utils }: {975pytest-impure>         # Test flake with updatable input976pytest-impure>       };977pytest-impure>     }"""978pytest-impure>     979pytest-impure>             (tmp_path / "flake.nix").write_text(flake_content)980pytest-impure>     981pytest-impure>             shutil.copy(982pytest-impure>                 fixtures_path / "minimal" / "flake.lock",983pytest-impure>                 tmp_path / "flake.lock",984pytest-impure>             )985pytest-impure>     986pytest-impure>             _setup_git_repo(tmp_path)987pytest-impure>     988pytest-impure>             # Create a feature branch with an extra commit989pytest-impure>             git_env = {990pytest-impure>                 **os.environ,991pytest-impure>                 "GIT_AUTHOR_NAME": "Test User",992pytest-impure>                 "GIT_AUTHOR_EMAIL": "test@example.com",993pytest-impure>                 "GIT_COMMITTER_NAME": "Test User",994pytest-impure>                 "GIT_COMMITTER_EMAIL": "test@example.com",995pytest-impure>             }996pytest-impure>             subprocess.run(997pytest-impure>                 ["git", "checkout", "-b", "feature-branch"],998pytest-impure>                 cwd=tmp_path,999pytest-impure>                 check=True,1000pytest-impure>             )1001pytest-impure>             (tmp_path / "extra-file.txt").write_text("feature branch content")1002pytest-impure>             subprocess.run(["git", "add", "."], cwd=tmp_path, check=True)1003pytest-impure>             subprocess.run(1004pytest-impure>                 ["git", "commit", "-m", "Feature branch commit"],1005pytest-impure>                 cwd=tmp_path,1006pytest-impure>                 check=True,1007pytest-impure>                 env=git_env,1008pytest-impure>             )1009pytest-impure>     1010pytest-impure>             # Stay on feature-branch (simulating action triggered from non-main branch)1011pytest-impure>             original_cwd = Path.cwd()1012pytest-impure>             os.chdir(tmp_path)1013pytest-impure>     1014pytest-impure>             try:1015pytest-impure>                 flake_service = FlakeService()1016pytest-impure>                 test_gitea_service = MockGiteaService()1017pytest-impure>     1018pytest-impure> >               process_flake_updates(1019pytest-impure>                     flake_service,1020pytest-impure>                     test_gitea_service,1021pytest-impure>                     "",1022pytest-impure>                     "main",1023pytest-impure>                     "",1024pytest-impure>                     auto_merge=False,1025pytest-impure>                 )1026pytest-impure> 1027pytest-impure> tests/test_process_flake_updates.py:328: 1028pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1029pytest-impure> 1030pytest-impure> flake_service = <update_flake_inputs.flake_service.FlakeService object at 0xfffff5ead450>1031pytest-impure> gitea_service = MockGiteaService(api_url='https://gitea.example.com', token='test-token', owner='test-owner', repo='test-repo', git_au...tions[bot]', git_committer_email='gitea-actions[bot]@noreply.gitea.io', merge_style='default', pr_creation_attempts=[])1032pytest-impure> exclude_patterns = '', base_branch = 'main', branch_suffix = ''1033pytest-impure> 1034pytest-impure>     def process_flake_updates(  # noqa: PLR09131035pytest-impure>         flake_service: FlakeService,1036pytest-impure>         gitea_service: GiteaService,1037pytest-impure>         exclude_patterns: str,1038pytest-impure>         base_branch: str,1039pytest-impure>         branch_suffix: str,1040pytest-impure>         *,1041pytest-impure>         auto_merge: bool,1042pytest-impure>     ) -> None:1043pytest-impure>         """Process all flake updates.1044pytest-impure>     1045pytest-impure>         Args:1046pytest-impure>             flake_service: Flake service instance1047pytest-impure>             gitea_service: Gitea service instance1048pytest-impure>             exclude_patterns: Patterns to exclude1049pytest-impure>             base_branch: Base branch for PRs1050pytest-impure>             branch_suffix: Optional suffix to append to branch names1051pytest-impure>             auto_merge: Whether to automatically merge PRs1052pytest-impure>     1053pytest-impure>         """1054pytest-impure>         # Discover flake files1055pytest-impure>         flakes = flake_service.discover_flake_files(exclude_patterns)1056pytest-impure>         if not flakes:1057pytest-impure>             logger.info("No flake files found")1058pytest-impure>             return1059pytest-impure>     1060pytest-impure>         logger.info("Found %d flake files to process", len(flakes))1061pytest-impure>     1062pytest-impure>         failed_inputs: list[str] = []1063pytest-impure>     1064pytest-impure>         # Process each flake1065pytest-impure>         for flake in flakes:1066pytest-impure>             logger.info("Processing flake: %s", flake.file_path)1067pytest-impure>             logger.info("Inputs to update: %s", ", ".join(flake.inputs))1068pytest-impure>     1069pytest-impure>             # Don't include '.' for root directory1070pytest-impure>             parent_path = Path(flake.file_path).parent1071pytest-impure>             parent_suffix = "" if parent_path == Path() else f" in {parent_path}"1072pytest-impure>             parent_branch = "" if parent_path == Path() else f"-{parent_path}"1073pytest-impure>             suffix = branch_suffix.strip().replace("/", "-").strip("-")1074pytest-impure>     1075pytest-impure>             # Update each input1076pytest-impure>             for input_name in flake.inputs:1077pytest-impure>                 try:1078pytest-impure>                     branch_name = f"update{parent_branch}-{input_name}"1079pytest-impure>                     branch_name = branch_name.replace("/", "-").strip("-")1080pytest-impure>                     if suffix:1081pytest-impure>                         branch_name = f"{branch_name}-{suffix}"1082pytest-impure>     1083pytest-impure>                     logger.info(1084pytest-impure>                         "Updating input %s in %s (branch: %s)",1085pytest-impure>                         input_name,1086pytest-impure>                         flake.file_path,1087pytest-impure>                         branch_name,1088pytest-impure>                     )1089pytest-impure>     1090pytest-impure>                     # Create worktree and update input1091pytest-impure>                     with gitea_service.worktree(branch_name, base_branch) as worktree_path:1092pytest-impure>                         # Update the input1093pytest-impure>                         flake_service.update_flake_input(1094pytest-impure>                             input_name,1095pytest-impure>                             flake.file_path,1096pytest-impure>                             str(worktree_path),1097pytest-impure>                         )1098pytest-impure>     1099pytest-impure>                         # Commit changes1100pytest-impure>                         commit_message = f"Update {input_name}{parent_suffix}"1101pytest-impure>                         if gitea_service.commit_changes(1102pytest-impure>                             branch_name,1103pytest-impure>                             commit_message,1104pytest-impure>                             worktree_path,1105pytest-impure>                         ):1106pytest-impure>                             # Create pull request1107pytest-impure>                             pr_title = commit_message1108pytest-impure>                             pr_body = (1109pytest-impure>                                 f"This PR updates the `{input_name}` input "1110pytest-impure>                                 f"in `{flake.file_path}`.\n\n"1111pytest-impure>                                 "Generated by update-flake-inputs action."1112pytest-impure>                             )1113pytest-impure>                             gitea_service.create_pull_request(1114pytest-impure>                                 branch_name,1115pytest-impure>                                 base_branch,1116pytest-impure>                                 pr_title,1117pytest-impure>                                 pr_body,1118pytest-impure>                                 auto_merge=auto_merge,1119pytest-impure>                             )1120pytest-impure>                         else:1121pytest-impure>                             logger.info(1122pytest-impure>                                 "No changes for input %s in %s",1123pytest-impure>                                 input_name,1124pytest-impure>                                 flake.file_path,1125pytest-impure>                             )1126pytest-impure>                             gitea_service.delete_branch(branch_name)1127pytest-impure>     1128pytest-impure>                 except Exception:1129pytest-impure>                     logger.exception(1130pytest-impure>                         "Failed to update input %s in %s",1131pytest-impure>                         input_name,1132pytest-impure>                         flake.file_path,1133pytest-impure>                     )1134pytest-impure>                     failed_inputs.append(f"{input_name} in {flake.file_path}")1135pytest-impure>     1136pytest-impure>         if failed_inputs:1137pytest-impure>             msg = f"Failed to process {len(failed_inputs)} input(s): {', '.join(failed_inputs)}"1138pytest-impure> >           raise UpdateFlakeInputsError(msg)1139pytest-impure> E           update_flake_inputs.exceptions.UpdateFlakeInputsError: Failed to process 1 input(s): flake-utils in flake.nix1140pytest-impure> 1141pytest-impure> src/update_flake_inputs/cli.py:268: UpdateFlakeInputsError1142pytest-impure> ----------------------------- Captured stdout call -----------------------------1143pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/test_worktree_based_on_base_br0/.git/1144pytest-impure> [main (root-commit) 24a32f8] Initial commit1145pytest-impure>  2 files changed, 53 insertions(+)1146pytest-impure>  create mode 100644 flake.lock1147pytest-impure>  create mode 100644 flake.nix1148pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/remote-test_worktree_based_on_base_br0.git/1149pytest-impure> branch 'main' set up to track 'origin/main'.1150pytest-impure> [feature-branch e2c54de] Feature branch commit1151pytest-impure>  1 file changed, 1 insertion(+)1152pytest-impure>  create mode 100644 extra-file.txt1153pytest-impure> branch 'update-flake-utils' set up to track 'origin/main'.1154pytest-impure> HEAD is now at 24a32f8 Initial commit1155pytest-impure> ----------------------------- Captured stderr call -----------------------------1156pytest-impure> hint: Using 'master' as the name for the initial branch. This default branch name1157pytest-impure> hint: will change to "main" in Git 3.0. To configure the initial branch name1158pytest-impure> hint: to use in all of your new repositories, which will suppress this warning,1159pytest-impure> hint: call:1160pytest-impure> hint:1161pytest-impure> hint: 	git config --global init.defaultBranch <name>1162pytest-impure> hint:1163pytest-impure> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and1164pytest-impure> hint: 'development'. The just-created branch can be renamed via this command:1165pytest-impure> hint:1166pytest-impure> hint: 	git branch -m <name>1167pytest-impure> hint:1168pytest-impure> hint: Disable this message with "git config set advice.defaultBranchName false"1169pytest-impure> To /build/pytest-of-nixbld/pytest-0/remote-test_worktree_based_on_base_br0.git1170pytest-impure>  * [new branch]      main -> main1171pytest-impure> Switched to a new branch 'feature-branch'1172pytest-impure> From /build/pytest-of-nixbld/pytest-0/remote-test_worktree_based_on_base_br01173pytest-impure>  * branch            main       -> FETCH_HEAD1174pytest-impure> Preparing worktree (new branch 'update-flake-utils')1175pytest-impure> ------------------------------ Captured log call -------------------------------1176pytest-impure> ERROR    update_flake_inputs.flake_service:flake_service.py:223 Failed to update flake input flake-utils in flake.nix. Exit code: 11177pytest-impure> Stdout: No stdout output1178pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features1179pytest-impure> error:1180pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-leiezfl2/update-flake-utils?ref=refs/heads/update-flake-utils&rev=24a32f86a6a9b6f68581808d1d5e51c81e9ea430&shallow=1'1181pytest-impure> 1182pytest-impure>        … while updating the flake input 'flake-utils'1183pytest-impure> 1184pytest-impure>        … while fetching the input 'github:numtide/flake-utils'1185pytest-impure> 1186pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com1187pytest-impure> Traceback (most recent call last):1188pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input1189pytest-impure>     result = subprocess.run(1190pytest-impure>         [1191pytest-impure>     ...<10 lines>...1192pytest-impure>         check=True,1193pytest-impure>     )1194pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run1195pytest-impure>     raise CalledProcessError(retcode, process.args,1196pytest-impure>                              output=stdout, stderr=stderr)1197pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-leiezfl2/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.1198pytest-impure> ERROR    update_flake_inputs.cli:cli.py:259 Failed to update input flake-utils in flake.nix1199pytest-impure> Traceback (most recent call last):1200pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input1201pytest-impure>     result = subprocess.run(1202pytest-impure>         [1203pytest-impure>     ...<10 lines>...1204pytest-impure>         check=True,1205pytest-impure>     )1206pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run1207pytest-impure>     raise CalledProcessError(retcode, process.args,1208pytest-impure>                              output=stdout, stderr=stderr)1209pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-leiezfl2/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.1210pytest-impure> 1211pytest-impure> The above exception was the direct cause of the following exception:1212pytest-impure> 1213pytest-impure> Traceback (most recent call last):1214pytest-impure>   File "/build/src/src/update_flake_inputs/cli.py", line 223, in process_flake_updates1215pytest-impure>     flake_service.update_flake_input(1216pytest-impure>     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^1217pytest-impure>         input_name,1218pytest-impure>         ^^^^^^^^^^^1219pytest-impure>         flake.file_path,1220pytest-impure>         ^^^^^^^^^^^^^^^^1221pytest-impure>         str(worktree_path),1222pytest-impure>         ^^^^^^^^^^^^^^^^^^^1223pytest-impure>     )1224pytest-impure>     ^1225pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 235, in update_flake_input1226pytest-impure>     raise FlakeServiceError(msg) from e1227pytest-impure> update_flake_inputs.exceptions.FlakeServiceError: Failed to update flake input flake-utils in flake.nix: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-leiezfl2/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.1228pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features1229pytest-impure> error:1230pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-leiezfl2/update-flake-utils?ref=refs/heads/update-flake-utils&rev=24a32f86a6a9b6f68581808d1d5e51c81e9ea430&shallow=1'1231pytest-impure> 1232pytest-impure>        … while updating the flake input 'flake-utils'1233pytest-impure> 1234pytest-impure>        … while fetching the input 'github:numtide/flake-utils'1235pytest-impure> 1236pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com1237pytest-impure> ___________ TestProcessFlakeUpdates.test_custom_git_author_committer ___________1238pytest-impure> 1239pytest-impure> self = <tests.test_process_flake_updates.TestProcessFlakeUpdates object at 0xfffff5e2df30>1240pytest-impure> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/test_custom_git_author_committ0')1241pytest-impure> fixtures_path = PosixPath('/build/src/tests/fixtures')1242pytest-impure> 1243pytest-impure>         @pytest.mark.impure1244pytest-impure>         def test_custom_git_author_committer(1245pytest-impure>             self,1246pytest-impure>             tmp_path: Path,1247pytest-impure>             fixtures_path: Path,1248pytest-impure>         ) -> None:1249pytest-impure>             """Test that custom git author/committer configuration is used."""1250pytest-impure>             # Create a flake with flake-utils1251pytest-impure>             flake_content = """{1252pytest-impure>       inputs = {1253pytest-impure>         flake-utils.url = "github:numtide/flake-utils";1254pytest-impure>       };1255pytest-impure>     1256pytest-impure>       outputs = { self, flake-utils }: {1257pytest-impure>         # Test flake1258pytest-impure>       };1259pytest-impure>     }"""1260pytest-impure>     1261pytest-impure>             (tmp_path / "flake.nix").write_text(flake_content)1262pytest-impure>     1263pytest-impure>             # Copy old lock file from minimal fixture1264pytest-impure>             shutil.copy(1265pytest-impure>                 fixtures_path / "minimal" / "flake.lock",1266pytest-impure>                 tmp_path / "flake.lock",1267pytest-impure>             )1268pytest-impure>     1269pytest-impure>             _setup_git_repo(tmp_path)1270pytest-impure>     1271pytest-impure>             # Change to test directory1272pytest-impure>             original_cwd = Path.cwd()1273pytest-impure>             os.chdir(tmp_path)1274pytest-impure>     1275pytest-impure>             try:1276pytest-impure>                 # Create test services with custom git author/committer1277pytest-impure>                 flake_service = FlakeService()1278pytest-impure>                 test_gitea_service = MockGiteaService()1279pytest-impure>                 test_gitea_service.git_author_name = "Custom Bot"1280pytest-impure>                 test_gitea_service.git_author_email = "custom@bot.com"1281pytest-impure>                 test_gitea_service.git_committer_name = "Custom Committer"1282pytest-impure>                 test_gitea_service.git_committer_email = "committer@bot.com"1283pytest-impure>     1284pytest-impure>                 # Process updates1285pytest-impure> >               process_flake_updates(1286pytest-impure>                     flake_service,1287pytest-impure>                     test_gitea_service,1288pytest-impure>                     "",1289pytest-impure>                     "main",1290pytest-impure>                     "",1291pytest-impure>                     auto_merge=False,1292pytest-impure>                 )1293pytest-impure> 1294pytest-impure> tests/test_process_flake_updates.py:398: 1295pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1296pytest-impure> 1297pytest-impure> flake_service = <update_flake_inputs.flake_service.FlakeService object at 0xfffff61cbe30>1298pytest-impure> gitea_service = MockGiteaService(api_url='https://gitea.example.com', token='test-token', owner='test-owner', repo='test-repo', git_au...itter_name='Custom Committer', git_committer_email='committer@bot.com', merge_style='default', pr_creation_attempts=[])1299pytest-impure> exclude_patterns = '', base_branch = 'main', branch_suffix = ''1300pytest-impure> 1301pytest-impure>     def process_flake_updates(  # noqa: PLR09131302pytest-impure>         flake_service: FlakeService,1303pytest-impure>         gitea_service: GiteaService,1304pytest-impure>         exclude_patterns: str,1305pytest-impure>         base_branch: str,1306pytest-impure>         branch_suffix: str,1307pytest-impure>         *,1308pytest-impure>         auto_merge: bool,1309pytest-impure>     ) -> None:1310pytest-impure>         """Process all flake updates.1311pytest-impure>     1312pytest-impure>         Args:1313pytest-impure>             flake_service: Flake service instance1314pytest-impure>             gitea_service: Gitea service instance1315pytest-impure>             exclude_patterns: Patterns to exclude1316pytest-impure>             base_branch: Base branch for PRs1317pytest-impure>             branch_suffix: Optional suffix to append to branch names1318pytest-impure>             auto_merge: Whether to automatically merge PRs1319pytest-impure>     1320pytest-impure>         """1321pytest-impure>         # Discover flake files1322pytest-impure>         flakes = flake_service.discover_flake_files(exclude_patterns)1323pytest-impure>         if not flakes:1324pytest-impure>             logger.info("No flake files found")1325pytest-impure>             return1326pytest-impure>     1327pytest-impure>         logger.info("Found %d flake files to process", len(flakes))1328pytest-impure>     1329pytest-impure>         failed_inputs: list[str] = []1330pytest-impure>     1331pytest-impure>         # Process each flake1332pytest-impure>         for flake in flakes:1333pytest-impure>             logger.info("Processing flake: %s", flake.file_path)1334pytest-impure>             logger.info("Inputs to update: %s", ", ".join(flake.inputs))1335pytest-impure>     1336pytest-impure>             # Don't include '.' for root directory1337pytest-impure>             parent_path = Path(flake.file_path).parent1338pytest-impure>             parent_suffix = "" if parent_path == Path() else f" in {parent_path}"1339pytest-impure>             parent_branch = "" if parent_path == Path() else f"-{parent_path}"1340pytest-impure>             suffix = branch_suffix.strip().replace("/", "-").strip("-")1341pytest-impure>     1342pytest-impure>             # Update each input1343pytest-impure>             for input_name in flake.inputs:1344pytest-impure>                 try:1345pytest-impure>                     branch_name = f"update{parent_branch}-{input_name}"1346pytest-impure>                     branch_name = branch_name.replace("/", "-").strip("-")1347pytest-impure>                     if suffix:1348pytest-impure>                         branch_name = f"{branch_name}-{suffix}"1349pytest-impure>     1350pytest-impure>                     logger.info(1351pytest-impure>                         "Updating input %s in %s (branch: %s)",1352pytest-impure>                         input_name,1353pytest-impure>                         flake.file_path,1354pytest-impure>                         branch_name,1355pytest-impure>                     )1356pytest-impure>     1357pytest-impure>                     # Create worktree and update input1358pytest-impure>                     with gitea_service.worktree(branch_name, base_branch) as worktree_path:1359pytest-impure>                         # Update the input1360pytest-impure>                         flake_service.update_flake_input(1361pytest-impure>                             input_name,1362pytest-impure>                             flake.file_path,1363pytest-impure>                             str(worktree_path),1364pytest-impure>                         )1365pytest-impure>     1366pytest-impure>                         # Commit changes1367pytest-impure>                         commit_message = f"Update {input_name}{parent_suffix}"1368pytest-impure>                         if gitea_service.commit_changes(1369pytest-impure>                             branch_name,1370pytest-impure>                             commit_message,1371pytest-impure>                             worktree_path,1372pytest-impure>                         ):1373pytest-impure>                             # Create pull request1374pytest-impure>                             pr_title = commit_message1375pytest-impure>                             pr_body = (1376pytest-impure>                                 f"This PR updates the `{input_name}` input "1377pytest-impure>                                 f"in `{flake.file_path}`.\n\n"1378pytest-impure>                                 "Generated by update-flake-inputs action."1379pytest-impure>                             )1380pytest-impure>                             gitea_service.create_pull_request(1381pytest-impure>                                 branch_name,1382pytest-impure>                                 base_branch,1383pytest-impure>                                 pr_title,1384pytest-impure>                                 pr_body,1385pytest-impure>                                 auto_merge=auto_merge,1386pytest-impure>                             )1387pytest-impure>                         else:1388pytest-impure>                             logger.info(1389pytest-impure>                                 "No changes for input %s in %s",1390pytest-impure>                                 input_name,1391pytest-impure>                                 flake.file_path,1392pytest-impure>                             )1393pytest-impure>                             gitea_service.delete_branch(branch_name)1394pytest-impure>     1395pytest-impure>                 except Exception:1396pytest-impure>                     logger.exception(1397pytest-impure>                         "Failed to update input %s in %s",1398pytest-impure>                         input_name,1399pytest-impure>                         flake.file_path,1400pytest-impure>                     )1401pytest-impure>                     failed_inputs.append(f"{input_name} in {flake.file_path}")1402pytest-impure>     1403pytest-impure>         if failed_inputs:1404pytest-impure>             msg = f"Failed to process {len(failed_inputs)} input(s): {', '.join(failed_inputs)}"1405pytest-impure> >           raise UpdateFlakeInputsError(msg)1406pytest-impure> E           update_flake_inputs.exceptions.UpdateFlakeInputsError: Failed to process 1 input(s): flake-utils in flake.nix1407pytest-impure> 1408pytest-impure> src/update_flake_inputs/cli.py:268: UpdateFlakeInputsError1409pytest-impure> ----------------------------- Captured stdout call -----------------------------1410pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/test_custom_git_author_committ0/.git/1411pytest-impure> [main (root-commit) e76969a] Initial commit1412pytest-impure>  2 files changed, 53 insertions(+)1413pytest-impure>  create mode 100644 flake.lock1414pytest-impure>  create mode 100644 flake.nix1415pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/remote-test_custom_git_author_committ0.git/1416pytest-impure> branch 'main' set up to track 'origin/main'.1417pytest-impure> branch 'update-flake-utils' set up to track 'origin/main'.1418pytest-impure> HEAD is now at e76969a Initial commit1419pytest-impure> ----------------------------- Captured stderr call -----------------------------1420pytest-impure> hint: Using 'master' as the name for the initial branch. This default branch name1421pytest-impure> hint: will change to "main" in Git 3.0. To configure the initial branch name1422pytest-impure> hint: to use in all of your new repositories, which will suppress this warning,1423pytest-impure> hint: call:1424pytest-impure> hint:1425pytest-impure> hint: 	git config --global init.defaultBranch <name>1426pytest-impure> hint:1427pytest-impure> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and1428pytest-impure> hint: 'development'. The just-created branch can be renamed via this command:1429pytest-impure> hint:1430pytest-impure> hint: 	git branch -m <name>1431pytest-impure> hint:1432pytest-impure> hint: Disable this message with "git config set advice.defaultBranchName false"1433pytest-impure> To /build/pytest-of-nixbld/pytest-0/remote-test_custom_git_author_committ0.git1434pytest-impure>  * [new branch]      main -> main1435pytest-impure> From /build/pytest-of-nixbld/pytest-0/remote-test_custom_git_author_committ01436pytest-impure>  * branch            main       -> FETCH_HEAD1437pytest-impure> Preparing worktree (new branch 'update-flake-utils')1438pytest-impure> ------------------------------ Captured log call -------------------------------1439pytest-impure> ERROR    update_flake_inputs.flake_service:flake_service.py:223 Failed to update flake input flake-utils in flake.nix. Exit code: 11440pytest-impure> Stdout: No stdout output1441pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features1442pytest-impure> error:1443pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-9y8bctw4/update-flake-utils?ref=refs/heads/update-flake-utils&rev=e76969a56e490f9164deef4862231976d2b6a18c&shallow=1'1444pytest-impure> 1445pytest-impure>        … while updating the flake input 'flake-utils'1446pytest-impure> 1447pytest-impure>        … while fetching the input 'github:numtide/flake-utils'1448pytest-impure> 1449pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com1450pytest-impure> Traceback (most recent call last):1451pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input1452pytest-impure>     result = subprocess.run(1453pytest-impure>         [1454pytest-impure>     ...<10 lines>...1455pytest-impure>         check=True,1456pytest-impure>     )1457pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run1458pytest-impure>     raise CalledProcessError(retcode, process.args,1459pytest-impure>                              output=stdout, stderr=stderr)1460pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-9y8bctw4/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.1461pytest-impure> ERROR    update_flake_inputs.cli:cli.py:259 Failed to update input flake-utils in flake.nix1462pytest-impure> Traceback (most recent call last):1463pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input1464pytest-impure>     result = subprocess.run(1465pytest-impure>         [1466pytest-impure>     ...<10 lines>...1467pytest-impure>         check=True,1468pytest-impure>     )1469pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run1470pytest-impure>     raise CalledProcessError(retcode, process.args,1471pytest-impure>                              output=stdout, stderr=stderr)1472pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-9y8bctw4/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.1473pytest-impure> 1474pytest-impure> The above exception was the direct cause of the following exception:1475pytest-impure> 1476pytest-impure> Traceback (most recent call last):1477pytest-impure>   File "/build/src/src/update_flake_inputs/cli.py", line 223, in process_flake_updates1478pytest-impure>     flake_service.update_flake_input(1479pytest-impure>     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^1480pytest-impure>         input_name,1481pytest-impure>         ^^^^^^^^^^^1482pytest-impure>         flake.file_path,1483pytest-impure>         ^^^^^^^^^^^^^^^^1484pytest-impure>         str(worktree_path),1485pytest-impure>         ^^^^^^^^^^^^^^^^^^^1486pytest-impure>     )1487pytest-impure>     ^1488pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 235, in update_flake_input1489pytest-impure>     raise FlakeServiceError(msg) from e1490pytest-impure> update_flake_inputs.exceptions.FlakeServiceError: Failed to update flake input flake-utils in flake.nix: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-9y8bctw4/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.1491pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features1492pytest-impure> error:1493pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-9y8bctw4/update-flake-utils?ref=refs/heads/update-flake-utils&rev=e76969a56e490f9164deef4862231976d2b6a18c&shallow=1'1494pytest-impure> 1495pytest-impure>        … while updating the flake input 'flake-utils'1496pytest-impure> 1497pytest-impure>        … while fetching the input 'github:numtide/flake-utils'1498pytest-impure> 1499pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com1500pytest-impure> __________________ TestProcessFlakeUpdates.test_branch_suffix __________________1501pytest-impure> 1502pytest-impure> self = <tests.test_process_flake_updates.TestProcessFlakeUpdates object at 0xfffff54dc170>1503pytest-impure> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/test_branch_suffix0')1504pytest-impure> fixtures_path = PosixPath('/build/src/tests/fixtures')1505pytest-impure> 1506pytest-impure>         @pytest.mark.impure1507pytest-impure>         def test_branch_suffix(1508pytest-impure>             self,1509pytest-impure>             tmp_path: Path,1510pytest-impure>             fixtures_path: Path,1511pytest-impure>         ) -> None:1512pytest-impure>             """Test that branch suffix is properly appended to branch names."""1513pytest-impure>             # Create a flake with flake-utils1514pytest-impure>             flake_content = """{1515pytest-impure>       inputs = {1516pytest-impure>         flake-utils.url = "github:numtide/flake-utils";1517pytest-impure>       };1518pytest-impure>     1519pytest-impure>       outputs = { self, flake-utils }: {1520pytest-impure>         # Test flake1521pytest-impure>       };1522pytest-impure>     }"""1523pytest-impure>     1524pytest-impure>             (tmp_path / "flake.nix").write_text(flake_content)1525pytest-impure>     1526pytest-impure>             # Copy old lock file from minimal fixture1527pytest-impure>             shutil.copy(1528pytest-impure>                 fixtures_path / "minimal" / "flake.lock",1529pytest-impure>                 tmp_path / "flake.lock",1530pytest-impure>             )1531pytest-impure>     1532pytest-impure>             _setup_git_repo(tmp_path)1533pytest-impure>     1534pytest-impure>             # Change to test directory1535pytest-impure>             original_cwd = Path.cwd()1536pytest-impure>             os.chdir(tmp_path)1537pytest-impure>     1538pytest-impure>             try:1539pytest-impure>                 # Create test services1540pytest-impure>                 flake_service = FlakeService()1541pytest-impure>                 test_gitea_service = MockGiteaService()1542pytest-impure>     1543pytest-impure>                 # Process updates with branch suffix1544pytest-impure> >               process_flake_updates(1545pytest-impure>                     flake_service,1546pytest-impure>                     test_gitea_service,1547pytest-impure>                     "",1548pytest-impure>                     "main",1549pytest-impure>                     "my-suffix",1550pytest-impure>                     auto_merge=False,1551pytest-impure>                 )1552pytest-impure> 1553pytest-impure> tests/test_process_flake_updates.py:465: 1554pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1555pytest-impure> 1556pytest-impure> flake_service = <update_flake_inputs.flake_service.FlakeService object at 0xfffff5ea89b0>1557pytest-impure> gitea_service = MockGiteaService(api_url='https://gitea.example.com', token='test-token', owner='test-owner', repo='test-repo', git_au...tions[bot]', git_committer_email='gitea-actions[bot]@noreply.gitea.io', merge_style='default', pr_creation_attempts=[])1558pytest-impure> exclude_patterns = '', base_branch = 'main', branch_suffix = 'my-suffix'1559pytest-impure> 1560pytest-impure>     def process_flake_updates(  # noqa: PLR09131561pytest-impure>         flake_service: FlakeService,1562pytest-impure>         gitea_service: GiteaService,1563pytest-impure>         exclude_patterns: str,1564pytest-impure>         base_branch: str,1565pytest-impure>         branch_suffix: str,1566pytest-impure>         *,1567pytest-impure>         auto_merge: bool,1568pytest-impure>     ) -> None:1569pytest-impure>         """Process all flake updates.1570pytest-impure>     1571pytest-impure>         Args:1572pytest-impure>             flake_service: Flake service instance1573pytest-impure>             gitea_service: Gitea service instance1574pytest-impure>             exclude_patterns: Patterns to exclude1575pytest-impure>             base_branch: Base branch for PRs1576pytest-impure>             branch_suffix: Optional suffix to append to branch names1577pytest-impure>             auto_merge: Whether to automatically merge PRs1578pytest-impure>     1579pytest-impure>         """1580pytest-impure>         # Discover flake files1581pytest-impure>         flakes = flake_service.discover_flake_files(exclude_patterns)1582pytest-impure>         if not flakes:1583pytest-impure>             logger.info("No flake files found")1584pytest-impure>             return1585pytest-impure>     1586pytest-impure>         logger.info("Found %d flake files to process", len(flakes))1587pytest-impure>     1588pytest-impure>         failed_inputs: list[str] = []1589pytest-impure>     1590pytest-impure>         # Process each flake1591pytest-impure>         for flake in flakes:1592pytest-impure>             logger.info("Processing flake: %s", flake.file_path)1593pytest-impure>             logger.info("Inputs to update: %s", ", ".join(flake.inputs))1594pytest-impure>     1595pytest-impure>             # Don't include '.' for root directory1596pytest-impure>             parent_path = Path(flake.file_path).parent1597pytest-impure>             parent_suffix = "" if parent_path == Path() else f" in {parent_path}"1598pytest-impure>             parent_branch = "" if parent_path == Path() else f"-{parent_path}"1599pytest-impure>             suffix = branch_suffix.strip().replace("/", "-").strip("-")1600pytest-impure>     1601pytest-impure>             # Update each input1602pytest-impure>             for input_name in flake.inputs:1603pytest-impure>                 try:1604pytest-impure>                     branch_name = f"update{parent_branch}-{input_name}"1605pytest-impure>                     branch_name = branch_name.replace("/", "-").strip("-")1606pytest-impure>                     if suffix:1607pytest-impure>                         branch_name = f"{branch_name}-{suffix}"1608pytest-impure>     1609pytest-impure>                     logger.info(1610pytest-impure>                         "Updating input %s in %s (branch: %s)",1611pytest-impure>                         input_name,1612pytest-impure>                         flake.file_path,1613pytest-impure>                         branch_name,1614pytest-impure>                     )1615pytest-impure>     1616pytest-impure>                     # Create worktree and update input1617pytest-impure>                     with gitea_service.worktree(branch_name, base_branch) as worktree_path:1618pytest-impure>                         # Update the input1619pytest-impure>                         flake_service.update_flake_input(1620pytest-impure>                             input_name,1621pytest-impure>                             flake.file_path,1622pytest-impure>                             str(worktree_path),1623pytest-impure>                         )1624pytest-impure>     1625pytest-impure>                         # Commit changes1626pytest-impure>                         commit_message = f"Update {input_name}{parent_suffix}"1627pytest-impure>                         if gitea_service.commit_changes(1628pytest-impure>                             branch_name,1629pytest-impure>                             commit_message,1630pytest-impure>                             worktree_path,1631pytest-impure>                         ):1632pytest-impure>                             # Create pull request1633pytest-impure>                             pr_title = commit_message1634pytest-impure>                             pr_body = (1635pytest-impure>                                 f"This PR updates the `{input_name}` input "1636pytest-impure>                                 f"in `{flake.file_path}`.\n\n"1637pytest-impure>                                 "Generated by update-flake-inputs action."1638pytest-impure>                             )1639pytest-impure>                             gitea_service.create_pull_request(1640pytest-impure>                                 branch_name,1641pytest-impure>                                 base_branch,1642pytest-impure>                                 pr_title,1643pytest-impure>                                 pr_body,1644pytest-impure>                                 auto_merge=auto_merge,1645pytest-impure>                             )1646pytest-impure>                         else:1647pytest-impure>                             logger.info(1648pytest-impure>                                 "No changes for input %s in %s",1649pytest-impure>                                 input_name,1650pytest-impure>                                 flake.file_path,1651pytest-impure>                             )1652pytest-impure>                             gitea_service.delete_branch(branch_name)1653pytest-impure>     1654pytest-impure>                 except Exception:1655pytest-impure>                     logger.exception(1656pytest-impure>                         "Failed to update input %s in %s",1657pytest-impure>                         input_name,1658pytest-impure>                         flake.file_path,1659pytest-impure>                     )1660pytest-impure>                     failed_inputs.append(f"{input_name} in {flake.file_path}")1661pytest-impure>     1662pytest-impure>         if failed_inputs:1663pytest-impure>             msg = f"Failed to process {len(failed_inputs)} input(s): {', '.join(failed_inputs)}"1664pytest-impure> >           raise UpdateFlakeInputsError(msg)1665pytest-impure> E           update_flake_inputs.exceptions.UpdateFlakeInputsError: Failed to process 1 input(s): flake-utils in flake.nix1666pytest-impure> 1667pytest-impure> src/update_flake_inputs/cli.py:268: UpdateFlakeInputsError1668pytest-impure> ----------------------------- Captured stdout call -----------------------------1669pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/test_branch_suffix0/.git/1670pytest-impure> [main (root-commit) 9bb82d8] Initial commit1671pytest-impure>  2 files changed, 53 insertions(+)1672pytest-impure>  create mode 100644 flake.lock1673pytest-impure>  create mode 100644 flake.nix1674pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/remote-test_branch_suffix0.git/1675pytest-impure> branch 'main' set up to track 'origin/main'.1676pytest-impure> branch 'update-flake-utils-my-suffix' set up to track 'origin/main'.1677pytest-impure> HEAD is now at 9bb82d8 Initial commit1678pytest-impure> ----------------------------- Captured stderr call -----------------------------1679pytest-impure> hint: Using 'master' as the name for the initial branch. This default branch name1680pytest-impure> hint: will change to "main" in Git 3.0. To configure the initial branch name1681pytest-impure> hint: to use in all of your new repositories, which will suppress this warning,1682pytest-impure> hint: call:1683pytest-impure> hint:1684pytest-impure> hint: 	git config --global init.defaultBranch <name>1685pytest-impure> hint:1686pytest-impure> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and1687pytest-impure> hint: 'development'. The just-created branch can be renamed via this command:1688pytest-impure> hint:1689pytest-impure> hint: 	git branch -m <name>1690pytest-impure> hint:1691pytest-impure> hint: Disable this message with "git config set advice.defaultBranchName false"1692pytest-impure> To /build/pytest-of-nixbld/pytest-0/remote-test_branch_suffix0.git1693pytest-impure>  * [new branch]      main -> main1694pytest-impure> From /build/pytest-of-nixbld/pytest-0/remote-test_branch_suffix01695pytest-impure>  * branch            main       -> FETCH_HEAD1696pytest-impure> Preparing worktree (new branch 'update-flake-utils-my-suffix')1697pytest-impure> ------------------------------ Captured log call -------------------------------1698pytest-impure> ERROR    update_flake_inputs.flake_service:flake_service.py:223 Failed to update flake input flake-utils in flake.nix. Exit code: 11699pytest-impure> Stdout: No stdout output1700pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features1701pytest-impure> error:1702pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-86qfcb6g/update-flake-utils-my-suffix?ref=refs/heads/update-flake-utils-my-suffix&rev=9bb82d891bb38b360c0c2b9f2a1a396a258e9dd8&shallow=1'1703pytest-impure> 1704pytest-impure>        … while updating the flake input 'flake-utils'1705pytest-impure> 1706pytest-impure>        … while fetching the input 'github:numtide/flake-utils'1707pytest-impure> 1708pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com1709pytest-impure> Traceback (most recent call last):1710pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input1711pytest-impure>     result = subprocess.run(1712pytest-impure>         [1713pytest-impure>     ...<10 lines>...1714pytest-impure>         check=True,1715pytest-impure>     )1716pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run1717pytest-impure>     raise CalledProcessError(retcode, process.args,1718pytest-impure>                              output=stdout, stderr=stderr)1719pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-86qfcb6g/update-flake-utils-my-suffix?shallow=1', 'flake-utils']' returned non-zero exit status 1.1720pytest-impure> ERROR    update_flake_inputs.cli:cli.py:259 Failed to update input flake-utils in flake.nix1721pytest-impure> Traceback (most recent call last):1722pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input1723pytest-impure>     result = subprocess.run(1724pytest-impure>         [1725pytest-impure>     ...<10 lines>...1726pytest-impure>         check=True,1727pytest-impure>     )1728pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run1729pytest-impure>     raise CalledProcessError(retcode, process.args,1730pytest-impure>                              output=stdout, stderr=stderr)1731pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-86qfcb6g/update-flake-utils-my-suffix?shallow=1', 'flake-utils']' returned non-zero exit status 1.1732pytest-impure> 1733pytest-impure> The above exception was the direct cause of the following exception:1734pytest-impure> 1735pytest-impure> Traceback (most recent call last):1736pytest-impure>   File "/build/src/src/update_flake_inputs/cli.py", line 223, in process_flake_updates1737pytest-impure>     flake_service.update_flake_input(1738pytest-impure>     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^1739pytest-impure>         input_name,1740pytest-impure>         ^^^^^^^^^^^1741pytest-impure>         flake.file_path,1742pytest-impure>         ^^^^^^^^^^^^^^^^1743pytest-impure>         str(worktree_path),1744pytest-impure>         ^^^^^^^^^^^^^^^^^^^1745pytest-impure>     )1746pytest-impure>     ^1747pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 235, in update_flake_input1748pytest-impure>     raise FlakeServiceError(msg) from e1749pytest-impure> update_flake_inputs.exceptions.FlakeServiceError: Failed to update flake input flake-utils in flake.nix: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-86qfcb6g/update-flake-utils-my-suffix?shallow=1', 'flake-utils']' returned non-zero exit status 1.1750pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features1751pytest-impure> error:1752pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-86qfcb6g/update-flake-utils-my-suffix?ref=refs/heads/update-flake-utils-my-suffix&rev=9bb82d891bb38b360c0c2b9f2a1a396a258e9dd8&shallow=1'1753pytest-impure> 1754pytest-impure>        … while updating the flake input 'flake-utils'1755pytest-impure> 1756pytest-impure>        … while fetching the input 'github:numtide/flake-utils'1757pytest-impure> 1758pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com1759pytest-impure> ____ TestProcessFlakeUpdates.test_fails_at_end_when_individual_input_fails _____1760pytest-impure> 1761pytest-impure> self = <tests.test_process_flake_updates.TestProcessFlakeUpdates object at 0xfffff5e4a8b0>1762pytest-impure> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/test_fails_at_end_when_individ0')1763pytest-impure> fixtures_path = PosixPath('/build/src/tests/fixtures')1764pytest-impure> 1765pytest-impure>         @pytest.mark.impure1766pytest-impure>         def test_fails_at_end_when_individual_input_fails(1767pytest-impure>             self,1768pytest-impure>             tmp_path: Path,1769pytest-impure>             fixtures_path: Path,1770pytest-impure>         ) -> None:1771pytest-impure>             """Test that the action continues updating other inputs but fails at the end."""1772pytest-impure>             flake_content = """{1773pytest-impure>       inputs = {1774pytest-impure>         flake-utils.url = "github:numtide/flake-utils";1775pytest-impure>       };1776pytest-impure>     1777pytest-impure>       outputs = { self, flake-utils }: {1778pytest-impure>         # Test flake with updatable input1779pytest-impure>       };1780pytest-impure>     }"""1781pytest-impure>     1782pytest-impure>             (tmp_path / "flake.nix").write_text(flake_content)1783pytest-impure>     1784pytest-impure>             shutil.copy(1785pytest-impure>                 fixtures_path / "minimal" / "flake.lock",1786pytest-impure>                 tmp_path / "flake.lock",1787pytest-impure>             )1788pytest-impure>     1789pytest-impure>             _setup_git_repo(tmp_path)1790pytest-impure>     1791pytest-impure>             original_cwd = Path.cwd()1792pytest-impure>             os.chdir(tmp_path)1793pytest-impure>     1794pytest-impure>             try:1795pytest-impure>                 # FailingFlakeService injects "bad-input" during discovery and1796pytest-impure>                 # raises when asked to update it, simulating a 403 or dead ref1797pytest-impure>                 flake_service = FailingFlakeService(fail_inputs=["bad-input"])1798pytest-impure>                 test_gitea_service = MockGiteaService()1799pytest-impure>     1800pytest-impure>                 with pytest.raises(UpdateFlakeInputsError, match="Failed to process 1 input"):1801pytest-impure> >                   process_flake_updates(1802pytest-impure>                         flake_service,1803pytest-impure>                         test_gitea_service,1804pytest-impure>                         "",1805pytest-impure>                         "main",1806pytest-impure>                         "",1807pytest-impure>                         auto_merge=False,1808pytest-impure>                     )1809pytest-impure> 1810pytest-impure> tests/test_process_flake_updates.py:597: 1811pytest-impure> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1812pytest-impure> 1813pytest-impure> flake_service = <tests.test_process_flake_updates.FailingFlakeService object at 0xfffff624ecf0>1814pytest-impure> gitea_service = MockGiteaService(api_url='https://gitea.example.com', token='test-token', owner='test-owner', repo='test-repo', git_au...tions[bot]', git_committer_email='gitea-actions[bot]@noreply.gitea.io', merge_style='default', pr_creation_attempts=[])1815pytest-impure> exclude_patterns = '', base_branch = 'main', branch_suffix = ''1816pytest-impure> 1817pytest-impure>     def process_flake_updates(  # noqa: PLR09131818pytest-impure>         flake_service: FlakeService,1819pytest-impure>         gitea_service: GiteaService,1820pytest-impure>         exclude_patterns: str,1821pytest-impure>         base_branch: str,1822pytest-impure>         branch_suffix: str,1823pytest-impure>         *,1824pytest-impure>         auto_merge: bool,1825pytest-impure>     ) -> None:1826pytest-impure>         """Process all flake updates.1827pytest-impure>     1828pytest-impure>         Args:1829pytest-impure>             flake_service: Flake service instance1830pytest-impure>             gitea_service: Gitea service instance1831pytest-impure>             exclude_patterns: Patterns to exclude1832pytest-impure>             base_branch: Base branch for PRs1833pytest-impure>             branch_suffix: Optional suffix to append to branch names1834pytest-impure>             auto_merge: Whether to automatically merge PRs1835pytest-impure>     1836pytest-impure>         """1837pytest-impure>         # Discover flake files1838pytest-impure>         flakes = flake_service.discover_flake_files(exclude_patterns)1839pytest-impure>         if not flakes:1840pytest-impure>             logger.info("No flake files found")1841pytest-impure>             return1842pytest-impure>     1843pytest-impure>         logger.info("Found %d flake files to process", len(flakes))1844pytest-impure>     1845pytest-impure>         failed_inputs: list[str] = []1846pytest-impure>     1847pytest-impure>         # Process each flake1848pytest-impure>         for flake in flakes:1849pytest-impure>             logger.info("Processing flake: %s", flake.file_path)1850pytest-impure>             logger.info("Inputs to update: %s", ", ".join(flake.inputs))1851pytest-impure>     1852pytest-impure>             # Don't include '.' for root directory1853pytest-impure>             parent_path = Path(flake.file_path).parent1854pytest-impure>             parent_suffix = "" if parent_path == Path() else f" in {parent_path}"1855pytest-impure>             parent_branch = "" if parent_path == Path() else f"-{parent_path}"1856pytest-impure>             suffix = branch_suffix.strip().replace("/", "-").strip("-")1857pytest-impure>     1858pytest-impure>             # Update each input1859pytest-impure>             for input_name in flake.inputs:1860pytest-impure>                 try:1861pytest-impure>                     branch_name = f"update{parent_branch}-{input_name}"1862pytest-impure>                     branch_name = branch_name.replace("/", "-").strip("-")1863pytest-impure>                     if suffix:1864pytest-impure>                         branch_name = f"{branch_name}-{suffix}"1865pytest-impure>     1866pytest-impure>                     logger.info(1867pytest-impure>                         "Updating input %s in %s (branch: %s)",1868pytest-impure>                         input_name,1869pytest-impure>                         flake.file_path,1870pytest-impure>                         branch_name,1871pytest-impure>                     )1872pytest-impure>     1873pytest-impure>                     # Create worktree and update input1874pytest-impure>                     with gitea_service.worktree(branch_name, base_branch) as worktree_path:1875pytest-impure>                         # Update the input1876pytest-impure>                         flake_service.update_flake_input(1877pytest-impure>                             input_name,1878pytest-impure>                             flake.file_path,1879pytest-impure>                             str(worktree_path),1880pytest-impure>                         )1881pytest-impure>     1882pytest-impure>                         # Commit changes1883pytest-impure>                         commit_message = f"Update {input_name}{parent_suffix}"1884pytest-impure>                         if gitea_service.commit_changes(1885pytest-impure>                             branch_name,1886pytest-impure>                             commit_message,1887pytest-impure>                             worktree_path,1888pytest-impure>                         ):1889pytest-impure>                             # Create pull request1890pytest-impure>                             pr_title = commit_message1891pytest-impure>                             pr_body = (1892pytest-impure>                                 f"This PR updates the `{input_name}` input "1893pytest-impure>                                 f"in `{flake.file_path}`.\n\n"1894pytest-impure>                                 "Generated by update-flake-inputs action."1895pytest-impure>                             )1896pytest-impure>                             gitea_service.create_pull_request(1897pytest-impure>                                 branch_name,1898pytest-impure>                                 base_branch,1899pytest-impure>                                 pr_title,1900pytest-impure>                                 pr_body,1901pytest-impure>                                 auto_merge=auto_merge,1902pytest-impure>                             )1903pytest-impure>                         else:1904pytest-impure>                             logger.info(1905pytest-impure>                                 "No changes for input %s in %s",1906pytest-impure>                                 input_name,1907pytest-impure>                                 flake.file_path,1908pytest-impure>                             )1909pytest-impure>                             gitea_service.delete_branch(branch_name)1910pytest-impure>     1911pytest-impure>                 except Exception:1912pytest-impure>                     logger.exception(1913pytest-impure>                         "Failed to update input %s in %s",1914pytest-impure>                         input_name,1915pytest-impure>                         flake.file_path,1916pytest-impure>                     )1917pytest-impure>                     failed_inputs.append(f"{input_name} in {flake.file_path}")1918pytest-impure>     1919pytest-impure>         if failed_inputs:1920pytest-impure>             msg = f"Failed to process {len(failed_inputs)} input(s): {', '.join(failed_inputs)}"1921pytest-impure> >           raise UpdateFlakeInputsError(msg)1922pytest-impure> E           update_flake_inputs.exceptions.UpdateFlakeInputsError: Failed to process 2 input(s): bad-input in flake.nix, flake-utils in flake.nix1923pytest-impure> 1924pytest-impure> src/update_flake_inputs/cli.py:268: UpdateFlakeInputsError1925pytest-impure> 1926pytest-impure> During handling of the above exception, another exception occurred:1927pytest-impure> 1928pytest-impure> self = <tests.test_process_flake_updates.TestProcessFlakeUpdates object at 0xfffff5e4a8b0>1929pytest-impure> tmp_path = PosixPath('/build/pytest-of-nixbld/pytest-0/test_fails_at_end_when_individ0')1930pytest-impure> fixtures_path = PosixPath('/build/src/tests/fixtures')1931pytest-impure> 1932pytest-impure>         @pytest.mark.impure1933pytest-impure>         def test_fails_at_end_when_individual_input_fails(1934pytest-impure>             self,1935pytest-impure>             tmp_path: Path,1936pytest-impure>             fixtures_path: Path,1937pytest-impure>         ) -> None:1938pytest-impure>             """Test that the action continues updating other inputs but fails at the end."""1939pytest-impure>             flake_content = """{1940pytest-impure>       inputs = {1941pytest-impure>         flake-utils.url = "github:numtide/flake-utils";1942pytest-impure>       };1943pytest-impure>     1944pytest-impure>       outputs = { self, flake-utils }: {1945pytest-impure>         # Test flake with updatable input1946pytest-impure>       };1947pytest-impure>     }"""1948pytest-impure>     1949pytest-impure>             (tmp_path / "flake.nix").write_text(flake_content)1950pytest-impure>     1951pytest-impure>             shutil.copy(1952pytest-impure>                 fixtures_path / "minimal" / "flake.lock",1953pytest-impure>                 tmp_path / "flake.lock",1954pytest-impure>             )1955pytest-impure>     1956pytest-impure>             _setup_git_repo(tmp_path)1957pytest-impure>     1958pytest-impure>             original_cwd = Path.cwd()1959pytest-impure>             os.chdir(tmp_path)1960pytest-impure>     1961pytest-impure>             try:1962pytest-impure>                 # FailingFlakeService injects "bad-input" during discovery and1963pytest-impure>                 # raises when asked to update it, simulating a 403 or dead ref1964pytest-impure>                 flake_service = FailingFlakeService(fail_inputs=["bad-input"])1965pytest-impure>                 test_gitea_service = MockGiteaService()1966pytest-impure>     1967pytest-impure> >               with pytest.raises(UpdateFlakeInputsError, match="Failed to process 1 input"):1968pytest-impure>                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^1969pytest-impure> E               AssertionError: Regex pattern did not match.1970pytest-impure> E                 Expected regex: 'Failed to process 1 input'1971pytest-impure> E                 Actual message: 'Failed to process 2 input(s): bad-input in flake.nix, flake-utils in flake.nix'1972pytest-impure> 1973pytest-impure> tests/test_process_flake_updates.py:596: AssertionError1974pytest-impure> ----------------------------- Captured stdout call -----------------------------1975pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/test_fails_at_end_when_individ0/.git/1976pytest-impure> [main (root-commit) ab6bc56] Initial commit1977pytest-impure>  2 files changed, 53 insertions(+)1978pytest-impure>  create mode 100644 flake.lock1979pytest-impure>  create mode 100644 flake.nix1980pytest-impure> Initialized empty Git repository in /build/pytest-of-nixbld/pytest-0/remote-test_fails_at_end_when_individ0.git/1981pytest-impure> branch 'main' set up to track 'origin/main'.1982pytest-impure> branch 'update-bad-input' set up to track 'origin/main'.1983pytest-impure> HEAD is now at ab6bc56 Initial commit1984pytest-impure> branch 'update-flake-utils' set up to track 'origin/main'.1985pytest-impure> HEAD is now at ab6bc56 Initial commit1986pytest-impure> ----------------------------- Captured stderr call -----------------------------1987pytest-impure> hint: Using 'master' as the name for the initial branch. This default branch name1988pytest-impure> hint: will change to "main" in Git 3.0. To configure the initial branch name1989pytest-impure> hint: to use in all of your new repositories, which will suppress this warning,1990pytest-impure> hint: call:1991pytest-impure> hint:1992pytest-impure> hint: 	git config --global init.defaultBranch <name>1993pytest-impure> hint:1994pytest-impure> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and1995pytest-impure> hint: 'development'. The just-created branch can be renamed via this command:1996pytest-impure> hint:1997pytest-impure> hint: 	git branch -m <name>1998pytest-impure> hint:1999pytest-impure> hint: Disable this message with "git config set advice.defaultBranchName false"2000pytest-impure> To /build/pytest-of-nixbld/pytest-0/remote-test_fails_at_end_when_individ0.git2001pytest-impure>  * [new branch]      main -> main2002pytest-impure> From /build/pytest-of-nixbld/pytest-0/remote-test_fails_at_end_when_individ02003pytest-impure>  * branch            main       -> FETCH_HEAD2004pytest-impure> Preparing worktree (new branch 'update-bad-input')2005pytest-impure> From /build/pytest-of-nixbld/pytest-0/remote-test_fails_at_end_when_individ02006pytest-impure>  * branch            main       -> FETCH_HEAD2007pytest-impure> Preparing worktree (new branch 'update-flake-utils')2008pytest-impure> ------------------------------ Captured log call -------------------------------2009pytest-impure> ERROR    update_flake_inputs.cli:cli.py:259 Failed to update input bad-input in flake.nix2010pytest-impure> Traceback (most recent call last):2011pytest-impure>   File "/build/src/src/update_flake_inputs/cli.py", line 223, in process_flake_updates2012pytest-impure>     flake_service.update_flake_input(2013pytest-impure>     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^2014pytest-impure>         input_name,2015pytest-impure>         ^^^^^^^^^^^2016pytest-impure>         flake.file_path,2017pytest-impure>         ^^^^^^^^^^^^^^^^2018pytest-impure>         str(worktree_path),2019pytest-impure>         ^^^^^^^^^^^^^^^^^^^2020pytest-impure>     )2021pytest-impure>     ^2022pytest-impure>   File "/build/src/tests/test_process_flake_updates.py", line 635, in update_flake_input2023pytest-impure>     raise FlakeServiceError(msg)2024pytest-impure> update_flake_inputs.exceptions.FlakeServiceError: Simulated failure updating bad-input2025pytest-impure> ERROR    update_flake_inputs.flake_service:flake_service.py:223 Failed to update flake input flake-utils in flake.nix. Exit code: 12026pytest-impure> Stdout: No stdout output2027pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features2028pytest-impure> error:2029pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-glyc96v6/update-flake-utils?ref=refs/heads/update-flake-utils&rev=ab6bc5674366df97d871a1832ebbc1e7ffabe138&shallow=1'2030pytest-impure> 2031pytest-impure>        … while updating the flake input 'flake-utils'2032pytest-impure> 2033pytest-impure>        … while fetching the input 'github:numtide/flake-utils'2034pytest-impure> 2035pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com2036pytest-impure> Traceback (most recent call last):2037pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input2038pytest-impure>     result = subprocess.run(2039pytest-impure>         [2040pytest-impure>     ...<10 lines>...2041pytest-impure>         check=True,2042pytest-impure>     )2043pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run2044pytest-impure>     raise CalledProcessError(retcode, process.args,2045pytest-impure>                              output=stdout, stderr=stderr)2046pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-glyc96v6/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.2047pytest-impure> ERROR    update_flake_inputs.cli:cli.py:259 Failed to update input flake-utils in flake.nix2048pytest-impure> Traceback (most recent call last):2049pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 191, in update_flake_input2050pytest-impure>     result = subprocess.run(2051pytest-impure>         [2052pytest-impure>     ...<10 lines>...2053pytest-impure>         check=True,2054pytest-impure>     )2055pytest-impure>   File "/nix/store/xvl4pzq8il9wbdspslib7hs5wlhz73cf-python3-3.13.13-env/lib/python3.13/subprocess.py", line 577, in run2056pytest-impure>     raise CalledProcessError(retcode, process.args,2057pytest-impure>                              output=stdout, stderr=stderr)2058pytest-impure> subprocess.CalledProcessError: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-glyc96v6/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.2059pytest-impure> 2060pytest-impure> The above exception was the direct cause of the following exception:2061pytest-impure> 2062pytest-impure> Traceback (most recent call last):2063pytest-impure>   File "/build/src/src/update_flake_inputs/cli.py", line 223, in process_flake_updates2064pytest-impure>     flake_service.update_flake_input(2065pytest-impure>     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^2066pytest-impure>         input_name,2067pytest-impure>         ^^^^^^^^^^^2068pytest-impure>         flake.file_path,2069pytest-impure>         ^^^^^^^^^^^^^^^^2070pytest-impure>         str(worktree_path),2071pytest-impure>         ^^^^^^^^^^^^^^^^^^^2072pytest-impure>     )2073pytest-impure>     ^2074pytest-impure>   File "/build/src/tests/test_process_flake_updates.py", line 636, in update_flake_input2075pytest-impure>     super().update_flake_input(input_name, flake_file, work_dir)2076pytest-impure>     ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2077pytest-impure>   File "/build/src/src/update_flake_inputs/flake_service.py", line 235, in update_flake_input2078pytest-impure>     raise FlakeServiceError(msg) from e2079pytest-impure> update_flake_inputs.exceptions.FlakeServiceError: Failed to update flake input flake-utils in flake.nix: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-glyc96v6/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.2080pytest-impure> Stderr: warning: you don't have Internet access; disabling some network-dependent features2081pytest-impure> error:2082pytest-impure>        … while updating the lock file of flake 'git+file:///build/flake-update-glyc96v6/update-flake-utils?ref=refs/heads/update-flake-utils&rev=ab6bc5674366df97d871a1832ebbc1e7ffabe138&shallow=1'2083pytest-impure> 2084pytest-impure>        … while updating the flake input 'flake-utils'2085pytest-impure> 2086pytest-impure>        … while fetching the input 'github:numtide/flake-utils'2087pytest-impure> 2088pytest-impure>        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com2089pytest-impure> =========================== short test summary info ============================2090pytest-impure> FAILED tests/test_flake_service.py::TestFlakeService::test_update_flake_input2091pytest-impure> FAILED tests/test_flake_service.py::TestFlakeService::test_update_subflake_input2092pytest-impure> FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_with_updatable_flake_input2093pytest-impure> FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_worktree_based_on_base_branch_not_head2094pytest-impure> FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_custom_git_author_committer2095pytest-impure> FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_branch_suffix2096pytest-impure> FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_fails_at_end_when_individual_input_fails2097pytest-impure> 7 failed, 16 passed in 74.17s (0:01:14)2098error: Cannot build '/nix/store/ghfwljvv218bclhvr7d6qg36f2xlj2x2-pytest-impure.drv'.2099       Reason: builder failed with exit code 1.2100       Last 25 log lines:2101       >     ^2102       >   File "/build/src/tests/test_process_flake_updates.py", line 636, in update_flake_input2103       >     super().update_flake_input(input_name, flake_file, work_dir)2104       >     ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^2105       >   File "/build/src/src/update_flake_inputs/flake_service.py", line 235, in update_flake_input2106       >     raise FlakeServiceError(msg) from e2107       > update_flake_inputs.exceptions.FlakeServiceError: Failed to update flake input flake-utils in flake.nix: Command '['nix', 'flake', 'update', '--flake', 'git+file:///build/flake-update-glyc96v6/update-flake-utils?shallow=1', 'flake-utils']' returned non-zero exit status 1.2108       > Stderr: warning: you don't have Internet access; disabling some network-dependent features2109       > error:2110       >        … while updating the lock file of flake 'git+file:///build/flake-update-glyc96v6/update-flake-utils?ref=refs/heads/update-flake-utils&rev=ab6bc5674366df97d871a1832ebbc1e7ffabe138&shallow=1'2111       >2112       >        … while updating the flake input 'flake-utils'2113       >2114       >        … while fetching the input 'github:numtide/flake-utils'2115       >2116       >        error: unable to download 'https://api.github.com/repos/numtide/flake-utils/commits/HEAD': Could not resolve hostname (6) Could not resolve host: api.github.com2117       > =========================== short test summary info ============================2118       > FAILED tests/test_flake_service.py::TestFlakeService::test_update_flake_input2119       > FAILED tests/test_flake_service.py::TestFlakeService::test_update_subflake_input2120       > FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_with_updatable_flake_input2121       > FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_worktree_based_on_base_branch_not_head2122       > FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_custom_git_author_committer2123       > FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_branch_suffix2124       > FAILED tests/test_process_flake_updates.py::TestProcessFlakeUpdates::test_fails_at_end_when_individual_input_fails2125       > 7 failed, 16 passed in 74.17s (0:01:14)2126       For full logs, run:2127         nix log /nix/store/ghfwljvv218bclhvr7d6qg36f2xlj2x2-pytest-impure.drv2128error: build of resolved derivation '/nix/store/ghfwljvv218bclhvr7d6qg36f2xlj2x2-pytest-impure.drv' failed212921302131nixbot: transient error detected, retrying once21322133this derivation will be built:2134  /nix/store/x7hglhwnlmjs8d467a6hkin10445ybwa-pytest-impure.drv2135Failed to find a machine for remote build!2136derivation: ghfwljvv218bclhvr7d6qg36f2xlj2x2-pytest-impure.drv2137required (system, features): (aarch64-linux, [ca-derivations])21383 available machines:2139(systems, maxjobs, supportedFeatures, mandatoryFeatures)2140([aarch64-darwin, x86_64-darwin], 8, [big-parallel, recursive-nix], [])2141([i686-linux, x86_64-linux], 128, [big-parallel, kvm, nixos-test, recursive-nix, uid-range], [])2142([aarch64-linux], 128, [big-parallel, kvm, nixos-test, recursive-nix, uid-range], [])2143building '/nix/store/ghfwljvv218bclhvr7d6qg36f2xlj2x2-pytest-impure.drv'2144pytest-impure> tribuchet: building on eliza