{"id":22802520,"url":"https://github.com/mindscreen/mindscreen.projectpackages","last_synced_at":"2025-07-15T07:02:16.206Z","repository":{"id":29458978,"uuid":"121746881","full_name":"mindscreen/Mindscreen.ProjectPackages","owner":"mindscreen","description":"Overview your projects' dependencies","archived":false,"fork":false,"pushed_at":"2022-02-10T08:56:04.000Z","size":1968,"stargazers_count":5,"open_issues_count":8,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-23T05:11:45.935Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mindscreen.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-16T12:10:55.000Z","updated_at":"2024-09-10T14:00:08.000Z","dependencies_parsed_at":"2022-08-07T14:16:33.149Z","dependency_job_id":null,"html_url":"https://github.com/mindscreen/Mindscreen.ProjectPackages","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mindscreen/Mindscreen.ProjectPackages","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mindscreen%2FMindscreen.ProjectPackages","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mindscreen%2FMindscreen.ProjectPackages/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mindscreen%2FMindscreen.ProjectPackages/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mindscreen%2FMindscreen.ProjectPackages/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mindscreen","download_url":"https://codeload.github.com/mindscreen/Mindscreen.ProjectPackages/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mindscreen%2FMindscreen.ProjectPackages/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265416174,"owners_count":23761339,"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":[],"created_at":"2024-12-12T09:06:20.260Z","updated_at":"2025-07-15T07:02:16.168Z","avatar_url":"https://github.com/mindscreen.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mindscreen.ProjectPackages\nGoal of this project is to offer an overview of packages used in your various projects. Projects are registered from configured repository sources like a [GitLab](https://about.gitlab.com/) instance.\n\nAddtionally projects can be searched by filtering packages e.g. to find all your projects you have to update as some package has received an update or got deprecated.\n\n## Requirements\nThis project requires a [Flow](https://flow.neos.io) application, so [it's requirements](http://flowframework.readthedocs.io/en/stable/Quickstart/index.html#installing-flow) apply:\n* a webserver\n* PHP 7.1\n* a [Doctrine DBAL](http://www.doctrine-project.org/projects/dbal.html)-supported database such as MySql\n* command-line access\n\n## Installation\n1. [Install Flow](http://flowframework.readthedocs.io/en/stable/TheDefinitiveGuide/PartII/Installation.html)\n2. Require this project\n    a. [Configure](https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository) the `composer.json` to include this repository when requiring `mindscreen/projectpackages`\n    b. Clone this repository into `Packages/Application` of your Flow application\n3. Store your credentials in your [Settings.yaml](http://flowframework.readthedocs.io/en/stable/TheDefinitiveGuide/PartII/Configuration.html#database-setup)\n4. Configure your repository-sources\n5. [Load data](#cli)\n\n## Configuration\nYou can configure multiple package sources in your [application's settings](http://flowframework.readthedocs.io/en/stable/TheDefinitiveGuide/PartII/Configuration.html), e.g. `Configuration/Settings.yaml`:\n```yaml\n# ...\nMindscreen:\n  ProjectPackages:\n    clients:\n      myClient:\n        type: Mindscreen\\ProjectPackages\\Strategy\\RepositorySource\\Gitlab\n        options:\n          url: 'https://git.example.com/'\n          token: '*****'\n```\nNote that `myClient` is a (unique) identifier of your choosing used when updating repositories and to differentiate between your projects.\nSee [repository-sources](#repository-sources) for details on the client type. Different repository-sources may have different options.\n\n## Repository Sources\nA repository source can be anything that provides repositories where you host your projects, e.g. a [GitLab](https://about.gitlab.com/) instance, [GitHub](https://github.com/) or maybe even a SVN provider. The given `type` is a class implementing `\\Mindscreen\\ProjectPackages\\Strategy\\RepositorySource\\RepositorySourceInterface` to grant access to repositories and files.\n\n### Mindscreen\\ProjectPackages\\Strategy\\RepositorySource\\Gitlab\nLoad repositories from a GitLab instance.  \n**Options:**\n* url: the gitlab url\n* token: a valid api token for that gitlab\n\n### Mindscreen\\ProjectPackages\\Strategy\\RepositorySource\\Github\nLoad repositories from [GitHub.com](https://github.com).  \n**Options:**  \n* user: a github user to load repositories from\n* org: a github organisation to load repositories from (Note that only one of these will be used by a source.)\n* authorization: optional, but will drastically increase your rate-limit. See *Authorization* below.\n\n**Authorization:**  \nAn array that at least requires the setting `type` with the following possible values and additional fields:\n* `value`: The value in `header` will be set as `Authorization` header\n* `basic`: Requires either a [personal access token](https://github.com/blog/1509-personal-api-tokens) as `token` or a combination of `user` and `password`.\n* `token`: Requires a `token`\n\n## Project Strategies\nFor a repository multiple project strategies will be tested and evaluated if applicable.\nApplicability is generally determined by the existence of certain files like a `composer.json`.\nDuring evaluation packages are identified and associated to the current project.\nA project-strategy should extend the `FallbackStrategy` (or a fitting other base class) as strategy execution is not repeated for child classes of already evaluated strategies (e.g. a (hypothetical) LavarelProjectStrategy extending a PhpProjectStrategy is assumed to add value, but should not repeat the same behaviour).  \nProject-Strategies are applied ordered by their `protected static $priority` with higher values executed first. Strategies with values \u003c= 0 are excluded from automatic execution. Thus when implementing a custom project-strategy don't forget to set this value accordingly.  \nKeep in mind that some repository-source methods might take a long time: e.g. searching a file deep within a repository to determine applicability (or other features) might be extremely slow in big repositories.\n\n## CLI\n* `project:updateall` Update all repositories from all sources\n* `project:updatefromsource --source-identifier` Update all repositories from the specified source\n* `project:deletebysource --source-identifier` Delete all repositories (and associated information) originating the specified source (e.g. after renaming a source)\n* `project:listsources` List all configured repository-sources\n* `project:updateRepositoryByUrl --repository-url` Given any repository URL (dependending on the repository-source) it tries to match a configured source and update the repository from there. URLs might for example be `https://git.example.com/vendor/project` or `user@git.example.com:vendor/project.git`.\n* `project:updateRepositories --repositories` Given multiple URLs separated by comma, the are interpreted like `project:updateRepositoryByUrl`.\n\n## UI\nThe application serves a single vue app and several json [endpoints](#endpoints).\n\n### Building the UI\n1. Install dependencies with `npm install`\n2. Build with `npm run build`\n3. Develop with `npm run build -- --watch`\n\nWhen running the UI (or a new, better UI) in standalone development, you might want to enable the setting `Mindscreen.ProjectPackages.enableCrossOriginRequests` to turn on CORS-headers.\n\n## Endpoints\n### /packages\n#### /packages/list\nReturns packages including `usages` counting the projects depending on this package.  \n**Parameters**  \n`grouped` (bool, optional): Group package-information by package-name  \n**Return-type**  \n```ts\nPackageVersionInformation: {\n  name: string,\n  version: string,\n  packageManager: string,\n  usages: number,\n  depth: number,\n}[]\n```\nIf `grouped`, returns `[[PackageVersionInformation]]`.\n\n#### /packages/packagemanagers\nGet all distinct package-managers used in packages.  \n**Return-type**  \n```ts\nstring[]\n```\n\n#### /packages/projects\nReturns all projects using the given set of packages.  \n**Parameters**  \n`packages` (string[]): Can either be the package-name (e.g. `neos/flow`) or accompanied by the version (`neos/flow:~4.3`)  \n**Return-type**  \n```ts\nProjectInfo: {\n    repository: {\n        id: string,\n        url: string,\n        source: string,\n        namespace: string,\n        name: string,\n        full_name: string,\n    }\n    key: string,\n    name: string,\n    packageManager: string,\n    type?: string,\n    additional: any[],\n    description?: string,\n}[]\n```\n\n### /projects\n#### /projects/list\nGet all projects  \n**Return-type**  \nsee [/packages/projects](#-packages-projects)  \n\n#### /projects/projecttypes\nGet all distinct project types  \n**Return-type**  \n```ts\nstring[]\n```\n\n#### /projects/packagemanagers\nGet all distinct package-managers  \n**Return-type**  \n```ts\nstring[]\n```\n\n#### /projects/repositorysources\nGet all distinct repository-source identifiers  \n**Return-type**  \n```ts\nstring[]\n```\n\n#### /projects/packages/{packageKey}\nGet all packages found for the given project  \n**Parameters**  \n`packageKey` (string): the `key` property returned by `/projects/list` or `/packages/projects`  \n**Return-type**  \n```ts\nPackageInformation: {\n  name: string,\n  version: string,\n  packageManager: string,\n  additional?: any[],\n  depth: number,\n  renderDepth: number|null,\n  hasDependencies: boolean,\n  duplicate: boolean,\n  dependencies: PackageInformation[],\n}[]\n```\nNote the difference in this return type having the additional field `additional` with arbitrary data defined by a [project strategy](#project-strategies) and is missing the field `usages`.\n\n#### /projects/messages/{packageKey}\nGet all messages found for the given project  \n**Parameters**  \n`packageKey` (string): the `key` property returned by `/projects/list` or `/packages/projects`  \n**Return-type**  \n```ts\nMessage: {\n  code: string|null,\n  message: string,\n  severity: number,\n  title: string|null,\n}[]\n```\n\n## Appendix\n### Terminology\n**Repository** A storage for project files, e.g. a git repository. A repository can contain multiple *projects*: e.g. your application might contain a frontend-build besides being a [composer](https://getcomposer.org/)-managed project.  \n**Repository-Source** A interface to fetch repositories and repository-files from a configured storage.  \n**Project** E.g. a composer-project, meaning a (php) project managing it's dependencies with a `composer.json` file. Projects are usually identified by the existence of certain files like a `composer.json`, `package.json` or `Vagrantfile` (the latter not indicating a package-manager of course).  \n**Package** A project (which is identified to have dependencies) will be associated with (multiple) *packages*. A package usually has a name and a version and is part of a certain package-manager.  \n**Message** During a evaluation messages can be created and assigned to projects e.g. to notify about suggested but missing `*lock` files.  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindscreen%2Fmindscreen.projectpackages","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmindscreen%2Fmindscreen.projectpackages","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmindscreen%2Fmindscreen.projectpackages/lists"}