1
0

runtime: publish GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z

This commit is contained in:
homelab-runtime-publisher
2026-07-30 17:00:12 +00:00
parent 12966d8066
commit 139b3dc00d
4 changed files with 85 additions and 13 deletions
@@ -0,0 +1,38 @@
{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z",
"status": "FAIL",
"rc": 1,
"host": "pve01",
"mode": "change",
"component": "gitea-machine-identity",
"started_at_utc": "2026-07-30T17:00:10Z",
"finished_at_utc": "2026-07-30T17:00:11Z",
"reference_register_checked": true,
"reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
"error_register_checked": true,
"error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83",
"command_sha256": "9ffcea480b54d6707a4308757839917962b95f120e48c04b04f25fc0b25c83a3",
"duplicate_failed_command_blocked": false,
"block_reason": null,
"execution_started": true,
"change_declared": true,
"result_contract_valid": true,
"result_contract_status": "FAIL",
"result_contract_error": null,
"command_rc": 1,
"changes_made": false,
"rollback_started": false,
"rollback_restored": null,
"mutation_outcome": "NO_MUTATION",
"sanitized": true,
"secrets_included": false,
"private_addresses_included": false,
"raw_evidence_retained_locally": true,
"raw_evidence_sha256": "41d148fc79fd258d1a038ea7d8f91bfc9709c7e4af1deb144bedd32e6004c413",
"sanitized_output_sha256": "41d148fc79fd258d1a038ea7d8f91bfc9709c7e4af1deb144bedd32e6004c413",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\n{\"PLAN_SHA256\":null,\"changes_made\":false,\"command_id\":\"GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z\",\"error\":\"RuntimeError: command failed rc=1 argv=/usr/bin/python3 -B -m unittest discover -s /tmp/gitea-v4-reconcile-2aauj_hx/review/tests -v stdout= stderr=(current, dict):\\\\n fail('current user response')\\\\n actual_login = current.get('login')\\\\n if not isinstance(actual_login, str) or not re.fullmatch(r'[A-Za-z0-9_.-]+', actual_login):\\\\n fail('current login')\\\\n _, permission = client.request(\\\\n 'GET',\\\\n f'/repos/{REPOSITORY}/collaborators/{actual_login}/permission',\\\\n )\\\\n if not isinstance(permission, dict) or permission.get('permission') != 'admin':\\\\n fail('legacy repository permission')\\\\n status, _ = client.request(\\\\n 'GET',\\\\n '/users/' + MACHINE_USER,\\\\n expected=(200, 404),\\\\n )\\\\n if status != 404:\\\\n fail('machine user already present')\\\\n return actual_login\\\\n\\\\n\\\\nparser = argparse.ArgumentParser()\\\\nparser.add_argument('mode', choices=('inspect', 'grant'))\\\\nparser.add_argument('--credential-file', required=True)\\\\nargs = parser.parse_args()\\\\nlogin_value, material_value = read_credential(Path(args.credential_file))\\\\nclient = Client(login_value, material_value)\\\\n\\\\nif args.mode == 'inspect':\\\\n actual_login = inspect(client)\\\\n print('LEGACY_IDENTITY_API_STATUS=OK')\\\\n print('GITEA_VERSION=1.26.2')\\\\n print('LEGACY_AUTHENTICATED_LOGIN=' + actual_login)\\\\n print('LEGACY_REPOSITORY_PERMISSION=admin')\\\\n print('MACHINE_USER_STATE=ABSENT')\\\\n print('API_DEADLINE_SECONDS=10')\\\\n raise SystemExit(0)\\\\n\\\\n_, version = client.request('GET', '/version', authenticated=False)\\\\nif not isinstance(version, dict) or version.get('version') != '1.26.2':\\\\n fail('Gitea version')\\\\n_, current = client.request('GET', '/user')\\\\nif not isinstance(current, dict):\\\\n fail('current user response')\\\\nactual_login = current.get('login')\\\\nif not isinstance(actual_login, str) or not re.fullmatch(r'[A-Za-z0-9_.-]+', actual_login):\\\\n fail('current login')\\\\n_, legacy_permission = client.request(\\\\n 'GET',\\\\n f'/repos/{REPOSITORY}/collaborators/{actual_login}/permission',\\\\n)\\\\nif not isinstance(legacy_permission, dict) or legacy_permission.get('permission') != 'admin':\\\\n fail('legacy repository permission')\\\\n_, machine_user = client.request('GET', '/users/' + MACHINE_USER)\\\\nif not isinstance(machine_user, dict):\\\\n fail('machine user response')\\\\nif machine_user.get('login') != MACHINE_USER or machine_user.get('is_admin') is not False:\\\\n fail('machine user non-admin state')\\\\nclient.request(\\\\n 'PUT',\\\\n f'/repos/{REPOSITORY}/collaborators/{MACHINE_USER}',\\\\n payload={'permission': 'write'},\\\\n expected=(204,),\\\\n)\\\\n_, permission = client.request(\\\\n 'GET',\\\\n f'/repos/{REPOSITORY}/collaborators/{MACHINE_USER}/permission',\\\\n)\\\\nif not isinstance(permission, dict) or permission.get('permission') != 'write':\\\\n fail('machine repository permission')\\\\nprint('LEGACY_IDENTITY_GRANT_STATUS=OK')\\\\nprint('MACHINE_USER_PRESENT=YES')\\\\nprint('MACHINE_USER_ADMIN=NO')\\\\nprint('REPOSITORY_PERMISSION=write')\\\\n\\\"\\n\\n----------------------------------------------------------------------\\nRan 20 tests in 0.002s\\n\\nFAILED (failures=1)\\n\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"status\":\"FAIL\"}\n"
}
@@ -0,0 +1,34 @@
CHAT_OUTPUT_BEGIN
COMMAND_ID=GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z
STATUS=FAIL
RC=1
HOST=pve01
MODE=change
COMPONENT=gitea-machine-identity
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83
COMMAND_SHA256=9ffcea480b54d6707a4308757839917962b95f120e48c04b04f25fc0b25c83a3
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=true
RESULT_CONTRACT_VALID=true
RESULT_CONTRACT_STATUS=FAIL
RESULT_CONTRACT_ERROR=NONE
COMMAND_RC=1
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=41d148fc79fd258d1a038ea7d8f91bfc9709c7e4af1deb144bedd32e6004c413
SANITIZED_OUTPUT_SHA256=41d148fc79fd258d1a038ea7d8f91bfc9709c7e4af1deb144bedd32e6004c413
OUTPUT_BEGIN
HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1}
{"PLAN_SHA256":null,"changes_made":false,"command_id":"GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z","error":"RuntimeError: command failed rc=1 argv=/usr/bin/python3 -B -m unittest discover -s /tmp/gitea-v4-reconcile-2aauj_hx/review/tests -v stdout= stderr=(current, dict):\\n fail('current user response')\\n actual_login = current.get('login')\\n if not isinstance(actual_login, str) or not re.fullmatch(r'[A-Za-z0-9_.-]+', actual_login):\\n fail('current login')\\n _, permission = client.request(\\n 'GET',\\n f'/repos/{REPOSITORY}/collaborators/{actual_login}/permission',\\n )\\n if not isinstance(permission, dict) or permission.get('permission') != 'admin':\\n fail('legacy repository permission')\\n status, _ = client.request(\\n 'GET',\\n '/users/' + MACHINE_USER,\\n expected=(200, 404),\\n )\\n if status != 404:\\n fail('machine user already present')\\n return actual_login\\n\\n\\nparser = argparse.ArgumentParser()\\nparser.add_argument('mode', choices=('inspect', 'grant'))\\nparser.add_argument('--credential-file', required=True)\\nargs = parser.parse_args()\\nlogin_value, material_value = read_credential(Path(args.credential_file))\\nclient = Client(login_value, material_value)\\n\\nif args.mode == 'inspect':\\n actual_login = inspect(client)\\n print('LEGACY_IDENTITY_API_STATUS=OK')\\n print('GITEA_VERSION=1.26.2')\\n print('LEGACY_AUTHENTICATED_LOGIN=' + actual_login)\\n print('LEGACY_REPOSITORY_PERMISSION=admin')\\n print('MACHINE_USER_STATE=ABSENT')\\n print('API_DEADLINE_SECONDS=10')\\n raise SystemExit(0)\\n\\n_, version = client.request('GET', '/version', authenticated=False)\\nif not isinstance(version, dict) or version.get('version') != '1.26.2':\\n fail('Gitea version')\\n_, current = client.request('GET', '/user')\\nif not isinstance(current, dict):\\n fail('current user response')\\nactual_login = current.get('login')\\nif not isinstance(actual_login, str) or not re.fullmatch(r'[A-Za-z0-9_.-]+', actual_login):\\n fail('current login')\\n_, legacy_permission = client.request(\\n 'GET',\\n f'/repos/{REPOSITORY}/collaborators/{actual_login}/permission',\\n)\\nif not isinstance(legacy_permission, dict) or legacy_permission.get('permission') != 'admin':\\n fail('legacy repository permission')\\n_, machine_user = client.request('GET', '/users/' + MACHINE_USER)\\nif not isinstance(machine_user, dict):\\n fail('machine user response')\\nif machine_user.get('login') != MACHINE_USER or machine_user.get('is_admin') is not False:\\n fail('machine user non-admin state')\\nclient.request(\\n 'PUT',\\n f'/repos/{REPOSITORY}/collaborators/{MACHINE_USER}',\\n payload={'permission': 'write'},\\n expected=(204,),\\n)\\n_, permission = client.request(\\n 'GET',\\n f'/repos/{REPOSITORY}/collaborators/{MACHINE_USER}/permission',\\n)\\nif not isinstance(permission, dict) or permission.get('permission') != 'write':\\n fail('machine repository permission')\\nprint('LEGACY_IDENTITY_GRANT_STATUS=OK')\\nprint('MACHINE_USER_PRESENT=YES')\\nprint('MACHINE_USER_ADMIN=NO')\\nprint('REPOSITORY_PERMISSION=write')\\n\"\n\n----------------------------------------------------------------------\nRan 20 tests in 0.002s\n\nFAILED (failures=1)\n","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"schema":1,"status":"FAIL"}
OUTPUT_END
CHAT_OUTPUT_END
+7 -7
View File
@@ -1,19 +1,19 @@
{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "GITEA-V4-STAGE-RECONCILE-TRANSACTION-20260730T165411Z",
"command_id": "GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z",
"status": "FAIL",
"rc": 1,
"host": "pve01",
"mode": "change",
"component": "gitea-machine-identity",
"started_at_utc": "2026-07-30T16:55:11Z",
"finished_at_utc": "2026-07-30T16:55:11Z",
"started_at_utc": "2026-07-30T17:00:10Z",
"finished_at_utc": "2026-07-30T17:00:11Z",
"reference_register_checked": true,
"reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
"error_register_checked": true,
"error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83",
"command_sha256": "b41ca32a0d04d44735ec090eda555f182bd42157eaa82f1d06e2c694b4da8ceb",
"command_sha256": "9ffcea480b54d6707a4308757839917962b95f120e48c04b04f25fc0b25c83a3",
"duplicate_failed_command_blocked": false,
"block_reason": null,
"execution_started": true,
@@ -30,9 +30,9 @@
"secrets_included": false,
"private_addresses_included": false,
"raw_evidence_retained_locally": true,
"raw_evidence_sha256": "b90811318932133345de566ba21fab4e157a32475ec0ded909b053131d32d166",
"sanitized_output_sha256": "b90811318932133345de566ba21fab4e157a32475ec0ded909b053131d32d166",
"raw_evidence_sha256": "41d148fc79fd258d1a038ea7d8f91bfc9709c7e4af1deb144bedd32e6004c413",
"sanitized_output_sha256": "41d148fc79fd258d1a038ea7d8f91bfc9709c7e4af1deb144bedd32e6004c413",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"GITEA-V4-STAGE-RECONCILE-TRANSACTION-20260730T165411Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\n{\"PLAN_SHA256\":null,\"changes_made\":false,\"command_id\":\"GITEA-V4-STAGE-RECONCILE-TRANSACTION-20260730T165411Z\",\"error\":\"RuntimeError: command failed rc=1 argv=sha256sum -c SHA256SUMS stdout=README.txt: FAILED\\nassets/git-credential-helper.sh: OK\\nassets/vm170-machine-identity.sh: FAILED\\nphases/apply.sh: FAILED\\nphases/dry-run.sh: FAILED\\nphases/preflight.sh: FAILED\\nphases/prepare.sh: FAILED\\nphases/rollback.sh: FAILED\\nphases/seal.sh: FAILED\\nphases/verify.sh: FAILED\\ntask.json: FAILED\\ntools/legacy_identity_api.py: FAILED\\ntools/test_task.py: FAILED\\ntools/verify_machine_credential.py: FAILED\\n stderr=sha256sum: WARNING: 13 computed checksums did NOT match\\n\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"status\":\"FAIL\"}\n"
"output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\n{\"PLAN_SHA256\":null,\"changes_made\":false,\"command_id\":\"GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z\",\"error\":\"RuntimeError: command failed rc=1 argv=/usr/bin/python3 -B -m unittest discover -s /tmp/gitea-v4-reconcile-2aauj_hx/review/tests -v stdout= stderr=(current, dict):\\\\n fail('current user response')\\\\n actual_login = current.get('login')\\\\n if not isinstance(actual_login, str) or not re.fullmatch(r'[A-Za-z0-9_.-]+', actual_login):\\\\n fail('current login')\\\\n _, permission = client.request(\\\\n 'GET',\\\\n f'/repos/{REPOSITORY}/collaborators/{actual_login}/permission',\\\\n )\\\\n if not isinstance(permission, dict) or permission.get('permission') != 'admin':\\\\n fail('legacy repository permission')\\\\n status, _ = client.request(\\\\n 'GET',\\\\n '/users/' + MACHINE_USER,\\\\n expected=(200, 404),\\\\n )\\\\n if status != 404:\\\\n fail('machine user already present')\\\\n return actual_login\\\\n\\\\n\\\\nparser = argparse.ArgumentParser()\\\\nparser.add_argument('mode', choices=('inspect', 'grant'))\\\\nparser.add_argument('--credential-file', required=True)\\\\nargs = parser.parse_args()\\\\nlogin_value, material_value = read_credential(Path(args.credential_file))\\\\nclient = Client(login_value, material_value)\\\\n\\\\nif args.mode == 'inspect':\\\\n actual_login = inspect(client)\\\\n print('LEGACY_IDENTITY_API_STATUS=OK')\\\\n print('GITEA_VERSION=1.26.2')\\\\n print('LEGACY_AUTHENTICATED_LOGIN=' + actual_login)\\\\n print('LEGACY_REPOSITORY_PERMISSION=admin')\\\\n print('MACHINE_USER_STATE=ABSENT')\\\\n print('API_DEADLINE_SECONDS=10')\\\\n raise SystemExit(0)\\\\n\\\\n_, version = client.request('GET', '/version', authenticated=False)\\\\nif not isinstance(version, dict) or version.get('version') != '1.26.2':\\\\n fail('Gitea version')\\\\n_, current = client.request('GET', '/user')\\\\nif not isinstance(current, dict):\\\\n fail('current user response')\\\\nactual_login = current.get('login')\\\\nif not isinstance(actual_login, str) or not re.fullmatch(r'[A-Za-z0-9_.-]+', actual_login):\\\\n fail('current login')\\\\n_, legacy_permission = client.request(\\\\n 'GET',\\\\n f'/repos/{REPOSITORY}/collaborators/{actual_login}/permission',\\\\n)\\\\nif not isinstance(legacy_permission, dict) or legacy_permission.get('permission') != 'admin':\\\\n fail('legacy repository permission')\\\\n_, machine_user = client.request('GET', '/users/' + MACHINE_USER)\\\\nif not isinstance(machine_user, dict):\\\\n fail('machine user response')\\\\nif machine_user.get('login') != MACHINE_USER or machine_user.get('is_admin') is not False:\\\\n fail('machine user non-admin state')\\\\nclient.request(\\\\n 'PUT',\\\\n f'/repos/{REPOSITORY}/collaborators/{MACHINE_USER}',\\\\n payload={'permission': 'write'},\\\\n expected=(204,),\\\\n)\\\\n_, permission = client.request(\\\\n 'GET',\\\\n f'/repos/{REPOSITORY}/collaborators/{MACHINE_USER}/permission',\\\\n)\\\\nif not isinstance(permission, dict) or permission.get('permission') != 'write':\\\\n fail('machine repository permission')\\\\nprint('LEGACY_IDENTITY_GRANT_STATUS=OK')\\\\nprint('MACHINE_USER_PRESENT=YES')\\\\nprint('MACHINE_USER_ADMIN=NO')\\\\nprint('REPOSITORY_PERMISSION=write')\\\\n\\\"\\n\\n----------------------------------------------------------------------\\nRan 20 tests in 0.002s\\n\\nFAILED (failures=1)\\n\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"status\":\"FAIL\"}\n"
}
+6 -6
View File
@@ -1,5 +1,5 @@
CHAT_OUTPUT_BEGIN
COMMAND_ID=GITEA-V4-STAGE-RECONCILE-TRANSACTION-20260730T165411Z
COMMAND_ID=GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z
STATUS=FAIL
RC=1
HOST=pve01
@@ -9,7 +9,7 @@ REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83
COMMAND_SHA256=b41ca32a0d04d44735ec090eda555f182bd42157eaa82f1d06e2c694b4da8ceb
COMMAND_SHA256=9ffcea480b54d6707a4308757839917962b95f120e48c04b04f25fc0b25c83a3
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=true
@@ -24,11 +24,11 @@ MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=b90811318932133345de566ba21fab4e157a32475ec0ded909b053131d32d166
SANITIZED_OUTPUT_SHA256=b90811318932133345de566ba21fab4e157a32475ec0ded909b053131d32d166
RAW_EVIDENCE_SHA256=41d148fc79fd258d1a038ea7d8f91bfc9709c7e4af1deb144bedd32e6004c413
SANITIZED_OUTPUT_SHA256=41d148fc79fd258d1a038ea7d8f91bfc9709c7e4af1deb144bedd32e6004c413
OUTPUT_BEGIN
HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"GITEA-V4-STAGE-RECONCILE-TRANSACTION-20260730T165411Z","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1}
{"PLAN_SHA256":null,"changes_made":false,"command_id":"GITEA-V4-STAGE-RECONCILE-TRANSACTION-20260730T165411Z","error":"RuntimeError: command failed rc=1 argv=sha256sum -c SHA256SUMS stdout=README.txt: FAILED\nassets/git-credential-helper.sh: OK\nassets/vm170-machine-identity.sh: FAILED\nphases/apply.sh: FAILED\nphases/dry-run.sh: FAILED\nphases/preflight.sh: FAILED\nphases/prepare.sh: FAILED\nphases/rollback.sh: FAILED\nphases/seal.sh: FAILED\nphases/verify.sh: FAILED\ntask.json: FAILED\ntools/legacy_identity_api.py: FAILED\ntools/test_task.py: FAILED\ntools/verify_machine_credential.py: FAILED\n stderr=sha256sum: WARNING: 13 computed checksums did NOT match\n","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"schema":1,"status":"FAIL"}
HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1}
{"PLAN_SHA256":null,"changes_made":false,"command_id":"GITEA-V4-STAGE-RECONCILE-TRANSACTION-V2-20260730T165915Z","error":"RuntimeError: command failed rc=1 argv=/usr/bin/python3 -B -m unittest discover -s /tmp/gitea-v4-reconcile-2aauj_hx/review/tests -v stdout= stderr=(current, dict):\\n fail('current user response')\\n actual_login = current.get('login')\\n if not isinstance(actual_login, str) or not re.fullmatch(r'[A-Za-z0-9_.-]+', actual_login):\\n fail('current login')\\n _, permission = client.request(\\n 'GET',\\n f'/repos/{REPOSITORY}/collaborators/{actual_login}/permission',\\n )\\n if not isinstance(permission, dict) or permission.get('permission') != 'admin':\\n fail('legacy repository permission')\\n status, _ = client.request(\\n 'GET',\\n '/users/' + MACHINE_USER,\\n expected=(200, 404),\\n )\\n if status != 404:\\n fail('machine user already present')\\n return actual_login\\n\\n\\nparser = argparse.ArgumentParser()\\nparser.add_argument('mode', choices=('inspect', 'grant'))\\nparser.add_argument('--credential-file', required=True)\\nargs = parser.parse_args()\\nlogin_value, material_value = read_credential(Path(args.credential_file))\\nclient = Client(login_value, material_value)\\n\\nif args.mode == 'inspect':\\n actual_login = inspect(client)\\n print('LEGACY_IDENTITY_API_STATUS=OK')\\n print('GITEA_VERSION=1.26.2')\\n print('LEGACY_AUTHENTICATED_LOGIN=' + actual_login)\\n print('LEGACY_REPOSITORY_PERMISSION=admin')\\n print('MACHINE_USER_STATE=ABSENT')\\n print('API_DEADLINE_SECONDS=10')\\n raise SystemExit(0)\\n\\n_, version = client.request('GET', '/version', authenticated=False)\\nif not isinstance(version, dict) or version.get('version') != '1.26.2':\\n fail('Gitea version')\\n_, current = client.request('GET', '/user')\\nif not isinstance(current, dict):\\n fail('current user response')\\nactual_login = current.get('login')\\nif not isinstance(actual_login, str) or not re.fullmatch(r'[A-Za-z0-9_.-]+', actual_login):\\n fail('current login')\\n_, legacy_permission = client.request(\\n 'GET',\\n f'/repos/{REPOSITORY}/collaborators/{actual_login}/permission',\\n)\\nif not isinstance(legacy_permission, dict) or legacy_permission.get('permission') != 'admin':\\n fail('legacy repository permission')\\n_, machine_user = client.request('GET', '/users/' + MACHINE_USER)\\nif not isinstance(machine_user, dict):\\n fail('machine user response')\\nif machine_user.get('login') != MACHINE_USER or machine_user.get('is_admin') is not False:\\n fail('machine user non-admin state')\\nclient.request(\\n 'PUT',\\n f'/repos/{REPOSITORY}/collaborators/{MACHINE_USER}',\\n payload={'permission': 'write'},\\n expected=(204,),\\n)\\n_, permission = client.request(\\n 'GET',\\n f'/repos/{REPOSITORY}/collaborators/{MACHINE_USER}/permission',\\n)\\nif not isinstance(permission, dict) or permission.get('permission') != 'write':\\n fail('machine repository permission')\\nprint('LEGACY_IDENTITY_GRANT_STATUS=OK')\\nprint('MACHINE_USER_PRESENT=YES')\\nprint('MACHINE_USER_ADMIN=NO')\\nprint('REPOSITORY_PERMISSION=write')\\n\"\n\n----------------------------------------------------------------------\nRan 20 tests in 0.002s\n\nFAILED (failures=1)\n","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"schema":1,"status":"FAIL"}
OUTPUT_END
CHAT_OUTPUT_END