Skip to content

Commit e059e0c

Browse files
Merge pull request #1 from swagger-api/master
Get latest changes from swagger-parser origin repository
2 parents a39628c + f6270d5 commit e059e0c

File tree

29 files changed

+994
-65
lines changed

29 files changed

+994
-65
lines changed

.github/actions/action.yml

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: 'Swagger Parser'
2+
description: 'Parses, validates, dereferences an OpenAPI definition'
3+
inputs:
4+
inputSpec:
5+
description: 'path to OpenAPI definition file'
6+
required: true
7+
options:
8+
description: 'parser options'
9+
required: false
10+
serializationType:
11+
description: 'result file serialization type'
12+
required: false
13+
logsPath:
14+
description: 'path to validation result file'
15+
required: false
16+
parserSpecPath:
17+
description: 'output path of the serialized parsed definition'
18+
required: false
19+
parserVersion:
20+
description: 'parser version'
21+
required: false
22+
runs:
23+
using: "composite"
24+
steps:
25+
- id: java-version
26+
run: java -version 2>&1 | fgrep -i version | cut -d'"' -f2 | sed -e 's/^1\./1\%/' -e 's/\..*//' -e 's/%/./'
27+
shell: bash
28+
- name: Build Java
29+
if: steps.java-version == null || steps.java-version < 1.8
30+
uses: actions/setup-java@v3
31+
with:
32+
distribution: 'zulu'
33+
java-version: '11'
34+
- name: Download JAR
35+
run: curl -L 'https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.swagger.parser.v3&a=swagger-parser-cli&e=jar&v=${{ inputs.parserVersion }}' -o swagger-parser-cli.jar
36+
shell: bash
37+
- id: execute
38+
name: Execute Jar
39+
run: java -jar swagger-parser-cli.jar -i /home/runner/work/${{ inputs.inputSpec }} ${{ inputs.options }} ${{ inputs.serializationType }} -o /home/runner/work/${{ inputs.parserSpecPath }} -l /home/runner/work/${{ inputs.logsPath }}
40+
shell: bash

.github/workflows/next-snapshot-v1.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
run: |
6969
. ./CI/post-nextsnap-v1.sh
7070
- name: Create Next Snapshot Pull Request
71-
uses: peter-evans/create-pull-request@v2
71+
uses: peter-evans/create-pull-request@v4
7272
if: env.RELEASE_OK == 'yes'
7373
with:
7474
token: ${{ steps.generate-token.outputs.token }}

.github/workflows/next-snapshot.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
run: |
6969
. ./CI/post-nextsnap.sh
7070
- name: Create Next Snapshot Pull Request
71-
uses: peter-evans/create-pull-request@v2
71+
uses: peter-evans/create-pull-request@v4
7272
if: env.RELEASE_OK == 'yes'
7373
with:
7474
token: ${{ steps.generate-token.outputs.token }}

.github/workflows/prepare-release-v1.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
echo "SC_VERSION=$SC_VERSION" >> $GITHUB_ENV
5151
echo "SC_NEXT_VERSION=$SC_NEXT_VERSION" >> $GITHUB_ENV
5252
- name: Create Prepare Release Pull Request
53-
uses: peter-evans/create-pull-request@v2
53+
uses: peter-evans/create-pull-request@v4
5454
if: env.PREPARE_RELEASE_OK == 'yes'
5555
with:
5656
token: ${{ steps.generate-token.outputs.token }}

.github/workflows/prepare-release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
echo "SC_VERSION=$SC_VERSION" >> $GITHUB_ENV
5151
echo "SC_NEXT_VERSION=$SC_NEXT_VERSION" >> $GITHUB_ENV
5252
- name: Create Prepare Release Pull Request
53-
uses: peter-evans/create-pull-request@v2
53+
uses: peter-evans/create-pull-request@v4
5454
if: env.PREPARE_RELEASE_OK == 'yes'
5555
with:
5656
token: ${{ steps.generate-token.outputs.token }}

.github/workflows/release-v1.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ jobs:
7272
run: |
7373
. ./CI/post-release-v1.sh
7474
- name: Create Next Snapshot Pull Request
75-
uses: peter-evans/create-pull-request@v2
75+
uses: peter-evans/create-pull-request@v4
7676
if: env.RELEASE_OK == 'yes'
7777
with:
7878
token: ${{ steps.generate-token.outputs.token }}

