APIDevTools / swagger-cli

Swagger 2.0 and OpenAPI 3.0 command-line tool
https://apitools.dev/swagger-cli
MIT License
517 stars 68 forks source link

Feature Request: Adding the ability to include multiple api files to the command arguments #48

Open Toltar opened 4 years ago

Toltar commented 4 years ago

Hi, currently the validate command can only validate one file. I currently work on a project that has multiple files I want to validate all of them. I could create a bash script that runs this command multiple times, but I think something like this would be awesome:

swagger-cli validate file1.yml file2.yml ... file3.yml

Not sure if this is feasible for the project, so feel free to give me feedback. I am willing to make a pull request to implement this.

JamesMessinger commented 4 years ago

I think that's a great idea! If you're able to submit a PR, I'd be happy to review it.

Toltar commented 4 years ago

@JamesMessinger Great! I might have some questions along the way. So I will ping you here if I have any if that is alright.

JamesMessinger commented 4 years ago

That sounds good. Looking forward to it!

ghost commented 4 years ago

@Toltar In your PR please, try to do one more thing.

Run swagger for a folder and validate all swagger files in that folder. I know there is a pre-commit tool for that but I want this feature in swagger-cli. I will be happy to help.

@JamesMessinger If my requirement is a completely different feature from what @Toltar is asking for. I would love to make one different PR that completes my requirements

JamesMessinger commented 4 years ago

@rahulbreezo - I like your idea as well. And if @Toltar feels like adding that feature to the PR as well, then I'm all for it. Or it could be done as a separate PR. Either way.

ghost commented 4 years ago

@Toltar Please let me know, are you going to add that feature in your PR or I need to create a different PR for that?

Toltar commented 4 years ago

@rahulbreezo I like your suggestion. Might need to analyze how the code works first. I'm sure we both can work something out. So far, I see that we need to possibly do something on this line where we can get an array of file paths instead of a single file: https://github.com/APIDevTools/swagger-cli/blob/master/bin/swagger-cli.js#L14

And also creating a function that loops through the files and call this: https://github.com/APIDevTools/swagger-cli/blob/master/bin/swagger-cli.js#L162

Or simply modify the bundle file to accept an array of filenames/paths.

For a directory, we would have to somehow figure that out for it to know that it is a directory and that it needs to recursively look through said directory for the files. But with my feature request, I will have to do the same except, the specific file paths are known in this case. But good that you brought this up @rahulbreezo so I can think about your feature as well.

I suggest we focus on building the thing where it will loop through a set of files. I can already foresee creating an isolated function that is given an array of file paths, which is agnostic to where they come from.

If @rahulbreezo, you could build the part where it can get me an array of filepaths/files from a directory so that we can hook into this one function I am imagining that would be great. We can possibly do this in around ~3ish small PRs.

sudoStatus200 commented 4 years ago

@Toltar Hi, that rahulbreezo is my work account created from work email.

ok, I agree with you using a path array of files is a good idea.

Getting file paths from a directory should be easy using fs module, but folder can contain other than swagger files as well.

So I think we can do the same as pre-commit tool does (https://www.npmjs.com/package/swagger-cli). Only the files matching a certain pattern should go through the validator like this pattern .*swagger.*\.(json|yaml|yml).

is it okay? if yes then I will start writing function for this and then create a small PR for this.