mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-02-05 13:15:41 +02:00
Create protobuf generation GitHub action (#938)
* Add protogen workflow * Move out protobuf generation to Makefile.proto * Include in Changelog * Update Makefile.proto Move file-local mode variable to line by itself. Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com> Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
This commit is contained in:
parent
31dd06af9d
commit
dd79483e20
23
.github/workflows/protogen.yml
vendored
Normal file
23
.github/workflows/protogen.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
name: Proto-go-generator
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'internal/opentelemetry-proto'
|
||||
|
||||
jobs:
|
||||
protogen:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
ref: ${{ github.head_ref }}
|
||||
submodules: true
|
||||
- uses: actions/setup-go@v2
|
||||
with:
|
||||
go-version: '^1.14.0'
|
||||
- run: sudo apt-get -y install pax
|
||||
- run: make -f Makefile.proto protobuf
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
id: commit-changes
|
||||
with:
|
||||
commit_message: Commit changes in updated/new protobuf files
|
@ -8,6 +8,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
|
||||
- Github action to generate protobuf Go bindings locally in `internal/opentelemetry-proto-gen`. (#938)
|
||||
|
||||
## [0.8.0] - 2020-07-09
|
||||
|
||||
### Added
|
||||
|
2
Makefile
2
Makefile
@ -143,7 +143,7 @@ generate: $(TOOLS_DIR)/stringer
|
||||
|
||||
.PHONY: license-check
|
||||
license-check:
|
||||
@licRes=$$(for f in $$(find . -type f \( -iname '*.go' -o -iname '*.sh' \) ! -path './vendor/*') ; do \
|
||||
@licRes=$$(for f in $$(find . -type f \( -iname '*.go' -o -iname '*.sh' \) ! -path './vendor/*' ! -path './internal/opentelemetry-proto/*') ; do \
|
||||
awk '/Copyright The OpenTelemetry Authors|generated|GENERATED/ && NR<=3 { found=1; next } END { if (!found) print FILENAME }' $$f; \
|
||||
done); \
|
||||
if [ -n "$${licRes}" ]; then \
|
||||
|
72
Makefile.proto
Normal file
72
Makefile.proto
Normal file
@ -0,0 +1,72 @@
|
||||
# -*- mode: makefile; -*-
|
||||
# Copyright The OpenTelemetry Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# This Makefile.proto has rules to generate *.pb.go files in
|
||||
# `internal/opentelemetry-proto-gen` from the .proto files in
|
||||
# `internal/opentelemetry-proto` using protoc with a go plugin.
|
||||
#
|
||||
# The protoc binary and other tools are sourced from a docker
|
||||
# image `PROTOC_IMAGE`.
|
||||
#
|
||||
# Prereqs: The archiving utility `pax` is installed.
|
||||
|
||||
PROTOC_IMAGE := namely/protoc-all:1.29_2
|
||||
PROTOBUF_VERSION := v1
|
||||
OTEL_PROTO_SUBMODULE := internal/opentelemetry-proto
|
||||
PROTOBUF_GEN_DIR := internal/opentelemetry-proto-gen
|
||||
PROTOBUF_TEMP_DIR := gen/pb-go
|
||||
PROTO_SOURCE_DIR := gen/proto
|
||||
SUBMODULE_PROTO_FILES := $(wildcard $(OTEL_PROTO_SUBMODULE)/opentelemetry/proto/*/$(PROTOBUF_VERSION)/*.proto \
|
||||
$(OTEL_PROTO_SUBMODULE)/opentelemetry/proto/collector/*/$(PROTOBUF_VERSION)/*.proto)
|
||||
SOURCE_PROTO_FILES := $(subst $(OTEL_PROTO_SUBMODULE),$(PROTO_SOURCE_DIR),$(SUBMODULE_PROTO_FILES))
|
||||
|
||||
default: protobuf
|
||||
|
||||
.PHONY: protobuf protobuf-source gen-protobuf copy-protobufs
|
||||
protobuf: protobuf-source gen-protobuf copy-protobufs
|
||||
|
||||
protobuf-source: $(SOURCE_PROTO_FILES) | $(PROTO_SOURCE_DIR)/
|
||||
|
||||
# Changes go_package in .proto file to point to repo-local location
|
||||
define exec-replace-pkgname
|
||||
sed 's,go_package = "github.com/open-telemetry/opentelemetry-proto/gen/go,go_package = "go.opentelemetry.io/otel/internal/opentelemetry-proto-gen,' < $(1) > $(2)
|
||||
|
||||
endef
|
||||
|
||||
# replace opentelemetry-proto package name by go.opentelemetry.io/otel specific version
|
||||
$(SOURCE_PROTO_FILES): $(PROTO_SOURCE_DIR)/%.proto: $(OTEL_PROTO_SUBMODULE)/%.proto
|
||||
@mkdir -p $(@D)
|
||||
$(call exec-replace-pkgname,$<,$@)
|
||||
|
||||
# Command to run protoc using docker image
|
||||
define exec-protoc-all
|
||||
docker run -v `pwd`:/defs $(PROTOC_IMAGE) $(1)
|
||||
|
||||
endef
|
||||
|
||||
gen-protobuf: $(SOURCE_PROTO_FILES) | $(PROTOBUF_GEN_DIR)/
|
||||
$(foreach file,$(subst ${PROTO_SOURCE_DIR}/,,$(SOURCE_PROTO_FILES)),$(call exec-protoc-all, -i $(PROTO_SOURCE_DIR) -f ${file} -l go -o ${PROTOBUF_TEMP_DIR}))
|
||||
|
||||
# requires `pax` to be installed, as it has consistent options for both BSD (Darwin) and Linux
|
||||
copy-protobufs: | $(PROTOBUF_GEN_DIR)/
|
||||
find ./$(PROTOBUF_TEMP_DIR)/go.opentelemetry.io/otel/$(PROTOBUF_GEN_DIR) -type f -print0 | \
|
||||
pax -0 -s ',^./$(PROTOBUF_TEMP_DIR)/go.opentelemetry.io/otel/$(PROTOBUF_GEN_DIR),,' -rw ./$(PROTOBUF_GEN_DIR)
|
||||
|
||||
$(PROTO_SOURCE_DIR)/ $(PROTOBUF_GEN_DIR)/:
|
||||
mkdir -p $@
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf ./gen
|
Loading…
x
Reference in New Issue
Block a user