remote build: internal error when build is cancelled on launchpad
Metadata
Current evaluation
No evaluation has been recorded for this issue yet.
Issue body
### Check existing issues
- [x] I've verified that this bug isn't described by any existing issues.
### Bug description
I started a remote-build. 3 out of the builds failed, and I manually cancelled the 4th. ([link](https://launchpad.net/~sed-i/sed-i-craft-remote-build/+snap/snapcraft-nushell-75301ebd25a0f7bfc4127cbebfb72467))
As soon as I cancelled the build, snapcraft returned with the following error:
```
> snapcraft remote-build
remote-build is experimental and is subject to change. Use with caution.
All data sent to remote builders will be publicly available. Are you sure you want to continue? [y/N]: y
snapcraft internal error: MissingSchema("Invalid URL 'None': No scheme supplied. Perhaps you meant https://None?")
```
### Steps to reproduce
1. Start a multi platform build for a buggy snap. In my case it was an "unbounded variable" - used a variable I didn't set.
2. Let a few build fail, then manually cancel the remaining one.
### Environment
Ubuntu 24.04.3 LTS on multipass
snapcraft 8.13.2 (16570) latest/stable
### snapcraft.yaml
```yaml
I don't think it's specific to a snap
```
### Log output
```shell
2026-01-17 02:17:26.571 Stopped: amd64, arm64, armhf, s390x; Building: riscv64
2026-01-17 02:17:58.213 Stopped: amd64, arm64, armhf, s390x; Building: riscv64
2026-01-17 02:18:29.557 Stopped: amd64, arm64, armhf, s390x; Building: riscv64
2026-01-17 02:19:01.806 Stopped: amd64, arm64, armhf, s390x; Building: riscv64
2026-01-17 02:19:34.359 Stopped: amd64, arm64, armhf, s390x; Building: riscv64
2026-01-17 02:20:06.421 Stopped: amd64, arm64, armhf, riscv64, s390x
2026-01-17 02:20:06.421 Fetching build artifacts...
2026-01-17 02:20:08.162 Fetching 5 build logs...
2026-01-17 02:20:08.167 snapcraft internal error: MissingSchema("Invalid URL 'None': No scheme supplied. Perhaps you meant https://None?")
2026-01-17 02:20:08.171 Traceback (most recent call last):
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_application/application.py", line 663, in run
2026-01-17 02:20:08.171 return_code = self._run_inner()
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/snapcraft/application.py", line 183, in _run_inner
2026-01-17 02:20:08.171 return_code = super()._run_inner()
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_application/application.py", line 640, in _run_inner
2026-01-17 02:20:08.171 return_code = dispatcher.run() or os.EX_OK
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_cli/dispatcher.py", line 564, in run
2026-01-17 02:20:08.171 return self._loaded_command.run(self._parsed_command_args)
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_application/commands/base.py", line 222, in run
2026-01-17 02:20:08.171 result = self._run(parsed_args, **kwargs) or result
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_application/commands/remote.py", line 165, in _run
2026-01-17 02:20:08.171 returncode = self._monitor_and_complete(builds=builds)
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_application/commands/remote.py", line 227, in _monitor_and_complete
2026-01-17 02:20:08.171 logs = builder.fetch_logs(pathlib.Path.cwd())
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_application/services/remotebuild.py", line 194, in fetch_logs
2026-01-17 02:20:08.171 self.request.download_files_with_progress(log_downloads)
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_application/services/request.py", line 103, in download_files_with_progress
2026-01-17 02:20:08.171 sizes = [next(dl) for dl in downloads]
2026-01-17 02:20:08.171 ^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/craft_application/services/request.py", line 68, in download_chunks
2026-01-17 02:20:08.171 with self.get(url, stream=True) as download:
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/requests/sessions.py", line 602, in get
2026-01-17 02:20:08.171 return self.request("GET", url, **kwargs)
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/requests/sessions.py", line 575, in request
2026-01-17 02:20:08.171 prep = self.prepare_request(req)
2026-01-17 02:20:08.171 ^^^^^^^^^^^^^^^^^^^^^^^^^
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/requests/sessions.py", line 484, in prepare_request
2026-01-17 02:20:08.171 p.prepare(
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/requests/models.py", line 367, in prepare
2026-01-17 02:20:08.171 self.prepare_url(url, params)
2026-01-17 02:20:08.171 File "/snap/snapcraft/16570/lib/python3.12/site-packages/requests/models.py", line 438, in prepare_url
2026-01-17 02:20:08.171 raise MissingSchema(
2026-01-17 02:20:08.171 requests.exceptions.MissingSchema: Invalid URL 'None': No scheme supplied. Perhaps you meant https://None?
2026-01-17 02:20:08.171 Full execution log: '/home/ubuntu/.local/state/snapcraft/log/snapcraft-20260117-010959.810411.log'
```
Evaluation history
No evaluation history available.