gowalk-cicd 1.0.28 → 1.0.29

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.
@@ -1 +1 @@
1
- 1.0.28
1
+ 1.0.29
@@ -139,7 +139,21 @@ def _stale_editable_id(versions: list[dict], target: str) -> str | None:
139
139
  vid = v.get("id")
140
140
  if not vid:
141
141
  continue
142
- if semver_tuple(version_string) >= target_t:
142
+ # STRICTLY greater, not >=. The skip above is a STRING compare while
143
+ # this is a TUPLE compare, so a version that is the SAME but written
144
+ # differently — "1.0" against a target of "1.0.0" — slipped past the
145
+ # skip and then tripped this guard, refusing the whole deploy.
146
+ #
147
+ # That is precisely what App Store Connect hands a brand-new app: it
148
+ # auto-creates version "1.0" when the record is made, while a Flutter
149
+ # project ships MARKETING_VERSION "1.0.0". Every first release hit it.
150
+ #
151
+ # Renaming an editable to an EQUAL version downgrades nothing — it
152
+ # normalises the string — so it falls through to the PATCH-rename
153
+ # candidates below. The guard's real target is unaffected: an editable
154
+ # genuinely AHEAD of the project (draft 1.2 vs target 1.1) still
155
+ # refuses, because renaming that one WOULD lose an in-progress draft.
156
+ if semver_tuple(version_string) > target_t:
143
157
  _refuse_downgrade(target, version_string, vid, state)
144
158
  # In-review rows (WAITING_FOR_REVIEW / IN_REVIEW) are editable
145
159
  # but not safe to rename — leave them alone and POST a fresh row.
@@ -117,3 +117,36 @@ class StaleEditableSelectionTests(unittest.TestCase):
117
117
 
118
118
  if __name__ == "__main__":
119
119
  unittest.main()
120
+
121
+
122
+ class EqualVersionWrittenDifferently(unittest.TestCase):
123
+ """ASC auto-creates "1.0" with a new app record; Flutter ships "1.0.0".
124
+
125
+ The skip above the guard is a STRING compare while the guard itself is a
126
+ TUPLE compare, so this pair slipped past the skip and then tripped the
127
+ guard — refusing the very FIRST deploy of every newly created app.
128
+ "1.0" and "1.0.0" are the same version: renaming the editable normalises
129
+ the string and downgrades nothing.
130
+ """
131
+
132
+ def test_equal_version_is_patch_renamed_not_refused(self):
133
+ editable = _v("1.0", "PREPARE_FOR_SUBMISSION", vid="ed-10")
134
+ result, stderr, calls = _run_decide_for_version(
135
+ "1.0.0", versions=[editable], ground_truth=None,
136
+ )
137
+ self.assertEqual(result["decision"], "CREATE")
138
+ self.assertEqual(result["versionString"], "1.0.0")
139
+ self.assertEqual(calls[0].kwargs.get("stale_editable_id"), "ed-10")
140
+
141
+ def test_a_genuinely_higher_draft_still_refuses(self):
142
+ """The guard's real purpose must survive: renaming a draft AHEAD of
143
+ the project would lose in-progress work."""
144
+ editable = _v("1.2.0", "PREPARE_FOR_SUBMISSION", vid="ed-120")
145
+ stderr = _assert_decide_exits(
146
+ self, "1.1.0", versions=[editable], ground_truth=None,
147
+ )
148
+ self.assertIn("downgrade", stderr.lower())
149
+
150
+
151
+ if __name__ == "__main__":
152
+ unittest.main()
@@ -1 +1 @@
1
- 1.0.28
1
+ 1.0.29
@@ -1 +1 @@
1
- 1.0.28
1
+ 1.0.29
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gowalk-cicd",
3
- "version": "1.0.28",
3
+ "version": "1.0.29",
4
4
  "description": "Zero-config GitHub Actions delivery for iOS TestFlight and Android Google Play.",
5
5
  "type": "module",
6
6
  "bin": {