Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions .github/workflows/generate-client-specs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Generate Client OpenAPI Specs

on:
pull_request:
paths:
- "VTEX - *.json"
- "clients/*/config.yaml"
- "tools/apim-gen/src/**"

permissions:
contents: write
pull-requests: write

jobs:
generate:
name: Generate APIM-compatible specs
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
token: ${{ secrets.GITHUB_TOKEN }}

- uses: actions/setup-node@v4
with:
node-version: "20"

- name: Install dependencies
run: npm ci
working-directory: tools/apim-gen

- name: Generate specs for all clients
run: |
for config in clients/*/config.yaml; do
client_dir=$(dirname "$config")
echo "::group::Generating specs for $client_dir"
npx tsx tools/apim-gen/src/cli.ts generate "$config"
echo "::endgroup::"
done

- name: Check for changes in output
id: check-changes
run: |
git add clients/*/output/ 2>/dev/null || true
if git diff --cached --quiet; then
echo "changed=false" >> "$GITHUB_OUTPUT"
else
echo "changed=true" >> "$GITHUB_OUTPUT"
fi

- name: Commit generated specs
if: steps.check-changes.outputs.changed == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add clients/*/output/
git commit -m "chore: regenerate client OpenAPI specs"
git push
134 changes: 134 additions & 0 deletions clients/manitou/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
client: manitou
specsDir: ../..
outputDir: output

defaults:
openapiVersion: "3.0.3"
removeFalsePathParams: true
ensureOperationId: true
removeParams:
- name: Accept
in: header
- name: Content-Type
in: header
- name: accountName
in: path
- name: environment
in: path
descriptionNote: "Requests with a body must be sent with `Content-Type: application/json`."

specs:
# ── Catalog API (split into 3 sub-specs by prefix) ──
- source: "VTEX - Catalog API.json"
split:
- prefix: /api/catalog/
outputName: catalog.catalog
title: "Catalog API (Catalog)"
- prefix: /api/catalog_system/
outputName: catalog.catalog_system
title: "Catalog API (Catalog System)"
- prefix: /api/addon/
outputName: catalog.addon
title: "Catalog API (Addon)"

# ── Catalog Seller Portal ──
- source: "VTEX - Catalog API Seller Portal.json"
outputName: catalog-seller-portal
removePaths:
- /api/catalog-seller-portal/products/{param}

# ── Checkout API ──
- source: "VTEX - Checkout API.json"
outputName: checkout

# ── Customer Credit API ──
- source: "VTEX - Customer Credit API.json"
outputName: customer-credit

# ── Logistics API ──
- source: "VTEX - Logistics API.json"
outputName: logistics

# ── Marketplace APIs ──
- source: "VTEX - Marketplace APIs.json"
outputName: marketplace

# ── Marketplace APIs - Sent Offers ──
- source: "VTEX - Marketplace APIs - Sent Offers.json"
outputName: marketplace-sent-offers

# ── Marketplace APIs - Suggestions ──
- source: "VTEX - Marketplace APIs - Suggestions.json"
outputName: marketplace-suggestions

# ── Marketplace Protocol - External Seller Fulfillment ──
- source: "VTEX - Marketplace Protocol - External Seller Fulfillment.json"
outputName: marketplace-protocol-seller-fulfillment

# ── Marketplace Protocol - External Seller Marketplace ──
- source: "VTEX - Marketplace Protocol - External Seller Marketplace.json"
outputName: marketplace-protocol-seller-marketplace

# ── Marketplace Protocol - External Marketplace Orders ──
- source: "VTEX - Marketplace Protocol - External Marketplace Orders.json"
outputName: marketplace-protocol-marketplace-orders

# ── MasterData v1 (remove duplicate CL/AD paths) ──
- source: "VTEX - MasterData API - v10.2.json"
outputName: masterdata-v1
removePaths:
- /api/dataentities/CL/documents
- /api/dataentities/CL/documents/{id}
- /api/dataentities/AD/documents
- /api/dataentities/AD/documents/{id}

# ── Master Data v2 ──
- source: "VTEX - Master Data API - v2.json"
outputName: masterdata-v2

# ── Orders API (split into 4 sub-specs by prefix) ──
- source: "VTEX - Orders API.json"
split:
- prefix: /api/oms/
outputName: orders.oms
title: "Orders API (OMS)"
- prefix: /api/orders/
outputName: orders.orders
title: "Orders API (Orders)"
- prefix: /api/order-system/
outputName: orders.order-system
title: "Orders API (Order System)"
- prefix: /api/checkout/
outputName: orders.checkout
title: "Orders API (Checkout)"

# ── Pricing API ──
- source: "VTEX - Pricing API.json"
outputName: pricing

# ── Search API ──
- source: "VTEX - Search API.json"
outputName: search

# ── SKU Bindings API ──
- source: "VTEX - SKU Bindings API.json"
outputName: sku-bindings

# ── Tracking ──
- source: "VTEX - Tracking.json"
outputName: tracking

# ── VTEX Shipping Network API ──
- source: "VTEX - VTEX Shipping Network API.json"
outputName: shipping-network

# ── Buyer Organizations ──
- source: "VTEX - Buyer Organizations.json"
outputName: buyer-organizations

# ── Pick and Pack ──
- source: "VTEX - Pick and Pack Last Mile Protocol API.json"
outputName: pick-and-pack-last-mile

- source: "VTEX - Pick and Pack Order Changes API.json"
outputName: pick-and-pack-order-changes
Loading