80 lines
2.4 KiB
Bash
Executable File
80 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
declare -r ETC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)"
|
|
declare -r ROOT_DIR="$(dirname ${ETC_DIR})"
|
|
declare -r API_DIR="${ROOT_DIR}/api"
|
|
|
|
declare -r GENERATED_PATTERN='^// Code generated .* DO NOT EDIT\.$'
|
|
declare -r MERGE_DOCKER_IMG=quay.io/influxdb/swagger-cli
|
|
declare -r GENERATOR_DOCKER_IMG=openapitools/openapi-generator-cli:v5.1.1
|
|
declare -r TAG_STRIP_IMG=python:3.9-alpine3.15
|
|
|
|
# Clean up all the generated files in the target directory.
|
|
rm -f $(grep -Elr "${GENERATED_PATTERN}" "${API_DIR}")
|
|
|
|
# Merge all API contracts into a single file to drive codegen.
|
|
docker run --rm -it -u "$(id -u):$(id -g)" \
|
|
-v "${API_DIR}":/api \
|
|
${MERGE_DOCKER_IMG} \
|
|
swagger-cli bundle /api/contract/cli.yml \
|
|
--outfile /api/cli.gen.yml \
|
|
--type yaml
|
|
|
|
# Merge extras to a separate file
|
|
docker run --rm -it -u "$(id -u):$(id -g)" \
|
|
-v "${API_DIR}":/api \
|
|
${MERGE_DOCKER_IMG} \
|
|
swagger-cli bundle /api/contract/cli-extras.yml \
|
|
--outfile /api/cli-extras.gen.yml \
|
|
--type yaml
|
|
|
|
# Strip certain tags to prevent duplicated and conflicting codegen.
|
|
docker run --rm -it -u "$(id -u):$(id -g)" \
|
|
-v "${ROOT_DIR}":/api \
|
|
${TAG_STRIP_IMG} \
|
|
sh -c "python3 /api/etc/stripGroupTags.py /api/api/cli.gen.yml > /api/api/cli-stripped.gen.yml"
|
|
|
|
# Run the generator - This produces many more files than we want to track in git.
|
|
docker run --rm -it -u "$(id -u):$(id -g)" \
|
|
-v "${API_DIR}":/api \
|
|
${GENERATOR_DOCKER_IMG} \
|
|
generate \
|
|
-g go \
|
|
-i /api/cli-stripped.gen.yml \
|
|
-o /api \
|
|
-t /api/templates \
|
|
--additional-properties packageName=api,enumClassPrefix=true,generateInterfaces=true
|
|
|
|
# Run the generator for extras
|
|
docker run --rm -it -u "$(id -u):$(id -g)" \
|
|
-v "${API_DIR}":/api \
|
|
${GENERATOR_DOCKER_IMG} \
|
|
generate \
|
|
-g go \
|
|
-i /api/cli-extras.gen.yml \
|
|
-o /api/extras \
|
|
-t /api/templates \
|
|
--additional-properties packageName=extras,enumClassPrefix=true,generateInterfaces=true
|
|
|
|
rm ${API_DIR}/extras/{client.go,configuration.go,response.go}
|
|
|
|
# Edit the generated files.
|
|
for DIR in "${API_DIR}" "${API_DIR}/extras" ; do
|
|
(
|
|
# Clean up files we don't care about.
|
|
cd $DIR
|
|
rm -rf go.mod go.sum git_push.sh api docs .openapi-generator .travis.yml .gitignore
|
|
|
|
# Change extension of generated files.
|
|
for f in $(grep -El "${GENERATED_PATTERN}" *.go); do
|
|
base=$(basename ${f} .go)
|
|
mv ${f} ${base}.gen.go
|
|
done
|
|
)
|
|
done
|
|
|
|
# Clean up the generated code.
|
|
cd "${ROOT_DIR}"
|
|
>/dev/null make fmt
|