{"id":13788131,"url":"https://github.com/StyraOSS/mcov","last_synced_at":"2025-09-05T18:31:29.255Z","repository":{"id":211240914,"uuid":"728408816","full_name":"StyraInc/mcov","owner":"StyraInc","description":"Minimum compatible OPA version checker","archived":false,"fork":false,"pushed_at":"2024-12-23T01:16:34.000Z","size":66,"stargazers_count":5,"open_issues_count":5,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-24T03:18:18.288Z","etag":null,"topics":["opa","open-policy-agent","rego"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/StyraInc.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-06T22:02:40.000Z","updated_at":"2024-11-04T00:06:42.000Z","dependencies_parsed_at":"2023-12-07T10:29:29.715Z","dependency_job_id":"db760cbc-504f-468d-a190-2e8e529ea4aa","html_url":"https://github.com/StyraInc/mcov","commit_stats":null,"previous_names":["anderseknert/mcov","styrainc/mcov"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StyraInc%2Fmcov","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StyraInc%2Fmcov/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StyraInc%2Fmcov/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StyraInc%2Fmcov/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/StyraInc","download_url":"https://codeload.github.com/StyraInc/mcov/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232052252,"owners_count":18465724,"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":["opa","open-policy-agent","rego"],"created_at":"2024-08-03T21:00:37.264Z","updated_at":"2025-09-05T18:31:23.958Z","avatar_url":"https://github.com/StyraInc.png","language":"Go","funding_links":[],"categories":["Tools and Utilities"],"sub_categories":["Testing Blogs and Articles"],"readme":"# mcov\n\nMinimum compatible [Open Policy Agent](https://www.openpolicyagent.org/) (OPA) version, or mcov for short, is a tiny\ntool that, as the name implies, reports the minimum compatible OPA version for any given\n[Rego](https://www.openpolicyagent.org/docs/latest/policy-language/) files you point it at. This can be used to:\n\n* Ensure that your policies are compatible with the OPA version you are running in production\n* Check the impact on version requirements for any given change to policy\n* That's it! There's literally nothing more to see\n\n## Usage\n\n```shell\n$ mcov policies/\nv0.37.0\n```\n\n## Caveats\n\nNote that not all features of Rego that have been added over time — or changes made to existing ones — are possible to track using capabilities alone. Use the version reported by mcov as a starting point — not as a replacement for testing compatibility!\n\n## OPA Versions Cheatsheet\n\nBelow lists additions to the Rego language, as presented in the OPA capabilities file for each version.\nFeatures that may have an impact on the minimum compatible OPA version but are **not** covered by capabilities are\nmentioned separately.\n\n### v0.67.0\n\n**New built-in functions**\n\n- `strings.count`\n\n**Not covered by capabilities**\n\n- Using a keyword, like `contains`, as a rule name, is now a parser error when `rego.v1` is imported\n\n### v0.64.0\n\n**New built-in functions**\n\n- `json.marshal_with_options`\n\n### v0.63.0\n\n**New built-in functions**\n\n- `crypto.x509.parse_and_verify_certificates_with_options`\n\n### v0.59.0\n\n**Features**\n\n- `import rego.v1` (`rego_v1_import`)\n\n### v0.57.0\n\n**Features**\n\n- Support for General References in Rule Heads (`rule_head_refs`)\n\n**Not covered by capabilities**\n\n- Short form `else` bodies\n\n### v0.56.0\n\n**New built-in functions**\n\n- `numbers.range_step`\n\n### v0.55.0\n\n**New built-in functions**\n\n- `crypto.parse_private_keys`\n\n**Not covered by capabilities**\n\n- Honor `default` keyword on functions\n\n### v0.53.0\n\n**New built-in functions**\n\n- `crypto.x509.parse_keypair`\n\n### v0.52.0\n\n**New built-in functions**\n\n- `crypto.hmac.equal`\n\n### v0.50.0\n\n**New built-in functions**\n\n- `json.verify_schema`\n- `json.match_schema`\n\n### v0.48.0\n\n**New built-in functions**\n\n- `time.format`\n\n### v0.47.0\n\n**New built-in functions**\n\n- `object.keys`\n- `providers.aws.sign_req`\n\n### v0.46.0\n\n**Features**\n\n- Refs in rule heads (`rule_head_ref_string_prefixes`)\n\n**New built-in functions**\n\n- `graphql.schema_is_valid`\n- `net.cidr_is_valid`\n\n**Not covered by capabilities**\n\n- Entrypoint annotation\n- `with`: Allow replacing functions with rules\n\n### v0.45.0\n\n**New built-in functions**\n\n- `regex.replace`\n\n### v0.44.0\n\n**New built-in functions**\n\n- `strings.any_prefix_match`\n- `strings.any_suffix_match`\n\n### v0.43.0\n\n**Not covered by capabilities**\n\n- All `is_valid` functions made to return boolean false rather than throw errors\n\n### v0.42.0\n\n**Future keywords**\n\n- `contains`\n- `if`\n\n**New built-in functions**\n\n- `object.subset`\n\n### v0.41.0\n\n**New built-in functions**\n\n- `graphql.is_valid`\n- `graphql.parse`\n- `graphql.parse_and_verify`\n- `graphql.parse_query`\n- `graphql.parse_schema`\n- `units.parse`\n\n### v0.40.0\n\n**New built-in functions**\n\n- `rego.metadata.chain`\n- `rego.metadata.rule`\n\n**Not covered by capabilities**\n\n- Function mocking\n- Assignment with `:=` allowed in all locations (rule heads, functions, object generating rules)\n\n### v0.38.0\n\n**Future keywords**\n\n- `every`\n\n**Not covered by capabilities**\n\n- Metadata [annotations](https://www.openpolicyagent.org/docs/latest/policy-language/#annotations)\n\n### v0.37.0\n\n**New built-in functions**\n\n- `object.union_n`\n- `graph.reachable_paths`\n- `indexof_n`\n\n**Not covered by capabilities**\n\n- `object.get`: accepting path argument as array\n\n### v0.36.0\n\n**New built-in functions**\n\n- `crypto.hmac.md5`\n- `crypto.hmac.sha1`\n- `crypto.hmac.sha256`\n- `crypto.hmac.sha512`\n- `array.reverse`\n- `strings.reverse`\n\n**Miscellaneous**\n\n- `allow_net` capability added\n\n### v0.35.0\n\n**New built-in functions**\n\n- `net.lookup_ip_addr`\n\n### v0.34.0\n\n**Future keywords**\n\n- `in`\n\n**New built-in functions**\n\n- `internal.member_2` (`in` operator)\n- `internal.member_3` (`in` operator)\n- `print`\n\n### v0.33.0\n\n**New built-in functions**\n\n- `crypto.x509.parse_rsa_private_key`\n\n### v0.31.0\n\n**New built-in functions**\n\n- `crypto.x509.parse_and_verify_certificates`\n- `rand.intn`\n\n### v0.28.0\n\n**New built-in functions**\n\n- `time.diff`\n\n### v0.26.0\n\n**New built-in functions**\n\n- `ceil`\n- `floor`\n\n### v0.25.0\n\n**New built-in functions**\n\n- `base64url.encode_no_pad`\n- `hex.encode`\n- `hex.decode`\n- `json.patch`\n- `json.is_valid`\n- `yaml.is_valid`\n\n### v0.24.0\n\n**New built-in functions**\n\n- `base64.is_valid`\n- `net.cidr_merge`\n- `urlquery.decode_object`\n\n### v0.23.0\n\n**New built-in functions**\n\n- `regex.is_valid`\n\n### v0.22.0\n\n**New built-in functions**\n\n- `numbers.range`\n- `semver.is_valid`\n- `semver.compare`\n\n## Community\n\nFor questions, discussions and announcements related to Styra products, services and open source projects, please join\nthe Styra community on [Slack](https://communityinviter.com/apps/styracommunity/signup)!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FStyraOSS%2Fmcov","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FStyraOSS%2Fmcov","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FStyraOSS%2Fmcov/lists"}