-
Notifications
You must be signed in to change notification settings - Fork 22
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
feat: read org config #47
feat: read org config #47
Conversation
Before we used to merge repo and org config where repo overrode org if two fields were both present. In the new bot it's gonna be a bit more complicated because we have arrays Repo config: plugins:
issues.closed:
- uses:
- plugin: something/plugin-1
with:
test: true
- plugin: something/plugin-2 Org config: plugins:
issues.closed:
- uses:
- plugin: something/plugin-1
with:
test: false
test2: false
- plugin: something/plugin-2
- uses:
- plugin: something/plugin-3 Option 1 (we merge plugin chains if they contain same plugins in the same order) plugins:
issues.closed:
- uses:
- plugin: something/plugin-1
with:
test: true
test2: false
- plugin: something/plugin-2
- uses:
- plugin: something/plugin-3 Option 2 (we treat all plugin chains as unique) plugins:
issues.closed:
- uses:
- plugin: something/plugin-1
with:
test: true
- plugin: something/plugin-2
- uses:
- plugin: something/plugin-1
with:
test: false
test2: false
- plugin: something/plugin-2
- uses:
- plugin: something/plugin-3 |
To me option 1 looks safer because in option 2 we would potentially have the same plugin fired multiple times, which I do not think is wanted, even with different configurations. |
I think that we should check for collisions in plugin ID and then if it exists, prefer repo config over org. To me that seems by far the most partner friendly and sensible conclusion. |
I've been playing with this for quite some time, and I think any sort of merge can introduce lots of unwanted side effects, such as plugins being duplicated and running multiple times, or configurations using the wrong I think the most common use cases to have a different configuration in a repo would be to only run specific plugins there or use specific values for some plugin payload. So I think the repo configuration should take complete precedence over the org, expect if nothing is specified for an event. Example: Repo config: plugins:
issues.closed:
- uses:
- plugin: something/plugin-1
with:
test: true
- plugin: something/plugin-2 Org config: plugins:
issues.opened:
- uses:
- plugin: something/plugin-4
with:
test: true
- plugin: something/plugin-4
issues.closed:
- uses:
- plugin: something/plugin-1
with:
test: false
test2: false
- plugin: something/plugin-2
- uses:
- plugin: something/plugin-3 Would result in plugins:
issues.opened:
- uses:
- plugin: something/plugin-4
with:
test: true
- plugin: something/plugin-4
issues.closed:
- uses:
- plugin: something/plugin-1
with:
test: true
- plugin: something/plugin-2 This way, it is easy to override the Org config if needed, but also easy to keep it as it is and build on top of it. Let me know what you think. |
Please reread my comment. If the plugin has a collision with its ID then take the repo defined config. Merge conflicts are impossible because it's not using the plugin settings from the org in case of collision. |
@0x4007 What exactly do you call plugin ID? Even though their names are unique it is valid to include the same plugin several time even in the same event, so I am not sure to understand. |
Why would a config have the same plugin invoked back to back? Even if, this should be expressed inside of the plugin config section ("run twice") instead of including the same plugin ID in the config twice. Can you generate an example config showing what you mean? It's a bit tedious for me to at this moment from my phone. |
@0x4007 It would not be very useful for now but it technically is a valid scenario. plugins:
'*':
- uses:
- plugin: something/plugin-1
- plugin: something/plugin-1
- plugin: something/plugin-1
issues.opened:
- uses:
- plugin: something/plugin-1
- plugin: something/plugin-1
- plugin: something/plugin-1
- uses:
- plugin: something/plugin-1
- plugin: something/plugin-1
- plugin: something/plugin-1 The same way in Github actions where you can call multiple times the same Action inside a workflow. |
# Conflicts: # bun.lockb # package.json # src/github/utils/config.ts
Does it solve the problem if we generate virtual keys at runtime to express the plugin and webhook event association? "issues.created.something/plugin-1" "*.something/plugin-1" etc Then refer to my suggestion |
We can simply treat event names as unique keys and override based on them without complicated merging of plugin settings or chains. That would enough to start. Example: Org config:
Repo config:
Results in:
|
@rndquu Agreed, it seems to be the most straightforward and less error prone solution. Plus, I think we will use org config in 95% of cases, so it should be fine for edge use-cases. |
I don't think overriding event names will be a useful use case but we can start with that and later when we actually use the bot and see what kind of behavior we need, we can come back to this. |
# Conflicts: # bun.lockb # package.json # tests/main.test.ts
With my experience creating GitHub Actions CI scripts there is no situation I recall with duplicate dependencies being called. Sure its technically possible to do, but its not a realistic situation in my experience. I'm more concerned with addressing practical problems vs academic. |
I know there isn't a concept of merging configurations together on GitHub Actions. This doesn't address the key point I am making. The cause we are discussing is a collision with dependency IDs. And whether there are real-world scenarios where configurations might lead to duplicate dependencies. From my experience creating GitHub Actions CI scripts, I haven't encountered situations where adding redundant dependencies was necessary. This makes the theoretical merging logic problem irrelevant to our practical implementation. We should focus on the actual conditions under which our configurations operate, rather than hypothetical scenarios that don't align with real-world use cases. Basically I'm saying to drop support for using the same dependency more than one, particularly when associated with the same webhook event. See this comment for a suggestion on how to handle that. |
e39c47a
into
ubiquity-os:development
Resolves #46