{"id":34109182,"url":"https://github.com/foliant-docs/foliantcontrib.project_graph","last_synced_at":"2026-04-09T06:37:07.526Z","repository":{"id":57431813,"uuid":"194289387","full_name":"foliant-docs/foliantcontrib.project_graph","owner":"foliant-docs","description":"Foliant Meta Command which draws a scheme of project sections.","archived":false,"fork":false,"pushed_at":"2019-07-01T15:55:27.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-27T04:36:19.183Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/foliant-docs.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-28T14:44:23.000Z","updated_at":"2019-07-01T15:55:23.000Z","dependencies_parsed_at":"2022-09-02T12:40:21.233Z","dependency_job_id":null,"html_url":"https://github.com/foliant-docs/foliantcontrib.project_graph","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/foliant-docs/foliantcontrib.project_graph","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foliant-docs%2Ffoliantcontrib.project_graph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foliant-docs%2Ffoliantcontrib.project_graph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foliant-docs%2Ffoliantcontrib.project_graph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foliant-docs%2Ffoliantcontrib.project_graph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foliant-docs","download_url":"https://codeload.github.com/foliant-docs/foliantcontrib.project_graph/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foliant-docs%2Ffoliantcontrib.project_graph/sbom","scorecard":{"id":406095,"data":{"date":"2025-08-11","repo":{"name":"github.com/foliant-docs/foliantcontrib.project_graph","commit":"2dae1047908986cbed6a7e53d6b0590e79a2a2fa"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Code-Review","score":0,"reason":"Found 0/4 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-18T21:17:52.342Z","repository_id":57431813,"created_at":"2025-08-18T21:17:52.342Z","updated_at":"2025-08-18T21:17:52.342Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28130012,"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","status":"online","status_checked_at":"2025-12-30T02:00:05.476Z","response_time":64,"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"}},"keywords":[],"created_at":"2025-12-14T18:27:43.877Z","updated_at":"2025-12-30T17:06:46.830Z","avatar_url":"https://github.com/foliant-docs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://img.shields.io/pypi/v/foliantcontrib.project_graph.svg)\n\n# ProjectGraph\n\nFoliant Meta Command which draws a scheme of project sections. This extension uses meta-information, collected by folinatcontrib.meta extension.\n\n[Graphviz](http://graphviz.org) is used to build a scheme.\n\n`libgraphviz-dev` is required to be installed on your machine.\n\n## Installation\n\n```bash\n$ pip install foliantcontrib.project_graph\n```\n\n## Usage\n\nFirst you need to specify all relations between the documents in your project. To do this add the `relates` section to your document's meta-data:\n\n```yaml\n---\nrelates:\n    - tests/test1.md\n    - specs/spec.md\n---\n```\n\nin `relates` section you need to specify a list of documents to which current document relates. You can specify either a relative path to connected document or its ID (if the corresponding document has an ID assigned in its meta section):\n\n\n```yaml\n# index.md\n---\nid: index\n---\n```\n\n```yaml\n# glossary.md\n---\nrelates:\n    - index\n---\n```\n\nAfter you specified all relations, run the draw command:\n\n```bash\n$ foliant draw\n```\n\nScheme will appear in the file `project_graph.png`\n\n## Config\n\nProjectGraph has a number of options:\n\n```yaml\nproject_graph:\n    directed: false\n    filename: project_graph.png\n    gv_attributes:\n        node:\n            shape: rect\n            color: green\n        edge:\n            arrowhead: open\n        graph:\n            ranksep: 1\n        main_relation:\n            penwidth: 2\n```\n\n`directed`\n:   Specifies graph to be directed or not. Default: `false`\n\n`filename`\n:   Graph output filename. Default: `project_graph.png`\n\n`gv_attributes`\n:   A dictionary with global attributes of the graph. Each dictionary should be stored under the Graphviz Entity key (`node`, `edge`, or `graph`), or under type key. All sections or relations which have this type will get these attributes.\n\nIf you want to adjust the look of just one node, add a `gv_attributes` option into the meta of the document:\n\n```yaml\n---\nid: index\nrelates:\n    - glossary\ngv_attributes:\n    color: green\n    shape: circle\n---\n```\n\nYou can also change the look of the edges, which connect nodes. To do this you can use a detailed syntax of relations.\n\n## Relations detailed syntax\n\nAs stated in the beginning, to specify relations you need to add a `relates` param and include a list of related documents IDs\\\\file paths:\n\n```yaml\n---\nrelates:\n    - doc1.md\n    - MAIN_SPEC\n---\n```\n\nBut there's also a detailed syntax for specifying relations, it looks like this:\n\n```yaml\n---\nrelates:\n    - rel_path: doc1.md\n      type: details\n    - rel_id: MAIN_SPEC\n      gv_attributes:\n        color: #CCCCCC\n        arrowhead: none\n---\n```\n\nIn the detailed syntax each relation is not a string, but a mapping. This time you have to explicitly use either `rel_path` key, if you are pointing to a document by path, or `rel_id` if you do it by ID.\n\nAlso you can specify relation type by adding a `type` key. Right now the value of this key just goes to the edge label, but soon you'll be able to change the appearance of all edges with one type.\n\nFinally you can override this specific edge's appearance by adjusting Graphviz attributes in the `gv_attributes` key.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoliant-docs%2Ffoliantcontrib.project_graph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffoliant-docs%2Ffoliantcontrib.project_graph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoliant-docs%2Ffoliantcontrib.project_graph/lists"}