-
Notifications
You must be signed in to change notification settings - Fork 69
162 lines (142 loc) · 6.21 KB
/
nightly-dev-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
# This workflow automatically generates nightly release PRs if there were changes to the code
name: Publish nightly dev releases
on:
schedule:
- cron: 0 2 * * * # Every day at 02:00
workflow_dispatch: # Manually on demand
inputs:
versionBump:
description: 'Type of version bump'
required: true
default: 'prerelease'
type: choice
options:
- prerelease
- prepatch
- preminor
- premajor
jobs:
publish-config:
if: github.repository == 'project-chip/matter.js'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch the history, or this action won't work
- name: Detect changes (git)
id: changes
run: |
# ===============================
# Detect changes using git
# ===============================
LAST_TAG=$(git describe --abbrev=0 --tags)
echo "Checking for changes since last tag $LAST_TAG"
# Figure out if anything changed in the package directories
CHANGES=$(git diff "$LAST_TAG" --name-only | grep -E "^packages\/" || true)
if [ -z "$CHANGES" ] ; then
echo "🔸 No package changes since latest version, aborting..."
echo "result=unchanged" >> $GITHUB_OUTPUT
else
echo "result=ok" >> $GITHUB_OUTPUT
fi
- name: Prepare testing environment
if: steps.changes.outputs.result == 'ok'
uses: ./.github/actions/prepare-env
- name: Prepare Webbrowser testing environment
if: steps.changes.outputs.result == 'ok'
uses: ./.github/actions/prepare-webtests
- name: Execute tests
if: steps.changes.outputs.result == 'ok'
run: npm run test
- name: Prepare chip tests
if: steps.changes.outputs.result == 'ok'
uses: ./.github/actions/prepare-chip-testing
with:
build-matter-js: "false"
- name: chip-tool-test execution
if: steps.changes.outputs.result == 'ok'
id: test-execution
shell: bash
run: |
cd connectedhomeip
./scripts/run_in_build_env.sh \
'./scripts/tests/run_test_suite.py \
--runner chip_tool_python \
--chip-tool ../bin/chip-tool \
--log-level info \
--target-glob "{Test_TC_ACE_*,Test_TC_ACL_*,Test_AddNewFabricFromExistingFabric,Test_TC_APBSC_*,Test_TC_BINFO_*,Test_TC_BOOL_*,Test_TC_BRBINFO_*,Test_TC_CADMIN_*,Test_TC_CC_*,Test_TC_CGEN_*,Test_TC_CNET_*,Test_TC_DGGEN_*,Test_TC_DESC_*,Test_TC_FLABEL_*,Test_TC_FLW_*,Test_TC_I_*,Test_TC_LCFG_*,Test_TC_LOWPOWER_*,Test_TC_LTIME_*,Test_TC_LUNIT_*,Test_TC_LVL_*,Test_TC_MOD_*,Test_TC_OCC_*,Test_TC_OO_*,Test_TC_OPCREDS_*,Test_TC_PCC_*,Test_TC_PRS_*,Test_TC_PS_*,Test_TC_RH_*,Test_TC_SWTCH_*,Test_TC_TMP_*,Test_TC_TSUIC_*,Test_TC_ULABEL_*,Test_TC_WAKEONLAN_*,Test_TV_WNCV_*,TestAccessControlC*,TestArmFailSafe,TestCASERecovery,TestCommandsById,TestCommissioningWindow,TestFabricRemovalWhileSubscribed,TestGeneralCommissioning,TestMultiAdmin,TestOperationalCredentialsCluster,TestSelfFabricRemoval,TestSubscribe_*,TestUserLabelCluster*,TestDiscovery}" \
--target-skip-glob "{Test_TC_ACE_1_6,Test_TC_LVL_9_1,Test_TC_OO_2_7}" \
run \
--iterations 1 \
--all-clusters-app ../chip-testing/dist/esm/AllClustersTestApp.js \
--bridge-app ../chip-testing/dist/esm/BridgeTestApp.js \
--tv-app ../chip-testing/dist/esm/TvTestApp.js \
'
- name: Cleanup chip tests
if: steps.changes.outputs.result == 'ok'
id: cleanup-chip-tests
shell: bash
run: |
rm -rf connectedhomeip
- name: Determine the version bump
if: steps.changes.outputs.result == 'ok'
env:
VERSION_BUMP: ${{ inputs.versionBump }}
id: version
uses: actions/github-script@v7
with:
result-encoding: string
script: |
const semver = require("semver");
const fs = require("fs");
const now = new Date();
const today = new Date(now.getTime() - now.getTimezoneOffset()*60000);
const dateStr = today.toISOString().split("T")[0].replace(/-/g, "");
const sha = require("child_process").execSync("git rev-parse --short HEAD").toString("utf8").trim();
const prevVersion = fs.readFileSync(`${process.env.GITHUB_WORKSPACE}/version.txt`, "utf8");
const parsed = semver.parse(prevVersion);
const prereleaseIdentifier = parsed.prerelease[0] || "alpha";
for (let i = 1; i < parsed.prerelease.length; i++) {
const part = parsed.prerelease[i];
if (typeof part === "number") {
continue;
}
// Parse stuff like `8-20210909-001a711c` back to `8`
const numeric = parseInt(part);
if (!Number.isNaN(numeric)) {
parsed.prerelease[i] = numeric;
}
}
// Figure out the next version
const versionBump = process.env.VERSION_BUMP || "prerelease";
return `${semver.inc(parsed, versionBump, prereleaseIdentifier)}-${dateStr}-${sha}`;
- name: Bump version locally
if: steps.changes.outputs.result == 'ok'
env:
VERSION: ${{ steps.version.outputs.result }}
run: |
git config --global user.email "[email protected]"
git config --global user.name "Github Action"
npm run version -- --set ${VERSION}
git add version.txt
git commit -m "v${VERSION}"
- name: Create Pull Request
if: steps.changes.outputs.result == 'ok'
id: cpr
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.PR_TOKEN }}
commit-message: "[NIGHTLY DEV RELEASE] ${{ steps.version.outputs.result }}"
committer: Automator77 <[email protected]>
author: Automator77 <[email protected]>
signoff: false
branch: nightly-release
delete-branch: true
title: "[NIGHTLY DEV RELEASE] ${{ steps.version.outputs.result }}"
body: |
Update version by nightly dev release
labels: |
automated pr
assignees: Automator77
draft: false