Skip to content

fix: detect updates when GitHub repo is private - #11

Merged
cursor[bot] merged 1 commit into
mainfrom
cursor/fix-update-detection-private-repo-f831
Aug 26, 2026
Merged

cursor[bot] merged 1 commit into
mainfrom
cursor/fix-update-detection-private-repo-f831

Conversation

@bobdivx

@bobdivx bobdivx commented Aug 26, 2026

Copy link
Copy Markdown
Owner

Problème

L'interface de mise à jour sur https://web.briseteia.me/settings/updates/ affiche "À jour 4.1.3" alors que Docker Hub contient bobdivx/devforge:4.1.4 et que le fichier backend/versions.json sur GitHub main est à 4.1.4.

La détection échoue car CheckForUpdatesJob tente de récupérer :

https://raw.githubusercontent.com/bobdivx/devforge/main/backend/versions.json

Cette URL retourne 404 (repo privé). Si la réponse HTTP échoue, le job ne fait rien silencieusement, donc new_version_available reste false.

Solution

1. CheckForUpdatesJob (backend/app/Jobs/CheckForUpdatesJob.php)

  • ✅ Conserve la tentative de récupération depuis versions_url en premier
  • ✅ Si échec (non-2xx, exception, JSON vide, version manquante) : fallback vers Docker Hub
  • ✅ API Docker Hub : https://hub.docker.com/v2/repositories/bobdivx/devforge/tags?page_size=100
  • ✅ Filtre les tags semver simples (^[0-9]+\.[0-9]+\.[0-9]+$) comme 4.1.4 (ignore api-4.1.4, sha-*, latest)
  • ✅ Sélectionne la version la plus élevée via version_compare
  • ✅ Construit un tableau versions avec devforge.version et coolify.v4.version, puis réutilise la logique existante
  • ✅ Log un warning quand l'URL GitHub échoue et que le fallback Hub est utilisé
  • ✅ N'avale plus silencieusement toutes les exceptions — les log correctement

2. Default versions_url (backend/config/constants.php)

  • ✅ Changé de l'URL GitHub privée vers le fichier public :
    'https://raw.githubusercontent.com/bobdivx/devforge-store/main/versions.json'
  • ✅ Le repo public devforge-store héberge maintenant versions.json
  • ✅ Conserve env('VERSIONS_URL', ...) pour permettre au NAS de surcharger

3. Documentation (docs/VERSIONING.md)

  • ✅ Note courte : GitHub raw sur le repo privé 404, les checks utilisent le versions.json public (devforge-store) et les tags Docker Hub en fallback

4. Validation

  • ✅ Le composant Livewire Updates.php appelle CheckForUpdatesJob::dispatchSync() — aucune modification nécessaire, il utilisera automatiquement le nouveau code avec fallback
  • ✅ Ajout de tests unitaires pour le fallback Docker Hub :
    • Test de fallback quand GitHub retourne 404
    • Test du filtrage des tags semver (ignore api-*, sha-*, latest)
    • Test d'échec des deux sources (GitHub + Docker Hub)

Tests

it('falls back to Docker Hub when GitHub fails with 404')
it('filters Docker Hub tags correctly to plain semver')
it('logs error when both GitHub and Docker Hub fail')

Notes

  • ✅ Ne rend pas bobdivx/devforge public
  • ✅ Ne revient pas sur l'auto-bump
  • ✅ Le nom d'image respecte constants.coolify.helper_image / env s'il est déjà bobdivx/devforge
  • ✅ Docker Hub devient la source de vérité si le fichier public est obsolète
Open in Web Open in Cursor 

- Add Docker Hub fallback when GitHub versions URL fails (404/500)
- Change default versions_url to public devforge-store repo
- Filter Docker Hub tags to plain semver (ignore api-*, sha-*, latest)
- Add comprehensive logging for version check failures
- Add unit tests for Docker Hub fallback scenarios
- Document private repo workaround in VERSIONING.md

Fixes update detection on https://web.briseteia.me/settings/updates/

Co-authored-by: Mathieu JESER <bobdivx@users.noreply.github.com>
@cursor
cursor Bot merged commit 3fbf7b1 into main Aug 26, 2026
1 check passed
@cursor
cursor Bot deleted the cursor/fix-update-detection-private-repo-f831 branch August 26, 2026 19:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants