openmeter / api /spec /Makefile
Leon4gr45's picture
Upload folder using huggingface_hub
048b1e8 verified
Raw
History Blame Contribute Delete
4.21 kB
# A Self-Documenting Makefile: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
.PHONY: generate
generate: ## Generate OpenAPI spec
$(call print-target)
pnpm --frozen-lockfile install
pnpm generate
# Replace inline filter definitions with $ref to common/definitions/aip_filters.yaml
@AIP_REF="../../../../common/definitions/aip_filters.yaml#/components/schemas"; \
FILE="packages/aip/output/definitions/metering-and-billing/v3/openapi.MeteringAndBilling.yaml"; \
for schema in SortQuery BooleanFieldFilter NumericFieldFilter StringFieldFilter StringFieldFilterExact DateTimeFieldFilter LabelsFieldFilter; do \
if yq -e ".components.schemas | has(\"$$schema\")" "$$FILE" > /dev/null 2>&1; then \
REF_VAL="$$AIP_REF/$$schema" SCHEMA="$$schema" yq -i '.components.schemas[strenv(SCHEMA)] = {"$$ref": strenv(REF_VAL)}' "$$FILE"; \
fi; \
done
# Prefix addon operationIds with `product-catalog-` for the v3 MeteringAndBilling output
@FILE="packages/aip/output/definitions/metering-and-billing/v3/openapi.MeteringAndBilling.yaml"; \
for op in list-addons create-addon update-addon get-addon delete-addon archive-addon publish-addon; do \
new_op="$$(printf '%s' "$$op" | sed 's/-addon/-product-catalog-addon/')"; \
OLD_OP="$$op" NEW_OP="$$new_op" yq -i '(.paths[][] | select(.operationId == strenv(OLD_OP)) | .operationId) = strenv(NEW_OP)' "$$FILE"; \
done
# Strip Go codegen vendor extensions from the v3 MeteringAndBilling output
@FILE="packages/aip/output/definitions/metering-and-billing/v3/openapi.MeteringAndBilling.yaml"; \
yq -i 'del(.. | select(has("x-go-type"))["x-go-type"], .. | select(has("x-go-type-import"))["x-go-type-import"])' "$$FILE"
pnpm --filter @openmeter/api-spec-aip exec openapi bundle output/definitions/metering-and-billing/v3/openapi.OpenMeter.yaml -o ../../../v3/openapi.yaml
cp packages/legacy/output/openapi.OpenMeter.yaml ../openapi.yaml
cp packages/legacy/output/openapi.OpenMeterCloud.yaml ../openapi.cloud.yaml
cp packages/aip/output/definitions/metering-and-billing/v3/openapi.Test.yaml ../v3/test/openapi.test.yaml
.PHONY: test
test: ## Run AIP TypeScript SDK and emitter tests
$(call print-target)
pnpm --frozen-lockfile install
pnpm --filter @openmeter/api-spec-aip run test
pnpm run test:sdk:coverage
pnpm --filter @openmeter/typespec-typescript run check
.PHONY: publish-aip-sdk
publish-aip-sdk: ## Publish the AIP TypeScript SDK (@openmeter/client) to npm
$(call print-target)
@if [ -z "$$AIP_SDK_RELEASE_VERSION" ]; then \
echo "ERROR: AIP_SDK_RELEASE_VERSION is required"; \
echo "Usage: AIP_SDK_RELEASE_VERSION=1.2.3 make publish-aip-sdk [AIP_SDK_RELEASE_TAG=beta]"; \
exit 1; \
fi
@if [ -z "$$AIP_SDK_RELEASE_TAG" ]; then \
echo "ERROR: AIP_SDK_RELEASE_TAG is required"; \
echo "Usage: AIP_SDK_RELEASE_VERSION=1.2.3 make publish-aip-sdk [AIP_SDK_RELEASE_TAG=beta]"; \
exit 1; \
fi
pnpm --frozen-lockfile install
cd packages/aip-client-javascript && \
pnpm version "$${AIP_SDK_RELEASE_VERSION}" --no-git-tag-version && \
node -e "const fs=require('node:fs');const p='src/lib/version.ts';const v=process.env.AIP_SDK_RELEASE_VERSION;const src=fs.readFileSync(p,'utf8');const out=src.replace(/SDK_VERSION = '[^']*'/, \"SDK_VERSION = '\" + v + \"'\");if(out===src){throw new Error('SDK_VERSION pattern not found in '+p)}fs.writeFileSync(p, out)" && \
CACHE_BUSTER="$$(date --rfc-3339=seconds)" pnpm publish --no-git-checks --access public --tag "$${AIP_SDK_RELEASE_TAG}"
@echo "✅ Published $${AIP_SDK_RELEASE_TAG} AIP TypeScript SDK (@openmeter/client) version $${AIP_SDK_RELEASE_VERSION} with tag $${AIP_SDK_RELEASE_TAG}"
.PHONY: lint
lint: ## Lint OpenAPI spec
$(call print-target)
pnpm --frozen-lockfile install
pnpm lint
.PHONY: format
format: ## Format OpenAPI spec
$(call print-target)
pnpm --frozen-lockfile install
pnpm format
.PHONY: help
.DEFAULT_GOAL := help
help:
@grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
# Variable outputting/exporting rules
var-%: ; @echo $($*)
varexport-%: ; @echo $*=$($*)
define print-target
@printf "Executing target: \033[36m$@\033[0m\n"
endef