-
Notifications
You must be signed in to change notification settings - Fork 3
112 lines (100 loc) · 4.3 KB
/
release.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
# Release a tagged version of the '@elastic/opentelemetry-node' package.
name: release
# Primarily this workflow is about doing a release for a *tag*. However, this is
# also run for pushes to "main" to (a) go through some of the motions for
# testing, and (b) publishing the Docker image with an "edge" label.
on:
push:
tags:
- v*.*.*
branches:
- main
paths:
- 'packages/opentelemetry-node/**'
- '.github/workflows/release.yml'
# 'id-token' perm needed for npm publishing with provenance (see
# https://docs.npmjs.com/generating-provenance-statements#example-github-actions-workflow)
permissions:
attestations: write
contents: write
pull-requests: read
id-token: write
jobs:
release:
runs-on: ubuntu-latest
env:
DOCKER_IMAGE_NAME: docker.elastic.co/observability/elastic-otel-node
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 'v18.20.2'
registry-url: 'https://registry.npmjs.org'
# Setup a Docker "buildx" builder container, used by "build-push-action"
# below for multi-platform image builds. Notes on multi-platform images:
# https://github.com/elastic/apm-agent-nodejs/issues/4038#issuecomment-2130406402
- uses: docker/setup-buildx-action@v3
- name: Log in to the Elastic Container registry
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0
with:
registry: ${{ secrets.ELASTIC_DOCKER_REGISTRY }}
username: ${{ secrets.ELASTIC_DOCKER_USERNAME }}
password: ${{ secrets.ELASTIC_DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels)
id: docker-meta
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5.6.1
with:
images: ${{ env.DOCKER_IMAGE_NAME }}
flavor: |
latest=auto
tags: |
# "1.2.3" and "latest" Docker tags on push of git tag "v1.2.3"
type=semver,pattern={{version}}
# "edge" Docker tag on git push to default branch
type=edge
labels: |
org.opencontainers.image.vendor=Elastic
org.opencontainers.image.title=elastic-otel-node
org.opencontainers.image.description=Elastic Distribution of OpenTelemetry Node.js
- name: Build and Push Docker Image
id: docker-push
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0
with:
context: .
platforms: linux/amd64,linux/arm64
file: 'packages/opentelemetry-node/Dockerfile'
push: true
tags: ${{ steps.docker-meta.outputs.tags }}
labels: ${{ steps.docker-meta.outputs.labels }}
- name: Attest Docker image
uses: actions/attest-build-provenance@7668571508540a607bdfd90a87a560489fe372eb # v2.1.0
with:
subject-name: "${{ env.DOCKER_IMAGE_NAME }}"
subject-digest: ${{ steps.docker-push.outputs.digest }}
push-to-registry: true
- name: npm publish (only for tag releases)
if: startsWith(github.ref, 'refs/tags')
working-directory: ./packages/opentelemetry-node
run: npm publish
env:
# https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages#publishing-packages-to-the-npm-registry
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: GitHub release (only for tag releases)
if: startsWith(github.ref, 'refs/tags')
run: |
npm ci # need top-level devDeps for github-release.sh script
./scripts/github-release.sh "packages/opentelemetry-node" "${{ github.ref_name }}"
env:
GH_TOKEN: ${{ github.token }}
- name: Notify in Slack
# Only notify on failure, because on success the published GitHub
# Release will result in a notification from the GitHub Slack app
# (assuming '/github subscribe elastic/elastic-otel-node').
if: ${{ failure() }}
uses: elastic/oblt-actions/slack/[email protected]
with:
bot-token: ${{ secrets.SLACK_BOT_TOKEN }}
channel-id: "#apm-agent-node"
message: '[${{ github.repository }}] Release `@elastic/opentelemetry-node` *${{ github.ref_name }}*'