-
Notifications
You must be signed in to change notification settings - Fork 293
155 lines (125 loc) · 5.83 KB
/
publish-packages.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
name: Build, pack, and publish
on:
workflow_dispatch:
push:
tags:
- 'Exporter.*-*'
- 'Extensions.*-*'
- 'Extensions-*'
- 'Instrumentation.*-*'
- 'PersistentStorage-*'
- 'Resources.*-*'
- 'Sampler.*-*'
- 'SemanticConventions-*'
schedule:
- cron: '0 0 * * *' # once in a day at 00:00
jobs:
automation:
uses: ./.github/workflows/automation.yml
secrets: inherit
build-pack-publish:
runs-on: windows-latest
outputs:
artifact-url: ${{ steps.upload-artifacts.outputs.artifact-url }}
artifact-id: ${{ steps.upload-artifacts.outputs.artifact-id }}
steps:
- uses: actions/checkout@v4
with:
# Note: By default GitHub only fetches 1 commit. MinVer needs to find
# the version tag which is typically NOT on the first commit so we
# retrieve them all.
fetch-depth: 0
- name: Resolve project
id: resolve-project
shell: pwsh
run: |
Import-Module .\build\scripts\build.psm1
# Note: The ResolveProjectForTag call here figures out the .proj file to
# use for the build. It will be either opentelemetry-dotnet-contrib.proj
# (for manual/scheduled builds), a .proj file in .\build\Projects\ (if
# one is defined with MinVerTagPrefix matching the tag), or
# Component.proj for simple projects (where a single csproj has
# MinVerTagPrefix matching the tag).
$title = '' # Used for friendly names in action UI
$project = '' # Actual project passed to dotnet
$component = '' # Used to tell Component.proj what to build
ResolveProjectForTag `
-tag '${{ github.ref_type == 'tag' && github.ref_name || '' }}' `
-title ([ref]$title) `
-project ([ref]$project) `
-component ([ref]$component)
echo "title=$title" >> $env:GITHUB_OUTPUT
echo "project=$project" >> $env:GITHUB_OUTPUT
# Note: BUILD_COMPONENT envvar tells Component.proj what to build. Only
# used if $project ends up Component.proj.
echo "BUILD_COMPONENT=$component" >> $env:GITHUB_ENV
- name: Setup dotnet
uses: actions/setup-dotnet@v4
- name: dotnet restore ${{ steps.resolve-project.outputs.title }}
run: dotnet restore ${{ steps.resolve-project.outputs.project }}
- name: dotnet build ${{ steps.resolve-project.outputs.title }}
run: dotnet build ${{ steps.resolve-project.outputs.project }} --configuration Release --no-restore -p:Deterministic=true -p:BuildNumber=${{ github.run_number }}
- name: dotnet test ${{ steps.resolve-project.outputs.title }}
run: dotnet test ${{ steps.resolve-project.outputs.project }} --configuration Release --no-restore --no-build
- name: dotnet pack ${{ steps.resolve-project.outputs.title }}
run: dotnet pack ${{ steps.resolve-project.outputs.project }} --configuration Release --no-restore --no-build -p:PackTag=${{ github.ref_type == 'tag' && github.ref_name || '' }}
- name: Publish Artifacts
id: upload-artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ github.ref_name }}-packages
path: 'src\**\*.*nupkg'
- name: Publish MyGet
env:
MYGET_TOKEN_EXISTS: ${{ secrets.MYGET_TOKEN != '' }}
if: env.MYGET_TOKEN_EXISTS == 'true' # Skip MyGet publish if run on a fork without the secret
run: |
nuget setApiKey ${{ secrets.MYGET_TOKEN }} -Source https://www.myget.org/F/opentelemetry/api/v2/package
nuget push src\**\*.nupkg -Source https://www.myget.org/F/opentelemetry/api/v2/package
- name: Publish NuGets
env:
NUGET_TOKEN_EXISTS: ${{ secrets.NUGET_TOKEN != '' }}
if: github.ref_type == 'tag' && env.NUGET_TOKEN_EXISTS == 'true' # Skip NuGet publish for scheduled nightly builds or if run on a fork without the secret
run: |
nuget push src\**\*.nupkg -Source https://api.nuget.org/v3/index.json -ApiKey ${{ secrets.NUGET_TOKEN }} -SymbolApiKey ${{ secrets.NUGET_TOKEN }}
post-build:
runs-on: ubuntu-latest
needs:
- automation
- build-pack-publish
if: needs.automation.outputs.enabled && github.event_name == 'push'
env:
GH_TOKEN: ${{ secrets[needs.automation.outputs.token-secret-name] }}
steps:
- name: check out code
uses: actions/checkout@v4
with:
token: ${{ secrets[needs.automation.outputs.token-secret-name] }}
- name: Download Artifacts
run: |
curl \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token ${{ github.token }}" \
-L \
-o '${{ github.workspace }}/artifacts/${{ github.ref_name }}-packages.zip' \
--create-dirs \
"https://api.github.com/repos/${{ github.repository }}/actions/artifacts/${{ needs.build-pack-publish.outputs.artifact-id }}/zip"
- name: Create GitHub Release
if: github.ref_type == 'tag'
shell: pwsh
run: |
Import-Module .\build\scripts\post-release.psm1
CreateRelease `
-gitRepository '${{ github.repository }}' `
-tag '${{ github.ref_name }}' `
-releaseFiles '${{ github.workspace }}/artifacts/${{ github.ref_name }}-packages.zip#Packages'
- name: Post notice when packages are ready
shell: pwsh
run: |
Import-Module .\build\scripts\post-release.psm1
TryPostPackagesReadyNoticeOnPrepareReleasePullRequest `
-gitRepository '${{ github.repository }}' `
-tag '${{ github.ref_name }}' `
-tagSha '${{ github.sha }}' `
-packagesUrl '${{ needs.build-pack-publish.outputs.artifact-url }}' `
-botUserName '${{ needs.automation.outputs.username }}'