Commit graph

55 commits

Author SHA1 Message Date
Johannes Millan
cbeb7c704f
fix(sync): name the discarded title in LWW conflict banner + fix fr dismiss label (#8694) (#8724)
* ci(release): explain App Store 'previous version in review' failures

When a release is tagged before the previous version clears Apple review,
App Store Connect refuses to create the version or attach the build, and
the lane died with a raw spaceship stacktrace ('cannot create a new
version...' / 'pre-release build could not be added'). Both hit v18.13.1
(iOS + macOS) and v18.12.1 (macOS).

Match those two messages and replace the stacktrace with a one-line,
actionable annotation (let the previous version finish review, or pull it
from review, then re-run) -- still a hard failure, since the version did
not go out and a green run would falsely read as 'released'. The existing
'review submission already in progress' race stays a soft success.

Static annotation text only (no e/options interpolation; key-material).

* fix(sync): name discarded title in LWW conflict banner; fix fr dismiss label (#8694)

* fix(sync): surface the last discarded title in LWW conflict banner

Multi-review follow-up to the #8694 banner:
- Show the LAST non-empty discarded title (the user's final offline rename),
  not the first — a stale intermediate rename is misleading. Also simpler
  (drops the first-wins guard).
- Document why the kept==discarded equality guard is correct: when a title
  edit loses to a concurrent other-field remote win, the current state still
  shows the rejected local title, so an annotation would only repeat it —
  silencing it is right, not a hidden divergence.

fr.json G.DISMISS "Rejeter"->"Ignorer" (prior commit) is an intentional,
owner-approved deviation from the en-only rule: it is a mistranslation fix
for the shared banner dismiss label, not a new string. Other locales may
carry the same "Reject"-flavored label — left as a follow-up.
2026-07-03 14:13:43 +02:00
Johannes Millan
429dc4c7e9 ci(release): tolerate concurrent App Store review-submission race
The iOS and macOS release lanes both run on a v* tag push and can race
on App Store Connect's per-app review-submission state. When they
collide, the lane that submits second fails with 'A review submission is
already in progress' -- but only after its binary has already uploaded
and processed successfully, so the build is safe.

Route both lanes through a shared submit_to_app_store helper that treats
that one collision as a soft success and emits a GitHub Actions warning
annotation so the required manual step (add the build to the open
submission) stays visible on a green run. Every other failure, and any
failure before upload (e.g. the version-creation race), still aborts the
lane loudly.
2026-07-02 16:38:43 +02:00
Johannes Millan
2aacba1c98
fix(ci): repair v18.9.0 release pipeline (MAS build, iOS submit, flaky lock test) (#8040)
* fix(build): keep @electron/asar on minimatch v3 for MAS universal build

The `overrides.app-builder-lib.minimatch` pin to v10 cascaded into
@electron/asar (a child of both app-builder-lib and @electron/universal),
which only works with minimatch v3. minimatch v9/v10 ship as ESM with
`__esModule: true` and no `default` export, so @electron/asar's compiled
default import (`minimatch_1.default(...)`) resolved to undefined and threw
`TypeError: (0 , minimatch_1.default) is not a function` during the
universal-app asar merge (makeUniversalApp -> mergeASARs -> shouldUnpackPath),
failing `dist:mac:mas:buildOnly` in the Mac Store release workflow.

Carve @electron/asar back to minimatch 3.1.2 via nested overrides while
app-builder-lib (and @electron/universal) keep minimatch v10 as intended.

* fix(ci): declare export compliance for iOS App Store submission

The iOS release build, upload and processing all succeed, but
`upload_to_app_store` fails at submit-for-review with:

  [!] Export compliance is required to submit
      Example: submission_information: { export_compliance_uses_encryption: false }

Super Productivity only relies on exempt encryption (HTTPS / standard OS
crypto), so declare that the app does not use non-exempt encryption:

- ios/App/App/Info.plist: ITSAppUsesNonExemptEncryption=false (canonical,
  build-time declaration; also covers TestFlight, auto-resolved by ASC).
- fastlane/Fastfile: export_compliance_uses_encryption: false in
  submission_information, so the submit-for-review API call carries the
  declaration regardless of the binary.

* refactor(build): simplify @electron/asar minimatch override to top-level

Follow-up to the minimatch carve-out. Hoisting a top-level
`overrides["@electron/asar"].minimatch` pin produces a byte-identical
package-lock.json to the previous nested form, but is simpler and covers
every @electron/asar consumer (app-builder-lib, @electron/universal,
electron-winstaller) regardless of which parent wins hoisting — rather than
relying on a nested branch under app-builder-lib (whose @electron/universal
sub-branch was dead config given asar dedupes to a single instance).

* test(op-log): de-flake LockService mutex-invariant timeout test

"should preserve mutex invariant after timeout" flaked on the macOS CI
runner (TZ=America/Los_Angeles leg): it asserted that C always times out
waiting for the lock, but on a slow/loaded runner A can release the lock
before C's 50ms timeout fires, so C legitimately acquires it and runs —
after A has finished. The observed `['a-start','a-end','c-start']` actually
satisfies the invariant (C ran after A, never concurrently); only the
brittle "C must time out" assertion failed.

Assert the real no-concurrent-execution invariant instead: C must never
start before A ends. This still catches the original regression (concurrent
C would push 'c-start' before 'a-end') but is independent of runner timing.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-06-05 22:26:42 +02:00
Johannes Millan
dc3523b1c7
ci: auto-submit iOS and macOS App Store builds for review (#7857)
* ci: auto-submit iOS and macOS App Store builds for review

The iOS and Mac App Store workflows previously stopped after uploading the
build to App Store Connect via altool, leaving version creation, "What's New"
and submission as manual steps.

Add fastlane lanes (ios/mac release) that upload the prebuilt .ipa / MAS .pkg
using App Store Connect API key auth (reusing the existing notarization key
secrets), push release notes derived from build/release-notes.md, wait for
processing, submit for review and flag automatic release on approval.

Final version tags submit for review; pre-release tags (RC/beta/alpha) and
manual runs only upload the build. Listing metadata and screenshots remain
curated by hand in App Store Connect.

https://claude.ai/code/session_014c1W1mX7tfvFzpZ6wyWzsJ

* ci: wire iOS and Mac Store workflows to fastlane submit lane

The previous commit added the fastlane lanes but the workflow edits were not
applied. Replace the altool validate/upload steps in the iOS and Mac App Store
workflows with the fastlane submit lane: install fastlane, generate the App
Store "What's New" notes and run `fastlane <platform> release` with App Store
Connect API key auth.

Also extend the Mac workflow's harden-runner egress allowlist with the
rubygems and App Store Connect endpoints used by fastlane.

https://claude.ai/code/session_014c1W1mX7tfvFzpZ6wyWzsJ

* fix(ci): harden Apple App Store auto-submission after review

Address review findings on the iOS/macOS App Store automation:

- Tag gating: submit only when the tag has no "-" (final semver), instead of
  denylisting RC/beta/alpha. GitHub Actions contains() is case-sensitive and
  the repo's RC tags are mostly lowercase (-rc.N), so the old guard would have
  auto-submitted release candidates to production review.
- Fastfile: set skip_metadata so deliver no longer reads back and re-uploads
  curated listing fields; push only "What's New" via an inline release_notes
  hash. Warn against verbose mode (can dump the API key).
- Gemfile.lock: add arm64-darwin/x86_64-darwin platforms so bundle install
  works on the macOS runners.
- Workflows: install deps via pinned ruby/setup-ruby (bundler cache), and
  resolve the artifact path with a strict nullglob check (exactly one match)
  instead of ls | head.
- release-notes script: tighten emphasis regexes so stray * / _ (globs,
  snake_case) survive, anchor footer patterns so legitimate "download" lines
  are not dropped, and drop a duplicate mkdir.
- Docs: document the hyphen-based gate, single-use build numbers, automatic
  release behavior and inline validation.

https://claude.ai/code/session_014c1W1mX7tfvFzpZ6wyWzsJ

* fix(ci): correct deliver metadata + setup-ruby version (second review pass)

Two bugs introduced by the previous review-fix commit, both confirmed against
upstream source:

- Fastfile: skip_metadata: true makes deliver's upload_metadata return early
  (verified in fastlane 2.225.0 deliver/lib/deliver/upload_metadata.rb), so the
  "What's New" notes were never uploaded. Revert to metadata_path pointing at a
  dir that contains only <locale>/release_notes.txt; load_from_filesystem reads
  only that file (next unless File.exist?) with no remote read-back, so other
  listing fields stay untouched. Removed the now-unused inline release_notes
  helper.
- Workflows: ruby/setup-ruby throws when ruby-version is unset and no
  .ruby-version file exists (it does not fall back to system Ruby). Pin
  ruby-version: '3.3' in both workflows.

Docs updated to match the corrected metadata approach.

https://claude.ai/code/session_014c1W1mX7tfvFzpZ6wyWzsJ

* fix(ci): remove invalid wait_for_uploaded_build from deliver lanes

wait_for_uploaded_build is a pilot/upload_to_testflight option, not a deliver one. Passing it to upload_to_app_store makes fastlane raise on the unknown key and fail both iOS and macOS release lanes on every run. deliver already waits for the build to finish processing during submit (select_build -> wait_for_build_processing_to_be_complete), so no replacement is needed.

Also pin the ruby/setup-ruby comment to its resolved version (v1.310.0), and slice the App Store release notes by code point so a multi-byte character is never split at the 4000-char cap.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-06-01 11:42:16 +02:00
Johannes Millan
1a79592aca build: update links to match our new organization 2026-01-05 14:45:06 +01:00
Korb
241722efc5
Create ru/full_description.txt 2025-11-08 18:10:38 +03:00
Korb
5dae0cb0ae
Create ru/short_description.txt 2025-11-08 18:02:15 +03:00
Licaon_Kter
c7e3efa3fa
Add files via upload 2025-10-14 09:11:21 +00:00
Licaon_Kter
665f7c1f78
Add files via upload 2025-10-14 09:08:48 +00:00
Johannes Millan
962b60844f build: move fastlane to android/fastlane
Relocate fastlane metadata from root to android/fastlane where it belongs for Android projects. Update bump-android-version.js script to use the new path.
2025-06-27 10:20:29 +02:00
Johannes Millan
0b3cdb5f9c 13.1.5 2025-06-22 18:01:17 +02:00
Johannes Millan
c76167a8e0 13.1.4 2025-06-22 17:58:24 +02:00
Johannes Millan
f2cce8768c 13.1.3 2025-06-22 17:06:03 +02:00
Johannes Millan
2cfae6ccd4 13.1.2 2025-06-21 21:23:22 +02:00
Johannes Millan
0b1a7dc30f 13.1.1 2025-06-21 20:48:26 +02:00
Johannes Millan
5250d71c30 13.1.0 2025-06-17 20:19:05 +02:00
Johannes Millan
94b77b46d8 13.0.11 2025-06-09 19:26:27 +02:00
Johannes Millan
05d9e2c2de 13.0.10 2025-05-16 19:35:15 +02:00
Johannes Millan
cd3e868517 13.0.9 2025-05-16 09:49:06 +02:00
Johannes Millan
feed4d962f 13.0.8 2025-05-16 09:25:13 +02:00
Johannes Millan
0877a2e8ca 13.0.7 2025-05-15 18:36:43 +02:00
Johannes Millan
0cebb6ea06 13.0.6 2025-05-15 15:42:36 +02:00
Johannes Millan
f3534efabb 13.0.5 2025-05-15 15:06:39 +02:00
Johannes Millan
7024cb6e93 13.0.4 2025-05-14 17:56:58 +02:00
Johannes Millan
9ee783f7b6 13.0.3 2025-05-14 17:56:00 +02:00
Johannes Millan
9882de20fe 13.0.2 2025-05-14 17:56:00 +02:00
Johannes Millan
2ac89bcc3f 13.0.1 2025-05-13 22:22:42 +02:00
Johannes Millan
2baff95863 13.0.0 2025-05-13 12:48:13 +02:00
Johannes Millan
e682cb7f97 12.0.5 2025-04-12 13:50:44 +02:00
Johannes Millan
c1daf01602 12.0.4 2025-04-12 13:18:04 +02:00
Johannes Millan
6923127d8b 12.0.3 2025-04-05 12:28:42 +02:00
Johannes Millan
c0eef42faf 12.0.2 2025-04-03 14:28:56 +02:00
Johannes Millan
0684809242 12.0.1 2025-03-14 13:13:48 +01:00
Johannes Millan
45439f61b4 12.0.0 2025-03-07 16:18:10 +01:00
Johannes Millan
ca4410cc86 remove "for programmers & designers" 2025-02-21 13:54:06 +01:00
Leo Heitmann Ruiz
2b18faaf8e Add icon for F-Droid 2025-02-12 17:02:58 +01:00
Johannes Millan
d0f2fa1f23 11.1.3 2025-02-07 17:09:47 +01:00
Johannes Millan
d71bc0988f 11.1.2 2025-01-10 16:19:52 +01:00
Johannes Millan
ad2e884170 11.1.1 2025-01-05 15:35:37 +01:00
Johannes Millan
afaf4f85b9 11.1.0 2025-01-05 14:56:26 +01:00
Johannes Millan
b8016de2c3 build: fix android version bump script 2024-12-21 15:53:18 +01:00
Johannes Millan
84345cc0f1 11.0.3 2024-12-21 14:45:27 +01:00
Johannes Millan
e70b83480e 11.0.2 2024-12-19 16:02:43 +01:00
Johannes Millan
c4d94a870a 11.0.1 2024-12-19 12:48:58 +01:00
Johannes Millan
6b871bd641 11.0.0 2024-12-16 18:55:08 +01:00
Johannes Millan
da2676a347 10.3.0-rc.3 2024-12-07 14:45:15 +01:00
Johannes Millan
922a64835c 10.3.0-rc.2 2024-11-29 21:51:11 +01:00
Johannes Millan
5d28d7fa28 10.3.0-rc.1 2024-11-29 21:39:52 +01:00
Johannes Millan
8114f19949 build: post merge 2024-11-29 21:10:14 +01:00
Johannes Millan
bbed86913d 10.2.3 2024-11-29 20:49:57 +01:00