2
0

generate.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/bin/bash
  2. # Copyright The OpenTelemetry Authors
  3. # SPDX-License-Identifier: Apache-2.0
  4. #
  5. # Adapted from:
  6. # opentelemetry-java/buildscripts/semantic-convention/generate.sh
  7. # for opentelemetry-cpp
  8. #
  9. set -e
  10. SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  11. ROOT_DIR="${SCRIPT_DIR}/../../"
  12. # freeze the spec & generator tools versions to make the generation reproducible
  13. # repository: https://github.com/open-telemetry/semantic-conventions
  14. SEMCONV_VERSION=1.34.0
  15. # repository: https://github.com/open-telemetry/weaver
  16. WEAVER_VERSION=0.15.0
  17. SEMCONV_VERSION_TAG=v$SEMCONV_VERSION
  18. WEAVER_VERSION_TAG=v$WEAVER_VERSION
  19. SCHEMA_URL="https://opentelemetry.io/schemas/${SEMCONV_VERSION}"
  20. INCUBATING_DIR=incubating
  21. cd ${SCRIPT_DIR}
  22. rm -rf semantic-conventions || true
  23. mkdir semantic-conventions
  24. cd semantic-conventions
  25. git init
  26. git remote add origin https://github.com/open-telemetry/semantic-conventions.git
  27. git fetch origin "$SEMCONV_VERSION_TAG"
  28. git reset --hard FETCH_HEAD
  29. cd ${SCRIPT_DIR}
  30. # SELINUX
  31. # https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label
  32. USE_MOUNT_OPTION=""
  33. if [ -x "$(command -v getenforce)" ]; then
  34. SELINUXSTATUS=$(getenforce);
  35. if [ "${SELINUXSTATUS}" == "Enforcing" ]; then
  36. echo "Detected SELINUX"
  37. USE_MOUNT_OPTION=":z"
  38. fi;
  39. fi
  40. # DOCKER
  41. # ======
  42. #
  43. # docker is a root container
  44. #
  45. # MY_UID=$(id -u)
  46. # MY_GID=$(id -g)
  47. # docker --user ${MY_UID}:${MY_GID}
  48. #
  49. # PODMAN
  50. # ======
  51. #
  52. # podman is a rootless container
  53. # docker is an alias to podman
  54. #
  55. # docker --user 0:0
  56. MY_UID=$(id -u)
  57. MY_GID=$(id -g)
  58. if [ -x "$(command -v docker)" ]; then
  59. PODMANSTATUS=$(docker -v | grep -c podman);
  60. if [ "${PODMANSTATUS}" -ge "1" ]; then
  61. echo "Detected PODMAN"
  62. # podman is a rootless container.
  63. # Execute the docker image as root,
  64. # to avoid creating files as weaver:weaver in the container,
  65. # so files end up created as the local user:group outside the container.
  66. MY_UID="0"
  67. MY_GID="0"
  68. # Possible alternate solution: --userns=keep-id
  69. fi;
  70. fi
  71. generate() {
  72. TARGET=$1
  73. OUTPUT=$2
  74. FILTER=$3
  75. docker run --rm --user ${MY_UID}:${MY_GID} \
  76. -v ${SCRIPT_DIR}/semantic-conventions/model:/source${USE_MOUNT_OPTION} \
  77. -v ${SCRIPT_DIR}/templates:/templates${USE_MOUNT_OPTION} \
  78. -v ${ROOT_DIR}/tmpgen/:/output${USE_MOUNT_OPTION} \
  79. otel/weaver:$WEAVER_VERSION_TAG \
  80. registry \
  81. generate \
  82. --registry=/source \
  83. --templates=/templates \
  84. ${TARGET} \
  85. /output/${TARGET} \
  86. --param output=${OUTPUT} \
  87. --param filter=${FILTER} \
  88. --param schema_url=${SCHEMA_URL}
  89. }
  90. # stable attributes and metrics
  91. mkdir -p ${ROOT_DIR}/tmpgen
  92. generate "./" "./" "stable"
  93. mkdir -p ${ROOT_DIR}/tmpgen/${INCUBATING_DIR}
  94. generate "./" "./${INCUBATING_DIR}/" "any"
  95. cp -r ${ROOT_DIR}/tmpgen/*.h \
  96. ${ROOT_DIR}/api/include/opentelemetry/semconv/
  97. cp -r ${ROOT_DIR}/tmpgen/${INCUBATING_DIR}/*.h \
  98. ${ROOT_DIR}/api/include/opentelemetry/semconv/incubating