Package: src:towncrier
Version: 24.8.0-2
Severity: serious
Tags: ftbfs trixie sid

Dear maintainer:

During a rebuild of all packages in unstable, your package failed to build:

--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --with python3 --buildsystem=pybuild
   dh_auto_clean -O--buildsystem=pybuild
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild
 debian/rules binary
dh binary --with python3 --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   dh_auto_configure -O--buildsystem=pybuild
   dh_auto_build -O--buildsystem=pybuild
I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" 
module
I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation 
--wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13  
* Building wheel...
Successfully built towncrier-24.8.0-py3-none-any.whl
I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.13 with 
"installer" module
   dh_auto_test -O--buildsystem=pybuild
I: pybuild base:311: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; 
python3.13 -m pytest "/<<PKGBUILDDIR>>"/src/
============================= test session starts ==============================
platform linux -- Python 3.13.2, pytest-8.3.4, pluggy-1.5.0
rootdir: /<<PKGBUILDDIR>>
configfile: pyproject.toml
plugins: typeguard-4.4.1
collected 148 items

../../../src/towncrier/test/test_build.py .................F............ [ 20%]
.F..........                                                             [ 28%]
../../../src/towncrier/test/test_builder.py .................            [ 39%]
../../../src/towncrier/test/test_check.py ..................F.           [ 53%]
../../../src/towncrier/test/test_create.py ............................. [ 72%]
                                                                         [ 72%]
../../../src/towncrier/test/test_format.py ......                        [ 77%]
../../../src/towncrier/test/test_git.py .                                [ 77%]
../../../src/towncrier/test/test_project.py .............                [ 86%]
../../../src/towncrier/test/test_settings.py ......FF.......             [ 96%]
../../../src/towncrier/test/test_write.py .....                          [100%]

=================================== FAILURES ===================================
__________________________ TestCli.test_needs_config ___________________________

self = <towncrier.test.test_build.TestCli testMethod=test_needs_config>

    def test_needs_config(self):
        """
        Towncrier needs a configuration file.
        """
        runner = CliRunner()
    
        with runner.isolated_filesystem():
            result = runner.invoke(_main, ["--draft"])
    
        self.assertEqual(1, result.exit_code, result.output)
