Skip to content

Commit 35d1f22

Browse files
authored
ci/swagger docs (#9)
* ci: generate swagger file * ci: upload file on Swaggerhub * fix: organization name correction
1 parent 2921cba commit 35d1f22

File tree

4 files changed

+92
-0
lines changed

4 files changed

+92
-0
lines changed

.github/workflows/ci.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,57 @@ jobs:
6767

6868
- name: Unit Test
6969
run: yarn test
70+
71+
generate-swagger:
72+
runs-on: ubuntu-latest
73+
env:
74+
SWAGGERHUB_API_KEY: ${{ secrets.SWAGGERHUB_API_KEY }}
75+
steps:
76+
- name: Checkout Code
77+
uses: actions/checkout@v3
78+
79+
- name: Get yarn cache directory path
80+
id: yarn-cache-dir-path
81+
run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT
82+
83+
- uses: actions/cache@v3
84+
id: yarn-cache
85+
with:
86+
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
87+
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
88+
restore-keys: |
89+
${{ runner.os }}-yarn-
90+
91+
- name: Setup node and cache dependencies
92+
uses: actions/setup-node@v3
93+
with:
94+
node-version: 16
95+
cache: "yarn"
96+
97+
- name: Install Dependencies
98+
run: yarn install
99+
100+
- name: Nest Build
101+
run: yarn build
102+
103+
- name: Install swaggerhub-cli
104+
run: yarn global add swaggerhub-cli
105+
106+
- name: Read package version
107+
uses: tyankatsu0105/read-package-version-actions@v1
108+
id: package-version
109+
110+
- name: Generate Swagger JSON
111+
run: yarn generate-swagger
112+
env:
113+
APP_SWAGGER_Version: ${{ steps.package-version.outputs.version }}
114+
115+
- name: Upload on Swaggerhub - Cophr_test
116+
if: github.ref != 'refs/heads/main'
117+
run: |
118+
swaggerhub api:create "Cophr/test/${GITHUB_SHA::8}" --setdefault --file=swagger-docs.json --visibility=public
119+
120+
- name: Upload on Swaggerhub - Cophr_main
121+
if: github.ref == 'refs/heads/main'
122+
run: |
123+
swaggerhub api:create "Cophr/main/${{ env.APP_SWAGGER_Version }}" --setdefault --file=swagger-docs.json --visibility=public

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"scripts": {
99
"prebuild": "rimraf dist",
1010
"build": "nest build",
11+
"generate-swagger": "node ./dist/swagger/generate-swagger-file.js",
1112
"format": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix && prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
1213
"start": "nest start",
1314
"start:dev": "nest start --watch",

src/swagger/generate-swagger-file.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { NestFactory } from "@nestjs/core";
2+
import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
3+
import * as fs from "fs";
4+
5+
import { SwaggerGenerateModule } from "./swagger.module";
6+
7+
async function generateSwaggerJson() {
8+
const app = await NestFactory.create(SwaggerGenerateModule);
9+
10+
const config = new DocumentBuilder()
11+
.setTitle(process.env.APP_SWAGGER_Title ?? "Cophr")
12+
.setDescription(process.env.APP_SWAGGER_Description ?? "")
13+
.setVersion(process.env.APP_SWAGGER_Version ?? "N/A")
14+
.build();
15+
16+
const document = SwaggerModule.createDocument(app, config);
17+
18+
fs.writeFileSync("swagger-docs.json", JSON.stringify(document));
19+
20+
await app.close();
21+
}
22+
23+
void generateSwaggerJson();

src/swagger/swagger.module.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Module } from "@nestjs/common";
2+
import { TypeOrmModule } from "@nestjs/typeorm";
3+
import { AppController } from "src/app.controller";
4+
import { AppService } from "src/app.service";
5+
import { AuthModule } from "src/auth/auth.module";
6+
import { dataSourceJest } from "src/config/data-source";
7+
import { UserModule } from "src/user/user.module";
8+
9+
@Module({
10+
controllers: [AppController],
11+
imports: [TypeOrmModule.forRoot(dataSourceJest), UserModule, AuthModule],
12+
providers: [AppService],
13+
})
14+
export class SwaggerGenerateModule {}

0 commit comments

Comments
 (0)