.github/workflows/release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ jobs:
7272
run: |
7373
. ./CI/post-release.sh
7474
- name: Create Next Snapshot Pull Request
75-
uses: peter-evans/create-pull-request@v2
75+
uses: peter-evans/create-pull-request@v4
7676
if: env.RELEASE_OK == 'yes'
7777
with:
7878
token: ${{ steps.generate-token.outputs.token }}

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ You can include this library from Sonatype OSS for SNAPSHOTS, or Maven central f
111111
<dependency>
112112
<groupId>io.swagger.parser.v3</groupId>
113113
<artifactId>swagger-parser</artifactId>
114-
<version>2.1.1</version>
114+
<version>2.1.4</version>
115115
</dependency>
116116
```
117117

modules/swagger-parser-cli/pom.xml

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>swagger-parser-project</artifactId>
7+
<groupId>io.swagger.parser.v3</groupId>
8+
<version>2.1.5-SNAPSHOT</version>
9+
<relativePath>../..</relativePath>
10+
</parent>
11+
<modelVersion>4.0.0</modelVersion>
12+
13+
<artifactId>swagger-parser-cli</artifactId>
14+
<packaging>jar</packaging>
15+
<name>swagger-parser (executable)</name>
16+
17+
<build>
18+
<finalName>swagger-parser-cli</finalName>
19+
<resources>
20+
<resource>
21+
<directory>src/main/resources</directory>
22+
<filtering>true</filtering>
23+
<excludes>
24+
<exclude>logback.xml</exclude>
25+
</excludes>
26+
</resource>
27+
</resources>
28+
<plugins>
29+
<plugin>
30+
<groupId>org.apache.maven.plugins</groupId>
31+
<artifactId>maven-jar-plugin</artifactId>
32+
<configuration>
33+
<archive>
34+
<manifest>
35+
<mainClass>io.swagger.v3.parser.SwaggerParser</mainClass>
36+
</manifest>
37+
</archive>
38+
</configuration>
39+
</plugin>
40+
<plugin>
41+
<groupId>org.apache.maven.plugins</groupId>
42+
<artifactId>maven-shade-plugin</artifactId>
43+
<version>2.3</version>
44+
<executions>
45+
<execution>
46+
<id>process-resources</id>
47+
<phase>package</phase>
48+
<goals>
49+
<goal>shade</goal>
50+
</goals>
51+
<configuration>
52+
<minimizeJar>false</minimizeJar>
53+
<createDependencyReducedPom>true</createDependencyReducedPom>
54+
<dependencyReducedPomLocation>
55+
${java.io.tmpdir}/dependency-reduced-pom.xml
56+
</dependencyReducedPomLocation>
57+
<transformers>
58+
<transformer
59+
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
60+
</transformers>
61+
</configuration>
62+
</execution>
63+
</executions>
64+
</plugin>
65+
</plugins>
66+
</build>
67+
68+
<dependencies>
69+
<dependency>
70+
<groupId>io.swagger.parser.v3</groupId>
71+
<artifactId>swagger-parser-v3</artifactId>
72+
<version>2.1.5-SNAPSHOT</version>
73+
<scope>compile</scope>
74+
</dependency>
75+
<dependency>
76+
<groupId>org.testng</groupId>
77+
<artifactId>testng</artifactId>
78+
</dependency>
79+
<dependency>
80+
<groupId>net.sourceforge.argparse4j</groupId>
81+
<artifactId>argparse4j</artifactId>
82+
<version>0.9.0</version>
83+
</dependency>
84+
<dependency>
85+
<groupId>org.slf4j</groupId>
86+
<artifactId>slf4j-simple</artifactId>
87+
<version>2.0.0</version>
88+
</dependency>
89+
</dependencies>
90+
91+
<properties>
92+
<maven.compiler.source>8</maven.compiler.source>
93+
<maven.compiler.target>8</maven.compiler.target>
94+
</properties>
95+
96+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
package io.swagger.v3.parser;
2+
3+
import io.swagger.v3.core.util.Json;
4+
import io.swagger.v3.core.util.Yaml;
5+
6+
import io.swagger.v3.parser.core.models.ParseOptions;
7+
import io.swagger.v3.parser.core.models.SwaggerParseResult;
8+
import net.sourceforge.argparse4j.ArgumentParsers;
9+
import net.sourceforge.argparse4j.impl.Arguments;
10+
import net.sourceforge.argparse4j.inf.ArgumentParser;
11+
import net.sourceforge.argparse4j.inf.ArgumentParserException;
12+
import net.sourceforge.argparse4j.inf.Namespace;
13+
14+
15+
import java.io.OutputStream;
16+
import java.nio.file.Files;
17+
import java.nio.file.Paths;
18+
import java.util.ArrayList;
19+
import java.util.List;
20+
21+
22+
public class SwaggerParser {
23+
24+
public static final String RESOLVE = "resolve";
25+
public static final String RESOLVEFULLY = "resolvefully";
26+
public static final String FLATTEN = "flatten";
27+
public static final String JSON = "json";
28+
public static final String YAML = "yaml";
29+
public static final String LOG_ERRORS = "l";
30+
public static final String OUTPUT_FILE = "o";
31+
public static final String TRUE = "true";
32+
public static final String INPUT_FILE = "i";
33+
34+
public static void main(String[] args) {
35+
if (args.length > 0){
36+
ArgumentParser parser = ArgumentParsers.newFor("swagger-parser").build()
37+
.defaultHelp(true);
38+
parser.addArgument("-i")
39+
.dest(INPUT_FILE)
40+
.required(true)
41+
.type(String.class)
42+
.help("input file to be parsed");
43+
parser.addArgument("-resolve")
44+
.dest(RESOLVE)
45+
.type(Boolean.class)
46+
.action(Arguments.storeTrue())
47+
.setDefault(false)
48+
.help("resolve remote or local references");
49+
parser.addArgument("-resolveFully")
50+
.dest(RESOLVEFULLY)
51+
.type(Boolean.class)
52+
.action(Arguments.storeTrue())
53+
.setDefault(false)
54+
.help("");
55+
parser.addArgument("-flatten")
56+
.dest(FLATTEN)
57+
.type(Boolean.class)
58+
.action(Arguments.storeTrue())
59+
.setDefault(false)
60+
.help("");
61+
parser.addArgument("-o")
62+
.dest(OUTPUT_FILE)
63+
.type(String.class)
64+
.help("output file parsed");
65+
parser.addArgument("-l")
66+
.dest(LOG_ERRORS)
67+
.type(String.class)
68+
.help("output error logs");
69+
parser.addArgument("-json")
70+
.dest(JSON)
71+
.type(Boolean.class)
72+
.action(Arguments.storeTrue())
73+
.setDefault(false)
74+
.help("generate file as JSON");
75+
parser.addArgument("-yaml")
76+
.dest(YAML)
77+
.type(Boolean.class)
78+
.action(Arguments.storeTrue())
79+
.setDefault(false)
80+
.help("generate file as YAML");
81+
try{
82+
readFromLocation(parser.parseArgs(args));
83+
}catch (ArgumentParserException e) {
84+
parser.handleError(e);
85+
System.exit(1);
86+
}
87+
}
88+
}
89+
90+
private static void generateMessagesFile(List<String> messages, Namespace arguments) {
91+
if ( messages != null && !messages.isEmpty() && arguments != null && arguments.getString(LOG_ERRORS) != null){
92+
if(arguments.getString(LOG_ERRORS) != null) {
93+
generateParsedFile(arguments, LOG_ERRORS, messages.toString());
94+
}
95+
}
96+
}
97+
98+
public static List<String> readFromLocation(Namespace args) {
99+
List<String> messages = new ArrayList<>();
100+
ParseOptions options;
101+
try {
102+
options = setOptions(args);
103+
final SwaggerParseResult result = new OpenAPIV3Parser().readLocation(args.get(INPUT_FILE), null, options);
104+
if(args.getString(OUTPUT_FILE) != null) {
105+
if (result.getOpenAPI() != null){
106+
String output;
107+
if(args.getString(JSON) != null && args.getString(JSON).equals(TRUE)){
108+
output = Json.pretty(result.getOpenAPI());
109+
}else if(args.getString(YAML) != null && args.getString(YAML).equals(TRUE)){
110+
output = Yaml.pretty(result.getOpenAPI());
111+
}else{
112+
output= Yaml.pretty(result.getOpenAPI());
113+
}
114+
generateParsedFile(args, OUTPUT_FILE, output );
115+
}
116+
}
117+
if(result.getOpenAPI() == null || !result.getMessages().isEmpty()){
118+
messages = result.getMessages();
119+
generateMessagesFile(messages, args);
120+
}
121+
}catch (Exception e){
122+
e.printStackTrace();
123+
}
124+
return messages;
125+
}
126+
127+
private static void generateParsedFile(Namespace args, String o, String result) {
128+
try {
129+
if(result != null) {
130+
OutputStream out = Files.newOutputStream(Paths.get(args.getString(o)));
131+
byte[] specBytes = result.getBytes();
132+
out.write(specBytes);
133+
out.close();
134+
}
135+
}catch (Exception e){
136+
e.printStackTrace();
137+
}
138+
}
139+
140+
private static ParseOptions setOptions(Namespace parseOptions) {
141+
ParseOptions options = new ParseOptions();
142+
143+
if (parseOptions.getString(RESOLVE) !=null && parseOptions.getString(RESOLVE).equals(TRUE)) {
144+
options.setResolve(true);
145+
}
146+
if (parseOptions.getString(RESOLVEFULLY) != null && parseOptions.getString(RESOLVEFULLY).equals(TRUE)) {
147+
options.setResolveFully(true);
148+
}
149+
if (parseOptions.getString(FLATTEN) != null && parseOptions.getString(FLATTEN).equals(TRUE)) {
150+
options.setFlatten(true);
151+
}
152+
return options;
153+
}
154+
}

0 commit comments

Comments
 (0)