>       self.assertTrue(result.output.startswith("No configuration file 
> found."))

../../../src/towncrier/test/test_build.py:522: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/twisted/trial/_synctest.py:402: in assertTrue
    super().assertTrue(condition, msg)
E   twisted.trial.unittest.FailTest: False is not true
_____________ TestCli.test_singlefile_errors_and_explains_cleanly ______________

self = <towncrier.test.test_build.TestCli 
testMethod=test_singlefile_errors_and_explains_cleanly>
runner = <click.testing.CliRunner object at 0x7fc04247dd30>

    @with_project(
        config="""
        [tool.towncrier]
        singlefile="fail!"
        """
    )
    def test_singlefile_errors_and_explains_cleanly(self, runner):
        """
        Failure to find the configuration file results in a clean explanation
        without a traceback.
        """
        result = runner.invoke(_main)
    
        self.assertEqual(1, result.exit_code)
>       self.assertEqual(
            "`singlefile` is not a valid option. Did you mean `single_file`?\n",
            result.output,
        )

../../../src/towncrier/test/test_build.py:817: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/twisted/trial/_synctest.py:444: in assertEqual
    super().assertEqual(first, second, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <towncrier.test.test_build.TestCli 
testMethod=test_singlefile_errors_and_explains_cleanly>
msg = "'`singlefile` is not a valid option. Did you mean `single_file`?\\n' != 
''\n- `singlefile` is not a valid option. Did you mean `single_file`?\n"

    def fail(self, msg: Optional[object] = None) -> NoReturn:
        """
        Absolutely fail the test.  Do not pass go, do not collect $200.
    
        @param msg: the message that will be displayed as the reason for the
        failure
        """
>       raise self.failureException(msg)
E       twisted.trial.unittest.FailTest: '`singlefile` is not a valid option. 
Did you mean `single_file`?\n' != ''
E       - `singlefile` is not a valid option. Did you mean `single_file`?

/usr/lib/python3/dist-packages/twisted/trial/_synctest.py:381: FailTest
_________________ TestChecker.test_none_stdout_encoding_works __________________

self = <towncrier.test.test_check.TestChecker 
testMethod=test_none_stdout_encoding_works>

    def test_none_stdout_encoding_works(self):
        """
        No failure when output is piped causing None encoding for stdout.
        """
        runner = CliRunner()
    
        with runner.isolated_filesystem():
            create_project("pyproject.toml", main_branch="master")
    
            fragment_path = "foo/newsfragments/1234.feature"
            with open(fragment_path, "w") as f:
                f.write("Adds gravity back")
    
            call(["git", "add", fragment_path])
            call(["git", "commit", "-m", "add a newsfragment"])
    
>           runner = CliRunner(mix_stderr=False)
E           TypeError: CliRunner.__init__() got an unexpected keyword argument 
'mix_stderr'

../../../src/towncrier/test/test_check.py:260: TypeError
----------------------------- Captured stdout call -----------------------------
Initialized empty Git repository in /tmp/tmpruz0jsvg/.git/
[master (root-commit) 1764702] Initial Commit
 3 files changed, 4 insertions(+)
 create mode 100644 foo/__init__.py
 create mode 100644 foo/newsfragments/123.feature
 create mode 100644 pyproject.toml
[otherbranch b9fd99e] add a newsfragment
 1 file changed, 1 insertion(+)
 create mode 100644 foo/newsfragments/1234.feature
----------------------------- Captured stderr call -----------------------------
Switched to a new branch 'otherbranch'
_____________ TomlSettingsTests.test_load_explicit_missing_config ______________

self = <towncrier.test.test_settings.TomlSettingsTests 
testMethod=test_load_explicit_missing_config>
runner = <click.testing.CliRunner object at 0x7fc041787380>

    @with_isolated_runner
    def test_load_explicit_missing_config(self, runner: CliRunner):
        """
        Calling the CLI with an incorrect explicit configuration file will exit 
with
        code 1 and an informative message is sent to standard output.
        """
        config = "not-there.toml"
        result = runner.invoke(cli, ("--config", config))
    
        self.assertEqual(result.exit_code, 1)
>       self.assertEqual(
            result.output,
            f"Configuration file '{os.path.abspath(config)}' not found.\n",
        )

../../../src/towncrier/test/test_settings.py:224: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/twisted/trial/_synctest.py:444: in assertEqual
    super().assertEqual(first, second, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <towncrier.test.test_settings.TomlSettingsTests 
testMethod=test_load_explicit_missing_config>
msg = '\'\' != "Configuration file \'/tmp/tmpr3vzhu07/not-there.toml\' not 
found.\\n"\n+ Configuration file \'/tmp/tmpr3vzhu07/not-there.toml\' not 
found.\n'

    def fail(self, msg: Optional[object] = None) -> NoReturn:
        """
        Absolutely fail the test.  Do not pass go, do not collect $200.
    
        @param msg: the message that will be displayed as the reason for the
        failure
        """
>       raise self.failureException(msg)
E       twisted.trial.unittest.FailTest: '' != "Configuration file 
'/tmp/tmpr3vzhu07/not-there.toml' not found.\n"
E       + Configuration file '/tmp/tmpr3vzhu07/not-there.toml' not found.

/usr/lib/python3/dist-packages/twisted/trial/_synctest.py:381: FailTest
____________________ TomlSettingsTests.test_load_no_config _____________________

self = <towncrier.test.test_settings.TomlSettingsTests 
testMethod=test_load_no_config>
runner = <click.testing.CliRunner object at 0x7fc041787230>

    @with_isolated_runner
    def test_load_no_config(self, runner: CliRunner):
        """
        Calling the root CLI without an existing configuration file in the base 
directory,
        will exit with code 1 and an informative message is sent to standard 
output.
        """
        temp = self.mktemp()
        os.makedirs(temp)
    
        result = runner.invoke(cli, ("--dir", temp))
    
>       self.assertEqual(
            result.output,
            f"No configuration file found.\nLooked back from: 
{os.path.abspath(temp)}\n",
        )

../../../src/towncrier/test/test_settings.py:208: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3/dist-packages/twisted/trial/_synctest.py:444: in assertEqual
    super().assertEqual(first, second, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <towncrier.test.test_settings.TomlSettingsTests 
testMethod=test_load_no_config>
msg = "'' != 'No configuration file found.\\nLooked back[102 chars]mp\\n'\n+ No 
configuration file found.\n+ Looked back from: 
/tmp/tmp3wnual6i/towncrier.test.test_settings/TomlSettingsTests/test_load_no_config/yae2qc6r/temp\n"

    def fail(self, msg: Optional[object] = None) -> NoReturn:
        """
        Absolutely fail the test.  Do not pass go, do not collect $200.
    
        @param msg: the message that will be displayed as the reason for the
        failure
        """
>       raise self.failureException(msg)
E       twisted.trial.unittest.FailTest: '' != 'No configuration file 
found.\nLooked back[102 chars]mp\n'
E       + No configuration file found.
E       + Looked back from: 
/tmp/tmp3wnual6i/towncrier.test.test_settings/TomlSettingsTests/test_load_no_config/yae2qc6r/temp

/usr/lib/python3/dist-packages/twisted/trial/_synctest.py:381: FailTest
=========================== short test summary info ============================
FAILED ../../../src/towncrier/test/test_build.py::TestCli::test_needs_config
FAILED 
../../../src/towncrier/test/test_build.py::TestCli::test_singlefile_errors_and_explains_cleanly
FAILED 
../../../src/towncrier/test/test_check.py::TestChecker::test_none_stdout_encoding_works
FAILED 
../../../src/towncrier/test/test_settings.py::TomlSettingsTests::test_load_explicit_missing_config
FAILED 
../../../src/towncrier/test/test_settings.py::TomlSettingsTests::test_load_no_config
======================== 5 failed, 143 passed in 1.41s =========================
E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -m pytest "{dir}"/src/
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 
returned exit code 13
make: *** [debian/rules:31: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------

The above is just how the build ends and not necessarily the most relevant part.
If required, the full build log is available here:

https://people.debian.org/~sanvila/build-logs/202502/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you could not reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:towncrier, so that this is still
visible in the BTS web page for this package.

Thanks.

Reply via email to