diff --git a/Dockerfile.template b/Dockerfile.template index 3e77ec986..a0eec25b2 100644 --- a/Dockerfile.template +++ b/Dockerfile.template @@ -11,8 +11,9 @@ LABEL build-date-iso8601="${build_date}" WORKDIR /root +# due https://github.com/moby/moby/issues/47021 we cannot have /root/.cache leftover as it causes random errors in CI RUN --mount=type=bind,source=${tar_path}/${tar_name},target=/tmp/${tar_name} \ - pip install --no-cache-dir /tmp/${tar_name}[full] + pip install --no-cache-dir /tmp/${tar_name}[full] && rm -rf /root/.cache ENTRYPOINT ["b2"] CMD ["--help"] diff --git a/b2/_internal/_cli/autocomplete_cache.py b/b2/_internal/_cli/autocomplete_cache.py index 443f759a8..ca0e517d3 100644 --- a/b2/_internal/_cli/autocomplete_cache.py +++ b/b2/_internal/_cli/autocomplete_cache.py @@ -50,15 +50,14 @@ def current_state_identifier(self) -> str: class HomeCachePickleStore(PickleStore): _dir: pathlib.Path - def __init__(self, dir: pathlib.Path | None = None) -> None: - self._dir = dir + def __init__(self, dir_path: pathlib.Path | None = None) -> None: + self._dir = dir_path def _cache_dir(self) -> pathlib.Path: - if self._dir: - return self._dir - self._dir = pathlib.Path( - platformdirs.user_cache_dir(appname='b2', appauthor='backblaze') - ) / 'autocomplete' + if not self._dir: + self._dir = pathlib.Path( + platformdirs.user_cache_dir(appname='b2', appauthor='backblaze') + ) / 'autocomplete' return self._dir def _fname(self, identifier: str) -> str: @@ -74,10 +73,10 @@ def set_pickle(self, identifier: str, data: bytes) -> None: """Sets the pickle for identifier if it doesn't exist. When a new pickle is added, old ones are removed.""" - dir = self._cache_dir() - os.makedirs(dir, exist_ok=True) - path = dir / self._fname(identifier) - for file in dir.glob('b2-autocomplete-cache-*.pickle'): + dir_path = self._cache_dir() + dir_path.mkdir(parents=True, exist_ok=True) + path = dir_path / self._fname(identifier) + for file in dir_path.glob('b2-autocomplete-cache-*.pickle'): file.unlink() with open(path, 'wb') as f: f.write(data) diff --git a/changelog.d/+docker_mkdir_fail.infrastructure.md b/changelog.d/+docker_mkdir_fail.infrastructure.md new file mode 100644 index 000000000..d3750be17 --- /dev/null +++ b/changelog.d/+docker_mkdir_fail.infrastructure.md @@ -0,0 +1 @@ +Fix CI failing on `mkdir` when testing docker image. diff --git a/noxfile.py b/noxfile.py index d95fe7bee..b184a5443 100644 --- a/noxfile.py +++ b/noxfile.py @@ -609,11 +609,11 @@ def generate_dockerfile(session): def run_docker_tests(session, image_tag): """Run unittests against a docker image.""" + docker_run_cmd = "docker run -i -v b2:/root/ -v /tmp:/tmp:rw --env-file ENVFILE" run_integration_test( session, [ "--sut", - "docker run -i -v b2:/root -v /tmp:/tmp:rw " - f"--env-file ENVFILE {image_tag}", + f"{docker_run_cmd} {image_tag}", "--env-file-cmd-placeholder", "ENVFILE", ] @@ -622,9 +622,7 @@ def run_docker_tests(session, image_tag): run_integration_test( session, [ "--sut", - "docker run -i -v b2:/root -v /tmp:/tmp:rw " - f"--entrypoint {binary_name} " - f"--env-file ENVFILE {image_tag}", + f"{docker_run_cmd} --entrypoint {binary_name} {image_tag}", "--env-file-cmd-placeholder", "ENVFILE", ]