{"id":26989924,"url":"https://github.com/basemax/codeowners-validator","last_synced_at":"2025-04-09T16:14:57.297Z","repository":{"id":285976321,"uuid":"959954352","full_name":"BaseMax/codeowners-validator","owner":"BaseMax","description":"A simple Python script to validate and check the existence of paths defined in a .github/CODEOWNERS file.","archived":false,"fork":false,"pushed_at":"2025-04-03T16:23:35.000Z","size":12,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T16:14:54.871Z","etag":null,"topics":["codeowner","codeowners","codeowners-developers","codeowners-files","codeowners-test","codeowners-validator","py","python","python-validator","python3","validator","validator-python","validators"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BaseMax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"codeowners_validator.py","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-03T16:11:09.000Z","updated_at":"2025-04-06T11:35:42.000Z","dependencies_parsed_at":"2025-04-03T17:38:51.587Z","dependency_job_id":null,"html_url":"https://github.com/BaseMax/codeowners-validator","commit_stats":null,"previous_names":["basemax/codeowners-validator"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fcodeowners-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fcodeowners-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fcodeowners-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BaseMax%2Fcodeowners-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BaseMax","download_url":"https://codeload.github.com/BaseMax/codeowners-validator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248065282,"owners_count":21041872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["codeowner","codeowners","codeowners-developers","codeowners-files","codeowners-test","codeowners-validator","py","python","python-validator","python3","validator","validator-python","validators"],"created_at":"2025-04-03T21:22:51.274Z","updated_at":"2025-04-09T16:14:57.277Z","avatar_url":"https://github.com/BaseMax.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CODEOWNERS Validator\n\nA simple Python script to validate and check the existence of paths defined in a `.github/CODEOWNERS` file.\n\n## Features\n\n- Reads `.github/CODEOWNERS` file.\n- Skips empty lines and comments.\n- Extracts paths before the first `@` symbol.\n- Checks if the paths exist in the repository.\n- Outputs results with ✅ (exists) or ❌ (missing).\n\n## Running on-the-fly\n\nA single bash line that will download the script and run it using Python (either python or python3 depending on what is available):\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/BaseMax/codeowners-validator/refs/heads/main/codeowners_validator.py -o codeowners_validator.py \u0026\u0026 (python3 codeowners_validator.py || python codeowners_validator.py)\n```\n\n## Installation\n\nClone the repository:\n\n```sh\ngit clone https://github.com/BaseMax/codeowners-validator.git\ncd codeowners-validator\n```\n\n## Usage\n\nRun the script from the root of your repository:\n\n```sh\npython codeowners_validator.py\n```\n\n## Example\n\nTesting on `https://github.com/apache/airflow` repository at https://github.com/apache/airflow/tree/2055aeedb7fa62366907a90c78f7709da612ed25 commit:\n\n```\nC:\\Users\\ALI\\Projects\\airflow\u003epython codeowners_validator.py\n✅ Exists: airflow-core/src/airflow/executors/\n✅ Exists: airflow-core/src/airflow/jobs/\n✅ Exists: airflow-core/src/airflow/models/\n✅ Exists: airflow-core/src/airflow/serialization/\n✅ Exists: airflow-core/src/airflow/dag_processing\n✅ Exists: providers/cncf/kubernetes/\n✅ Exists: chart/\n❌ Missing: docs/*.py\n❌ Missing: docs/apache-airflow\n❌ Missing: docs/docker-stack\n❌ Missing: docs/helm-chart\n✅ Exists: airflow-core/src/airflow/api/\n✅ Exists: airflow-core/src/airflow/api_fastapi/\n✅ Exists: airflow-core/src/airflow/api_fastapi/execution_api/\n✅ Exists: airflow-ctl/\n✅ Exists: airflow-core/src/airflow/api_fastapi/auth/\n✅ Exists: airflow-core/src/airflow/ui/\n✅ Exists: airflow-core/src/airflow/security/permissions.py\n✅ Exists: airflow-core/src/airflow/timetables/\n❌ Missing: docs/apache-airflow/concepts/timetable.rst\n✅ Exists: airflow-core/src/airflow/models/abstractoperator.py\n✅ Exists: airflow-core/src/airflow/models/baseoperator.py\n✅ Exists: airflow-core/src/airflow/models/expandinput.py\n✅ Exists: airflow-core/src/airflow/models/mappedoperator.py\n✅ Exists: airflow-core/src/airflow/models/operator.py\n✅ Exists: airflow-core/src/airflow/models/xcom_arg.py\n❌ Missing: docs/apache-airflow/concepts/dynamic-task-mapping.rst\n✅ Exists: airflow-core/src/airflow/cli/commands/triggerer_command.py\n❌ Missing: airflow-core/src/airflow/jobs/triggerer_job.py\n✅ Exists: airflow-core/src/airflow/jobs/triggerer_job_runner.py\n❌ Missing: docs/apache-airflow/authoring-and-scheduling/deferring.rst\n✅ Exists: airflow-core/src/airflow/secrets\n✅ Exists: providers/amazon/\n✅ Exists: providers/celery/\n✅ Exists: providers/cncf/kubernetes\n✅ Exists: providers/common/messaging/\n✅ Exists: providers/common/sql/\n✅ Exists: providers/dbt/cloud/\n✅ Exists: providers/edge/\n✅ Exists: providers/fab/\n✅ Exists: providers/hashicorp/\n✅ Exists: providers/openlineage/\n✅ Exists: providers/slack/\n✅ Exists: providers/smtp/\n✅ Exists: providers/snowflake/\n✅ Exists: providers/apache/iceberg/\n✅ Exists: .github/workflows/\n✅ Exists: dev/\n✅ Exists: docker-tests/\n✅ Exists: kubernetes-tests/\n✅ Exists: helm-tests/\n✅ Exists: scripts/\n✅ Exists: Dockerfile\n✅ Exists: Dockerfile.ci\n✅ Exists: dev/PROJECT_GUIDELINES.md\n❌ Missing: dev/PROVIDER_PACKAGE_DETAILS.md\n✅ Exists: dev/README.md\n❌ Missing: dev/README_RELEASE_*.md\n✅ Exists: dev/README_RELEASE_PROVIDERS.md\n✅ Exists: ISSUE_TRIAGE_PROCESS.rst\n✅ Exists: airflow-core/src/airflow/decorators/setup_teardown.py\n❌ Missing: airflow-core/src/airflow/example_dags/example_setup_teardown*.py\n✅ Exists: airflow-core/src/airflow/utils/setup_teardown.py\n✅ Exists: airflow-core/src/airflow/io/\n❌ Missing: providers/**/fs/\n✅ Exists: providers/common/io/\n❌ Missing: docs/apache-airflow/core-concepts/objectstorage.rst\n✅ Exists: airflow-core/src/airflow/migrations/\n❌ Missing: providers/fab/src/airflow-core/src/airflow/providers/fab/migrations/\n✅ Exists: task-sdk/\n```\n\n## Requirements\n\n- Python 3.x\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Author\n\nCopyright (c) 2025, Max Base.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasemax%2Fcodeowners-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbasemax%2Fcodeowners-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasemax%2Fcodeowners-validator/lists"}