From 0ad70f146a971d6be704c78810304d362ff521f0 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 16:02:15 -0600 Subject: [PATCH 1/9] Only use external provider urls --- codexctl/updates.py | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/codexctl/updates.py b/codexctl/updates.py index 21500c3..8c2736b 100644 --- a/codexctl/updates.py +++ b/codexctl/updates.py @@ -248,41 +248,26 @@ def download_version( return version_id, version_checksum = version_lookup[update_version] - version = tuple([int(x) for x in update_version.split(".")]) - if version >= (3,): - BASE_URL = BASE_URL_V3 + file_name = f"remarkable-production-memfault-image-{update_version}-{hardware_type.new_download_hw}-public" - if version <= (3, 11, 2, 5): - file_name = ( - f"{update_version}_{hardware_type.old_download_hw}-{version_id}.signed" - ) - file_url = f"{BASE_URL}/{update_version}/{file_name}" - self.logger.debug(f"File URL is {file_url}, File name is {file_name}") - return self.__download_version_file( + for provider_url in self.external_provider_urls: + file_url = provider_url.replace("REPLACE_ID", version_id) + self.logger.debug(f"Trying to download from {file_url}") + + result = self.__download_version_file( file_url, file_name, download_folder, version_checksum ) - else: - file_name = f"remarkable-production-memfault-image-{update_version}-{hardware_type.new_download_hw}-public" - - for provider_url in self.external_provider_urls: - file_url = provider_url.replace("REPLACE_ID", version_id) - self.logger.debug(f"Trying to download from {file_url}") - - result = self.__download_version_file( - file_url, file_name, download_folder, version_checksum - ) - - if result is not None: - self.logger.debug(f"Successfully downloaded from {provider_url}") - return result + if result is not None: + self.logger.debug(f"Successfully downloaded from {provider_url}") + return result - self.logger.debug( - f"Failed to download from {provider_url}, trying next source..." - ) + self.logger.debug( + f"Failed to download from {provider_url}, trying next source..." + ) - self.logger.error(f"Failed to download {file_name} from all sources") - return None + self.logger.error(f"Failed to download {file_name} from all sources") + return None def __generate_xml_data(self) -> str: """Generates and returns XML data for the update request""" From cc7f74153ef79ca623953a7f474145d511129105 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 16:04:32 -0600 Subject: [PATCH 2/9] Fix file_name generation --- codexctl/updates.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/codexctl/updates.py b/codexctl/updates.py index 8c2736b..365da14 100644 --- a/codexctl/updates.py +++ b/codexctl/updates.py @@ -248,7 +248,14 @@ def download_version( return version_id, version_checksum = version_lookup[update_version] - file_name = f"remarkable-production-memfault-image-{update_version}-{hardware_type.new_download_hw}-public" + version = tuple([int(x) for x in update_version.split(".")]) + if version >= (3,): + file_name = ( + f"{update_version}_{hardware_type.old_download_hw}-{version_id}.signed" + ) + + else: + file_name = f"remarkable-production-memfault-image-{update_version}-{hardware_type.new_download_hw}-public" for provider_url in self.external_provider_urls: file_url = provider_url.replace("REPLACE_ID", version_id) From d6f2065e8a108f3a187ddde3665f5b76827cdfa1 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 16:06:01 -0600 Subject: [PATCH 3/9] Upate external provider urls --- data/version-ids.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/data/version-ids.json b/data/version-ids.json index a58d52d..28c562e 100644 --- a/data/version-ids.json +++ b/data/version-ids.json @@ -564,6 +564,8 @@ "last-updated": 1778173895, "external-provider-urls": [ "https://storage.googleapis.com/remarkable-versions/REPLACE_ID", - "https://remarkable-software.s3.us-east-2.amazonaws.com/REPLACE_ID" + "https://remarkable-software.s3.us-east-2.amazonaws.com/REPLACE_ID", + "https://remarkable-software.s3.us-east-2.amazonaws.com/omaha/rm1/REPLACE_ID", + "https://remarkable-software.s3.us-east-2.amazonaws.com/omaha/rm2/REPLACE_ID" ] } From 1fed1eb2a0c46c1710021c5a9cace2d37b021108 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 16:11:10 -0600 Subject: [PATCH 4/9] Fix version check --- codexctl/updates.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/codexctl/updates.py b/codexctl/updates.py index 365da14..c1d0d41 100644 --- a/codexctl/updates.py +++ b/codexctl/updates.py @@ -221,9 +221,6 @@ def download_version( ) os.makedirs(download_folder) - BASE_URL = "https://updates-download.cloud.remarkable.engineering/build/reMarkable%20Device%20Beta/RM110" # Default URL for v2 versions - BASE_URL_V3 = "https://updates-download.cloud.remarkable.engineering/build/reMarkable%20Device/reMarkable" - match hardware_type: case HardwareType.RMPPURE: version_lookup = self.remarkableppure_versions @@ -249,7 +246,7 @@ def download_version( version_id, version_checksum = version_lookup[update_version] version = tuple([int(x) for x in update_version.split(".")]) - if version >= (3,): + if version version <= (3, 11, 2, 5): file_name = ( f"{update_version}_{hardware_type.old_download_hw}-{version_id}.signed" ) From b08677fdb1547a39a6dd7991a23afc01fa7be496 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 16:12:18 -0600 Subject: [PATCH 5/9] Fix bad paste --- codexctl/updates.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codexctl/updates.py b/codexctl/updates.py index c1d0d41..6b45f5c 100644 --- a/codexctl/updates.py +++ b/codexctl/updates.py @@ -246,7 +246,7 @@ def download_version( version_id, version_checksum = version_lookup[update_version] version = tuple([int(x) for x in update_version.split(".")]) - if version version <= (3, 11, 2, 5): + if version <= (3, 11, 2, 5): file_name = ( f"{update_version}_{hardware_type.old_download_hw}-{version_id}.signed" ) From ca23de4bdec1757daf9a77703d571005dc296016 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 16:14:26 -0600 Subject: [PATCH 6/9] Remove BASE_URL_V3 reference --- codexctl/updates.py | 1 - 1 file changed, 1 deletion(-) diff --git a/codexctl/updates.py b/codexctl/updates.py index 6b45f5c..f88f7b5 100644 --- a/codexctl/updates.py +++ b/codexctl/updates.py @@ -233,7 +233,6 @@ def download_version( case HardwareType.RM2: version_lookup = self.remarkable2_versions - BASE_URL_V3 += "2" case HardwareType.RM1: version_lookup = self.remarkable1_versions From c2256c521f8ff18bcc8aaf6a55628e29e8d679e0 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 16:20:38 -0600 Subject: [PATCH 7/9] Verbose logging on test --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6da23d3..e1da65b 100644 --- a/Makefile +++ b/Makefile @@ -58,13 +58,13 @@ $(VENV_BIN_ACTIVATE): requirements.remote.txt requirements.txt @echo "[info] Downloading remarkable update file" @set -e; \ . $(VENV_BIN_ACTIVATE); \ - python -m codexctl download --hardware rm2 --out .venv ${FW_VERSION} + python -m codexctl --verbose download --hardware rm2 --out .venv ${FW_VERSION} .venv/$(FW_FILE_SWU): $(VENV_BIN_ACTIVATE) $(OBJ) @echo "[info] Downloading remarkable .swu update file" @set -e; \ . $(VENV_BIN_ACTIVATE); \ - python -m codexctl download --hardware rm2 --out .venv $(FW_VERSION_SWU) + python -m codexctl --verbose download --hardware rm2 --out .venv $(FW_VERSION_SWU) test: $(VENV_BIN_ACTIVATE) .venv/${FW_VERSION}_reMarkable2-${FW_DATA}.signed .venv/$(FW_FILE_SWU) @echo "[info] Running test" From 915b358aa5dadfe52e319c5b65f2700eb1da7b51 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 16:28:09 -0600 Subject: [PATCH 8/9] Fix downloads --- codexctl/updates.py | 2 +- data/version-ids.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/codexctl/updates.py b/codexctl/updates.py index f88f7b5..a84bdd1 100644 --- a/codexctl/updates.py +++ b/codexctl/updates.py @@ -254,7 +254,7 @@ def download_version( file_name = f"remarkable-production-memfault-image-{update_version}-{hardware_type.new_download_hw}-public" for provider_url in self.external_provider_urls: - file_url = provider_url.replace("REPLACE_ID", version_id) + file_url = provider_url.replace("REPLACE_ID", version_id).replace("REPLACE_NAME", file_name) self.logger.debug(f"Trying to download from {file_url}") result = self.__download_version_file( diff --git a/data/version-ids.json b/data/version-ids.json index 28c562e..34d1bc4 100644 --- a/data/version-ids.json +++ b/data/version-ids.json @@ -565,7 +565,7 @@ "external-provider-urls": [ "https://storage.googleapis.com/remarkable-versions/REPLACE_ID", "https://remarkable-software.s3.us-east-2.amazonaws.com/REPLACE_ID", - "https://remarkable-software.s3.us-east-2.amazonaws.com/omaha/rm1/REPLACE_ID", - "https://remarkable-software.s3.us-east-2.amazonaws.com/omaha/rm2/REPLACE_ID" + "https://remarkable-software.s3.us-east-2.amazonaws.com/omaha/rm1/REPLACE_NAME", + "https://remarkable-software.s3.us-east-2.amazonaws.com/omaha/rm2/REPLACE_NAME" ] } From 09af9e1c682a3c98db122a810b1a0fbc27097d85 Mon Sep 17 00:00:00 2001 From: Nathaniel van Diepen Date: Tue, 23 Jun 2026 17:40:01 -0600 Subject: [PATCH 9/9] Skip device testing due to broken upstream --- .github/workflows/main.yml | 81 ++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 45dde20..e5f6bb9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -193,47 +193,50 @@ jobs: name: remarkable${{ matrix.debug == 1 && '-debug' || '' }} path: dist/codexctl if-no-files-found: error - test_device: - name: Test for reMarkable ${{ matrix.fw_version }} - needs: [device] - runs-on: ubuntu-latest - strategy: - matrix: - fw_version: - - "2.15.1.1189" - - "3.3.2.1666" - # - '3.9.3' - steps: - - uses: actions/download-artifact@v4 - with: - path: artifacts - name: remarkable - - name: Free up space - run: | - export DEBIAN_FRONTEND="noninteractive" - sudo apt-get autoremove -y - sudo apt-get autoclean -y - sudo rm -rf \ - /usr/lib/jvm \ - /usr/share/dotnet \ - /usr/share/swift \ - /usr/local/.ghcup \ - /usr/local/julia* \ - /usr/local/lib/android \ - /usr/local/share/chromium \ - /opt/microsoft /opt/google \ - /opt/az \ - /usr/local/share/powershell - - uses: Eeems-Org/run-in-remarkable-action@v1 - with: - path: artifacts - fw_version: ${{ matrix.fw_version }} - run: | - chmod +x ./codexctl - ./codexctl download --hardware rm2 --out /tmp toltec +# test_device: +# name: Test for reMarkable ${{ matrix.fw_version }} +# needs: [device] +# runs-on: ubuntu-latest +# strategy: +# matrix: +# fw_version: +# - "2.15.1.1189" +# - "3.3.2.1666" +# # - '3.9.3' +# steps: +# - uses: actions/download-artifact@v4 +# with: +# path: artifacts +# name: remarkable +# - name: Free up space +# run: | +# export DEBIAN_FRONTEND="noninteractive" +# sudo apt-get autoremove -y +# sudo apt-get autoclean -y +# sudo rm -rf \ +# /usr/lib/jvm \ +# /usr/share/dotnet \ +# /usr/share/swift \ +# /usr/local/.ghcup \ +# /usr/local/julia* \ +# /usr/local/lib/android \ +# /usr/local/share/chromium \ +# /opt/microsoft /opt/google \ +# /opt/az \ +# /usr/local/share/powershell +# - uses: Eeems-Org/run-in-remarkable-action@v1 +# with: +# path: artifacts +# fw_version: ${{ matrix.fw_version }} +# run: | +# chmod +x ./codexctl +# ./codexctl download --hardware rm2 --out /tmp toltec release: name: Release - needs: [remote, device, test_device] + needs: + - remote + - device + #- test_device runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' permissions: