Skip to content

Commit becdfc9

Browse files
mjhenkesAtofStryker
authored andcommitted
chore: Reduce dependencies and binary size, add circle ci detector (cypress-io#26522)
* chore: add circle ci detector * update deps * adjust deps and cleanup binary? * Add Tests * fix tests, keep artifact * Apply suggestions from code review Co-authored-by: Bill Glesias <bglesias@gmail.com> --------- Co-authored-by: Bill Glesias <bglesias@gmail.com>
1 parent 068731a commit becdfc9

File tree

7 files changed

+239
-892
lines changed

7 files changed

+239
-892
lines changed

.circleci/workflows.yml

+1-3
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ commands:
136136
- run:
137137
name: Check current branch to persist artifacts
138138
command: |
139-
if [[ "$CIRCLE_BRANCH" != "develop" && "$CIRCLE_BRANCH" != "release/"* && "$CIRCLE_BRANCH" != "update-v8-snapshot-cache-on-develop" ]]; then
139+
if [[ "$CIRCLE_BRANCH" != "develop" && "$CIRCLE_BRANCH" != "release/"* && "$CIRCLE_BRANCH" != "update-v8-snapshot-cache-on-develop" && "$CIRCLE_BRANCH" != "matth/chore/add-circle-ci-detector" ]]; then
140140
echo "Not uploading artifacts or posting install comment for this branch."
141141
circleci-agent step halt
142142
fi
@@ -493,7 +493,6 @@ commands:
493493
# internal PR
494494
CYPRESS_RECORD_KEY=$MAIN_RECORD_KEY \
495495
CYPRESS_INTERNAL_ENABLE_TELEMETRY="true" \
496-
OTEL_RESOURCE_ATTRIBUTES="ci.branch=$CIRCLE_BRANCH,ci.job=$CIRCLE_JOB,ci.node-index=$CIRCLE_NODE_INDEX,ci.circle=$CIRCLECI,ci.build-url=$CIRCLE_BUILD_URL,ci.build-number=$CIRCLE_BUILD_NUM" \
497496
yarn cypress:run --record --parallel --group 5x-driver-<<parameters.browser>> --browser <<parameters.browser>>
498497
else
499498
# external PR
@@ -567,7 +566,6 @@ commands:
567566
PERCY_ENABLE=${PERCY_TOKEN:-0} \
568567
PERCY_PARALLEL_TOTAL=-1 \
569568
CYPRESS_INTERNAL_ENABLE_TELEMETRY="true" \
570-
OTEL_RESOURCE_ATTRIBUTES="ci.branch=$CIRCLE_BRANCH,ci.job=$CIRCLE_JOB,ci.node-index=$CIRCLE_NODE_INDEX,ci.circle=$CIRCLECI,ci.build-url=$CIRCLE_BUILD_URL,ci.build-number=$CIRCLE_BUILD_NUM" \
571569
$cmd yarn workspace @packages/<<parameters.package>> cypress:run:<<parameters.type>> --browser <<parameters.browser>> --record --parallel --group <<parameters.package>>-<<parameters.type>>
572570
else
573571
# external PR

packages/telemetry/package.json

+8-7
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@
1616
},
1717
"dependencies": {
1818
"@opentelemetry/api": "1.4.1",
19-
"@opentelemetry/auto-instrumentations-node": "0.36.4",
20-
"@opentelemetry/exporter-trace-otlp-http": "0.36.1",
21-
"@opentelemetry/instrumentation": "0.36.1",
22-
"@opentelemetry/otlp-exporter-base": "0.36.1",
23-
"@opentelemetry/sdk-trace-base": "1.10.1",
24-
"@opentelemetry/sdk-trace-node": "1.10.1",
25-
"@opentelemetry/sdk-trace-web": "1.10.1"
19+
"@opentelemetry/core": "1.12.0",
20+
"@opentelemetry/exporter-trace-otlp-http": "0.38.0",
21+
"@opentelemetry/otlp-exporter-base": "0.38.0",
22+
"@opentelemetry/resources": "1.12.0",
23+
"@opentelemetry/sdk-trace-base": "1.12.0",
24+
"@opentelemetry/sdk-trace-node": "1.12.0",
25+
"@opentelemetry/sdk-trace-web": "1.12.0",
26+
"@opentelemetry/semantic-conventions": "1.12.0"
2627
},
2728
"devDependencies": {
2829
"@packages/ts": "0.0.0-development",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import type { DetectorSync, ResourceAttributes, IResource } from '@opentelemetry/resources'
2+
import { Resource } from '@opentelemetry/resources'
3+
4+
/**
5+
* CircleCiDetectorSync can be used to detect the presence of and create a Resource
6+
* from circle ci env variables.
7+
*/
8+
class CircleCiDetectorSync implements DetectorSync {
9+
/**
10+
* Returns a {@link Resource} populated with attributes from the
11+
* circle ci environment variable.
12+
*
13+
* @param config The resource detection config -- ignored
14+
*/
15+
detect (): IResource {
16+
const attributes: ResourceAttributes = {}
17+
18+
const { CIRCLECI, CIRCLE_BRANCH, CIRCLE_JOB, CIRCLE_NODE_INDEX, CIRCLE_BUILD_URL, CIRCLE_BUILD_NUM, CIRCLE_SHA1, CIRCLE_PR_NUMBER } = process.env
19+
20+
if (CIRCLECI) {
21+
attributes['ci.circle'] = CIRCLECI
22+
attributes['ci.branch'] = CIRCLE_BRANCH
23+
attributes['ci.job'] = CIRCLE_JOB
24+
attributes['ci.node'] = CIRCLE_NODE_INDEX
25+
attributes['ci.build-url'] = CIRCLE_BUILD_URL
26+
attributes['ci.build-number'] = CIRCLE_BUILD_NUM
27+
attributes['SHA1'] = CIRCLE_SHA1
28+
attributes['ci.pr-number'] = CIRCLE_PR_NUMBER
29+
}
30+
31+
return new Resource(attributes)
32+
}
33+
}
34+
35+
export const circleCiDetectorSync = new CircleCiDetectorSync()

packages/telemetry/src/node.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { startSpanOptions, findActiveSpanOptions, contextObject } from './i
33
import { Telemetry as TelemetryClass, TelemetryNoop } from './index'
44
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'
55
import { envDetectorSync, processDetectorSync, osDetectorSync, hostDetectorSync } from '@opentelemetry/resources'
6+
import { circleCiDetectorSync } from './detectors/circleCiDetectorSync'
67
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base'
78

89
import { OTLPTraceExporter as OTLPTraceExporterIpc } from './span-exporters/ipc-span-exporter'
@@ -50,7 +51,7 @@ const init = ({
5051
namespace,
5152
Provider: NodeTracerProvider,
5253
detectors: [
53-
envDetectorSync, processDetectorSync, osDetectorSync, hostDetectorSync,
54+
envDetectorSync, processDetectorSync, osDetectorSync, hostDetectorSync, circleCiDetectorSync,
5455
],
5556
rootContextObject: context,
5657
version,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import { expect } from 'chai'
2+
3+
4+
import { circleCiDetectorSync } from '../../src/detectors/circleCiDetectorSync'
5+
6+
describe('circleCiDetectorSync', () => {
7+
describe('undefined values', () => {
8+
const processValues: any = {}
9+
10+
beforeEach(() => {
11+
// cache values
12+
processValues.CIRCLECI = process.env.CIRCLECI
13+
processValues.CIRCLE_BRANCH = process.env.CIRCLE_BRANCH
14+
processValues.CIRCLE_JOB = process.env.CIRCLE_JOB
15+
processValues.CIRCLE_NODE_INDEX = process.env.CIRCLE_NODE_INDEX
16+
processValues.CIRCLE_BUILD_URL = process.env.CIRCLE_BUILD_URL
17+
processValues.CIRCLE_BUILD_NUM = process.env.CIRCLE_BUILD_NUM
18+
processValues.CIRCLE_SHA1 = process.env.CIRCLE_SHA1
19+
processValues.CIRCLE_PR_NUMBER = process.env.CIRCLE_PR_NUMBER
20+
21+
//reset values
22+
delete process.env.CIRCLECI
23+
delete process.env.CIRCLE_BRANCH
24+
delete process.env.CIRCLE_JOB
25+
delete process.env.CIRCLE_NODE_INDEX
26+
delete process.env.CIRCLE_BUILD_URL
27+
delete process.env.CIRCLE_BUILD_NUM
28+
delete process.env.CIRCLE_SHA1
29+
delete process.env.CIRCLE_PR_NUMBER
30+
})
31+
32+
afterEach(() => {
33+
// Replace values
34+
process.env.CIRCLECI = processValues.CIRCLECI
35+
process.env.CIRCLE_BRANCH = processValues.CIRCLE_BRANCH
36+
process.env.CIRCLE_JOB = processValues.CIRCLE_JOB
37+
process.env.CIRCLE_NODE_INDEX = processValues.CIRCLE_NODE_INDEX
38+
process.env.CIRCLE_BUILD_URL = processValues.CIRCLE_BUILD_URL
39+
process.env.CIRCLE_BUILD_NUM = processValues.CIRCLE_BUILD_NUM
40+
process.env.CIRCLE_SHA1 = processValues.CIRCLE_SHA1
41+
process.env.CIRCLE_PR_NUMBER = processValues.CIRCLE_PR_NUMBER
42+
})
43+
44+
describe('detect', () => {
45+
it('returns an empty resource', () => {
46+
const resource = circleCiDetectorSync.detect()
47+
48+
expect(resource.attributes).to.be.empty
49+
})
50+
})
51+
})
52+
53+
describe('defined values', () => {
54+
const processValues: any = {}
55+
56+
beforeEach(() => {
57+
// cache values
58+
processValues.CIRCLECI = process.env.CIRCLECI
59+
processValues.CIRCLE_BRANCH = process.env.CIRCLE_BRANCH
60+
processValues.CIRCLE_JOB = process.env.CIRCLE_JOB
61+
processValues.CIRCLE_NODE_INDEX = process.env.CIRCLE_NODE_INDEX
62+
processValues.CIRCLE_BUILD_URL = process.env.CIRCLE_BUILD_URL
63+
processValues.CIRCLE_BUILD_NUM = process.env.CIRCLE_BUILD_NUM
64+
processValues.CIRCLE_SHA1 = process.env.CIRCLE_SHA1
65+
processValues.CIRCLE_PR_NUMBER = process.env.CIRCLE_PR_NUMBER
66+
67+
//reset values
68+
process.env.CIRCLECI = 'circleCi'
69+
process.env.CIRCLE_BRANCH = 'circleBranch'
70+
process.env.CIRCLE_JOB = 'circleJob'
71+
process.env.CIRCLE_NODE_INDEX = 'circleNodeIndex'
72+
process.env.CIRCLE_BUILD_URL = 'circleBuildUrl'
73+
process.env.CIRCLE_BUILD_NUM = 'circleBuildNum'
74+
process.env.CIRCLE_SHA1 = 'circleSha1'
75+
process.env.CIRCLE_PR_NUMBER = 'circlePrNumber'
76+
})
77+
78+
afterEach(() => {
79+
// Replace values
80+
process.env.CIRCLECI = processValues.CIRCLECI
81+
process.env.CIRCLE_BRANCH = processValues.CIRCLE_BRANCH
82+
process.env.CIRCLE_JOB = processValues.CIRCLE_JOB
83+
process.env.CIRCLE_NODE_INDEX = processValues.CIRCLE_NODE_INDEX
84+
process.env.CIRCLE_BUILD_URL = processValues.CIRCLE_BUILD_URL
85+
process.env.CIRCLE_BUILD_NUM = processValues.CIRCLE_BUILD_NUM
86+
process.env.CIRCLE_SHA1 = processValues.CIRCLE_SHA1
87+
process.env.CIRCLE_PR_NUMBER = processValues.CIRCLE_PR_NUMBER
88+
})
89+
90+
describe('detect', () => {
91+
it('returns a resource with attributes', () => {
92+
const resource = circleCiDetectorSync.detect()
93+
94+
console.log(resource.attributes)
95+
96+
expect(resource.attributes['ci.circle']).to.equal('circleCi')
97+
expect(resource.attributes['ci.branch']).to.equal('circleBranch')
98+
expect(resource.attributes['ci.job']).to.equal('circleJob')
99+
expect(resource.attributes['ci.node']).to.equal('circleNodeIndex')
100+
expect(resource.attributes['ci.build-url']).to.equal('circleBuildUrl')
101+
expect(resource.attributes['ci.build-number']).to.equal('circleBuildNum')
102+
expect(resource.attributes['SHA1']).to.equal('circleSha1')
103+
expect(resource.attributes['ci.pr-number']).to.equal('circlePrNumber')
104+
})
105+
})
106+
})
107+
})

scripts/binary/binary-cleanup.js

+2
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,8 @@ const buildEntryPointAndCleanup = async (buildAppDir) => {
201201
path.join(buildAppDir, '**', 'nexus', 'dist-esm'),
202202
path.join(buildAppDir, '**', '@graphql-tools', '**', '*.mjs'),
203203
path.join(buildAppDir, '**', 'graphql', '**', '*.mjs'),
204+
path.join(buildAppDir, '**', '@openTelemetry', '**', 'esm'),
205+
path.join(buildAppDir, '**', '@openTelemetry', '**', 'esnext'),
204206
// We currently do not use any map files
205207
path.join(buildAppDir, '**', '*js.map'),
206208
// License files need to be kept

0 commit comments

Comments
 (0)