proton-bridge/doc/updates.md

3.0 KiB

Update mechanism of Bridge

There are multiple options how to change version of application:

  • Automatic in-app update
  • Manual in-app update
  • Manual install

In-app update ends with restarting bridge into new version. Automatic in-app update is downloading, verifying and installing the new version immediately without user confirmation. For manual in-app update user needs to confirm first. Update is done from special update file published on website.

The manual installation requires user to download, verify and install manually using installer for given OS.

The bridge is installed and executed differently for given OS:

  • Windows and Linux apps are using launcher mechanism:

    • There is system protected installation path which is created on first install. It contains bridge exe and launcher exe. When users starts bridge the launcher is executed first. It will check update path compare version with installed one. The newer version then is then executed.
    • Update mechanism means to replace files in update folder which is located in user space.
  • macOS app does not use launcher

    • No launcher, only one executable
    • In-App update replaces the bridge files in installation path directly
flowchart LR
    subgraph Frontend
    U[User requests<br>version check]
    ManIns((Notify user about<br>manual install<br>is needed))
    R((Notify user<br>about restart))
    ManUp((Notify user about<br>manual update))
    NF((Notify user about<br>force update))

    ManUp -->|Install| InstFront[Install]
    InstFront -->|Ok| R
    InstFront -->|Error| ManIns

    U --> CheckFront[Check online]
    CheckFront -->|Ok| IAFront{Is new version<br>and applicable?}
    CheckFront -->|Error| ManIns

    IAFront -->|No| Latest((Notify user<br>has latest version))
    IAFront -->|Yes| CanInstall{Can update?}
    CanInstall -->|No| ManIns
    CanInstall -->|Yes| NotifOrInstall{Is automatic<br>update enabled?}
    NotifOrInstall -->|Manual| ManUp
    end


    subgraph Backend
    W[Wait for next check]

    W --> Check[Check online]

    Check --> NV{Has new<br>version?}
    Check -->|Error| W
    NV -->|No new version| W
    IA{Is install<br>applicable?}
    NV -->|New version<br>available| IA
    IA -->|Local rollout<br>not enough| W
    IA -->|Yes| AU{Is automatic\nupdate enabled?}

    AU -->|Yes| CanUp{Can update?}
    CanUp -->|No| ManIns

    CanUp -->|Yes| Ins[Install]
    Ins -->|Error| ManIns
    Ins -->|Ok| R

    AU -->|No| ManUp
    ManUp -->|Ignore| W


    F[Force update]
    F --> NF
    end

    ManIns --> Web[Open web page]
    NF --> Web
    ManUp --> Web
    R --> Re[Restart]
    NF --> Q[Quit bridge]
    NotifOrInstall -->|Automatic| W

The non-trivial is to combine the update with setting change:

  • turn off/on automatic in-app updates
  • change from stable to beta or back

TODO fill flow chart details

We are not support downgrade functionality. Only some circumstances can lead to downgrading the app version.

TODO fill flow chart details