-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Group Kiota PHP repositories #156
Comments
Whenever this is completed we should also:
|
(Subject to future edits as investigation continues, but edits will be listed here) Composer (dependency manager) supports linking between sub-projects, however Packagist (dependency repository) doesn't support deployments from sub-packages. Packagist expects a package to be hosted within a GitHub repository whose root folder contains a composer.json file. Reference Currently, package deployment works like this, our PHP repos have a Packagist GitHub app set up & a webhook that triggers publishing to Packagist when a tag is created. The version of the packages is determined by the tag or adding a "version" property to the composer.json. With a mono-repo, our limitation would be in the deployment process. Various tools exist that split the mono-repo into repositories during deployment & pushes commits & tags to the new repos so that deployment happens. Two major tools seem viable for this: Mono-repo builderwhich provides various CLI utilities to validate our dependency versions across sub-projects & release automations which we shouldn't need courtesy of release-please. It does the repo split using a release workflow with the Splitsh-litewhich does only the repo subtree split and has been used by Google Cloud PHP mono-repo to deploy their various service libraries as separate packages ref. They augment this with their own custom scripts. Mono-repo builder seems most viable however it still leaves us potentially with our individual repositories for abstractions, http etc but we can manage everything via a kiota-php repository. Pending:
|
Open to further feedback here @andrueastman, @baywet, @shemogumbe |
Thank you for the additional information. So if I'm following things properly, in those scenarios we'd:
Or am I missing anything here? |
Yes, create a mono-repo. We could keep the current repos for the core libraries for to re-use the current Packagist webhook configs. |
Thanks! The two things I'd want us to get clarity on before we make any decision are:
|
No. We will not be deploying from the mono-repo and we do not need to set up the Packagist GitHub hook/app on the mono-repo.
For this to work, we won't be deleting existing repos. We'll retain the various repos and re-use their existing Packagist configurations so that once changes are tagged on the mono-repo, we push the changes of each sub-project to the corresponding existing GitHub repo with a tag that will trigger an update on Packagist. We could disable issues & PRs to the existing Kiota core PHP repos, dependabot etc and update the README to point customers to the mono-repo. |
Here's a sample set-up of the mono-repo with corresponding individual repos for http and abstractions. Here's a hacky workflow that simulates how release-please could create a tag that is cascaded to the individual repos. Individual repos are tagged & the update to Packagist happens: abstractions, http The updates will require a fine-grained PAT set up under the Microsoft Graph org with content read/write permissions on the specific Kiota core PHP repos. We'd store this as a secret that the mono-repo's release workflow can access. |
If there are no further concerns/questions @baywet, we can create the kiota-php mono-repo & I can start making the changes. |
Thank you for the additional information. I do have some concerns about any solution requiring PATs after the latest security requirements announcements. Additionally, with the forced roll out of policies, we won't be able to sync things without a pull request. Do you think we could use an application for the sync instead? How much setup is that going to require? |
Realized we can use We can push release updates to a new branch on the individual repos & either auto-merge or merge those manually which would trigger release-please on the specific repos & publishing happens. |
Running into some trouble pushing to the individual repositories due to access issues. The GitHub token doesn't have scopes to push across repos in an org. Looking for a GitHub app that might be able to do this. |
@baywet finally got the PoC working. To summarize the investigation:
Release process:
Lmk if you have any additional thoughts/concerns |
Thanks for the deep dive here! |
Submodules would mean that each change to a sub-folder is first pushed to the sub-project's remote & merged to the sub-project's main branch... meaning we'd still be reviewing PRs on the sub-projects. Probably cleaner when the sub-project is a dependency - pulling latest changes is easier. Here's a sample monorepo with submodule setup Subtrees pull the history of the sub-project making the monorepo the new source of truth. The individual repos would be only for release purposes. Cleaner to make changes |
Right, this is not an aggregation case but rather a "publishing" case. We want the source of truth to be on the main repo. Sorry about the confusion here for a second. Thank you for this deep investigation here! (I just saw you created an org & co) I'm happy with the solution, @andrueastman ? |
Thanks for this as well @Ndiritu I'm happy with this as well. Just one question though on this.
Will this mean that multiple PRs are created on each of the existing repo? If so, would it make sense to have these repos only writable by the automation(so that it just writes the source and tag directly to the |
@andrueastman I think that would be more ideal but I think @baywet had mentioned that there may be a requirement to have PRs as mandatory on our repos. Could you please clarify? Also, when ready, could you please create the |
The security teams are eventually going to roll out branch policies across all repositories mandating the use of pull requests to merge anything to the main branches. The timelines are not clear at this point, but the last time I heard of it, they were talking about this quarter. |
Repo created https://github.com/microsoft/kiota-php/ |
Related to microsoft/kiota#4636 and microsoft/kiota-dotnet#238
As a language specific concern, we should look into the feasibility of grouping the repos and outline if this is not feasible in this issue.
Sub-tasks:
Investigation
Created PoC monorepo org and projects for testing https://github.com/sample-monorepo/sample-monorepo
composer
to link multiple packages within same folder as dependencies of each other: sample configFound monorepo-builder: Provides tooling to validate dependency versions across each sub-package in the monorepo
Managed to use a GitHub app that can be used from the split workflow
Currently, after splitting changes to indiv. repo, git history is unrelated, meaning no PR can be created: example
Implementation
The text was updated successfully, but these errors were encountered: