Skip to content

web: updated package-lock.json to include missing tree-sitter references (cherry-pick #20244 to version-2026.2)#20246

Merged
rissson merged 1 commit intoversion-2026.2from
backport-20244-version-2026.2
Feb 12, 2026
Merged

web: updated package-lock.json to include missing tree-sitter references (cherry-pick #20244 to version-2026.2)#20246
rissson merged 1 commit intoversion-2026.2from
backport-20244-version-2026.2

Conversation

@rissson
Copy link
Member

@rissson rissson commented Feb 12, 2026

…ces.

Details

REPLACE ME


Checklist

  • Local tests pass (ak test authentik/)
  • The code has been formatted (make lint-fix)

If an API change has been made

  • The API schema has been updated (make gen-build)

If changes to the frontend have been made

  • The code has been formatted (make web)

If applicable

  • The documentation has been updated
  • The documentation has been formatted (make docs)

@rissson rissson self-assigned this Feb 12, 2026
@rissson rissson requested a review from a team as a code owner February 12, 2026 14:49
@netlify
Copy link

netlify bot commented Feb 12, 2026

Deploy Preview for authentik-integrations ready!

Name Link
🔨 Latest commit f6cb6b6
🔍 Latest deploy log https://app.netlify.com/projects/authentik-integrations/deploys/698de864f8b4de0008eb22fd
😎 Deploy Preview https://deploy-preview-20246--authentik-integrations.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify
Copy link

netlify bot commented Feb 12, 2026

Deploy Preview for authentik-docs ready!

Name Link
🔨 Latest commit f6cb6b6
🔍 Latest deploy log https://app.netlify.com/projects/authentik-docs/deploys/698de86418e117000898c0d3
😎 Deploy Preview https://deploy-preview-20246--authentik-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@codecov
Copy link

codecov bot commented Feb 12, 2026

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
3011 1 3010 4
View the top 2 failed test(s) by shortest run time
authentik.brands.tests.TestBrands::test_blueprint_with_other_brand
Stack Traces | 0.571s run time
self = <unittest.case._Outcome object at 0x7f62e9c55cc0>
test_case = <authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>
subTest = False

    @contextlib.contextmanager
    def testPartExecutor(self, test_case, subTest=False):
        old_success = self.success
        self.success = True
        try:
>           yield

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:58: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>
result = <TestCaseFunction test_blueprint_with_other_brand>

    def run(self, result=None):
        if result is None:
            result = self.defaultTestResult()
            startTestRun = getattr(result, 'startTestRun', None)
            stopTestRun = getattr(result, 'stopTestRun', None)
            if startTestRun is not None:
                startTestRun()
        else:
            stopTestRun = None
    
        result.startTest(self)
        try:
            testMethod = getattr(self, self._testMethodName)
            if (getattr(self.__class__, "__unittest_skip__", False) or
                getattr(testMethod, "__unittest_skip__", False)):
                # If the class or method was skipped.
                skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
                            or getattr(testMethod, '__unittest_skip_why__', ''))
                _addSkip(result, self, skip_why)
                return result
    
            expecting_failure = (
                getattr(self, "__unittest_expecting_failure__", False) or
                getattr(testMethod, "__unittest_expecting_failure__", False)
            )
            outcome = _Outcome(result)
            start_time = time.perf_counter()
            try:
                self._outcome = outcome
    
                with outcome.testPartExecutor(self):
                    self._callSetUp()
                if outcome.success:
                    outcome.expecting_failure = expecting_failure
                    with outcome.testPartExecutor(self):
>                       self._callTestMethod(testMethod)

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:669: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>
method = <bound method TestBrands.test_blueprint_with_other_brand of <authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>>

    def _callTestMethod(self, method):
>       result = method()
                 ^^^^^^^^

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:615: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = (<authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>,)
kwargs = {}, file = 'default/default-brand.yaml'
content = 'metadata:\n  name: Default - Brand\nversion: 1\nentries:\n  - model: authentik_blueprints.metaapplyblueprint\n    att...exists\n      - !Condition [NOR, !Find [authentik_brands.brand, [default, True]]]\n    model: authentik_brands.brand\n'

    @wraps(func)
    def wrapper(*args, **kwargs):
        for file in files:
            content = BlueprintInstance(path=file).retrieve()
            Importer.from_string(content).apply()
>       return func(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^

.../blueprints/tests/__init__.py:25: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>

    @apply_blueprint("default/default-brand.yaml")
    def test_blueprint_with_other_brand(self):
        """Test Current brand API"""
        Brand.objects.create(domain="bar.baz", branding_title="custom")
        response = loads(self.client.get(reverse("authentik_api:brand-current")).content.decode())
        response.pop("flow_authentication", None)
        response.pop("flow_invalidation", None)
        response.pop("flow_user_settings", None)
>       self.assertEqual(
            response,
            {
                "branding_logo": ".../assets/icons/icon_left_brand.svg",
                "branding_logo_themed_urls": None,
                "branding_favicon": ".../assets/icons/icon.png",
                "branding_favicon_themed_urls": None,
                "branding_title": "authentik",
                "branding_custom_css": "",
                "matched_domain": "authentik-default",
                "ui_footer_links": [],
                "ui_theme": "automatic",
                "default_locale": "",
                "flags": self.default_flags,
            },
        )

authentik/brands/tests.py:121: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>
first = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
second = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
msg = None

    def assertEqual(self, first, second, msg=None):
        """Fail if the two objects are unequal as determined by the '=='
           operator.
        """
        assertion_func = self._getAssertEqualityFunc(first, second)
>       assertion_func(first, second, msg=msg)

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:925: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>
d1 = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
d2 = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
msg = None

    def assertDictEqual(self, d1, d2, msg=None):
        self.assertIsInstance(d1, dict, 'First argument is not a dictionary')
        self.assertIsInstance(d2, dict, 'Second argument is not a dictionary')
    
        if d1 != d2:
            standardMsg = '%s != %s' % _common_shorten_repr(d1, d2)
            diff = ('\n' + '\n'.join(difflib.ndiff(
                           pprint.pformat(d1).splitlines(),
                           pprint.pformat(d2).splitlines())))
            standardMsg = self._truncateMessage(standardMsg, diff)
>           self.fail(self._formatMessage(msg, standardMsg))

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:1224: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_blueprint_with_other_brand>
msg = "{'matched_domain': 'authentik-default', 'br[398 chars]lse}} != {'branding_logo': '.../dist/assets/icon[426 chars]...test_flag': False},\n   'matched_domain': 'authentik-default',\n   'ui_footer_links': [],\n   'ui_theme': 'automatic'}"

    def fail(self, msg=None):
        """Fail immediately, with the given message."""
>       raise self.failureException(msg)
E       AssertionError: {'matched_domain': 'authentik-default', 'br[398 chars]lse}} != {'branding_logo': '.../dist/assets/icon[426 chars]lse}}
E         {'branding_custom_css': '',
E          'branding_favicon': '.../assets/icons/icon.png',
E          'branding_favicon_themed_urls': None,
E          'branding_logo': '.../assets/icons/icon_left_brand.svg',
E          'branding_logo_themed_urls': None,
E          'branding_title': 'authentik',
E          'default_locale': '',
E          'flags': {'flows_refresh_others': False,
E       -            'policies_buffered_access_view': False},
E       ?                                                  -
E       
E       +            'policies_buffered_access_view': False,
E       +            'tenants_test_flag': False},
E          'matched_domain': 'authentik-default',
E          'ui_footer_links': [],
E          'ui_theme': 'automatic'}

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:750: AssertionError
authentik.brands.tests.TestBrands::test_brand_subdomain_same_suffix
Stack Traces | 0.67s run time
self = <unittest.case._Outcome object at 0x7ffb2edc7f50>
test_case = <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>
subTest = False

    @contextlib.contextmanager
    def testPartExecutor(self, test_case, subTest=False):
        old_success = self.success
        self.success = True
        try:
>           yield

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:58: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>
result = <TestCaseFunction test_brand_subdomain_same_suffix>

    def run(self, result=None):
        if result is None:
            result = self.defaultTestResult()
            startTestRun = getattr(result, 'startTestRun', None)
            stopTestRun = getattr(result, 'stopTestRun', None)
            if startTestRun is not None:
                startTestRun()
        else:
            stopTestRun = None
    
        result.startTest(self)
        try:
            testMethod = getattr(self, self._testMethodName)
            if (getattr(self.__class__, "__unittest_skip__", False) or
                getattr(testMethod, "__unittest_skip__", False)):
                # If the class or method was skipped.
                skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
                            or getattr(testMethod, '__unittest_skip_why__', ''))
                _addSkip(result, self, skip_why)
                return result
    
            expecting_failure = (
                getattr(self, "__unittest_expecting_failure__", False) or
                getattr(testMethod, "__unittest_expecting_failure__", False)
            )
            outcome = _Outcome(result)
            start_time = time.perf_counter()
            try:
                self._outcome = outcome
    
                with outcome.testPartExecutor(self):
                    self._callSetUp()
                if outcome.success:
                    outcome.expecting_failure = expecting_failure
                    with outcome.testPartExecutor(self):
>                       self._callTestMethod(testMethod)

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:669: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>
method = <bound method TestBrands.test_brand_subdomain_same_suffix of <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>>

    def _callTestMethod(self, method):
