Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Distribution packaging continued #135

Merged
merged 12 commits into from
Jul 31, 2024
8 changes: 8 additions & 0 deletions .github/workflows/bootstrap/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ runs:
restore-keys: |
${{ runner.os }}-nuget

# ensures we don't hit GitHub releases all the time to download the OpenTelemetry auto instrumentation assets
# if not available they will be download in .artifacts/otel-distribution/{otel-version}
- name: Cache OpenTelemetry Distribution
uses: actions/cache@v4
with:
path: .artifacts/otel-distribution
key: otel-distribution

- name: Setup dotnet
uses: actions/setup-dotnet@v4
with:
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,10 @@ jobs:
- name: Bootstrap Action Workspace
id: bootstrap
uses: ./.github/workflows/bootstrap

- name: Test
run: ./build.sh test --test-suite=skip-e2e

# We still run the full release build on pull-requests this ensures packages are validated ahead of time
- name: Release
run: ./build.sh release --test-suite=skip-e2e
run: ./build.sh release -c
19 changes: 17 additions & 2 deletions .github/workflows/prerelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ permissions:
env:
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
RELEASE_PACKAGES: ".artifacts/package/release/*.nupkg"
RELEASE_DISTRO: ".artifacts/elastic-distribution/*"

jobs:
release:
Expand All @@ -25,14 +26,28 @@ jobs:
id: bootstrap
uses: ./.github/workflows/bootstrap

- run: ./build.sh release --test-suite=skip-e2e
- name: Test
run: ./build.sh test --test-suite=skip-e2e

- run: ./build.sh release -c
name: Release

- uses: actions/upload-artifact@v4
with:
name: elastic-distribution
path: ${{ env.RELEASE_DISTRO }}

- name: Generate build provenance
- name: Generate build provenance (Distribution)
uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
with:
subject-path: "${{ github.workspace }}/${{ env.RELEASE_DISTRO }}"

- name: Generate build provenance (Packages)
uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
with:
subject-path: "${{ github.workspace }}/${{ env.RELEASE_PACKAGES }}"


# Push to feedz.io
- name: publish canary packages to feedz.io
run: dotnet nuget push '${{ env.RELEASE_PACKAGES }}' -k ${{ secrets.FEEDZ_IO_API_KEY }} -s ${{ secrets.FEEDZ_IO_API_URL }} --skip-duplicate --no-symbols
Expand Down
16 changes: 14 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ env:
JOB_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
SLACK_CHANNEL: "#apm-agent-dotnet"
RELEASE_PACKAGES: ".artifacts/package/release/*.nupkg"
RELEASE_DISTRO: ".artifacts/elastic-distribution/*"

jobs:
release:
Expand All @@ -31,10 +32,21 @@ jobs:
id: bootstrap
uses: ./.github/workflows/bootstrap

- run: ./build.sh release --test-suite=skip-all
- run: ./build.sh release
name: Release

- name: Generate build provenance
- name: Attach Distribution to release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload ${{ github.ref_name }} "${{ env.RELEASE_DISTRO }}"

- name: Generate build provenance (Distribution)
uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
with:
subject-path: "${{ github.workspace }}/${{ env.RELASE_DISTRO }}"

- name: Generate build provenance (Packages)
uses: actions/attest-build-provenance@5e9cb68e95676991667494a6a4e59b8a2f13e1d0 # v1.3.3
with:
subject-path: "${{ github.workspace }}/${{ env.RELEASE_PACKAGES }}"
Expand Down
74 changes: 74 additions & 0 deletions build/patch-dotnet-auto-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/bin/sh
set -e

# guess OS_TYPE if not provided
if [ -z "$OS_TYPE" ]; then
case "$(uname -s | tr '[:upper:]' '[:lower:]')" in
cygwin_nt*|mingw*|msys_nt*)
OS_TYPE="windows"
;;
linux*)
if [ "$(ldd /bin/ls | grep -m1 'musl')" ]; then
OS_TYPE="linux-musl"
else
OS_TYPE="linux-glibc"
fi
;;
darwin*)
OS_TYPE="macos"
;;
esac
fi

case "$OS_TYPE" in
"linux-glibc"|"linux-musl"|"macos"|"windows")
;;
*)
echo "Set the operating system type using the OS_TYPE environment variable. Supported values: linux-glibc, linux-musl, macos, windows." >&2
exit 1
;;
esac

# guess OS architecture if not provided
if [ -z "$ARCHITECTURE" ]; then
case $(uname -m) in
x86_64) ARCHITECTURE="x64" ;;
aarch64) ARCHITECTURE="arm64" ;;
esac
fi

case "$ARCHITECTURE" in
"x64"|"arm64")
;;
*)
echo "Set the architecture type using the ARCHITECTURE environment variable. Supported values: x64, arm64." >&2
exit 1
;;
esac

test -z "$OTEL_DOTNET_AUTO_HOME" && OTEL_DOTNET_AUTO_HOME="$HOME/.otel-dotnet-auto"
test -z "$VERSION" && VERSION="v1.7.0"

DOWNLOAD_DIR="${DOWNLOAD_DIR:=${TMPDIR:=$(mktemp -d)}}"

RELEASES_URL="https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases"
ARCHIVE="opentelemetry-dotnet-instrumentation-$OS_TYPE.zip"

