react-native-store-version 1.4.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/pr.yml +26 -2
- package/.github/workflows/release.yml +243 -15
- package/CHANGELOG.md +23 -0
- package/README.md +1 -12
- package/package.json +2 -2
package/.github/workflows/pr.yml
CHANGED
|
@@ -4,6 +4,12 @@ on:
|
|
|
4
4
|
types: ['opened', 'synchronize']
|
|
5
5
|
branches:
|
|
6
6
|
- 'master'
|
|
7
|
+
# 1.x の修正は v1.4.2 のタグから切る 1.x ブランチで行う(R7)
|
|
8
|
+
- '1.x'
|
|
9
|
+
|
|
10
|
+
# PR の CI には secrets も書き込み権限も渡さない
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
7
13
|
|
|
8
14
|
jobs:
|
|
9
15
|
build_and_deploy:
|
|
@@ -12,13 +18,31 @@ jobs:
|
|
|
12
18
|
|
|
13
19
|
steps:
|
|
14
20
|
- name: Checkout Repo
|
|
15
|
-
uses: actions/checkout@
|
|
21
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
|
+
with:
|
|
23
|
+
persist-credentials: false
|
|
24
|
+
|
|
25
|
+
# v1 のテストは Node 18.18.2 で実行する。v1 の devDependency react-native@0.69.3 の jest/setup.js が
|
|
26
|
+
# global.performance に代入するため、Node 18.19.0 以降(19+ を含む)では全スイートが失敗する(D29)。
|
|
27
|
+
# master(v2)は Phase 1a で pnpm 化し、Phase 1c でテスト基盤を作り直したら Node 24 に戻す
|
|
28
|
+
- name: Setup Node.js (test)
|
|
29
|
+
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
30
|
+
with:
|
|
31
|
+
node-version: 18.18.2
|
|
32
|
+
package-manager-cache: false
|
|
16
33
|
|
|
17
34
|
- name: Install Dependencies
|
|
18
|
-
run: npm
|
|
35
|
+
run: npm ci --ignore-scripts
|
|
19
36
|
|
|
20
37
|
- name: Test
|
|
21
38
|
run: npm run test
|
|
22
39
|
|
|
40
|
+
# build は release.yml と同じ Node 24 で確認する
|
|
41
|
+
- name: Setup Node.js (build)
|
|
42
|
+
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
43
|
+
with:
|
|
44
|
+
node-version: 24
|
|
45
|
+
package-manager-cache: false
|
|
46
|
+
|
|
23
47
|
- name: Build
|
|
24
48
|
run: npm run build
|
|
@@ -1,31 +1,259 @@
|
|
|
1
|
-
|
|
1
|
+
# npm への publish は Trusted Publishing(OIDC)で行う。
|
|
2
|
+
# npmjs.com 側の Trusted Publisher 登録はこのファイル名(release.yml)と environment(npm)の完全一致が必要なので、
|
|
3
|
+
# ファイル名を変えないこと(登録時には検証されず、publish 時に初めて失敗する)。
|
|
4
|
+
name: release
|
|
5
|
+
|
|
2
6
|
on:
|
|
3
|
-
|
|
4
|
-
|
|
7
|
+
push:
|
|
8
|
+
# `v1` のような major タグ(このワークフロー自身が付け替える)では発火させない
|
|
9
|
+
tags:
|
|
10
|
+
- 'v[0-9]+.[0-9]+.[0-9]+*'
|
|
11
|
+
|
|
12
|
+
# ジョブ単位で必要な権限だけを付与する
|
|
13
|
+
permissions: {}
|
|
14
|
+
|
|
15
|
+
# リリースは 1 本ずつ実行する。並列に走ると、dist-tag の判定(npm view の latest)や
|
|
16
|
+
# major タグの付け替えの順序が崩れ、latest や v<major> が古い版に戻りうるため。
|
|
17
|
+
# GitHub は 1 グループにつき待機中の run を 1 本しか持たないので、3 本目を push すると待機中の 2 本目はキャンセルされる
|
|
18
|
+
# (publish 前に止まるだけなので安全。キャンセルされた run は後から再実行する)。
|
|
19
|
+
concurrency:
|
|
20
|
+
group: release
|
|
21
|
+
cancel-in-progress: false
|
|
22
|
+
|
|
23
|
+
defaults:
|
|
24
|
+
run:
|
|
25
|
+
shell: bash
|
|
5
26
|
|
|
6
27
|
jobs:
|
|
7
|
-
|
|
8
|
-
|
|
28
|
+
# test だけ Node 18.18.2 で実行する。v1 の devDependency react-native@0.69.3 の jest/setup.js が
|
|
29
|
+
# global.performance に代入するため、performance が read-only になった Node 18.19.0 以降(19+ を含む)では
|
|
30
|
+
# 全スイートが失敗する。`18` と書くと 18 系の最新(18.20.x)が入って失敗するので、パッチまで固定する。
|
|
31
|
+
# master(v2)は Phase 1c でテスト基盤を作り直したら Node 24 に戻す。
|
|
32
|
+
# 1.x 系(v1.4.2 のタグから切る 1.x ブランチ)では v1 のテストを動かすため 18.18.2 のままにする(D29)。
|
|
33
|
+
test:
|
|
34
|
+
name: test (Node 18.18.2)
|
|
9
35
|
runs-on: ubuntu-latest
|
|
36
|
+
permissions:
|
|
37
|
+
contents: read
|
|
10
38
|
|
|
11
39
|
steps:
|
|
12
|
-
- name: Checkout
|
|
13
|
-
uses: actions/checkout@
|
|
40
|
+
- name: Checkout
|
|
41
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
42
|
+
with:
|
|
43
|
+
persist-credentials: false
|
|
14
44
|
|
|
15
|
-
-
|
|
45
|
+
- name: Setup Node.js
|
|
46
|
+
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
16
47
|
with:
|
|
17
|
-
|
|
48
|
+
node-version: 18.18.2
|
|
49
|
+
package-manager-cache: false
|
|
18
50
|
|
|
19
|
-
|
|
20
|
-
|
|
51
|
+
# 依存の lifecycle script(postinstall など)は実行しない(v1 は不要)
|
|
52
|
+
- name: Install dependencies
|
|
53
|
+
run: npm ci --ignore-scripts
|
|
21
54
|
|
|
22
55
|
- name: Test
|
|
23
|
-
run: npm
|
|
56
|
+
run: npm test
|
|
57
|
+
|
|
58
|
+
publish:
|
|
59
|
+
name: publish to npm
|
|
60
|
+
# test が失敗したら publish しない(タグと version の照合はこのジョブの先頭で、publish より前に行う)
|
|
61
|
+
needs: test
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
environment: npm
|
|
64
|
+
permissions:
|
|
65
|
+
contents: read
|
|
66
|
+
# Trusted Publishing と provenance の OIDC トークン発行に必要
|
|
67
|
+
id-token: write
|
|
68
|
+
outputs:
|
|
69
|
+
version: ${{ steps.dist-tag.outputs.version }}
|
|
70
|
+
major: ${{ steps.dist-tag.outputs.major }}
|
|
71
|
+
prerelease: ${{ steps.dist-tag.outputs.prerelease }}
|
|
72
|
+
not-latest: ${{ steps.dist-tag.outputs.not-latest }}
|
|
73
|
+
|
|
74
|
+
steps:
|
|
75
|
+
- name: Checkout
|
|
76
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
77
|
+
with:
|
|
78
|
+
# このジョブは push しないので、GITHUB_TOKEN を git の設定に残さない
|
|
79
|
+
persist-credentials: false
|
|
80
|
+
|
|
81
|
+
- name: Setup Node.js
|
|
82
|
+
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
83
|
+
with:
|
|
84
|
+
node-version: 24
|
|
85
|
+
registry-url: 'https://registry.npmjs.org'
|
|
86
|
+
# publish するジョブではキャッシュを使わない(cache poisoning 対策)
|
|
87
|
+
package-manager-cache: false
|
|
88
|
+
|
|
89
|
+
# タグ名はイベント由来の値なので、run に直接埋め込まず env 経由で参照する(スクリプト注入防止)
|
|
90
|
+
- name: Verify tag matches package.json version
|
|
91
|
+
env:
|
|
92
|
+
TAG: ${{ github.ref_name }}
|
|
93
|
+
run: |
|
|
94
|
+
version="$(node -p "require('./package.json').version")"
|
|
95
|
+
if [[ "$TAG" != "v${version}" ]]; then
|
|
96
|
+
echo "::error::tag (${TAG}) does not match package.json version (v${version})"
|
|
97
|
+
exit 1
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# id-token: write を持つジョブなので、依存の lifecycle script(postinstall など)は実行しない
|
|
101
|
+
# (lifecycle script 経由で OIDC トークンが使われる経路を塞ぐ。build では devDependency の tsc は動く。
|
|
102
|
+
# v1 の build は tsc だけなので script は不要)
|
|
103
|
+
- name: Install dependencies
|
|
104
|
+
run: npm ci --ignore-scripts
|
|
24
105
|
|
|
25
106
|
- name: Build
|
|
26
107
|
run: npm run build
|
|
27
108
|
|
|
28
|
-
-
|
|
29
|
-
|
|
109
|
+
# dist-tag の判定順(spec 10.1):
|
|
110
|
+
# 1. version に `-` を含む(プレリリース)→ --tag next
|
|
111
|
+
# 2. major が npm の latest の major より古い → --tag v<major>(何も付けないと latest が古い major に戻る)
|
|
112
|
+
# 3. それ以外 → 指定なし(latest)
|
|
113
|
+
# latest が取れないときは E404(未公開)だけ latest 扱いにし、それ以外は止める
|
|
114
|
+
# (誤って latest を上書きするより止まる方が安全)。
|
|
115
|
+
- name: Determine dist-tag
|
|
116
|
+
id: dist-tag
|
|
117
|
+
env:
|
|
118
|
+
TAG: ${{ github.ref_name }}
|
|
119
|
+
run: |
|
|
120
|
+
# 前のステップで tag == "v<package.json の version>" を確認済み
|
|
121
|
+
version="${TAG#v}"
|
|
122
|
+
major="${version%%.*}"
|
|
123
|
+
dist_tag=""
|
|
124
|
+
prerelease=false
|
|
125
|
+
not_latest=false
|
|
126
|
+
|
|
127
|
+
if [[ "$version" == *-* ]]; then
|
|
128
|
+
dist_tag="next"
|
|
129
|
+
prerelease=true
|
|
130
|
+
else
|
|
131
|
+
# E404 は stdout ではなく stderr にしか出ないので、stderr を取って判定する
|
|
132
|
+
err_file="$(mktemp)"
|
|
133
|
+
if latest="$(npm view react-native-store-version dist-tags.latest 2>"$err_file")"; then
|
|
134
|
+
# 成功しても値が想定外なら、latest を上書きしないよう止める
|
|
135
|
+
if [[ ! "$latest" =~ ^[0-9]+\. ]]; then
|
|
136
|
+
echo "::error::unexpected dist-tags.latest: '${latest}'"
|
|
137
|
+
exit 1
|
|
138
|
+
fi
|
|
139
|
+
latest_major="${latest%%.*}"
|
|
140
|
+
if (( major < latest_major )); then
|
|
141
|
+
dist_tag="v${major}"
|
|
142
|
+
not_latest=true
|
|
143
|
+
fi
|
|
144
|
+
elif grep -q 'E404' "$err_file"; then
|
|
145
|
+
echo "react-native-store-version is not published yet; publishing as latest"
|
|
146
|
+
else
|
|
147
|
+
cat "$err_file" >&2
|
|
148
|
+
echo "::error::npm view failed (not E404)"
|
|
149
|
+
exit 1
|
|
150
|
+
fi
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
echo "version=${version} major=${major} dist-tag=${dist_tag:-(latest)} prerelease=${prerelease} not-latest=${not_latest}"
|
|
154
|
+
{
|
|
155
|
+
echo "version=${version}"
|
|
156
|
+
echo "major=${major}"
|
|
157
|
+
echo "dist-tag=${dist_tag}"
|
|
158
|
+
echo "prerelease=${prerelease}"
|
|
159
|
+
echo "not-latest=${not_latest}"
|
|
160
|
+
} >> "$GITHUB_OUTPUT"
|
|
161
|
+
|
|
162
|
+
# Trusted Publishing には npm >= 11.5.1 が必要
|
|
163
|
+
- name: Ensure npm >= 11.5.1
|
|
164
|
+
run: |
|
|
165
|
+
current="$(npm -v)"
|
|
166
|
+
# sort -V -C は「並びが昇順なら成功」なので、11.5.1 <= current のときだけ成功する
|
|
167
|
+
if ! printf '%s\n' 11.5.1 "$current" | sort -V -C; then
|
|
168
|
+
echo "npm ${current} is older than 11.5.1; upgrading"
|
|
169
|
+
npm install -g npm@^11.5.1
|
|
170
|
+
fi
|
|
171
|
+
npm -v
|
|
172
|
+
|
|
173
|
+
# NODE_AUTH_TOKEN / NPM_TOKEN は使わない(OIDC で認証する)
|
|
174
|
+
- name: Publish
|
|
175
|
+
env:
|
|
176
|
+
DIST_TAG: ${{ steps.dist-tag.outputs.dist-tag }}
|
|
177
|
+
run: |
|
|
178
|
+
if [[ -n "$DIST_TAG" ]]; then
|
|
179
|
+
npm publish --provenance --tag "$DIST_TAG"
|
|
180
|
+
else
|
|
181
|
+
npm publish --provenance
|
|
182
|
+
fi
|
|
183
|
+
|
|
184
|
+
github-release:
|
|
185
|
+
name: create GitHub Release
|
|
186
|
+
needs: publish
|
|
187
|
+
runs-on: ubuntu-latest
|
|
188
|
+
permissions:
|
|
189
|
+
contents: write
|
|
190
|
+
|
|
191
|
+
steps:
|
|
192
|
+
- name: Create GitHub Release
|
|
193
|
+
env:
|
|
194
|
+
GH_TOKEN: ${{ github.token }}
|
|
195
|
+
TAG: ${{ github.ref_name }}
|
|
196
|
+
PRERELEASE: ${{ needs.publish.outputs.prerelease }}
|
|
197
|
+
NOT_LATEST: ${{ needs.publish.outputs.not-latest }}
|
|
198
|
+
run: |
|
|
199
|
+
args=(--repo "$GITHUB_REPOSITORY" --generate-notes)
|
|
200
|
+
if [[ "$PRERELEASE" == "true" ]]; then
|
|
201
|
+
args+=(--prerelease)
|
|
202
|
+
fi
|
|
203
|
+
# 古い major の版(--tag v<major> で publish した版)が GitHub の「Latest」にならないようにする
|
|
204
|
+
if [[ "$NOT_LATEST" == "true" ]]; then
|
|
205
|
+
args+=(--latest=false)
|
|
206
|
+
fi
|
|
207
|
+
gh release create "$TAG" "${args[@]}"
|
|
208
|
+
|
|
209
|
+
major-tag:
|
|
210
|
+
name: move major tag
|
|
211
|
+
needs: publish
|
|
212
|
+
# プレリリースでは major タグを動かさない
|
|
213
|
+
if: needs.publish.outputs.prerelease == 'false'
|
|
214
|
+
runs-on: ubuntu-latest
|
|
215
|
+
permissions:
|
|
216
|
+
contents: write
|
|
217
|
+
|
|
218
|
+
steps:
|
|
219
|
+
# タグを push するので、このジョブだけは credentials を残す
|
|
220
|
+
- name: Checkout
|
|
221
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
222
|
+
|
|
223
|
+
# publish した版自身の major(1.x なら v1、2.x なら v2)を付け替える。
|
|
224
|
+
# v1 などはトリガーのパターンに合わないので、push してもこのワークフローは再発火しない。
|
|
225
|
+
# その major で公開済みの正式版のうち、この版が最新のときだけ付け替える
|
|
226
|
+
# (古い版のジョブを再実行しても v<major> が古い版に戻らないように)。
|
|
227
|
+
# publish 直後は npm view にまだ出てこないことがあるので、この版自身も候補に加えて比べる。
|
|
228
|
+
- name: Move major tag
|
|
30
229
|
env:
|
|
31
|
-
|
|
230
|
+
VERSION: ${{ needs.publish.outputs.version }}
|
|
231
|
+
MAJOR: ${{ needs.publish.outputs.major }}
|
|
232
|
+
run: |
|
|
233
|
+
# 範囲に合う版が 1 つも無い(その major の最初の正式版で、まだ npm view に出てこない)と
|
|
234
|
+
# npm view は E404 で失敗する。E404 のときだけ「公開済みの正式版なし」として扱い、それ以外は止める
|
|
235
|
+
err_file="$(mktemp)"
|
|
236
|
+
if ! published="$(npm view "react-native-store-version@^${MAJOR}.0.0" version --json 2>"$err_file")"; then
|
|
237
|
+
if grep -q 'E404' "$err_file"; then
|
|
238
|
+
published=""
|
|
239
|
+
else
|
|
240
|
+
cat "$err_file" >&2
|
|
241
|
+
echo "::error::npm view failed (not E404)"
|
|
242
|
+
exit 1
|
|
243
|
+
fi
|
|
244
|
+
fi
|
|
245
|
+
# コマンド置換の中では errexit が外れるので、node の失敗で止まるよう独立した代入にする
|
|
246
|
+
list="$(printf '%s' "$published" | node -e '
|
|
247
|
+
let s = "";
|
|
248
|
+
process.stdin.on("data", (d) => (s += d)).on("end", () => {
|
|
249
|
+
const v = s.trim() ? JSON.parse(s) : [];
|
|
250
|
+
for (const x of Array.isArray(v) ? v : [v]) console.log(x);
|
|
251
|
+
});
|
|
252
|
+
')"
|
|
253
|
+
highest="$(printf '%s\n' "$list" "$VERSION" | sed '/^$/d' | sort -V | tail -n 1)"
|
|
254
|
+
if [[ "$highest" != "$VERSION" ]]; then
|
|
255
|
+
echo "v${MAJOR} is kept: ${VERSION} is older than the published ${highest}"
|
|
256
|
+
exit 0
|
|
257
|
+
fi
|
|
258
|
+
git tag -f "v${MAJOR}"
|
|
259
|
+
git push -f origin "v${MAJOR}"
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
## v1.4.2
|
|
4
|
+
|
|
5
|
+
- Changed the publish flow only (npm Trusted Publishing with provenance). No changes to the library code; no impact on users.
|
|
6
|
+
|
|
7
|
+
## v1.4.1
|
|
8
|
+
|
|
9
|
+
- fix `cannot read property "length" of undefined` on iOS by [magrinj](https://github.com/magrinj)
|
|
10
|
+
- https://github.com/watanabeyu/react-native-store-version/pull/54
|
|
11
|
+
|
|
12
|
+
## v1.4.0
|
|
13
|
+
|
|
14
|
+
- Sorry for the long wait for an update.
|
|
15
|
+
- fix android.ts by [hussainimdad004](https://github.com/hussainimdad004)
|
|
16
|
+
- https://github.com/watanabeyu/react-native-store-version/issues/39
|
|
17
|
+
- use prettier
|
|
18
|
+
- move example to [snack](https://snack.expo.dev/@watanabe_yu/react-native-store-version-example)
|
|
19
|
+
|
|
20
|
+
## v1.3.0
|
|
21
|
+
|
|
22
|
+
- if failed, throw an error.
|
|
23
|
+
- add result detail.
|
package/README.md
CHANGED
|
@@ -14,18 +14,7 @@ $ npm install --save react-native-store-version
|
|
|
14
14
|
|
|
15
15
|
## CHANGELOG
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- Sorry for the long wait for an update.
|
|
20
|
-
- fix android.ts by [hussainimdad004](https://github.com/hussainimdad004)
|
|
21
|
-
- https://github.com/watanabeyu/react-native-store-version/issues/39
|
|
22
|
-
- use prettier
|
|
23
|
-
- move example to [snack](https://snack.expo.dev/@watanabe_yu/react-native-store-version-example)
|
|
24
|
-
|
|
25
|
-
### v1.3.0
|
|
26
|
-
|
|
27
|
-
- if failed, throw an error.
|
|
28
|
-
- add result detail.
|
|
17
|
+
See [CHANGELOG.md](./CHANGELOG.md).
|
|
29
18
|
|
|
30
19
|
## Usage
|
|
31
20
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-store-version",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "MIT",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
|
-
"url": "git
|
|
13
|
+
"url": "git+https://github.com/watanabeyu/react-native-store-version.git"
|
|
14
14
|
},
|
|
15
15
|
"keywords": [
|
|
16
16
|
"react-native",
|