From eae5856a5ee63070fe49caef6a1a57d24ceb87b4 Mon Sep 17 00:00:00 2001 From: Huynh Duc Dung Date: Sun, 24 Sep 2023 09:33:34 +0800 Subject: [PATCH] feat: add eslint and prettier feat: add vercel server route fix(ci): add tsup config for vercel fix(ci): setup the api folder as the vercel convention fix(ci): copy vercel config after build refactor: add prefix to /api to all routes fix(ci): change output as the root directory for vercel build fix(ci): rewrite all routes to vercel api folder refactor: remove vercel deployment --- .eslintrc.cjs | 7 +++++ .prettierrc.cjs | 6 ++++ README.md | 71 ++++++++++++++++++++++-------------------- app.ts | 3 ++ bun.lockb | Bin 186272 -> 249977 bytes package.json | 22 ++++++++----- index.ts => server.ts | 43 +++++++++++-------------- specs/generated.yaml | 6 ++-- specs/openapi.yaml | 6 ++-- specs/swagger.json | 19 ++++------- vercel.json | 8 ----- workflow.yml | 2 +- 12 files changed, 100 insertions(+), 93 deletions(-) create mode 100644 .eslintrc.cjs create mode 100644 .prettierrc.cjs create mode 100644 app.ts rename index.ts => server.ts (70%) delete mode 100644 vercel.json diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..893bd0e --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,7 @@ +module.exports = { + extends: ["productsway/typescript"], + rules: { + "@typescript-eslint/naming-convention": "off", + }, + ignorePatterns: ["dist", ".eslintrc.cjs", "vite.config.ts"], +}; diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 0000000..06be264 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,6 @@ +module.exports = { + importOrder: ["^@core/(.*)$", "^@server/(.*)$", "^@fastify/(.*)$", "^[./]"], + importOrderSeparation: true, + importOrderSortSpecifiers: true, + plugins: ["@trivago/prettier-plugin-sort-imports"], +}; diff --git a/README.md b/README.md index dcb81e9..de585e4 100644 --- a/README.md +++ b/README.md @@ -11,22 +11,25 @@ This repository provides a guide to set up continuous integration for a [Fastify ## Usage 1. **Clone the Repository** - ```bash - git clone https://github.com/jellydn/stepci-demo.git - ``` - + + ```bash + git clone https://github.com/jellydn/stepci-demo.git + ``` + 2. **Install Dependencies** - ```bash - bun install - ``` - + + ```bash + bun install + ``` + 3. **Run Tests Locally** - ```bash - bun run start - bun run test:e2e - ``` - [![Demo](https://i.gyazo.com/10b1e6a520bac9044e4db5d5faacebb4.gif)](https://gyazo.com/10b1e6a520bac9044e4db5d5faacebb4) + ```bash + bun run start + bun run test:e2e + ``` + + [![Demo](https://i.gyazo.com/10b1e6a520bac9044e4db5d5faacebb4.gif)](https://gyazo.com/10b1e6a520bac9044e4db5d5faacebb4) ## Get Started @@ -35,35 +38,35 @@ Run your tests using either Node, Docker, or GitHub Actions. ### Node - **Run Workflow via CLI** - ```bash - npx stepci run workflow.yml - ``` + ```bash + npx stepci run workflow.yml + ``` ### Docker - **Run Workflow via Docker** - ```bash - docker run \ - -v "$(pwd)"/tests:/tests \ - ghcr.io/stepci/stepci \ - tests/workflow.yml - ``` + ```bash + docker run \ + -v "$(pwd)"/tests:/tests \ + ghcr.io/stepci/stepci \ + tests/workflow.yml + ``` ### GitHub Actions - **Automated Workflow on Push** - ```yaml - on: [push] - jobs: - api_test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Step CI Action - uses: stepci/stepci@main - with: - workflow: "workflow.yml" - ``` + ```yaml + on: [push] + jobs: + api_test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Step CI Action + uses: stepci/stepci@main + with: + workflow: "workflow.yml" + ``` ## Resources diff --git a/app.ts b/app.ts new file mode 100644 index 0000000..273ebaf --- /dev/null +++ b/app.ts @@ -0,0 +1,3 @@ +import startServer from "./server"; + +startServer().catch(console.error); diff --git a/bun.lockb b/bun.lockb index a2b86c86e68d0d4348c10b58238552766507a4cb..ee815d8598be28790fec11e1eda150b417320c20 100755 GIT binary patch delta 84572 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 delta 40271 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 { - return { ok: true }; -}); - +server.get("/api", async (_request, _reply) => ({ ok: true })); // Declare a route server.get<{ Querystring: { name: string }; -}>("/hello", async function handler(request) { - const name = request.query.name; +}>("/api/hello", async (request) => { + const { name } = request.query; return { hello: name ?? "world" }; }); @@ -73,11 +71,11 @@ const opts: RouteShorthandOptions = { }; server.get( - "/ping", + "/api/ping", opts, - async (_request: FastifyRequest, _reply: FastifyReply) => { - return { pong: "it worked!" }; - } + async (_request: FastifyRequest, _reply: FastifyReply) => ({ + pong: "it worked!", + }), ); async function startServer() { @@ -94,9 +92,6 @@ async function startServer() { server.log.error(err); process.exit(1); } -}; - -if (process.env.DEPLOYMENT_ENV !== 'vercel') startServer(); +} export default startServer; - diff --git a/specs/generated.yaml b/specs/generated.yaml index bb9fd1f..fd0a9d6 100644 --- a/specs/generated.yaml +++ b/specs/generated.yaml @@ -8,14 +8,14 @@ tests: name: Default steps: - http: - url: / + url: /api method: GET schema: type: object properties: ok: bool - http: - url: /hello + url: /api/hello method: GET check: status: 200 @@ -23,7 +23,7 @@ tests: type: object description: Successful response with a JSON object - http: - url: /ping + url: /api/ping method: GET check: status: 200 diff --git a/specs/openapi.yaml b/specs/openapi.yaml index 4bd84a9..bb92543 100644 --- a/specs/openapi.yaml +++ b/specs/openapi.yaml @@ -9,13 +9,13 @@ externalDocs: servers: - url: http://localhost:3000 paths: - /: + /api: get: responses: 200: description: Default Response content: {} - /hello: + /api/hello: get: responses: 200: @@ -25,7 +25,7 @@ paths: schema: type: string description: Successful response with a JSON object - /ping: + /api/ping: get: responses: 200: diff --git a/specs/swagger.json b/specs/swagger.json index a74ed39..5e325ec 100644 --- a/specs/swagger.json +++ b/specs/swagger.json @@ -7,7 +7,7 @@ }, "definitions": {}, "paths": { - "/": { + "/api": { "get": { "responses": { "200": { @@ -16,7 +16,7 @@ } } }, - "/hello": { + "/api/hello": { "get": { "responses": { "200": { @@ -25,7 +25,7 @@ } } }, - "/ping": { + "/api/ping": { "get": { "responses": { "200": { @@ -44,16 +44,9 @@ } }, "host": "localhost:3000", - "schemes": [ - "http", - "https" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], + "schemes": ["http", "https"], + "consumes": ["application/json"], + "produces": ["application/json"], "externalDocs": { "url": "https://swagger.io", "description": "Find more info here" diff --git a/vercel.json b/vercel.json deleted file mode 100644 index 6dfcb40..0000000 --- a/vercel.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "rewrites": [ - { - "source": "/api/(.*)", - "destination": "/api" - } - ] -} diff --git a/workflow.yml b/workflow.yml index dbe2174..9a05ad3 100644 --- a/workflow.yml +++ b/workflow.yml @@ -1,7 +1,7 @@ version: "1.1" name: Api Check env: - host: localhost:3000 + host: localhost:3000/api tests: ping: steps: