You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+16-1Lines changed: 16 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ _None_
10
10
11
11
### New Features
12
12
13
-
- Added `find_or_create_pull_request` action and `GithubHelper#find_pull_request`: returns the URL of the open Pull Request for a head branch, creating one only if none exists yet. Useful for "rolling" automations (e.g. a daily translations or dependency-update job) that force-push the same head branch on every run. [#733]
13
+
_None_
14
14
15
15
### Bug Fixes
16
16
@@ -20,12 +20,27 @@ _None_
20
20
-`L10nHelper.merge_strings` now applies the key prefix via a comment-aware tokenizer, so it correctly prefixes unquoted keys containing `. - $ : /`, lines with an *unquoted* value (e.g. `CFBundleName = WordPress;`), and keys sitting behind an inter-token `.strings` comment (e.g. `CFBundleName /* note */ = WordPress;`) — matching the grammar `plutil` accepts. Previously the line-based matcher left those keys written to the merged file without the prefix while still bookkeeping them *with* it, leaving the output inconsistent with the reported keys (which could resurface the very collisions the prefix avoids and break downstream key extraction). [#741]
21
21
-`StringsFileValidationHelper.find_duplicated_keys` (and `scan_for_duplicate_keys`) now tokenize dictionary- and array-valued entries (`"k" = { … };`, `"k" = ( … );`, nesting allowed), skipping the container body — so a `:text` file that uses them is scanned for duplicate *top-level* keys instead of returning `:unscannable`. [#750]
22
22
-`L10nHelper.merge_strings` now prefixes the outer key of a dictionary/array-valued entry and copies the value through verbatim, instead of crashing on it — valid input `plutil` accepts that the flat-`.strings` tokenizer previously couldn't rewrite. If a file still holds a construct the tokenizer can't rewrite, its lines are copied through unprefixed with a `UI.important` warning (and its keys are bookkept unprefixed to match, so a genuine cross-file collision is still reported rather than silently collapsed) instead of aborting the whole merge. [#750]
23
+
- Bump `faraday` and `nokogiri` to address security vulnerabilities. [#749]
24
+
- Bump `concurrent-ruby` to address CVE-2026-54904 / GHSA-h8w8-99g7-qmvj. [#751]
23
25
24
26
### Internal Changes
25
27
26
28
- Centralized `.strings` duplicate-key detection behind `StringsFileValidationHelper.scan_for_duplicate_keys`, which detects the file format and returns a `[:scanned | :unsupported_format | :unscannable, payload]` tri-state that callers map to their own policy (warn-and-skip vs fail-closed). `ios_lint_localizations` now uses it. [#741]
27
29
-`L10nHelper.strings_file_type` (and `StringsFileValidationHelper.scan_for_duplicate_keys`) accept `assume_valid:` to skip a redundant `plutil -lint` when the caller has already parsed the file. [#741]
28
30
31
+
## 14.9.0
32
+
33
+
### New Features
34
+
35
+
-`upload_github_release_assets` action: uploads assets on an existing GitHub release without disturbing unrelated assets. If assets exists already, it replaces them. [#743]
36
+
37
+
## 14.8.0
38
+
39
+
### New Features
40
+
41
+
-`find_or_create_pull_request` action: returns the URL of the open Pull Request for a head branch, creating one only if none exists yet. [#733]
42
+
-`ContinuousBuildCodeFormatter`: derives an Android Play Store `versionCode` for a "continuous trunk" release model as `(major * 10 + minor) * 10^build_digits + build_number` (default `build_digits: 6`). [#735]
UI.success("Successfully uploaded GitHub Release assets. You can see the release at '#{url}'")
26
+
url
27
+
end
28
+
29
+
defself.description
30
+
'Uploads assets to an existing GitHub Release'
31
+
end
32
+
33
+
defself.authors
34
+
['Automattic']
35
+
end
36
+
37
+
defself.return_value
38
+
'The URL of the GitHub Release'
39
+
end
40
+
41
+
defself.details
42
+
'Uploads assets to an existing GitHub Release. By default, existing release assets with matching filenames are replaced; when replace_existing is false, matching assets cause the action to fail.'
43
+
end
44
+
45
+
defself.available_options
46
+
[
47
+
FastlaneCore::ConfigItem.new(key: :repository,
48
+
description: 'The slug (`<org>/<repo>`) of the GitHub repository containing the release',
49
+
optional: false,
50
+
type: String,
51
+
verify_block: procdo |value|
52
+
UI.user_error!('Repository cannot be empty')ifvalue.to_s.empty?
53
+
end),
54
+
FastlaneCore::ConfigItem.new(key: :version,
55
+
description: 'The version of the release. Used as the git tag name',
56
+
optional: false,
57
+
type: String,
58
+
verify_block: procdo |value|
59
+
UI.user_error!('Version cannot be empty')ifvalue.to_s.empty?
0 commit comments