{"id":7930361,"name":"yezz123/CoveAPI","ecosystem":"actions","description":"Openapi testing coverage for integration tests","homepage":"https://coveapi.yezz.me","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/yezz123/CoveAPI","keywords_array":["actions","api","coverage","github-actions","openapi","rust","swagger","swagger-api","swagger-codegen"],"namespace":"yezz123","versions_count":4,"first_release_published_at":"2023-07-11T14:09:40.000Z","latest_release_published_at":"2024-06-02T18:29:17.000Z","latest_release_number":"2.2.0","last_synced_at":"2026-08-30T23:52:38.733Z","created_at":"2023-07-14T10:09:25.248Z","updated_at":"2026-09-22T16:42:15.248Z","registry_url":"https://github.com/yezz123/CoveAPI","install_command":null,"documentation_url":null,"metadata":{"name":"coveapi","description":"Openapi testing coverage for integration tests","author":"Yasser Tahiri","branding":{"icon":"activity","color":"orange"},"inputs":{"stage":{"description":"Preperation or evaluation mode","required":true,"default":"evaluation"},"openapi-source":{"description":"Path or URL of openapi file JSON or YAML","required":false},"instance-url":{"description":"URL of application that will be tested","required":false},"account-for-security-forbidden":{"description":"Take security tags of spec into account and require all 403 cases to be tested","required":false},"account-for-security-unautorized":{"description":"Take security tags of spec into account and require all 401 cases to be tested","required":false},"debug":{"description":"Debugging mode","required":false},"test-coverage":{"description":"Percentage of endpoints that should be covered to pass this stage","required":false},"port":{"description":"Port for coveapi to listen on","required":false},"services":{"description":"A mapping for multiple services with different specs and basepaths","required":false},"only-account-for-pr":{"description":"Indicates if only the changes of a PR should be taken into account when available","required":false},"groupings":{"description":"Allows for ignoring or grouping of specific endpoints","required":false}},"runs":{"using":"composite","steps":[{"uses":"actions/checkout@v2","with":{"fetch-depth":0}},{"shell":"bash","run":"if [[ \"${{inputs.stage}}\" != \"evaluation\" \u0026\u0026 \"${{inputs.stage}}\" != \"preperation\" ]]; then\n    echo \"Please provide a stage name of either \\\"preperation\\\" or \\\"evaluation\\\"\"\n    exit 1\nfi\n"},{"shell":"bash","run":"if [[ \"${{inputs.stage}}\" = \"preperation\" ]]; then\n    docker network create coveapi\n    for line in $(docker ps -q); do\n        docker network connect coveapi $line;\n    done\n    COVEAPI_APP_BASE_URL=${{inputs.instance-url}}\n    if [[ \"${{inputs.services}}\" = \"\" ]]; then\n        if [[ \"${{inputs.port}}\" = \"\" ]]; then\n            COVEAPI_PORT=\"-p 13750:13750\"\n        else\n            COVEAPI_PORT=\"-p ${{inputs.port}}:${{inputs.port}}\"\n        fi\n        COVEAPI_MAPPING=\"\"\n        if [[ \"$GITHUB_BASE_REF\" != \"\" ]]; then\n            COVEAPI_IS_MERGE=\"1\"\n            if [[ -f \"${{inputs.openapi-source}}\" ]]; then\n                git show ${{github.event.pull_request.base.sha}}:${{inputs.openapi-source}} \u003e ${{inputs.openapi-source}}.coveapi.old\n            fi\n        else\n            COVEAPI_IS_MERGE=\"0\"\n        fi\n    else\n        COVEAPI_PORT=\"$(echo \"${{inputs.services}}\" | sed -r 's/([^;]|\\\\;)*;([^;]|\\\\;)*; ([0-9]+)\\;/-p \\3:\\3/g' | sed 's/localhost/172.17.0.1/g' | tr '\\n' ' ')\"\n        COVEAPI_MAPPING=\"${{inputs.services}}\"\n        COVEAPI_MAPPING=\"${COVEAPI_MAPPING//$'\\n'/COVEAPI_LINE_SEPERATOR}\"\n        COVEAPI_MAPPING=\"${COVEAPI_MAPPING//localhost/172.17.0.1}\"\n        if [[ \"$GITHUB_BASE_REF\" != \"\" ]]; then\n            COVEAPI_IS_MERGE=\"1\"\n            for spec in $(echo $COVEAPI_MAPPING | sed -r 's/([^;]|\\\\;)*;\\W?(([^;]|\\\\;)*); ([0-9]+)\\;/\\2 /g'); do\n                if [[ -f \"$spec\" ]]; then\n                    git show ${{github.event.pull_request.base.sha}}:$spec \u003e $spec.coveapi.old\n                fi\n            done\n        else\n            COVEAPI_IS_MERGE=\"0\"\n        fi\n    fi\n    docker run --env COVEAPI_DEBUG=\"${{inputs.debug}}\" --env COVEAPI_APP_BASE_URL=\"${COVEAPI_APP_BASE_URL/localhost/172.17.0.1}\" --env COVEAPI_OPENAPI_SOURCE=\"${{inputs.openapi-source}}\" --env COVEAPI_ACCOUNT_FOR_FORBIDDEN=\"${{inputs.account-for-security-forbidden}}\" --env COVEAPI_ACCOUNT_FOR_UNAUTORIZED=\"${{inputs.account-for-security-unautorized}}\" --env COVEAPI_TEST_COVERAGE=\"${{inputs.test-coverage}}\" --env COVEAPI_PORT=\"${{inputs.port}}\" --volume $PWD:/repo $COVEAPI_PORT --env COVEAPI_MAPPING=\"$COVEAPI_MAPPING\" --env COVEAPI_IS_MERGE=\"$COVEAPI_IS_MERGE\" --env COVEAPI_ONLY_ACCOUNT_MERGE=\"${{inputs.only-account-for-pr}}\" --env COVEAPI_GROUPINGS=\"${{inputs.groupings}}\" --network coveapi --name coveapi -d yezz123/coveapi@2.1.0\n    sleep 1\n    docker logs coveapi\n    exit $(docker container inspect --format '{{.State.ExitCode}}' coveapi)\nfi\n"},{"shell":"bash","run":"if [[ \"${{inputs.stage}}\" = \"evaluation\" ]]; then\n    if [[ \"${{inputs.openapi-source}}\" != \"\" || \"${{inputs.instance-url}}\" != \"\" || \"${{inputs.test-coverage}}\" != \"\" || \"${{inputs.debug}}\" != \"\" || \"${{inputs.account-for-security-unautorized}}\" != \"\" || \"${{inputs.account-for-security-forbidden}}\" != \"\" || \"${{inputs.services}}\" != \"\" ]]; then\n        echo \"Please configure coveapi in the preperation stage and do not add configuration parameters (outside of stage) here\"\n        exit 1\n    fi\n    docker exec coveapi nginx -s stop\n    sleep 1\n    docker logs coveapi\n    exit $(docker container inspect --format '{{.State.ExitCode}}' coveapi)\nfi\n"}]},"default_branch":"main","path":null},"repo_metadata":{"id":180495796,"uuid":"664571822","full_name":"yezz123/CoveAPI","owner":"yezz123","description":"OpenAPI-based test coverage analysis tool that helps teams improve integration test coverage in CI/CD pipelines","archived":false,"fork":false,"pushed_at":"2024-12-16T04:35:32.000Z","size":823,"stargazers_count":25,"open_issues_count":7,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-08-31T00:14:19.448Z","etag":null,"topics":["actions","api","coverage","github-actions","openapi","rust","swagger","swagger-api","swagger-codegen"],"latest_commit_sha":null,"homepage":"https://coveapi.yezz.me","language":"Rust","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/yezz123.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"docs/code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"yezz123"}},"created_at":"2023-07-10T09:19:29.000Z","updated_at":"2025-02-22T17:49:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"b00e925b-51d3-4703-8da8-74a4db7a0eb9","html_url":"https://github.com/yezz123/CoveAPI","commit_stats":null,"previous_names":["yezz123/coveapi"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/yezz123/CoveAPI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yezz123","download_url":"https://codeload.github.com/yezz123/CoveAPI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":341189360,"owners_count":37596969,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-09-22T02:00:07.665Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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"},"owner_record":{"login":"yezz123","name":"Yasser Tahiri","uuid":"52716203","kind":"user","description":"Software Engineer - Python | Rust | Go","email":"","website":"yezz.me","location":"Morocco","twitter":"Thyasser1","company":"Yezz LLC","icon_url":"https://avatars.githubusercontent.com/u/52716203?u=d7062cbc6eb7671d5dc9cc0e32a24ae335e0f225\u0026v=4","repositories_count":43,"last_synced_at":"2024-05-01T10:14:35.343Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/yezz123","funding_links":["https://github.com/sponsors/yezz123"],"total_stars":1767,"followers":735,"following":98,"created_at":"2022-11-14T06:10:34.373Z","updated_at":"2024-05-01T10:14:53.485Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yezz123","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yezz123/repositories"},"tags":[{"name":"2.2.0","sha":"3045e6aadef8df9ad41fee1e90723755b6b16c2d","kind":"commit","published_at":"2024-06-02T18:29:17.000Z","download_url":"https://codeload.github.com/yezz123/CoveAPI/tar.gz/2.2.0","html_url":"https://github.com/yezz123/CoveAPI/releases/tag/2.2.0","dependencies_parsed_at":"2024-06-04T04:21:29.540Z","dependency_job_id":null,"purl":"pkg:github/yezz123/CoveAPI@2.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags/2.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags/2.2.0/manifests"},{"name":"2.1.0","sha":"28b00bd4f53067ab218458c721bf10f5972d6266","kind":"commit","published_at":"2023-07-13T07:43:31.000Z","download_url":"https://codeload.github.com/yezz123/CoveAPI/tar.gz/2.1.0","html_url":"https://github.com/yezz123/CoveAPI/releases/tag/2.1.0","dependencies_parsed_at":"2023-07-16T04:06:58.910Z","dependency_job_id":null,"purl":"pkg:github/yezz123/CoveAPI@2.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags/2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags/2.1.0/manifests"},{"name":"2.0.0","sha":"f9285888aa8cb96a094ccb12f61f2dcdda3706de","kind":"commit","published_at":"2023-07-11T21:42:22.000Z","download_url":"https://codeload.github.com/yezz123/CoveAPI/tar.gz/2.0.0","html_url":"https://github.com/yezz123/CoveAPI/releases/tag/2.0.0","dependencies_parsed_at":"2023-07-16T04:06:58.908Z","dependency_job_id":null,"purl":"pkg:github/yezz123/CoveAPI@2.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags/2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags/2.0.0/manifests"},{"name":"1.0.0","sha":"21298a5be958c56adbdb48b29a67172804ae0d2d","kind":"commit","published_at":"2023-07-11T14:09:40.000Z","download_url":"https://codeload.github.com/yezz123/CoveAPI/tar.gz/1.0.0","html_url":"https://github.com/yezz123/CoveAPI/releases/tag/1.0.0","dependencies_parsed_at":"2023-07-16T04:06:58.646Z","dependency_job_id":null,"purl":"pkg:github/yezz123/CoveAPI@1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags/1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2FCoveAPI/tags/1.0.0/manifests"}]},"repo_metadata_updated_at":"2026-09-22T16:42:15.248Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":41.32034914017718,"dependent_packages_count":0.0,"stargazers_count":12.33715476810839,"forks_count":35.18759770713913,"docker_downloads_count":null,"average":22.211275403856174},"purl":"pkg:githubactions/yezz123/CoveAPI","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/actions/yezz123/CoveAPI","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/actions/yezz123/CoveAPI","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/actions/yezz123/CoveAPI/dependencies","status":null,"funding_links":["https://github.com/sponsors/yezz123"],"critical":null,"issue_metadata":{"last_synced_at":"2025-04-11T06:35:57.498Z","issues_count":7,"pull_requests_count":135,"avg_time_to_close_issue":8703274.6,"avg_time_to_close_pull_request":1909919.144,"issues_closed_count":5,"pull_requests_closed_count":125,"pull_request_authors_count":3,"issue_authors_count":1,"avg_comments_per_issue":0.0,"avg_comments_per_pull_request":1.6296296296296295,"merged_pull_requests_count":46,"bot_issues_count":0,"bot_pull_requests_count":127,"past_year_issues_count":5,"past_year_pull_requests_count":111,"past_year_avg_time_to_close_issue":217441.0,"past_year_avg_time_to_close_pull_request":676239.0,"past_year_issues_closed_count":3,"past_year_pull_requests_closed_count":101,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":1.5765765765765767,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":105,"past_year_merged_pull_requests_count":43,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/yezz123%2Fcoveapi/issues","maintainers":[{"login":"yezz123","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/yezz123"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/yezz123%2FCoveAPI/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/yezz123%2FCoveAPI/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/yezz123%2FCoveAPI/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/yezz123%2FCoveAPI/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/yezz123%2FCoveAPI/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/yezz123%2FCoveAPI/codemeta","maintainers":[]}