Skip to content

[contrib] add orchestrion integration configuration #1541

[contrib] add orchestrion integration configuration

[contrib] add orchestrion integration configuration #1541

Workflow file for this run

name: Orchestrion
on:
workflow_call: # From github.com/DataDog/orchestrion
inputs:
orchestrion-version:
description: Orchestrion version to use for integration testing
type: string
required: true
collect-coverage:
description: Whether to collect orchestrion coverage data or not
type: boolean
default: false
required: false
pull_request:
merge_group:
push:
branches:
- release-v*
tags-ignore:
- 'contrib/**'
- 'instrumentation/**'
permissions: read-all
concurrency:
# Automatically cancel previous runs if a new one is triggered to conserve resources.
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}${{ inputs.orchestrion-version && format('-{0}', inputs.orchestrion-version) }}
cancel-in-progress: true
jobs:
generate:
name: Verify generated files are up-to-date
# Don't run in workflow_call or workflow_dispatch
if: github.event_name == 'workflow_dispatch' || inputs.orchestrion-version == ''
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: stable
cache: true
cache-dependency-path: '**/go.mod'
- name: Run generator
run: go generate ./internal/orchestrion/...
- name: Check for changes
run: git diff --exit-code
go-versions-matrix:
name: Go Versions Matrix
runs-on: ubuntu-latest
outputs:
json: ${{ steps.matrix.outputs.json }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
repository: ${{ inputs.orchestrion-version != '' && 'DataDog/dd-trace-go' || github.repository }}
ref: ${{ inputs.orchestrion-version != '' && 'romain.marcadier/APPSEC-55160/orchestrion' || github.sha }} # TODO: Change to `main` in workflow_call case
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: stable
cache: true
cache-dependency-path: '**/go.mod'
- name: Compute Matrix
id: matrix
run: |-
echo -n "json=" >> "${GITHUB_OUTPUT}"
go run ./internal/orchestrion/matrix >> "${GITHUB_OUTPUT}"
integration-test:
needs: [go-versions-matrix]
strategy:
fail-fast: false
matrix:
runs-on:
- ubuntu
- macos
- windows
go-version: ${{ fromJSON(needs.go-versions-matrix.outputs.json) }}
mode: [DRIVER]
include:
# Alternate build modes (only on ubuntu with oldstable, so we save up CI time)
- runs-on: ubuntu
go-version: oldstable
mode: TOOLEXEC
- runs-on: ubuntu
go-version: oldstable
mode: GOFLAGS
name: Integration Test (${{ matrix.runs-on }} | ${{ matrix.go-version }} | ${{ matrix.mode }})
runs-on: ${{ matrix.runs-on == 'ubuntu' && fromJson('{"labels":"ubuntu-16-core-latest","group":"Large Runner Shared Public"}') || (matrix.runs-on == 'windows' && fromJson('{"labels":"windows-shared-8core","group":"LARGE WINDOWS SHARED"}')) || format('{0}-latest', matrix.runs-on) }}
env:
# Ryuk is problematic with concurrent executions, and unnecessary in ephemeral environments like GHA.
TESTCONTAINERS_RYUK_DISABLED: true
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
path: ${{ github.workspace }}/dd-trace-go
repository: ${{ inputs.orchestrion-version != '' && 'DataDog/dd-trace-go' || github.repository }}
ref: ${{ inputs.orchestrion-version != '' && 'romain.marcadier/APPSEC-55160/orchestrion' || github.sha }} # TODO: Change to `main` in workflow_call case
- name: Setup Go
id: setup-go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache: true
cache-dependency-path: '${{ github.workspace }}/dd-trace-go/internal/orchestrion/_integration/go.mod'
# ddapm-test-agent is used to observe side effects from the tracer during integration tests.
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.x
cache: pip
cache-dependency-path: '${{ github.workspace }}/dd-trace-go/internal/orchestrion/_integration/internal/agent/requirements-dev.txt'
- name: Install ddapm-test-agent
run: pip install -r ${{ github.workspace }}/dd-trace-go/internal/orchestrion/_integration/internal/agent/requirements-dev.txt
# If we're in workflow_dispatch/call, maybe we need to up/downgrade orchestrion
- name: Check out orchestrion
if: inputs.orchestrion-version != ''
id: checkout-orchestrion
uses: actions/checkout@v4
with:
path: ${{ github.workspace }}/orchestrion
repository: DataDog/orchestrion
ref: ${{ inputs.orchestrion-version }}
- name: Set up orchestrion
if: inputs.orchestrion-version != ''
run: |-
go mod edit -replace="github.com/DataDog/orchestrion=${{ github.workspace }}/orchestrion"
go mod tidy -go ${{ steps.setup-go.outputs.go-version }}
working-directory: ${{ github.workspace }}/dd-trace-go/internal/orchestrion/_integration
env:
VERSION: ${{ inputs.orchestrion-version }}
# We install the binary to the GOBIN, so it's easy to use
- name: Install orchestrion binary
if: '!inputs.collect-coverage'
run: |-
go install "github.com/DataDog/orchestrion"
working-directory: ${{ github.workspace }}/dd-trace-go/internal/orchestrion/_integration
- name: Build orchestrion binary
if: inputs.collect-coverage
shell: bash
run: |-
bin=$(go env GOPATH)/bin/orchestrion
if [[ '${{ matrix.runs-on }}' == 'windows' ]]; then
bin="${bin}.exe"
fi
mkdir -p "$(dirname "${bin}")"
go build -cover -covermode=atomic -coverpkg="github.com/DataDog/orchestrion/..." "-o=${bin}" "github.com/DataDog/orchestrion"
echo "GOCOVERDIR=$(mktemp -d)" >> "${GITHUB_ENV}"
working-directory: ${{ github.workspace }}/dd-trace-go/internal/orchestrion/_integration
# Finally, we run the test suite!
- name: Run Tests
shell: bash
run: |-
case "${MODE}" in
"DRIVER")
orchestrion go test -shuffle=on ./...
;;
"TOOLEXEC")
go test -shuffle=on -toolexec='orchestrion toolexec' ./...
;;
"GOFLAGS")
export GOFLAGS="${GOFLAGS} '-toolexec=orchestrion toolexec'"
go test -shuffle=on ./...
;;
*)
echo "Unknown mode: ${MODE}"
;;
esac
working-directory: ${{ github.workspace }}/dd-trace-go/internal/orchestrion/_integration
env:
GOFLAGS: -timeout=30m ${{ matrix.runs-on == 'ubuntu' && '-p=4' || '' }} -tags=githubci${{ matrix.mode == 'DRIVER' && ',buildtag' || ''}} # The "buildtag" tag is used in //dd:span integration tests
MODE: ${{ matrix.mode }}
DD_ORCHESTRION_IS_GOMOD_VERSION: true # Prevent auto-respawn, which is problematic with installs from commit SHA
# If in workflow_call, we collected coverage data we need to upload
- name: Consolidate coverage report
if: inputs.collect-coverage
shell: bash
run: |-
mkdir -p "${{ github.workspace }}/orchestrion/coverage"
go tool covdata textfmt -i "${GOCOVERDIR}" -o "${WORKSPACE}/orchestrion/coverage/integration.out"
env:
WORKSPACE: ${{ github.workspace }}
- name: Determine go minor version
if: inputs.collect-coverage
id: go
shell: bash
run: |-
set -euo pipefail
echo "version=$(echo '${{ steps.setup-go.outputs.go-version }}' | cut -d'.' -f1,2)" >> "${GITHUB_OUTPUT}"
- name: Upload coverage report
if: inputs.collect-coverage
uses: actions/upload-artifact@v4
with:
name: coverage-integration+${{ matrix.mode }}+go${{ steps.go.outputs.version }}+${{ runner.os }}+${{ runner.arch }}
path: ${{ github.workspace }}/orchestrion/coverage/integration.out