>       result = method()
                 ^^^^^^^^

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:615: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>

    def test_brand_subdomain_same_suffix(self):
        """Test Current brand API"""
        Brand.objects.create(domain="bar.baz", branding_title="custom-weak")
        Brand.objects.create(domain="foo.bar.baz", branding_title="custom-strong")
>       self.assertJSONEqual(
            self.client.get(
                reverse("authentik_api:brand-current"), HTTP_HOST="foo.bar.baz"
            ).content.decode(),
            {
                "branding_logo": ".../assets/icons/icon_left_brand.svg",
                "branding_logo_themed_urls": None,
                "branding_favicon": ".../assets/icons/icon.png",
                "branding_favicon_themed_urls": None,
                "branding_title": "custom-strong",
                "branding_custom_css": "",
                "matched_domain": "foo.bar.baz",
                "ui_footer_links": [],
                "ui_theme": "automatic",
                "default_locale": "",
                "flags": self.default_flags,
            },
        )

authentik/brands/tests.py:160: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>
raw = '{"matched_domain":"foo.bar.baz","branding_title":"custom-strong","branding_logo":".../assets/icons/icon_left...i_theme":"automatic","default_locale":"","flags":{"policies_buffered_access_view":false,"flows_refresh_others":false}}'
expected_data = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
msg = None

    def assertJSONEqual(self, raw, expected_data, msg=None):
        """
        Assert that the JSON fragments raw and expected_data are equal.
        Usual JSON non-significant whitespace rules apply as the heavyweight
        is delegated to the json library.
        """
        try:
            data = json.loads(raw)
        except json.JSONDecodeError:
            self.fail("First argument is not valid JSON: %r" % raw)
        if isinstance(expected_data, str):
            try:
                expected_data = json.loads(expected_data)
            except ValueError:
                self.fail("Second argument is not valid JSON: %r" % expected_data)
>       self.assertEqual(data, expected_data, msg=msg)

.venv/lib/python3.14.../django/test/testcases.py:1032: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>
first = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
second = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
msg = None

    def assertEqual(self, first, second, msg=None):
        """Fail if the two objects are unequal as determined by the '=='
           operator.
        """
        assertion_func = self._getAssertEqualityFunc(first, second)
>       assertion_func(first, second, msg=msg)

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:925: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>
d1 = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
d2 = {'branding_custom_css': '', 'branding_favicon': '.../assets/icons/icon.png', 'branding_favicon_themed_urls': None, 'branding_logo': '.../assets/icons/icon_left_brand.svg', ...}
msg = None

    def assertDictEqual(self, d1, d2, msg=None):
        self.assertIsInstance(d1, dict, 'First argument is not a dictionary')
        self.assertIsInstance(d2, dict, 'Second argument is not a dictionary')
    
        if d1 != d2:
            standardMsg = '%s != %s' % _common_shorten_repr(d1, d2)
            diff = ('\n' + '\n'.join(difflib.ndiff(
                           pprint.pformat(d1).splitlines(),
                           pprint.pformat(d2).splitlines())))
            standardMsg = self._truncateMessage(standardMsg, diff)
>           self.fail(self._formatMessage(msg, standardMsg))

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:1224: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <authentik.brands.tests.TestBrands testMethod=test_brand_subdomain_same_suffix>
msg = "{'matched_domain': 'foo.bar.baz', 'branding[396 chars]lse}} != {'branding_logo': '.../dist/assets/icon[424 chars]...nants_test_flag': False},\n   'matched_domain': 'foo.bar.baz',\n   'ui_footer_links': [],\n   'ui_theme': 'automatic'}"

    def fail(self, msg=None):
        """Fail immediately, with the given message."""
>       raise self.failureException(msg)
E       AssertionError: {'matched_domain': 'foo.bar.baz', 'branding[396 chars]lse}} != {'branding_logo': '.../dist/assets/icon[424 chars]lse}}
E         {'branding_custom_css': '',
E          'branding_favicon': '.../assets/icons/icon.png',
E          'branding_favicon_themed_urls': None,
E          'branding_logo': '.../assets/icons/icon_left_brand.svg',
E          'branding_logo_themed_urls': None,
E          'branding_title': 'custom-strong',
E          'default_locale': '',
E          'flags': {'flows_refresh_others': False,
E       -            'policies_buffered_access_view': False},
E       ?                                                  -
E       
E       +            'policies_buffered_access_view': False,
E       +            'tenants_test_flag': False},
E          'matched_domain': 'foo.bar.baz',
E          'ui_footer_links': [],
E          'ui_theme': 'automatic'}

.../hostedtoolcache/Python/3.14.2................../x64/lib/python3.14/unittest/case.py:750: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@rissson rissson merged commit 3a03e1e into version-2026.2 Feb 12, 2026
81 of 86 checks passed
@rissson rissson deleted the backport-20244-version-2026.2 branch February 12, 2026 15:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants