DâaprĂšs le modĂšle de bounty
LâintĂ©rĂȘt de ÄCli est dâĂȘtre un utilitaire versatile facile Ă utiliser et âclĂ© en mainâ dans lequel on peut ajouter des nouvelles fonctionnalitĂ©s ou corriger des bugs rapidement. Cela implique de pouvoir publier rapidement des mises-Ă -jour sans que lâutilisateur ait Ă recompiler le programme. Voici les fonctionnalitĂ©s :
dĂ©clencher automatiquement la compilation de Äcli suite Ă une opĂ©ration simple comme un tag git par exemple avec la CI GitLab
publier automatiquement le binaire compilé sur une plateforme de confiance comme par exemple le registry GitLab
(optionnel) ajouter une commande gcli update
pour que gcli se mette Ă jour automatiquement (et optionnellement gcli update --version 3.1.4
)
Commentaire : Je ne souhaite pas forcer lâutilisation de la CI GitLab pour laisser libre cours aux autres solutions qui peuvent exister (webhook et scripts exĂ©cutĂ©s sur une autre machine quâun gitlab runnerâŠ). Il faut quand mĂȘme que la solution soit reproductible et raisonnablement sĂ©curisĂ©e. Ne pas hĂ©siter Ă demander plus dâinformations et nĂ©gocier le montant avant de se lancer
2 Likes
Moul
11 July 2023 17:18
2
Lâobjectif est de publier, lorsquâun tag protĂ©gĂ© est publiĂ©, une release sur Releases · clients / Rust / Äcli-v2s · GitLab contenant lâexĂ©cutable construit dans le job prĂ©cĂ©dent ?
Pour Sakia, on a utilisé le mot-clefs artifacts/path
:
Générer le fichier dans un dossier du projet (ici ci/appimage
).
Indiquer le chemin du fichier dans le projet Ă la CI avec artifacts/path
.
release_appimage:
extends:
- .changes
stage: release
when: manual
script:
- pip install -r requirements.txt
- pip install -r requirements_deploy.txt
- make build
- make appimage
artifacts:
paths:
- ci/appimage/Sakia_x86_64.AppImage
Le fichier devrait apparaĂźtre dans ReleaseâŠ
Je connaissais pas cette instruction âartifactsâ, je vais essayer.
vit
21 January 2024 09:38
4
Câest une liste donc tu peux mettre plusieurs fichiers si tu le souhaites.
artifacts:
paths:
- ci/appimage/Sakia_x86_64.AppImage
- build/target/my_executable.exe
1 Like
En fait jâutilisais dĂ©jĂ ce mot clĂ© artifacts dans ma tentative de CI pour Äcli : .gitlab-ci.yml · master · clients / Rust / Äcli-v2s · GitLab
Mais ce qui me manque câest lâĂ©tape pour faire une page de release avec le lien vers le binaire. Jâai lâimpression que ça ne fait pas partie du vocabulaire de gitlabci et quâil faut utiliser un autre outil pour soumettre une page comme le fait le cargo xtask release-runtime
sur Duniter. Mais jâai pas envie de tout redĂ©velopper, je veux juste une solution simple, et idĂ©alement quelquâun qui sâen occupe parce que ce nâest pas mon dada
Il y a toujours ma tentative WIP try to release with CI (5ba8cbc7) · Commits · clients / Rust / Äcli-v2s · GitLab mais ça nâa pas abouti et je nâai pas envie de remettre le nez dedans.
On peut toujours tĂ©lĂ©charger les artefacts directement https://git.duniter.org/clients/rust/gcli-v2s/-/jobs/125527/artifacts/raw/target/release/gcli?inline=false mais câest pas pratique
poka
31 January 2024 13:09
6
On est en 2024 :
#!/bin/bash
# Vérifiez si le token d'accÚs privé GitLab est défini
if [ -z "$GITLAB_PRIVATE_TOKEN" ]; then
echo "Token d'accĂšs privĂ© GitLab non dĂ©fini. ArrĂȘt du script."
exit 1
fi
# Variables
PROJECT_ID="604"
RELEASE_NAME="Release $CI_COMMIT_TAG"
RELEASE_DESCRIPTION="Description de la release $CI_COMMIT_TAG"
ARTIFACT_PATH="target/release/gcli"
GITLAB_API_URL="https://git.duniter.org/api/v4"
# Création de la release
echo "Création de la release $RELEASE_NAME..."
curl --header "PRIVATE-TOKEN: $GITLAB_PRIVATE_TOKEN" \
--data "name=$RELEASE_NAME&tag_name=$CI_COMMIT_TAG&description=$RELEASE_DESCRIPTION" \
"$GITLAB_API_URL/projects/$PROJECT_ID/releases"
# Construction de l'URL de l'artéfact
ARTIFACT_URL="$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_TAG/raw/$ARTIFACT_PATH?job=build"
# Ajout de l'artéfact à la release
echo "Ajout de l'artéfact à la release..."
curl --header "PRIVATE-TOKEN: $GITLAB_PRIVATE_TOKEN" \
--data-urlencode "url=$ARTIFACT_URL" \
--data-urlencode "name=$(basename $ARTIFACT_PATH)" \
"$GITLAB_API_URL/projects/$PROJECT_ID/releases/$CI_COMMIT_TAG/assets/links"
echo "Script terminé."
image: "rust:latest"
stages:
- build
- release
build:
stage: build
script:
- cargo build --release
artifacts:
paths:
- target/release/gcli
cache:
key:
files:
- Cargo.lock
paths:
- target/release
only:
- tags
release:
stage: release
image: rust
script:
- chmod +x .ci/release_script.sh
- .ci/release_script.sh
only:
- tags
dependencies:
- build
Variables dâEnvironnement : GITLAB_PRIVATE_TOKEN
doit ĂȘtre dĂ©fini dans les variables CI/CD de votre projet GitLab. Ce token doit avoir les permissions nĂ©cessaires.
Placement du Script : Le script release_script.sh
doit ĂȘtre placĂ© dans le rĂ©pertoire .ci/
de votre dĂ©pĂŽt Git et doit ĂȘtre rendu exĂ©cutable.
1 Like
Oui, bah il faut utilise GPT pour générer le contenu de release-script.sh
maintenant. Mais ça mâaurait arrangĂ© que Gitlab intĂšgre ça Ă son format .yml
pour quâon nâait pas Ă Ă©crire un script avec curl par exemple. Ou release-cli
comme jâai essayĂ© de le faire ici .
poka
31 January 2024 13:13
8
Je suis bien dâaccords câest bizarre de devoir passer par lâAPI gitlab.
Le contenu du script release-script.sh
est présent dans mon message.
poka
31 January 2024 13:25
9
Du coup jâai droit aux 200DU/Ä1 ?
Oui, si tu fais la MR et que ça marche.
poka
31 January 2024 16:03
11
poka:
only:
- tags
VoilĂ : Releases · clients / Rust / Äcli-v2s · GitLab
Jâai juste ajoutĂ© une condition au dĂ©but pour bien verrouiller mais câest tout:
if [ -z "$CI_COMMIT_TAG" ]; then
echo "This script should only be run on a tag."
exit 1
fi
3 Likes
Et voilĂ , câest un bounty gagnĂ© par poka ! Releases · clients / Rust / Äcli-v2s · GitLab
la release est awesome, mais il va falloir attendre le rĂ©seau de test pour la tester ! elle sâappuie sur la derniĂšre version du runtime (mais pas encore sur la derniĂšre version de duniter-squid, jâattends quâon finisse !4 pour ça)
@Tchois , est-ce que tu voudrais bien gĂ©rer le paiement des bounty en Ä1 ? (cf le tag bounty )
2 Likes
poka
31 January 2024 16:40
13
Ah oui et je suis lâauteur de la release car câest moi qui ai fait le jeton dâaccĂšs , il faudrait le gĂ©nĂ©rer avec un autre compte plus lĂ©gitime, le tiens ou je ne sais pas si il y a un user gitlab ?
Si apparemment il y a 4, dont 3 nâont jamais Ă©tĂ© utilisĂ©s. Je pense quâil faudrait crĂ©er un user juste pour ça, et lui donner les droits nĂ©cessaires sur le dĂ©pĂŽt. Ca Ă©viterait dâutiliser un token admin.
Tchois
1 February 2024 09:01
14
Bon jâai pas trop compris ce que câest quâun bounty, moi jâĂ©tais restĂ© Ă la barre chocolatĂ© (est-ce que jâai la bonne rĂ©fĂ©rence? ).
Et câest pas la derniĂšre discussion sur les drapeaux qui mâa aidĂ© .
Si tu veux on en parle ce week-end, on trouvera bien 5mn, pour que jâen sache plus.
poka
1 February 2024 09:44
15
un bounty câest une prime.
1 Like
vit
1 February 2024 10:24
16
Si je trouve une solution plus simple, je rĂ©cupĂšre le bounty ou pas (jâadore les bounty, mĂȘme si la noix de coco se coince entre les dentsâŠ).
Jâai fait une recherche sur lâhistorique du .gitlab-ci.yml
de Sakia et Tikka. Et jâai utilisĂ© aussi la technique de @Poka pour publier une version compilĂ©e de Tikka. Mais les commandes API Gitlab servaient Ă transfĂ©rer lâartefact que je stockais dans la registry de GitLab. Un systĂšme compliquĂ© que jâai abandonnĂ©.
De mĂ©moire, une Release est crĂ©Ă© automatiquement lorsquâon crĂ©e un Jalon (Milestone). En cherchant un peu dans la doc, jâai dĂ©couvert le mot clef release
. Jâai lâimpression quâon peut cumuler les mots clefs artifacts
et release
dans la CI.
Tant que le sujet est chaud, @poka tu peux peut-ĂȘtre ne plus faire appel Ă lâAPI avec ces exemples :
Hope it helps !
3 Likes
poka
1 February 2024 10:36
17
hey non jâai mĂȘme rajouter une MR avec une commande gcli pour publish automatiquement le tag avec la bonne version: Add publish command (!19) · Merge requests · clients / Rust / Äcli-v2s · GitLab
Et si tu espÚres avoir la moindre chance de voir le bout de ce bounty, il faut que tu fasses la MR et que ça marche.
Mais jây crois pas parceque ce bounty, il est Ă moi, jâen ai chier pour lâobtenir, Ă la sueur de mon gpt.
1 Like
poka
1 February 2024 11:00
18
Et voilĂ jâai ajoutĂ© un commit qui fait exactement ce que tu proposes : add vit proposition to publish artefact without gitlab API (de184b29) · Commits · clients / Rust / Äcli-v2s · GitLab
Jâai Ă©tĂ© plus rapide que toi, il fallait le faire toi mĂȘme si tu voulais me voler mon bounty. Câest con hein ? JâespĂšre que ça marche pas comme ça jâaurais pas fait mon script pour rien.
1 Like
poka
1 February 2024 21:13
19
Bon et bien je dois lâavouer, @vit avait raison, je mâavoue vaincu
La derniĂšre version de la CI dans ma derniĂšre MR permet de parfaitement publiĂ© la release avec son artefact: Releases · clients / Rust / Äcli-v2s · GitLab
Je me suis Ă©galement permis dâajouter les derniers commits depuis la derniĂšre release en desciption.
Le tout, sans utilisation de lâapi gitlab, et sans mĂȘme besoin de script bash externe.
Voici ce que ça donne en dĂ©finitif dans le .gitlab-ci.yml: .gitlab-ci.yml · add-publish-command · clients / Rust / Äcli-v2s · GitLab
De ce fait et par ma grande bontĂ©, jâaccepte exceptionnellement de partager mon avec @vit ici prĂ©sent, en gage de reconnaissance pour sa remarque ayant dĂ©jouĂ© le cours de lâhistoire toute entiĂšre.
4 Likes
vit
2 February 2024 09:55
20
Je te laisse le bounty la gloire et les filles. Tu as fait tout le boulot plusieurs fois ! Tu as lâhumilitĂ© des sages qui se remettent en question, tu mĂ©rites largement plus que moi dâavoir de la noix de coco coincĂ©e entre les dents !
FĂ©licitations, et je suis heureux dâavoir modestement donnĂ© une piste dâamĂ©lioration.
Tout seul on va plus vite, mais ensemble on est plus forts !
5 Likes