-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
📱🚀 GitHub : Preview à l'aide d'ExpoGo lors d'une PR (Sans EAS) #260
base: main
Are you sure you want to change the base?
Conversation
utilise ca pour faire les commits: https://github.com/stefanzweifel/git-auto-commit-action |
Surtout pas justement ! Le but est de faire un commit dans un repo à part ! Pas dans le même ! Le but de ton action est de faire des commit sur le même repo pour par exemple y appliquer des modifications de style ! |
Ah ouais j'avais pas vu my bad |
Je pense qu'il n'y à pas besoins de tout ça car Expo donne une lib action expo/expo-github-action. Ici on parle de EAS mais je pense que l'on peut l'utiliser en mode local comme je l'ai fait en V6. |
Je pense même qu'il y a moyen de faire tourner expo go de manier persistant ! |
Mais le mieux à mon avis est :
Puis une fois la PR effectué alors fermer le workflow avec une valeur positive |
Comme on est pas sur des réactions d'EAS dans les cas de dépassement des limites, c'est une solution viable ! |
Les GitHub Actions ont des limites de fonctionnement + c'est payant au dessus de 2000h !
Juste pourquoi faire des builds ? Si c'est des builds avec Expo, c'est exactement ce qui est fait, juste l'hébergement n'est pas fourni par Expo mais dans EAS qui lui est payant. Si c'est des builds Xcode, je vois pas l'interêt dans ce cas ! C'est lourd, long, chiant à installer... Bref tout les points positifs d'ExpoGo en fumée ! |
Les repos publics ont a nombre infini de minutes : https://github.com/orgs/community/discussions/70492 |
J'ai pas bien compris sur le serveur express, vous allez le self host ? |
Pas totalement ! Les AppEntry seront sur GitHub dans un répondu dédié, ce qui doit être self host c'est le serveur "proxy" qui lui permet de fournir les informations requises concernant les packages. |
vous allez le host comment |
Des nouvelles ? |
Sinon ya toujours mon action qui se lance indéfiniment mdrrr |
Hey par contre ça veut dire que la preview doit se lancer à chaque nouveau commit de la PR pour actualiser les dernières modifications ? Je sais pas si c'est déjà le cas dans ton code... Ducoup les calculs sont faussés je pense (sauf si j'ai pas compris qqch). MAIS
On dispose effectivement d'aucunes limitation, donc la preview peut s'actualiser à chaque commit ! Je sais pas trop où la PR en est, en tout cas c'est une très bonne idée et si tu arrives à la faire fonctionner ça aiderait tout le monde ! |
Comme les minutes sont infinies, pas besoin de serveur, ont peut lancer ndefiniment npx expo start en gh action |
GitHub Actions limite chaque job à un maximum de 6 heures d'exécution. @Louis-htmlcss |
il se relance lui meme |
Ouais mais je trouve ça plus propre l'approche de Rémy, de séparer la preview, ça permet d'avoir une url stable et d'accéder à l'app même si le workflow tourne plus (fin de la PR ou jsp quoi)... |
ouais mais le probleme c'est qu'ils doivent utiliser un autre serveur |
ouais mais si j'ai bien compris ça tourne pas sur GH Actions, donc c'est mieux prcq les Actions c'est pas trop fait pour être utilisé comme un serveur, ce sont des "jobs" comme ils les appellent. |
Mais on ne pourrait pas pousser le preview PR sur Snack ? Au moins on est tranquille. Pas de serveur, pas de build à gérer... En gros c'est la tranquillité, je peux m'en charger s'il faut. |
Ou alors regarder à ça : |
Je connais pas je vais regarder
Justement pas de EAS c'est le but de la PR je crois. |
Pas mal snack mais bon le faite d'update le truc à chaque commit faut voir comment on peut se débrouiller... Aussi jsp si y'a un rate limit donc à creuser mais dans l'idée c'est un truc comme ça qu'il faut... Après je me dis queles requêtes vont peut être pas paser avec les cors tt ça... |
On peut pas vu les limitations de eas |
Snack est un service d'EAS |
Oui mais ya pas besoin de connexion |
Oui mais ça veut dire qu'on a pas le contrôle sur ce serveur donc on peut nous refiler une version différente |
https://dev.to/rgomezp/how-to-set-up-an-eas-local-build-on-github-actions-1l0i |
Pas vraiment car ça build en apk, et nous on veut une preview |
ok oui, c'est vrai. Rappelez-moi, c'est quoi les limitations de EAS ? |
comment, ca veut dire tu vas devoir tout reverse |
30 build par mois, mais je crois que c'est en fichier apk et pas preview |
voici une version fonctionnele de mon idée: https://github.com/Louis-htmlcss/test-du-workflows |
@Kgeek33 stv tester |
ok je teste et je te dis |
avec @Kgeek33 on est entrain de faire un workflow qui se charge de tout ca sans besoin de repliquer le fonctionnement de expo ou autre |
je pense qu'on peut closed cette pr, car en plus d'un nouveau worflow, on refait complètement le dossier .github |
📱🚀 Preview à l'aide d'ExpoGo lors d'une PR
Warning
Cette pull request ne peut être merge en l'état ! Elle requiert la création de dépôt, de la création de token, et plus encore...
💪 Motivation
En résumé : J'ai la flemme de cloner le repo pour chaque modification
En plus long : Comme j'ai pu voir précédemment, il y a pas mal de réflexion concernant l'intégration d'EAS updates qui à conduit naturellement sur un non catégorique pour des raisons de budget. Pourtant cela aurais bien plusieurs avantages comme :
C'est pour cela qu'avec beaucoup d'acharnement et de lecture de documentation, il y a belle et bien une commande qui rend la magie d'EAS update... Elle s'intitule
expo export
! Cette commande est en fait utilisé dans le fonctionnement d'EAS et permet d'exporter les fichiers AppEntry.js utiliser par ExpoGo.📝 Requis
Pour fonctionner, cette action requiert :
⚙️ Fonctionnement du serveur
Note
Le serveur est disponible sur Github
Le serveur utilise Express et voici son fonctionnement :
Imaginons que vous ayez un QR Code Expo, dont le contenu est
exp://example.com/0?platform=ios
, lorsque vous scannez votre QR code à l'aide d'ExpoGo, celui-ci va faire une requête à l'url qui suitexp://
en remplacent cela parhttp://
.Le serveur reçois donc la requête
http://example.com/0?platform=ios
, où0
correspond à l'identifiant de la pull request.Il va donc regarder sur le repo ou son stocker les previews, regarde si il trouve le fichier
app.json
, puis en fonction de la réponse :app.json
De cette réponse ExpoGo demandera au serveur de renvoyer le fichier
AppEntry.js
dont l'url se trouve dans la réponse précédente, mais cette fois ci le serveur ne se chargera que d'ajouter le headerContent-Type : application/javascript
Et les assets ?
Lors de la requête de configuration, votre adresse IP sera enregistrée afin de pouvoir enregistrer le dernière ID de pull request auquel vous avez voulu accédez. ExpoGo ne demande que l'host des assets et l'implémentation d'ExpoGo ne permet pas de tricher en ajoutant des paramètre d'url.
ExpoGo ferra des requêtes à notre serveur puis redirigera vers une url
https://raw.githubusercontent.com
.🚀 Fonctionnement de l'action
Cette action s'exécute lors de l'ouverture et de la synchronisation des pull request. Il utilise les runners
ubuntu-latest
, mais peuvent être replacé par des runners self-hosted.Étapes par étapes
Checkout code
Cette action récupère le code avec les commits de la pull request
Setup Node.js
Cela initie NodeJS à la version 18
Install dependencies
Cela permet d'installer les dépendances.
Commandes :
Create dist folder
Crée les dossiers de rendu
Commandes :
Export AppEntry
Utilise
expo export
pour exporter les fichiers pour iOS et Android. Les actions s'éxécute parallèlement afin de gagner du temps.Commandes :
Important
npx
est obligatoire dans ce cas, expo ne pouvant être lier sur des machines qui ne nous appartiennent pas.Move iOS AppEntry
Déplace le fichier
AppEntry.js
vers le dossier dist. Cela le renomme également enAppEntry_ios.js
Commandes :
Move Android AppEntry
Déplace le fichier
AppEntry.js
vers le dossier dist. Cela le renomme également enAppEntry_android.js
Commandes :
Move assets
Déplace le dossier d'assets dans
dist
.Commandes :
Copy app.json
Copie le fichier app.json dans dist
Commandes :
Cleanup
Supprime les dossiers
build_ios
etbuild_android
Commandes :
Cloning the PR repository
Clone le repo contenant les pulls requests
Commandes :
git clone "https://github.com/-- !!! REPO USER / REPO NAME !!! --.git" pr_repo
Transfering the build to PR repository
Crée le dossier de la PR, dans
pr_repo
, y déplace le contenu dedist
, l'ajoute à git, le commit, et le push.Commandes :
Commenting on PR
Ajouter un message à la PR, contenant les QR code.
Example ?
🎉 La preview est prête 🎉
Pour exécuter cette preview sur ton iPhone, tu auras besoin de l'application ExpoGo.
Une fois installée, scanne ce QR code à l'aide de l'appareil photo ou entre cette url dans Expo :
exp://expo.godetremy.com/15?platform=ios
Pour exécuter cette preview sur ton téléphone, tu auras besoin de l'application ExpoGo.
Télécharge-la depuis le Google PlayStore, puis une fois installée, scanne ce QR code à l'aide du scanneur de QR code
de ton mobile ou entre cette url dans Expo :
exp://expo.godetremy.com/15?platform=android
❗️ Avant de merge
Avant de merge, il faut :
repo
)-- !!! EXPO SERVER !!! --
avec l'url du serveur Expo-- !!! REPO USER / REPO NAME !!! --
avec l'emplacement du repo des pull request-- !!! COMMIT MAIL !!! --
avec un email valide-- !!! COMMIT NAME !!! --
avec un nom valide🤔 FAQ
Quand le code du serveur sera public ?
C'est fait ! Il se trouve sur Github
Mais les GitHub Actions c'est payant ? 🤓☝️
OUI, mais GitHub en lui même est payant déjà ! C'est pas pour autant qu'on héberge notre code sur Framagit (avec tout le respect pour ce projet) !
A savoir qu'un temps moyen pour toute cette actions et d'environ 2min30 (arrondi au supérieur), et que GitHub Actions en plan gratuit autorise 2000min par mois. Donc pour t'aider on va faire du calcul :
Donc en un mois tu dois faire 800 PR, ce qui est colossal !
Tu es toujours pas convaincu?
Donc 25 PR PAR JOUR
De plus, comme dis précédemment tu peut héberger un runners self-hosted sur Github donc c'est chill.
Mais quand le repo sera pleins ?
Il manque beaucoup de cas a prendre en charge, mais le reverse d'Expo était l'étape clé de celle-ci. Pour l'instant nous devrons le faire à la mains ou bien ajouter une action pour supprimer les dossiers lorsque les PR sont fermé.
Sur ce, merci d'avoir lu tout ça. (Je sais que ta pas tout lu petit cachotier 🥸)