@@ -16,6 +16,7 @@ package preprocess
16
16
17
17
import (
18
18
"fmt"
19
+ "github.com/alibaba/opentelemetry-go-auto-instrumentation/tool/version"
19
20
"log"
20
21
"os"
21
22
"os/exec"
@@ -42,6 +43,10 @@ const (
42
43
43
44
const FixedOtelDepVersion = "v1.30.0"
44
45
46
+ const instDependency = "github.com/alibaba/opentelemetry-go-auto-instrumentation"
47
+
48
+ const OTEL_INST_VERSION = "OTEL_INST_VERSION"
49
+
45
50
var fixedOtelDeps = []string {
46
51
"go.opentelemetry.io/otel" ,
47
52
"go.opentelemetry.io/otel/sdk" ,
@@ -146,7 +151,7 @@ func (dp *DepProcessor) pinDepVersion() error {
146
151
147
152
// We want to fetch otel dependencies in a fixed version instead of the latest
148
153
// version, so we need to pin the version in go.mod. All used otel dependencies
149
- // should be listed and pinned here, because go mod tidy will fetch the latest
154
+ // should be listed and pinned here, because go mod tidy will fetch the latest
150
155
// version even if we have pinned some of them.
151
156
func (dp * DepProcessor ) pinOtelVersion () error {
152
157
for _ , dep := range fixedOtelDeps {
@@ -159,6 +164,21 @@ func (dp *DepProcessor) pinOtelVersion() error {
159
164
return nil
160
165
}
161
166
167
+ // Users will import github.com/alibaba/opentelemetry-go-auto-instrumentation
168
+ // dependency while using otelbuild to use the inst-api and inst-semconv package.
169
+ // We need to pin the version to let the users use the fixed version
170
+ func (dp * DepProcessor ) tryPinInstVersion () error {
171
+ instVersion := os .Getenv (OTEL_INST_VERSION )
172
+ if instVersion == "" {
173
+ instVersion = version .Tag
174
+ }
175
+ err := runGoGet (instDependency + "@" + instVersion )
176
+ if err != nil {
177
+ return fmt .Errorf ("failed to pin %s %w" , instDependency , err )
178
+ }
179
+ return nil
180
+ }
181
+
162
182
func checkModularized () error {
163
183
go11module := os .Getenv ("GO111MODULE" )
164
184
if go11module == "off" {
@@ -221,7 +241,7 @@ func Preprocess() error {
221
241
return fmt .Errorf ("failed to update dependencies: %w" , err )
222
242
}
223
243
224
- // Pinning otel version in go.mod
244
+ // Pinning otel sdk dependencies version in go.mod
225
245
err = dp .pinOtelVersion ()
226
246
if err != nil {
227
247
return fmt .Errorf ("failed to update otel: %w" , err )
@@ -233,6 +253,11 @@ func Preprocess() error {
233
253
return fmt .Errorf ("failed to run mod tidy: %w" , err )
234
254
}
235
255
256
+ tpe := dp .tryPinInstVersion ()
257
+ if tpe != nil {
258
+ log .Printf ("failed to pin opentelemetry-go-auto-instrumentation itself" )
259
+ }
260
+
236
261
log .Printf ("Preprocess took %v" , time .Since (start ))
237
262
}
238
263
0 commit comments