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 ?
Je connaissais pas cette instruction âartifactsâ, je vais essayer.
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
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
#!/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.
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.
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.
Du coup jâai droit aux 200DU/Ä1 ?
Oui, si tu fais la MR et que ça marche.
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
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)
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.
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.
un bounty câest une prime.
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 !
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.
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.
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.
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 !
Ah non jâinsiste mon chĂšre, si tu ne prends pas ta part, alors je laisse la mienne.
Je vois bien que tu essaies de mâintoxiquer Ă la noix de coco, mais je ne rentrerai pas dans ton petit jeu. Tu mĂ©rites amplement cette part de bounty.