Fix verification for steps with plugins, part 2 #2339
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Dogfooding showed that signed steps with plugins still tended to fail verification. After digging around with
--debug-http
, it turns out that plugin config maps/hashes tend to be reordered by the backend.On the plus side: we're free to reorder keys within plugin configs! 🎉
Changes here:
pipeline.Plugins
can now be unmarshaled directly from JSON. For consistency it reuses the underlyingUnmarshalOrdered
using the same technique as forCommandStep
.ordered
now hasToMapRecursive
, which replaces*Map[string, any]
withmap[string]any
recursively.Plugin
is unmarshaled usingToMapRecursive
.api.Job.ValuesForFields
now passesBUILDKITE_PLUGINS
through a JSON unmarshal-marshal round-trip. The JSON marshaler writes (plain) map keys in sorted order.Net effect - signatures should verify.