# In case of Linux, use architecture in the download path
if echo "$OS_TYPE" | grep -q "linux"; then
ARCHIVE="opentelemetry-dotnet-instrumentation-$OS_TYPE-$ARCHITECTURE.zip"
fi

LOCAL_PATH="${LOCAL_PATH:=$DOWNLOAD_DIR/$ARCHIVE}"
if [ ! -f "${LOCAL_PATH}" ]; then
(
cd "$DOWNLOAD_DIR"
echo "Downloading $VERSION for $OS_TYPE ($LOCAL_PATH)..."
curl -sSfLo "$LOCAL_PATH" "$RELEASES_URL/download/$VERSION/$ARCHIVE"
)
else
echo "Using local installation archive: $LOCAL_PATH"
fi

rm -rf "$OTEL_DOTNET_AUTO_HOME"
unzip -q "$LOCAL_PATH" -d "$OTEL_DOTNET_AUTO_HOME"
50 changes: 38 additions & 12 deletions build/scripts/BuildInformation.fs
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,47 @@ module BuildInformation
open System
open System.IO
open System.Threading
open System.Xml.Linq
open System.Xml.XPath
open Fake.Core
open Proc.Fs
open Fake.Tools.Git

type Paths =
static member Root =
let mutable dir = DirectoryInfo(".")
while dir.GetFiles("*.sln").Length = 0 do dir <- dir.Parent
Environment.CurrentDirectory <- dir.FullName
dir

static member RelativePathToRoot path = Path.GetRelativePath(Paths.Root.FullName, path)

static member ArtifactFolder = DirectoryInfo(Path.Combine(Paths.Root.FullName, ".artifacts"))
static member ArtifactPath t = DirectoryInfo(Path.Combine(Paths.ArtifactFolder.FullName, t))

static member private SrcFolder = DirectoryInfo(Path.Combine(Paths.Root.FullName, "src"))
static member SrcPath (t: string list) = DirectoryInfo(Path.Combine([Paths.SrcFolder.FullName] @ t |> List.toArray))


type BuildConfiguration =
static member ValidateAssemblyName = false
static member GenerateApiChanges = false
static member OpenTelemetryAutoInstrumentationVersion = SemVer.parse("1.7.0")




type Software =
static member Organization = "elastic"
static member Repository = "elastic-otel-dotnet"
static member GithubMoniker = $"%s{Software.Organization}/%s{Software.Repository}"
static member SignKey = "069ca2728db333c1"

static let queryPackageRef upstreamPackage distroPackage =
let path = Paths.SrcPath [distroPackage; $"{distroPackage}.csproj"]
let project = XDocument.Load(path.FullName)
let packageRef = project.XPathSelectElement($"//PackageReference[@Include = '{upstreamPackage}']")
let upstreamVersion = packageRef.Attribute("Version").Value
SemVer.parse(upstreamVersion)

static let restore =
Lazy<unit>((fun _ -> exec { run "dotnet" "tool" "restore" }), LazyThreadSafetyMode.ExecutionAndPublication)
Expand All @@ -35,20 +62,19 @@ type Software =
}
SemVer.parse <| $"%s{output.Line}+%s{sha}"
, LazyThreadSafetyMode.ExecutionAndPublication)

static member Version = restore.Value; versionInfo.Value

type Paths =
static member private Root =
let mutable dir = DirectoryInfo(".")
while dir.GetFiles("*.sln").Length = 0 do dir <- dir.Parent
Environment.CurrentDirectory <- dir.FullName
dir

static member OpenTelemetryAutoInstrumentationVersion =
let upstreamPackage = "OpenTelemetry.AutoInstrumentation";
let distroPackage = $"Elastic.{upstreamPackage}"
queryPackageRef upstreamPackage distroPackage

static member RelativePathToRoot path = Path.GetRelativePath(Paths.Root.FullName, path)
static member OpenTelemetryVersion =
let upstreamPackage = "OpenTelemetry";
let distroPackage = $"Elastic.{upstreamPackage}"
queryPackageRef upstreamPackage distroPackage

static member ArtifactFolder = DirectoryInfo(Path.Combine(Paths.Root.FullName, ".artifacts"))
static member ArtifactPath t = DirectoryInfo(Path.Combine(Paths.ArtifactFolder.FullName, t))

type OS =
| OSX | Windows | Linux
Expand Down
2 changes: 2 additions & 0 deletions build/scripts/CommandLine.fs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type TestSuite = All | Unit | Integration | E2E | Skip_All | Skip_E2E
type Build =
| [<CliPrefix(CliPrefix.None);SubCommand>] Clean
| [<CliPrefix(CliPrefix.None);SubCommand>] Version
| [<CliPrefix(CliPrefix.None);Hidden;SubCommand>] Compile
| [<CliPrefix(CliPrefix.None);SubCommand>] Build
| [<CliPrefix(CliPrefix.None);SubCommand>] Test

Expand Down Expand Up @@ -64,6 +65,7 @@ with
| ValidateLicenses
| ValidatePackages
| GenerateReleaseNotes
| Compile
| Redistribute
| GenerateApiChanges -> "Undocumented, dependent target"

Expand Down
Loading
Loading