Add ActionState type and make some initial use of it#3990
Draft
mbg wants to merge 14 commits into
Draft
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This PR extracts some changes from #3973 that add the new
ActionStatetype. TheActionStatetype is indexed (at the type-level) over the types of state a corresponding value provides (essentially providing a primitive state effect system). Concretely, this allows:ActionStatevalues can be propagated easily throughout the implementation.ActionStatevalues can easily be mocked in tests.ActionState, we will be able to run more tests in parallel in the future.ActionStatevalues can be passed to functions that require only a subset of features, but cannot use the features they don't declare.This PR adds the new type and surrounding infrastructure. It also updates some parts of the codebase to make use of it, but the goal of this PR is by no means to refactor the entire codebase to make use of
ActionStatevalues. The main example uses in this PR are:runInActionswrapper to de-duplicate common code for the different Actions' entry points.getConfigFileInputfollowing Add FF for configuration file repository property #3983 and making use of the newTestEnvframework for the corresponding tests.Notes for reviewers
ActionStateto other functions, I have deconstructed the objects with pattern-matching. This will go away more as we update more of the codebase to accept relevantActionStatevalues as inputs.loggerinTestEnvfor a while, but am not sure I have reached a satisfactory conclusion there. It probably makes sense for eachTestEnvobject to have its own logger, so that they are isolated from each other if multiple tests are run, but this makes it more awkward to inspect the results (since we have to acquire a reference to the logger of theTestEnvwe callpasseson). This could probably be improved, but may be outside the scope of this PR.Risk assessment
For internal use only. Please select the risk level of this change:
Which use cases does this change impact?
Workflow types:
dynamicworkflows (Default Setup, Code Quality, ...).Products:
analysis-kinds: code-scanning.analysis-kinds: code-quality.upload-sarifaction.Environments:
github.comand/or GitHub Enterprise Cloud with Data Residency.How did/will you validate this change?
.test.tsfiles).pr-checks).If something goes wrong after this change is released, what are the mitigation and rollback strategies?
How will you know if something goes wrong after this change is released?
Are there any special considerations for merging or releasing this change?
Merge / deployment checklist