headless_api: gate request on new Repo.automation_permission (bug 1971103) #1044 (lando@main)

Warnings
  • Checking...
Blockers
  • Checking...
Branches bug1971103/headless-repo-scope -> main
Repo lando@main (git) (git://github.com/mozilla-conduit/lando.git)
Author shtrom
State closed
Commit Title headless_api: gate request on new Repo.automation_permission (bug 1971103)
Commit Body * repo: add `automation_permission` and `user_can_use_automation()` * headless_api: gate API request to user having the correct repo's `required_automation_permission` * test: test headless_api gating on repo `required_automation_permission` * repo: fail closed on empty permissions strings * utils: add stub data migration command (bug 2013991)

Landings

Successfully landed

Landing requested on , by omehani@mozilla.com.

Landing Job: 35795

Last update:

Result: 9e90472ccb3b9c297dbf7720762cd8b65f2935de on lando@main (git)

Links:

Failed to land

Landing requested on , by omehani@mozilla.com.

Landing Job: 35793

Last update:

Raw error output:
Aborting, could not apply patch buffer for None.
Error running git command; sanitised_command=['git', 'apply', '--reject', '/tmp/tmp_dqmv2u3.patch'], path='/files/repos/lando', Checking patch src/lando/main/migrations/0048_repo_automation_permission.py...
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Checking patch src/lando/main/migrations/0048_repo_automation_permission.py => src/lando/main/migrations/0049_repo_automation_permission.py...
error: src/lando/main/migrations/0048_repo_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Checking patch src/lando/main/tests/test_models.py...
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Checking patch src/lando/main/migrations/0049_repo_automation_permission.py => src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/utils/management/commands/migrate_data.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py => src/lando/main/migrations/0050_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/utils/management/commands/migrate_data.py...
Checking patch src/lando/conftest.py...
Applied patch src/lando/main/migrations/0048_repo_automation_permission.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/tests/test_models.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Failed to land

Landing requested on , by omehani@mozilla.com.

Landing Job: 35790

Last update:

Raw error output:
Aborting, could not apply patch buffer for None.
Error running git command; sanitised_command=['git', 'apply', '--reject', '/tmp/tmpdjjmzh4u.patch'], path='/files/repos/lando', Checking patch src/lando/main/migrations/0048_repo_automation_permission.py...
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Checking patch src/lando/main/migrations/0048_repo_automation_permission.py => src/lando/main/migrations/0049_repo_automation_permission.py...
error: src/lando/main/migrations/0048_repo_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Checking patch src/lando/main/tests/test_models.py...
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Checking patch src/lando/main/migrations/0049_repo_automation_permission.py => src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/utils/management/commands/migrate_data.py...
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py => src/lando/main/migrations/0050_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/utils/management/commands/migrate_data.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/utils/management/commands/migrate_data.py...
Applied patch src/lando/main/migrations/0048_repo_automation_permission.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/tests/test_models.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Failed to land

Landing requested on , by omehani@mozilla.com.

Landing Job: 35783

While applying pull request #1044 to lando, the following files had conflicts:

(Hint: try rebasing your changes on the latest commits from lando and re-submitting.)

  • src/lando/main/models/repo.py @ 48d0876f3dfb32e2944d8fcb4fef3e5d13675e6b
  • diff a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py	(rejected hunks)
    @@ -4,7 +4,7 @@
    ...
    
    diff a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py	(rejected hunks)
    @@ -4,7 +4,7 @@
     from pathlib import Path
     
     from django.conf import settings
    -from django.contrib.auth.models import Permission, User
    +from django.contrib.auth.models import User
     from django.contrib.postgres.fields import ArrayField
     from django.core.exceptions import ValidationError
     from django.core.validators import RegexValidator
    
    in addition, Git reported this error: while searching for:
    from pathlib import Path
    
    from django.conf import settings
    from django.contrib.auth.models import Permission, User
    from django.contrib.postgres.fields import ArrayField
    from django.core.exceptions import ValidationError
    from django.core.validators import RegexValidator
    
    
  • src/lando/headless_api/tests/test_automation_api.py @ 143c7266425baa5ca31becdccbf141257751961a
  • diff a/src/lando/headless_api/tests/test_automation_api.py b/src/lando/headless_api/tests/test_automation_api.py	(rejected hunks)
    @@ -10,6 +10,8 @@
    ...
    
    diff a/src/lando/headless_api/tests/test_automation_api.py b/src/lando/headless_api/tests/test_automation_api.py	(rejected hunks)
    @@ -10,6 +10,8 @@
     
     import pytest
     from django.contrib.auth.hashers import check_password
    +from django.contrib.auth.models import Permission, User
    +from django.test.client import Client
     
     from lando.api.legacy.workers.automation_worker import AutomationWorker
     from lando.api.tests.mocks import TreeStatusDouble
    
    in addition, Git reported this error: while searching for:
    
    import pytest
    from django.contrib.auth.hashers import check_password
    
    from lando.api.legacy.workers.automation_worker import AutomationWorker
    from lando.api.tests.mocks import TreeStatusDouble
    
    
  • src/lando/main/models/repo.py @ 48d0876f3dfb32e2944d8fcb4fef3e5d13675e6b
  • diff a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py	(rejected hunks)
    @@ -4,7 +4,7 @@
    ...
    
    diff a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py	(rejected hunks)
    @@ -4,7 +4,7 @@
     from pathlib import Path
     
     from django.conf import settings
    -from django.contrib.auth.models import Permission, User
    +from django.contrib.auth.models import User
     from django.contrib.postgres.fields import ArrayField
     from django.core.exceptions import ValidationError
     from django.core.validators import RegexValidator
    
    in addition, Git reported this error: while searching for:
    from pathlib import Path
    
    from django.conf import settings
    from django.contrib.auth.models import Permission, User
    from django.contrib.postgres.fields import ArrayField
    from django.core.exceptions import ValidationError
    from django.core.validators import RegexValidator
    
    

Last update:

Raw error output:
Problem while applying patch in revision None:

Checking patch src/lando/main/migrations/0048_repo_automation_permission.py...
Checking patch src/lando/main/models/repo.py...
error: while searching for:
from pathlib import Path

from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.postgres.fields import ArrayField
from django.core.exceptions import ValidationError
from django.db import models

error: patch failed: src/lando/main/models/repo.py:3
Hunk #2 succeeded at 212 (offset 9 lines).
Hunk #3 succeeded at 398 (offset 9 lines).
Hunk #4 succeeded at 413 (offset 9 lines).
Hunk #5 succeeded at 432 (offset 9 lines).
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
error: while searching for:

import pytest
from django.contrib.auth.hashers import check_password

from lando.api.legacy.workers.automation_worker import AutomationWorker
from lando.api.tests.mocks import TreeStatusDouble

error: patch failed: src/lando/headless_api/tests/test_automation_api.py:10
Hunk #2 succeeded at 376 (offset 5 lines).
Checking patch src/lando/main/migrations/0048_repo_automation_permission.py => src/lando/main/migrations/0049_repo_automation_permission.py...
error: src/lando/main/migrations/0048_repo_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
error: while searching for:
from pathlib import Path

from django.conf import settings
from django.contrib.auth.models import Permission, User
from django.contrib.postgres.fields import ArrayField
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator

error: patch failed: src/lando/main/models/repo.py:4
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Hunk #1 succeeded at 376 (offset 5 lines).
Checking patch src/lando/main/tests/test_models.py...
Hunk #2 succeeded at 192 (offset 4 lines).
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Hunk #1 succeeded at 378 (offset 5 lines).
Hunk #2 succeeded at 431 (offset 5 lines).
Checking patch src/lando/main/migrations/0049_repo_automation_permission.py => src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/utils/management/commands/migrate_data.py...
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Hunk #1 succeeded at 431 (offset 5 lines).
Checking patch src/lando/conftest.py...
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py => src/lando/main/migrations/0050_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/utils/management/commands/migrate_data.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/utils/management/commands/migrate_data.py...
Applied patch src/lando/main/migrations/0048_repo_automation_permission.py cleanly.
Applying patch src/lando/main/models/repo.py with 1 reject...
Rejected hunk #1.
Hunk #2 applied cleanly.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applying patch src/lando/headless_api/tests/test_automation_api.py with 1 reject...
Rejected hunk #1.
Hunk #2 applied cleanly.
Applying patch src/lando/main/models/repo.py with 1 reject...
Rejected hunk #1.
Hunk #2 applied cleanly.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/tests/test_models.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Failed to land

Landing requested on , by omehani@mozilla.com.

Landing Job: 35778

While applying pull request #1044 to lando, the following files had conflicts:

(Hint: try rebasing your changes on the latest commits from lando and re-submitting.)

  • src/lando/main/models/repo.py @ 48d0876f3dfb32e2944d8fcb4fef3e5d13675e6b
  • diff a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py	(rejected hunks)
    @@ -4,7 +4,7 @@
    ...
    
    diff a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py	(rejected hunks)
    @@ -4,7 +4,7 @@
     from pathlib import Path
     
     from django.conf import settings
    -from django.contrib.auth.models import Permission, User
    +from django.contrib.auth.models import User
     from django.contrib.postgres.fields import ArrayField
     from django.core.exceptions import ValidationError
     from django.core.validators import RegexValidator
    
    in addition, Git reported this error: while searching for:
    from pathlib import Path
    
    from django.conf import settings
    from django.contrib.auth.models import Permission, User
    from django.contrib.postgres.fields import ArrayField
    from django.core.exceptions import ValidationError
    from django.core.validators import RegexValidator
    
    
  • src/lando/headless_api/tests/test_automation_api.py @ 143c7266425baa5ca31becdccbf141257751961a
  • diff a/src/lando/headless_api/tests/test_automation_api.py b/src/lando/headless_api/tests/test_automation_api.py	(rejected hunks)
    @@ -10,6 +10,8 @@
    ...
    
    diff a/src/lando/headless_api/tests/test_automation_api.py b/src/lando/headless_api/tests/test_automation_api.py	(rejected hunks)
    @@ -10,6 +10,8 @@
     
     import pytest
     from django.contrib.auth.hashers import check_password
    +from django.contrib.auth.models import Permission, User
    +from django.test.client import Client
     
     from lando.api.legacy.workers.automation_worker import AutomationWorker
     from lando.api.tests.mocks import TreeStatusDouble
    
    in addition, Git reported this error: while searching for:
    
    import pytest
    from django.contrib.auth.hashers import check_password
    
    from lando.api.legacy.workers.automation_worker import AutomationWorker
    from lando.api.tests.mocks import TreeStatusDouble
    
    
  • src/lando/main/models/repo.py @ 48d0876f3dfb32e2944d8fcb4fef3e5d13675e6b
  • diff a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py	(rejected hunks)
    @@ -4,7 +4,7 @@
    ...
    
    diff a/src/lando/main/models/repo.py b/src/lando/main/models/repo.py	(rejected hunks)
    @@ -4,7 +4,7 @@
     from pathlib import Path
     
     from django.conf import settings
    -from django.contrib.auth.models import Permission, User
    +from django.contrib.auth.models import User
     from django.contrib.postgres.fields import ArrayField
     from django.core.exceptions import ValidationError
     from django.core.validators import RegexValidator
    
    in addition, Git reported this error: while searching for:
    from pathlib import Path
    
    from django.conf import settings
    from django.contrib.auth.models import Permission, User
    from django.contrib.postgres.fields import ArrayField
    from django.core.exceptions import ValidationError
    from django.core.validators import RegexValidator
    
    

Last update:

Raw error output:
Problem while applying patch in revision None:

Checking patch src/lando/main/migrations/0048_repo_automation_permission.py...
Checking patch src/lando/main/models/repo.py...
error: while searching for:
from pathlib import Path

from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.postgres.fields import ArrayField
from django.core.exceptions import ValidationError
from django.db import models

error: patch failed: src/lando/main/models/repo.py:3
Hunk #2 succeeded at 212 (offset 9 lines).
Hunk #3 succeeded at 398 (offset 9 lines).
Hunk #4 succeeded at 413 (offset 9 lines).
Hunk #5 succeeded at 432 (offset 9 lines).
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
error: while searching for:

import pytest
from django.contrib.auth.hashers import check_password

from lando.api.legacy.workers.automation_worker import AutomationWorker
from lando.api.tests.mocks import TreeStatusDouble

error: patch failed: src/lando/headless_api/tests/test_automation_api.py:10
Hunk #2 succeeded at 376 (offset 5 lines).
Checking patch src/lando/main/migrations/0048_repo_automation_permission.py => src/lando/main/migrations/0049_repo_automation_permission.py...
error: src/lando/main/migrations/0048_repo_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
error: while searching for:
from pathlib import Path

from django.conf import settings
from django.contrib.auth.models import Permission, User
from django.contrib.postgres.fields import ArrayField
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator

error: patch failed: src/lando/main/models/repo.py:4
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Hunk #1 succeeded at 376 (offset 5 lines).
Checking patch src/lando/main/tests/test_models.py...
Hunk #2 succeeded at 192 (offset 4 lines).
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Hunk #1 succeeded at 378 (offset 5 lines).
Hunk #2 succeeded at 431 (offset 5 lines).
Checking patch src/lando/main/migrations/0049_repo_automation_permission.py => src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/utils/management/commands/migrate_data.py...
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/headless_api/api.py...
Checking patch src/lando/headless_api/tests/test_automation_api.py...
Hunk #1 succeeded at 431 (offset 5 lines).
Checking patch src/lando/conftest.py...
Checking patch src/lando/main/models/repo.py...
Checking patch src/lando/main/migrations/0049_repo_required_automation_permission.py => src/lando/main/migrations/0050_repo_required_automation_permission.py...
error: src/lando/main/migrations/0049_repo_required_automation_permission.py: No such file or directory
Checking patch src/lando/utils/management/commands/migrate_data.py...
Checking patch src/lando/conftest.py...
Checking patch src/lando/utils/management/commands/migrate_data.py...
Applied patch src/lando/main/migrations/0048_repo_automation_permission.py cleanly.
Applying patch src/lando/main/models/repo.py with 1 reject...
Rejected hunk #1.
Hunk #2 applied cleanly.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applying patch src/lando/headless_api/tests/test_automation_api.py with 1 reject...
Rejected hunk #1.
Hunk #2 applied cleanly.
Applying patch src/lando/main/models/repo.py with 1 reject...
Rejected hunk #1.
Hunk #2 applied cleanly.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/tests/test_models.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/headless_api/api.py cleanly.
Applied patch src/lando/headless_api/tests/test_automation_api.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/main/models/repo.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.
Applied patch src/lando/conftest.py cleanly.
Applied patch src/lando/utils/management/commands/migrate_data.py cleanly.