fix(run): update args parsing logic #3030
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.
Description
Work Item
This PR fixes a list of edge cases for argument parsing within
heroku run
andheroku local:run
.argv
elements in a new array using the order that the user inputted. Since this updated logic needs to be applied to bothheroku run
andheroku local:run
, the logic has been refactored into a utility function.--
flag separator are not consumed (fixing flag collisions)foreman()
Testing
NOTE: I recommend commenting out the commands' functionality after consuming the args as you can see the bug without having to spin up a dyno. We will also need to do a refactor for this fix once we migrate to
oclif v4
as some of the fix's functionality will no longer be necessary.yarn
it upcommand
andargv
downstream in both commands./bin/run run -a testing-deploy -- ./print-args.sh --flag1 val1 --flag1 val2
argv
maintains the sorted array due to theoclif
dependency. (This is where the bug should be noticeable)example:
argv [ './print-args.sh', '--flag1', '--flag1', 'val1', 'val2' ]
command
reorders the array to maintain the same order you used when executing the command.example:
command [ './print-args.sh', '--flag1', 'val1', '--flag1', 'val2' ]
--
separator, and commands are fully captured to their respective functions likedyno
opts
andforeman()
Command 1
./bin/run run EXAMPLE_READ_ONLY= python -a example-app-prod -- example.py example_file --file="https://*"
--> check that full command includes the environment variable (EXAMPLE_READ_ONLY=
)Command 2
./bin/run run -e DOMAIN=test -a test-app -- ruby -e 'puts ENV["ENV_KEY"]'
--> check for duplicates for the-e
flagCommand 3
./bin/run local:run bin/migrate -- ./print-args.sh --flag1 val1 --flag1 val2
--> check--flag1
is still captured in command given it is given after the--
separator