This is an automated email from the ASF dual-hosted git repository.
sbp pushed a change to branch sbp
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git
from ca978b9 Change how RAT checks are applied
add ede2e6e Add some directories to the Docker ignore file
add 7821d84 Add test workflow for API testing
add 76fab4c Remove environment type param
add f77be4e Lookup Github NIDs in LDAP
add 53be97c Add task which can trigger a specified github action,
provided ATR has a valid token for that repository.
add 82855d9 Add a POSIX shell script to simplify signing files with GnuPG
add 96e89c2 Update dependencies
add c48aaab Document the script to simplify file signing
add 3220d76 Exclude generated files from lightweight checks in addition
to RAT checks
add 67de1b9 Update pyright and fix types to conform to its stricter
checking
add 49b7cdd Restore validation of the announce download path and update
tests
add 9ae7d6e Update and fix voting tests
add afb9117 Make compose tests less susceptible to issues from fragile
polling
add 8229b79 Add an API endpoint to get the release policy of a project
add 621a8ce Ensure that both sorts of license checks are used in report
tests
add 1f9b760 Fix an intermittent problem with Playwright tests
add c4c9b19 Change the Docker ports to 8080 to match the local
development defaults
add 2bbfd63 Fix an intermittent error when running Playwright tests to
add a file
add 3059c05 Add license check exclusion properties to release policies
add d3978f3 Group unit tests and use a clearer name for the Playwright
test script
add 336962e Add permissions for issues in PR labeler workflow
add d72e3b0 Duplicate derived project release policies instead of cloning
by reference
add 4194fed Update the analysis workflow and allow it to be run manually
add d89e601 Remove localhost from the certificate generator and clarify
the reasoning
add 0aee1cf Remove the Ubuntu OCI container
add 2f3c2aa Document how to run the development server using OCI
containers
add 7f0911a Add simple unit tests for release policy license check
exclusion fields
add 47b774a Delete .github/workflows/pr-labeler.yml
add 5ac0564 Add comment to unused labeler configuration
add 1bbddbf Add license check exclude fields to the UI and related tests
add 12bb109 Doc tweaks
add a14383b New year
add 22a63e6 Add URL
add 7dab9ad Fix the NOTICE file check
add 5f97f4d Make the NOTICE file checker match a wider range of files
add 99013e9 Use exclusions from release policies in lightweight license
checks
add 702b4b3 Use exclusions from release policies in RAT checks
add 7465d9f Clarify platform compatibility
add 9ed7ff0 Improve the instructions for new external contributors
add a5dc289 Add a documentation section about schema changes and
migrations
add c21981f Make e2e tests use their own context
add eb1934e Add a list of specific files to use in the Alpine container
add bc549f4 Use structured data in the RAT check task
add d123633 Split apart some RAT check functions
add 36f60e6 Make deleting releases more efficient for faster testing
add ca73bf9 Simplify errors in the RAT checks
add 76b0328 Fix interface order in the RAT checks
add 039bb47 Add the command used to the RAT check data
add 218c67d Document the reason for disallowing inline comments
add 4682d79 Rename GHA task to be more specific, and work in extra
required parameters. UI work to trigger distributions and endpoint to register
an SSH key. Include workflow status recording.
add a04b963 Init logging before database
add d358918 Allow check caching to be configured using an environment
variable
add e835138 Document how to safely downgrade from a migration in a PR
add 0c3dc31 Shorten known absolute paths in RAT commands
add 4911170 Parenthesize subexpressions and fix a pluralisation bug
add 4647956 Fix the display of check data
add facb7d0 Fix RAT exclusion file selection and add regression unit tests
add 4c8695f Rename the RAT exclusion policy file and make associated
tests more robust
add 0adc3b4 Update dependencies due to CVE-2026-22701
add 99a1a49 Ensure that interpolated LDAP variables are always escaped
add 6e3c06b Improve the instructions to submit a pull request
add 025a0cd Allow phase and UID to be passed out to workflows
add a2c6f8d Update git reference (was working before anyway)
add cee9968 Fix refresh button and remove CSP change. Try to convert ID
to int.
add fc9529a Accept string from github
add 41e3948 Attempt to render completed tasks using workflowstatus entries
add c567a42 Attempt to render completed tasks using workflowstatus entries
add 1b15169 Support the new distribution record function
add 406074a Add a new page about components to the user guide
add fc22823 Fix new record argument validation
add 267562c Add a documentation paragraph explaining more about components
add c3a453e Better messages for distributions
add caebc46 Fix a missing condition
add cd44f0e Add a separate revision counter table
add 77cf366 Change workflow unique ID to be sightly more meaningful
add 3716e77 Use the revision counter when creating new revisions
add 7f94cad Fix the style of nested lists
add 8d0602b Document the parts of the filesystem used by the storage
interface
add 71d78ad Add support for Maven staging (repository.a.o) - using 4443
Nexus 3 new version
add 10795fc Allow the state directory to be configured during setup
add 26d2fa4 Check that the e2e container is running before starting the
tests
add ea5b945 Add a migration to use an audit state subdirectory
add 2fb4d70 Add a migration to use a cache state subdirectory
add 8c15c3c Add a migration to use a database state subdirectory
add 5e26ee1 Do not apply state subdirectory migrations when hot reloading
add 34ae0a1 Add the ability to schedule future jobs. Worker claim updated
to not claim future tasks. Metadata and workflow status tasks can schedule
themselves.
add a9f6090 Add scheduled column for tasks, allow asf_uid to be passed in
task arguments
add 2e99ba3 Move asf_uid to args model and tweak logic to clear scheduled
tasks
add da55914 Change workflow to be a specific staging workflow and remove
from passed args
add 87a6aae Update dependencies
add 5838a03 Add psutil as a dependency
add 501235f Migrate state files with extensive checks
add 85bc177 Remove the dependency on PyNaCl due to CVE-2025-69277
add 64e5620 Increase the entropy of the jti field in JWTs
add e5a2769 Remove unused code in a comment
add 912d6d1 Remove the ability to configure CSRF protection
add ecfb15f Manage the server secret key using ASFQuart
add d5f1e31 Update dependencies due to CVE-2026-23490
add 8a2852d Add issuer and audience to JWTs
add a1b8aa2 Remove hardcoded tooling committee
add 7e1f79d Add a migration to use a logs state directory
add 9f8468e Document how to debug e2e test failures
add bfde376 Add the runtime state directory to the list of directories to
create
add 8630507 Fix some problems with looking up secret configuration values
add 8775ade Render pending and failed distribution tasks for non-finish
releases
add fc70aff Do not attempt to manage Hypercorn logs from the ATR server
add 8a52f67 Fix an error in the e2e tests documentation
add f38dac1 Add a migration to use a curated secrets state subdirectory
add 3096084 Write all Hypercorn state to a shared directory
add 691b986 Suppress a false positive from CodeQL
add 4388deb Do not allow the server.py module to be run directly
add 877c30a Create local certificates automatically if they do not exist
add 6694064 Add a migration to use a generated secrets state subdirectory
add 7958742 Add a migration to use a subversion state subdirectory
add bfa5051 Add a migration to use a temporary state subdirectory
add 5ceec42 Make Maven check use the CDN URLs instead of the search.maven
api
add 72c31ca Split failed and in-progress task results, format error
message better
add 3287b50 Bump biomejs/setup-biome from 2.6.0 to 2.7.0
add 6e564c9 Bump astral-sh/setup-uv from 7.1.6 to 7.2.0
add 0d5928f Require subject template hashes only from forms and not from
the API
add 142707f Copy SBOM models to remove interdependencies
add af926e3 Add a lint to check imports in the models
add 9a67a6d Add a warning about the risks of using mkcert (from @sebbASF)
add 4890e73 Ensure that the permissions of secret files are correct
add 552e2d3 Add a function to change file permissions recursively
add 6cd3688 Disallow writing to release files after staging
add 9b04ca4 Prevent enumeration
add 8835898 Thread count
add 175660d Fix SSH host key permissions if necessary after creation
add 7ad9ca8 Update docs #557 (#565)
add b7c856a Create pull request template for contributions
add 587307b Remove PMC table and submission instructions
add 5b98a81 Synch with start-atr.sh (#567)
add cecb5d6 Add HSTS response header (#566)
add 44cdc6b #556 - narrow exception handling and fail on specific errors
add 98d745c Make the use of configuration more efficient in the server
module
add ee0b0d7 Removing tables, linted
add 25f82ca Fix Markdown issues detected by linting
add f479e9f Downgrade Biome to allow lints to run in CI
add cc43d8d Run pre-commit hooks on pushes to the primary development
branches
add ec84c82 Fix unparenthesized subexpressions
add 9ff6af3 Use sentence case in headings
add 3af4e0e Remove emoji
add bd4462e Add the --frozen flag to all relevant uv commands in the
documentation
add ed078b5 Add too large a payload handler (#572)
add 24e53a1 #549 and #471 - implement structured logging when running not
in debug mode
add 7d0c7c5 Notify users on authentication credentials change
add fe0d7e2 Add some e2e token tests
add 8818629 Send email through the storage interface and add audit logging
add c7fac9f Switch to better condition for dev logs
add f2c69e8 No traceback on error html page (#578)
add 1f62359 Configure session cookie security attributes (#574)
add c7a5d9d Start logging listener immediately so that startup errors are
displayed properly
add 69dc859 Restore the ASFQuart default setting for SameSite
add 98d99a5 Show tracebacks in development environments
add 1569812 #475 - add tagging field to release policy
add e04d942 #475 - Add endpoint to get tagging spec for a release
add d0004d5 #476 - allow rsync to specify a tag as part of the URL
add 6a93e32 #475 - Remove endpoint as not needed for distribution any more
add 6b3b17d Switch to strictyaml and add path traversal protection on save
add 939eba2 Fix validation of tag in read and remove tags from write
altogether
add 395419d Put glob into a thread
add 3299763 Handle path traversal issue in globs before rsyncing
add 5edec37 Remove the outdated implementation plan
add ad885d6 Document how to contribute documentation
add 61a012c Fixes #486
add 77bb20b Update storage interface error messages
add b63b2e6 Support logging additional structured data, and add temporary
log for headers
add 2469e10 #535 - Add global and API rate limits and proxyfix middleware.
add ff22769 Log useragents
add 158cc68 #535 - Only proxyfix in non-local
add d995df0 #535 - Add specific rate limits to security-focused
endpoints. Make sure user ID is logged in more cases (including 429s)
add 04e99ce Don't set up rate limits in testing
add a48bedb #535 - Add rate limiting on PAT and JWT endpoints
add 52f70c8 docs: document generated source file detection and exclusions
(Fixes #477)
add 809056b Add an LDAP search that discovers admin users
add 23ce1aa Only change perms if necessary
add eff9bf6 Fixes #555
add d389573 Fix a couple of small documentation issues
add 5e2550b Add a cache module with admin functions, and tests
add 7089b4c Cache admins from LDAP using a server task
add d885221 Use the LDAP admins cache when checking whether the user is
an admin
add c778fd5 Move request logging for #549 into file. Reduce
docker-compose healthchecks after startup. Log level configurable.
add 0da52ba Add a property to get the admin status of committer sessions
add 44ee502 Fix some problems with file tag YAML validation
add fb14bd9 Document how to resolve a known problem with pip-audit
add 759f0c6 Move most logging paraphernalia to a new loggers module
add 48a9e0d Fix audit logging when the storage interface is used in tasks
add 314bb8e Prevent events from being double encoded in the audit logs
add 54c643b Cleaning up notes; fixes #533
add b2df9f8 Catch all relevant errors when accessing the admin cache in
workers
add bc4db0a Fix issue with SBOM OSV scan models, and allow scan of jar
files.
add 9254c10 #550 - re-enable worker RLIMITs and set RAT Java args and
CycloneDX .NET environment to git within them
add 06d9427 Document ADMIN_USERS_ADDITIONAL
add 23bd8b0 #508 - block announcing through any channel until tagged
distributions have been recorded
add 3c2434e #594 - Validate that OIDC is being used for endpoints where
asf_uid is specifiable.
add 56621dd Try the admin cache file in synchronous contexts too
add a90a40a Fix some problems with the admin script to import keys
add 5001b6b Validate release phase on manual resolution
add ba6aceb Clear a session before setting an impersonated session
add 264a870 Filter out SSL shutdown timeout errors from asyncio in
Hypercorn
add 280fa5a Exclude Litestream tables from Alembic
add df2ee0f Report on scheduled tasks as well as recent
add 4421595 Remove stale workflow file
add 1699697 #598 - Check for account existence before issuing JWT
add 1b098ff Use project release policy for tags
add 75ea4fc Use project release policy for tags
add 8b47d0f #508 - only consider non-staging distributions for blocking
announce
add 63d8ea6 feat(security): centralize secure HTTP sessions and enforce
TLS 1.2+ (#548)
add 1d2e7ab #596 - finite session lifetime by config - 72 hour default.
add 6909e9e Bump actions/cache from 5.0.1 to 5.0.2
add f972754 Bump actions/checkout from 6.0.1 to 6.0.2
add c99fcd0 #596 - security documentation updated
add a59a47d Fix problems with the code and tests for creating secure
sessions
add c766e02 Archive member count limit #604
add 91224b4 Add unit tests for the archive member limit code
add 9b0d1db #598 - Check for account ban before issuing JWT
add 6560287 Ensure archive members limit can be disabled, and catch more
widely
add 8c52b4c Note that ZIP extraction is not supported in the tarzip module
add ee6ef4e Use the Tooling project as a committee proxy in ASFQuart
session data
add 360bdf2 Add hyperscan and update dependencies
add 66e7823 Use Hyperscan for ignore patterns to avoid backtracking
attacks
add d7d8967 #216 - Add pending distribution status and background task to
check it. Refactor some of the distribution logic out to shared module and some
of shared module to precent circular references.
add 8ed69eb #216 - Scheduled task for pending distributions, add
created_by to dist table.
new a00a0af Remove the commit target from the Makefile
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.dockerignore | 48 +-
.github/PULL_REQUEST_TEMPLATE.md | 67 ++
.github/labeler.yml | 3 +-
.github/workflows/analyze.yml | 13 +-
.github/workflows/build.yml | 10 +-
.github/workflows/codeql.yaml | 2 +-
.github/workflows/pr-labeler.yml | 18 -
.pre-commit-config.yaml | 16 +-
Alpha-signup.md | 6 -
BUILD.md | 253 +++++++
CONTRIBUTING.md | 208 ++++++
DEVELOPMENT.md | 224 ++++++
Dockerfile.alpine | 4 +-
Dockerfile.ubuntu | 137 ----
GOVERNANCE.md | 46 ++
Makefile | 54 +-
NOTICE | 4 +-
README.md | 62 +-
SECURITY.md | 44 ++
SUPPORT.md | 55 ++
alembic.ini | 2 +-
atr/admin/__init__.py | 68 +-
atr/api/__init__.py | 184 ++++-
atr/archives.py | 71 +-
atr/blueprints/__init__.py | 2 +-
atr/blueprints/admin.py | 2 +-
atr/blueprints/api.py | 10 +-
atr/cache.py | 136 ++++
atr/config.py | 90 ++-
atr/constants.py | 10 +
atr/datasources/apache.py | 13 +-
atr/db/__init__.py | 57 ++
atr/db/interaction.py | 59 +-
atr/docs/code-conventions.md | 11 +-
atr/docs/components.md | 50 ++
atr/docs/database.md | 17 +
atr/docs/developer-guide.md | 14 +
atr/docs/how-to-contribute.md | 123 ++--
atr/docs/index.md | 6 +
atr/docs/input-validation.md | 304 ++++++++
atr/docs/license-checks.md | 86 +++
atr/docs/running-and-creating-tests.md | 182 ++++-
atr/docs/running-the-server.md | 110 +--
atr/docs/security-authentication.md | 164 +++++
atr/docs/security-authorization.md | 201 +++++
atr/docs/signing-artifacts.md | 71 ++
atr/docs/storage-interface.md | 81 ++
atr/docs/user-guide.md | 6 +
atr/form.py | 4 +
atr/get/announce.py | 97 ++-
atr/get/checks.py | 2 +-
atr/get/compose.py | 2 +-
atr/get/distribution.py | 193 ++++-
atr/get/download.py | 2 -
atr/get/finish.py | 198 ++++-
atr/get/keys.py | 3 +-
atr/get/projects.py | 11 +-
atr/get/sbom.py | 19 +-
atr/get/vote.py | 2 +-
atr/jwtoken.py | 42 +-
atr/ldap.py | 111 ++-
atr/log.py | 88 ++-
atr/loggers.py | 118 +++
atr/models/__init__.py | 4 +-
atr/models/api.py | 109 ++-
atr/models/attestable.py | 2 +-
atr/models/checkdata.py | 43 ++
atr/models/results.py | 63 +-
atr/models/sql.py | 159 +++-
atr/models/validation.py | 77 ++
atr/post/announce.py | 44 +-
atr/post/distribution.py | 114 ++-
atr/post/draft.py | 9 +-
atr/post/keys.py | 2 +-
atr/post/tokens.py | 3 +
atr/principal.py | 10 +-
atr/sbom/cyclonedx.py | 7 +
atr/sbom/models/osv.py | 1 +
atr/sbom/osv.py | 13 +-
atr/sbom/utilities.py | 5 +-
atr/server.py | 656 ++++++++++++++---
atr/shared/__init__.py | 215 +-----
atr/shared/distribution.py | 260 ++++++-
atr/shared/ignores.py | 22 +
atr/shared/projects.py | 16 +
atr/shared/{__init__.py => web.py} | 70 +-
atr/ssh.py | 116 ++-
atr/static/css/atr.css | 4 +
atr/static/js/src/announce-confirm.js | 50 +-
atr/static/sh/gpgsign.sh | 167 +++++
atr/storage/__init__.py | 33 +-
atr/storage/readers/checks.py | 25 +-
atr/storage/readers/releases.py | 2 +-
atr/storage/readers/tokens.py | 4 +-
atr/storage/writers/__init__.py | 4 +
atr/storage/writers/announce.py | 27 +-
atr/storage/writers/cache.py | 6 +-
atr/storage/writers/checks.py | 28 +-
atr/storage/writers/distributions.py | 300 +++-----
atr/storage/writers/keys.py | 10 +-
atr/storage/writers/{cache.py => mail.py} | 65 +-
atr/storage/writers/policy.py | 37 +-
atr/storage/writers/project.py | 14 +-
atr/storage/writers/release.py | 63 +-
atr/storage/writers/revision.py | 13 +-
atr/storage/writers/sbom.py | 6 +-
atr/storage/writers/ssh.py | 6 +-
atr/storage/writers/tokens.py | 43 +-
atr/storage/writers/vote.py | 14 +-
atr/storage/writers/{ssh.py => workflowstatus.py} | 96 +--
atr/tabulate.py | 12 +-
atr/tarzip.py | 77 +-
atr/tasks/__init__.py | 100 ++-
atr/tasks/checks/__init__.py | 4 +
atr/tasks/checks/license.py | 337 +++++----
atr/tasks/checks/paths.py | 2 +-
atr/tasks/checks/rat.py | 812 ++++++++++-----------
atr/tasks/checks/targz.py | 10 +-
atr/tasks/checks/zipformat.py | 30 +-
atr/tasks/distribution.py | 91 +++
atr/tasks/gha.py | 305 ++++++++
atr/tasks/message.py | 9 +-
atr/tasks/metadata.py | 14 +
atr/tasks/sbom.py | 13 +-
atr/tasks/vote.py | 12 +-
atr/templates/check-selected.html | 12 +-
atr/templates/draft-tools.html | 6 +-
atr/templates/includes/footer.html | 4 +-
atr/templates/report-selected-path.html | 6 +-
atr/user.py | 34 +-
atr/util.py | 89 ++-
atr/web.py | 11 +-
atr/worker.py | 180 +++--
docker-compose.yml | 6 +-
migrations/env.py | 15 +
migrations/versions/0035_2026.01.08_2bbfd636.py | 29 +
migrations/versions/0036_2026.01.12_3831f215.py | 26 +
migrations/versions/0037_2026.01.13_0cefcaea.py | 46 ++
migrations/versions/0038_2026.01.14_267562c1.py | 39 +
migrations/versions/0039_2026.01.14_cd44f0ea.py | 31 +
migrations/versions/0040_2026.01.15_31d91cc5.py | 31 +
....05_211a31e3.py => 0041_2026.01.22_d1e357f5.py} | 16 +-
migrations/versions/0042_2026.01.28_3e434625.py | 31 +
migrations/versions/0043_2026.01.29_d7d89670.py | 33 +
notes/api-security.md | 38 -
notes/development.md | 26 -
notes/outcome-design-patterns.md | 38 -
notes/plan.md | 197 -----
notes/test-user-flows.md | 71 --
notes/trivial-changes.md | 9 -
playwright/test.py | 15 +-
pyproject.toml | 11 +-
scripts/README.md | 4 +-
scripts/build | 5 +-
scripts/check-certs | 15 +
scripts/check-perms | 15 +
scripts/check_models_imports.py | 83 +++
scripts/generate-certificates | 15 +-
scripts/keys_import.py | 2 +-
start-atr.sh | 13 +-
start-dev.sh | 13 +-
tests/Dockerfile.e2e | 2 +-
tests/docker-compose.yml | 14 +-
tests/e2e/announce/test_get.py | 41 --
tests/e2e/compose/test_get.py | 15 +-
tests/e2e/helpers.py | 9 +-
tests/{datasources => e2e/policy}/__init__.py | 0
tests/e2e/{root => policy}/conftest.py | 25 +-
tests/e2e/{announce => policy}/helpers.py | 20 +-
tests/e2e/policy/test_get.py | 49 ++
tests/e2e/policy/test_post.py | 72 ++
tests/e2e/report/conftest.py | 14 +-
tests/e2e/sbom/conftest.py | 25 +-
.../icons.py => tests/e2e/sbom/helpers.py | 10 +-
tests/e2e/sbom/test_post.py | 19 +-
{atr => tests/e2e/tokens}/__init__.py | 0
tests/e2e/{root => tokens}/conftest.py | 17 +-
atr/tasks/task.py => tests/e2e/tokens/helpers.py | 24 +-
tests/e2e/tokens/test_get.py | 47 ++
tests/e2e/tokens/test_post.py | 98 +++
tests/e2e/voting/test_get.py | 62 +-
tests/run-e2e.sh | 16 +-
tests/{run-tests.sh => run-playwright.sh} | 0
tests/run-unit.sh | 7 +
{atr => tests/unit}/__init__.py | 0
{atr => tests/unit/datasources}/__init__.py | 0
tests/{ => unit}/datasources/test_apache.py | 54 +-
.../datasources/testdata/committees.json | 0
tests/{ => unit}/datasources/testdata/groups.json | 0
.../datasources/testdata/ldap_projects.json | 0
.../{ => unit}/datasources/testdata/podlings.json | 0
.../{ => unit}/datasources/testdata/projects.json | 0
.../datasources/testdata/retired_committees.json | 0
tests/unit/test_archive_member_limit.py | 268 +++++++
tests/unit/test_cache.py | 233 ++++++
tests/unit/test_checks_license.py | 61 ++
tests/unit/test_checks_rat.py | 133 ++++
tests/unit/test_ignore_patterns.py | 62 ++
tests/unit/test_ldap.py | 114 +++
tests/unit/test_policy_excludes_model.py | 66 ++
tests/unit/test_user.py | 107 +++
tests/unit/test_util.py | 91 +++
tests/unit/test_util_security.py | 145 ++++
uv.lock | 485 ++++++------
204 files changed, 9687 insertions(+), 3094 deletions(-)
create mode 100644 .github/PULL_REQUEST_TEMPLATE.md
delete mode 100644 .github/workflows/pr-labeler.yml
create mode 100644 BUILD.md
create mode 100644 CONTRIBUTING.md
create mode 100644 DEVELOPMENT.md
delete mode 100644 Dockerfile.ubuntu
create mode 100644 GOVERNANCE.md
create mode 100644 SECURITY.md
create mode 100644 SUPPORT.md
create mode 100644 atr/cache.py
create mode 100644 atr/docs/components.md
create mode 100644 atr/docs/input-validation.md
create mode 100644 atr/docs/license-checks.md
create mode 100644 atr/docs/security-authentication.md
create mode 100644 atr/docs/security-authorization.md
create mode 100644 atr/docs/signing-artifacts.md
create mode 100644 atr/loggers.py
create mode 100644 atr/models/checkdata.py
create mode 100644 atr/models/validation.py
copy atr/shared/{__init__.py => web.py} (81%)
create mode 100755 atr/static/sh/gpgsign.sh
copy atr/storage/writers/{cache.py => mail.py} (68%)
copy atr/storage/writers/{ssh.py => workflowstatus.py} (64%)
create mode 100644 atr/tasks/distribution.py
create mode 100644 atr/tasks/gha.py
create mode 100644 migrations/versions/0035_2026.01.08_2bbfd636.py
create mode 100644 migrations/versions/0036_2026.01.12_3831f215.py
create mode 100644 migrations/versions/0037_2026.01.13_0cefcaea.py
create mode 100644 migrations/versions/0038_2026.01.14_267562c1.py
create mode 100644 migrations/versions/0039_2026.01.14_cd44f0ea.py
create mode 100644 migrations/versions/0040_2026.01.15_31d91cc5.py
copy migrations/versions/{0030_2025.12.05_211a31e3.py =>
0041_2026.01.22_d1e357f5.py} (50%)
create mode 100644 migrations/versions/0042_2026.01.28_3e434625.py
create mode 100644 migrations/versions/0043_2026.01.29_d7d89670.py
delete mode 100644 notes/api-security.md
delete mode 100644 notes/development.md
delete mode 100644 notes/outcome-design-patterns.md
delete mode 100644 notes/plan.md
delete mode 100644 notes/test-user-flows.md
delete mode 100644 notes/trivial-changes.md
create mode 100755 scripts/check-certs
create mode 100755 scripts/check-perms
create mode 100755 scripts/check_models_imports.py
rename tests/{datasources => e2e/policy}/__init__.py (100%)
copy tests/e2e/{root => policy}/conftest.py (66%)
copy tests/e2e/{announce => policy}/helpers.py (62%)
create mode 100644 tests/e2e/policy/test_get.py
create mode 100644 tests/e2e/policy/test_post.py
copy atr/blueprints/icons.py => tests/e2e/sbom/helpers.py (79%)
copy {atr => tests/e2e/tokens}/__init__.py (100%)
copy tests/e2e/{root => tokens}/conftest.py (75%)
copy atr/tasks/task.py => tests/e2e/tokens/helpers.py (63%)
create mode 100644 tests/e2e/tokens/test_get.py
create mode 100644 tests/e2e/tokens/test_post.py
rename tests/{run-tests.sh => run-playwright.sh} (100%)
create mode 100755 tests/run-unit.sh
copy {atr => tests/unit}/__init__.py (100%)
copy {atr => tests/unit/datasources}/__init__.py (100%)
rename tests/{ => unit}/datasources/test_apache.py (100%)
rename tests/{ => unit}/datasources/testdata/committees.json (100%)
rename tests/{ => unit}/datasources/testdata/groups.json (100%)
rename tests/{ => unit}/datasources/testdata/ldap_projects.json (100%)
rename tests/{ => unit}/datasources/testdata/podlings.json (100%)
rename tests/{ => unit}/datasources/testdata/projects.json (100%)
rename tests/{ => unit}/datasources/testdata/retired_committees.json (100%)
create mode 100644 tests/unit/test_archive_member_limit.py
create mode 100644 tests/unit/test_cache.py
create mode 100644 tests/unit/test_checks_license.py
create mode 100644 tests/unit/test_checks_rat.py
create mode 100644 tests/unit/test_ignore_patterns.py
create mode 100644 tests/unit/test_ldap.py
create mode 100644 tests/unit/test_policy_excludes_model.py
create mode 100644 tests/unit/test_user.py
create mode 100644 tests/unit/test_util.py
create mode 100644 tests/unit/test_util_security.py
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]