-
Notifications
You must be signed in to change notification settings - Fork 4
174 lines (147 loc) · 6.08 KB
/
test-and-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
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# This is a composition of lint and test scripts
# Make sure to update this file along with the others
name: Test and Release
# Run this job on all pushes and pull requests
# as well as tags with a semantic version
on:
push:
branches:
- '*'
tags:
# normal versions
- 'v?[0-9]+.[0-9]+.[0-9]+'
# pre-releases
- 'v?[0-9]+.[0-9]+.[0-9]+-**'
pull_request: {}
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
# Performs quick checks before the expensive test runs
check-and-lint:
if: contains(github.event.head_commit.message, '[skip ci]') == false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
- name: Install Dependencies
run: npm ci && cd src-admin && npm ci
- name: Lint TypeScript backend code
run: npm run lint
- name: Lint TypeScript frontend code
run: npm run lint-frontend
- name: Build
run: npm run build
# Runs adapter tests on all supported node versions and OSes
adapter-tests:
if: contains(github.event.head_commit.message, '[skip ci]') == false
needs: [check-and-lint]
runs-on: ${{ matrix.os }}
strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install Dependencies
run: npm ci && cd src-admin && npm ci
- name: Build typescript
run: npm run build
- name: Run local tests
run: npm test
auto-merge:
if: |
always() &&
github.event_name == 'pull_request'
needs: [adapter-tests]
runs-on: ubuntu-latest
steps:
- id: automerge
name: automerge
uses: 'pascalgn/automerge-action@v0.16.4'
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
MERGE_LABELS: 'automated pr 🔧'
MERGE_FILTER_AUTHOR: 'foxriver76'
MERGE_FORKS: 'false'
MERGE_DELETE_BRANCH: 'false'
UPDATE_LABELS: 'automated pr 🔧'
MERGE_METHOD: 'squash'
MERGE_COMMIT_MESSAGE: 'pull-request-title-and-description'
MERGE_RETRIES: "50"
MERGE_RETRY_SLEEP: "30000"
- name: Checkout repository
if: steps.automerge.outputs.mergeResult == 'merged'
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch the history, or this action won't work
ref: 'main'
- name: Use Node.js 20
if: steps.automerge.outputs.mergeResult == 'merged'
uses: actions/setup-node@v4
with:
node-version: 20
- name: Determine version
if: steps.automerge.outputs.mergeResult == 'merged'
id: version
uses: actions/github-script@v7
with:
result-encoding: string
script: |
return require('./package.json').version;
- name: Install dependencies
if: steps.automerge.outputs.mergeResult == 'merged'
run: npm ci && cd src-admin && npm ci
- name: Build
if: steps.automerge.outputs.mergeResult == 'merged'
run: npm run build
- name: Extract the commit body
if: steps.automerge.outputs.mergeResult == 'merged'
id: extract_release
# The body may be multiline, therefore we need to escape some characters
run: |
VERSION="${{ steps.version.outputs.result }}"
VERSION=${VERSION##*/v}
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
EOF=$(od -An -N6 -x /dev/urandom | tr -d ' ')
BODY=$(git show -s --format=%b)
echo "BODY<<$EOF" >> $GITHUB_OUTPUT
echo "$BODY" >> $GITHUB_OUTPUT
echo "$EOF" >> $GITHUB_OUTPUT
if [[ $VERSION == *"-"* ]] ; then
echo "TAG=--tag next" >> $GITHUB_OUTPUT
fi
- name: Publish npm
if: steps.automerge.outputs.mergeResult == 'merged'
run: |
npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}
npm whoami
npm publish ${{ steps.extract_release.outputs.TAG }}
- name: Create Github Release
if: steps.automerge.outputs.mergeResult == 'merged'
uses: ncipollo/release-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag: v${{ steps.version.outputs.result }}
name: Release v${{ steps.version.outputs.result }}
draft: false
prerelease: ${{ contains(steps.version.outputs.result, '-') }}
body: ${{ steps.extract_release.outputs.BODY }}
- name: Notify Sentry.io about the release
run: |
npm i -g @sentry/cli
export SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}
export SENTRY_URL=https://sentry.iobroker.net
export SENTRY_ORG=iobroker
export SENTRY_PROJECT=iobroker-matter
export SENTRY_VERSION=iobroker.matter@${{ steps.version.outputs.result }}
sentry-cli releases new $SENTRY_VERSION
sentry-cli releases finalize $SENTRY_VERSION