mirror of
https://github.com/argoproj/argo-cd
synced 2026-04-21 17:07:16 +00:00
* Generate swagger files * Add basic Swagger definitions * Add reposerver swagger file * Consolidate swagger files * Move swagger files to swagger-ui directory instead * Put swagger files in swagger-ui * Fix order of operations * Move back to swagger directory * Serve API server swagger files raw for now * Serve reposerver swagger files from API server * Move back to subdirectories, thanks @alexmt * Fix comment on application Rollback * Update two more comments * Fix comment in session.proto * Update generated code * Update generated swagger docs * Fix comment for delete actions in cluster and repository swagger * Set expected collisions and invoke mixins * Update generated code * Create swagger mixins from codegen * Move swagger.json location, thanks @jazminGonzalez-Rivero * Add ref cleanup for swagger combined * Make fewer temp files when generating swagger * Delete intermediate swagger files * Serve new file at /swagger.json * Set up UI server * Update package lock * Commit generated swagger.json files * Add install commands for swagger * Use ReDoc server instead of Swagger UI server * Update lockfile * Make URL paths more consistent * Update package lock * Separate out handlers for Swagger UI, JSON * Rm unnecessary CORS headers ...since we're serving from the app server * Simplify serving * Further simplify serving code * Update package lock * Factor out swagger serving into util * Add test for Swagger server * Use ServeSwaggerUI method to run tests * Update package lock * Don't generate swagger for reposerver * Reset to master Gopkg.lock and server/server.go * Merge in prev change to server/server.go * Redo changes to Gopkg.lock * Fix number of conflicts * Update generated swagger.json for server * Fix issue with project feature error
120 lines
5.1 KiB
Bash
Executable file
120 lines
5.1 KiB
Bash
Executable file
#! /usr/bin/env bash
|
|
|
|
# This script auto-generates protobuf related files. It is intended to be run manually when either
|
|
# API types are added/modified, or server gRPC calls are added. The generated files should then
|
|
# be checked into source control.
|
|
|
|
set -x
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
PROJECT_ROOT=$(cd $(dirname ${BASH_SOURCE})/..; pwd)
|
|
CODEGEN_PKG=${CODEGEN_PKG:-$(cd ${PROJECT_ROOT}; ls -d -1 ./vendor/k8s.io/code-generator 2>/dev/null || echo ../code-generator)}
|
|
PATH="${PROJECT_ROOT}/dist:${PATH}"
|
|
|
|
# protbuf tooling required to build .proto files from go annotations from k8s-like api types
|
|
go build -i -o dist/go-to-protobuf ./vendor/k8s.io/code-generator/cmd/go-to-protobuf
|
|
go build -i -o dist/protoc-gen-gogo ./vendor/k8s.io/code-generator/cmd/go-to-protobuf/protoc-gen-gogo
|
|
|
|
# Generate pkg/apis/<group>/<apiversion>/(generated.proto,generated.pb.go)
|
|
# NOTE: any dependencies of our types to the k8s.io apimachinery types should be added to the
|
|
# --apimachinery-packages= option so that go-to-protobuf can locate the types, but prefixed with a
|
|
# '-' so that go-to-protobuf will not generate .proto files for it.
|
|
PACKAGES=(
|
|
github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1
|
|
)
|
|
APIMACHINERY_PKGS=(
|
|
+k8s.io/apimachinery/pkg/util/intstr
|
|
+k8s.io/apimachinery/pkg/api/resource
|
|
+k8s.io/apimachinery/pkg/runtime/schema
|
|
+k8s.io/apimachinery/pkg/runtime
|
|
k8s.io/apimachinery/pkg/apis/meta/v1
|
|
k8s.io/api/core/v1
|
|
)
|
|
go-to-protobuf \
|
|
--logtostderr \
|
|
--go-header-file=${PROJECT_ROOT}/hack/custom-boilerplate.go.txt \
|
|
--packages=$(IFS=, ; echo "${PACKAGES[*]}") \
|
|
--apimachinery-packages=$(IFS=, ; echo "${APIMACHINERY_PKGS[*]}") \
|
|
--proto-import=./vendor
|
|
|
|
# Either protoc-gen-go, protoc-gen-gofast, or protoc-gen-gogofast can be used to build
|
|
# server/*/<service>.pb.go from .proto files. golang/protobuf and gogo/protobuf can be used
|
|
# interchangeably. The difference in the options are:
|
|
# 1. protoc-gen-go - official golang/protobuf
|
|
#go build -i -o dist/protoc-gen-go ./vendor/github.com/golang/protobuf/protoc-gen-go
|
|
#GOPROTOBINARY=go
|
|
# 2. protoc-gen-gofast - fork of golang golang/protobuf. Faster code generation
|
|
#go build -i -o dist/protoc-gen-gofast ./vendor/github.com/gogo/protobuf/protoc-gen-gofast
|
|
#GOPROTOBINARY=gofast
|
|
# 3. protoc-gen-gogofast - faster code generation and gogo extensions and flexibility in controlling
|
|
# the generated go code (e.g. customizing field names, nullable fields)
|
|
go build -i -o dist/protoc-gen-gogofast ./vendor/github.com/gogo/protobuf/protoc-gen-gogofast
|
|
GOPROTOBINARY=gogofast
|
|
|
|
# protoc-gen-grpc-gateway is used to build <service>.pb.gw.go files from from .proto files
|
|
go build -i -o dist/protoc-gen-grpc-gateway ./vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
|
|
|
|
# Generate server/<service>/(<service>.pb.go|<service>.pb.gw.go)
|
|
PROTO_FILES=$(find $PROJECT_ROOT \( -name "*.proto" -and -path '*/server/*' -or -path '*/reposerver/*' -and -name "*.proto" \))
|
|
for i in ${PROTO_FILES}; do
|
|
# Path to the google API gateway annotations.proto will be different depending if we are
|
|
# building natively (e.g. from workspace) vs. part of a docker build.
|
|
if [ -f /.dockerenv ]; then
|
|
GOOGLE_PROTO_API_PATH=/root/go/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis
|
|
GOGO_PROTOBUF_PATH=/root/go/src/github.com/gogo/protobuf
|
|
else
|
|
GOOGLE_PROTO_API_PATH=${PROJECT_ROOT}/vendor/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis
|
|
GOGO_PROTOBUF_PATH=${PROJECT_ROOT}/vendor/github.com/gogo/protobuf
|
|
fi
|
|
protoc \
|
|
-I${PROJECT_ROOT} \
|
|
-I/usr/local/include \
|
|
-I./vendor \
|
|
-I$GOPATH/src \
|
|
-I${GOOGLE_PROTO_API_PATH} \
|
|
-I${GOGO_PROTOBUF_PATH} \
|
|
--${GOPROTOBINARY}_out=plugins=grpc:$GOPATH/src \
|
|
--grpc-gateway_out=logtostderr=true:$GOPATH/src \
|
|
--swagger_out=logtostderr=true:. \
|
|
$i
|
|
done
|
|
|
|
# collect_swagger gathers swagger files into a subdirectory
|
|
collect_swagger() {
|
|
SWAGGER_ROOT="$1"
|
|
EXPECTED_COLLISIONS="$2"
|
|
SWAGGER_OUT="${SWAGGER_ROOT}/swagger.json"
|
|
PRIMARY_SWAGGER=`mktemp`
|
|
COMBINED_SWAGGER=`mktemp`
|
|
|
|
cat <<EOF > "${PRIMARY_SWAGGER}"
|
|
{
|
|
"swagger": "2.0",
|
|
"info": {
|
|
"title": "Consolidate Services",
|
|
"description": "Description of all APIs",
|
|
"version": "version not set"
|
|
},
|
|
"paths": {}
|
|
}
|
|
EOF
|
|
|
|
/bin/rm -f "${SWAGGER_OUT}"
|
|
|
|
/usr/bin/find "${SWAGGER_ROOT}" -name '*.swagger.json' -exec /usr/local/bin/swagger mixin -c "${EXPECTED_COLLISIONS}" "${PRIMARY_SWAGGER}" '{}' \+ > "${COMBINED_SWAGGER}"
|
|
/usr/local/bin/jq -r 'del(.definitions[].properties[]? | select(."$ref"!=null and .description!=null).description) | del(.definitions[].properties[]? | select(."$ref"!=null and .title!=null).title)' "${COMBINED_SWAGGER}" > "${SWAGGER_OUT}"
|
|
|
|
/bin/rm "${PRIMARY_SWAGGER}" "${COMBINED_SWAGGER}"
|
|
}
|
|
|
|
# clean up generated swagger files (should come after collect_swagger)
|
|
clean_swagger() {
|
|
SWAGGER_ROOT="$1"
|
|
/usr/bin/find "${SWAGGER_ROOT}" -name '*.swagger.json' -delete
|
|
}
|
|
|
|
collect_swagger server 15
|
|
clean_swagger server
|
|
clean_swagger reposerver
|