Introduction
Dans ce guide, vous allez découvrir les composants de base qui sont nécessaires pour créer et utiliser une action composite empaquetée. Afin de nous concentrer sur les composants nécessaires à l’empaquetage de l’action, nous avons réduit la fonctionnalité du code de l’action à son strict minimum. L’action affiche « Hello World », puis « Goodbye ». Si vous fournissez un nom personnalisé, elle affichera « Hello [who-to-greet] », puis « Goodbye ». L’action mappe également un nombre aléatoire à la variable de sortie et exécute un script nommé .
Une fois que vous aurez terminé ce projet, vous saurez comment créer votre propre action composite et la tester dans un workflow.
Avertissement
Lors de la création de flux de travail et d’actions, vous devez toujours déterminer si votre code pourrait exécuter des entrées non fiables provenant de personnes malveillantes potentielles. Certains contextes doivent être traités comme des entrées non fiables, car un attaquant peut insérer son propre contenu malveillant. Pour plus d’informations, consultez « Informations de référence sur l’utilisation sécurisée ».
Actions composites et flux de travail réutilisables
Les actions composites vous permettent de collecter une série d’étapes de tâche de flux de travail en une seule action que vous pouvez ensuite exécuter en tant qu’étape de tâche unique dans plusieurs flux de travail. Les flux de travail réutilisables offrent un autre moyen d’éviter la duplication, en vous permettant d’exécuter un flux de travail complet à partir d’autres flux de travail. Pour plus d’informations, consultez « AUTOTITLE ».
Prérequis
Remarque
Cet exemple explique comment créer une action composite dans un référentiel distinct. Toutefois, il est possible de créer une action composite dans le même référentiel. Pour plus d’informations, consultez « AUTOTITLE ».
Avant de commencer, vous allez créer un dépôt sur GitHub.
-
Créez un dépôt public dans GitHub. Vous pouvez choisir n’importe quel nom de dépôt ou utiliser l’exemple suivant. Vous pouvez ajouter ces fichiers après que votre projet ait été poussé sur GitHub. Pour plus d’informations, consultez « AUTOTITLE ».
-
Clonez votre dépôt sur votre ordinateur. Pour plus d’informations, consultez « AUTOTITLE ».
-
À partir de votre terminal, remplacez les répertoires par votre nouveau dépôt.
Shell cd hello-world-composite-action
cd hello-world-composite-action -
Dans le dépôt, créez un fichier nommé [nom du fichier] avec un exemple de code :
Shell echo "echo Goodbye" > goodbye.sh
echo "echo Goodbye" > goodbye.sh -
À partir de votre terminal, rendez exécutable.
chmod +x goodbye.sh
chmod +x goodbye.sh
git add --chmod=+x -- goodbye.sh
git add --chmod=+x -- goodbye.sh
-
À partir de votre terminal, validez votre fichier.
Shell git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh
git commit -m "Add goodbye script"
git push
git commit -m "Add goodbye script" git push
git commit -m "Add goodbye script"
git push
Création d’un fichier de métadonnées d’action
-
Dans le dépôt , créez un fichier nommé et ajoutez l’exemple de code suivant. Pour plus d’informations sur cette syntaxe, consultez « AUTOTITLE ».
YAML name: 'Hello World' description: 'Greet someone' inputs: who-to-greet: # id of input description: 'Who to greet' required: true default: 'World' outputs: random-number: description: "Random number" value: ${{ steps.random-number-generator.outputs.random-number }} runs: using: "composite" steps: - name: Set Greeting run: echo "Hello $INPUT_WHO_TO_GREET." shell: bash env: INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }} - name: Random Number Generator id: random-number-generator run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT shell: bash - name: Set GitHub Path run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH shell: bash env: GITHUB_ACTION_PATH: ${{ github.action_path }} - name: Run goodbye.sh run: goodbye.sh shell: bashname: 'Hello World' description: 'Greet someone' inputs: who-to-greet: # id of input description: 'Who to greet' required: true default: 'World' outputs: random-number: description: "Random number" value: ${{ steps.random-number-generator.outputs.random-number }} runs: using: "composite" steps: - name: Set Greeting run: echo "Hello $INPUT_WHO_TO_GREET." shell: bash env: INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }} - name: Random Number Generator id: random-number-generator run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT shell: bash - name: Set GitHub Path run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH shell: bash env: GITHUB_ACTION_PATH: ${{ github.action_path }} - name: Run goodbye.sh run: goodbye.sh shell: bashCe fichier définit l’entrée , mappe le nombre généré aléatoirement à la variable de sortie , ajoute le chemin d’accès de l’action au chemin d’accès du système de l’exécuteur (pour localiser le script pendant l’exécution ) et exécute le script .
Pour plus d’informations sur la gestion des sorties, consultez « AUTOTITLE ».
Pour plus d’informations sur l’utilisation de , consultez « AUTOTITLE ».
-
Depuis votre terminal, validez votre fichier.
Shell git add action.yml git commit -m "Add action" git push
git add action.yml git commit -m "Add action" git push -
À partir de votre terminal, ajoutez une étiquette. Cet exemple utilise une étiquette nommée . Pour plus d’informations, consultez « AUTOTITLE ».
Shell git tag -a -m "Description of this release" v1 git push --follow-tags
git tag -a -m "Description of this release" v1 git push --follow-tags
Tester votre action dans un workflow
Le code de workflow suivant utilise l’action Hello World terminée que vous avez effectuée dans « AUTOTITLE ».
Copiez le code du flux de travail dans un fichier dans un autre référentiel, en remplaçant et par le propriétaire du référentiel et le SHA du commit que vous voulez utiliser, respectivement. Vous pouvez également remplacer l’entrée par votre nom.
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v5
- id: foo
uses: OWNER/hello-world-composite-action@SHA
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number "$RANDOM_NUMBER"
shell: bash
env:
RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v5
- id: foo
uses: OWNER/hello-world-composite-action@SHA
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number "$RANDOM_NUMBER"
shell: bash
env:
RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
Dans votre dépôt, cliquez sur l’onglet Actions, puis sélectionnez la dernière exécution du workflow. La sortie doit inclure : « Hello Mona the Octocat », le résultat de l’exécution du script « Goodbye » et un nombre aléatoire.
Création d’une action composite dans le même référentiel
-
Créez un sous-dossier appelé , il peut être placé dans n’importe quel sous-dossier dans le référentiel. Toutefois, il est recommandé de le placer dans le sous-dossier pour simplifier l'organisation.
-
Dans le dossier , effectuez les mêmes étapes pour créer le script
Shell echo "echo Goodbye" > goodbye.sh
echo "echo Goodbye" > goodbye.sh
git add --chmod=+x -- goodbye.sh
git add --chmod=+x -- goodbye.sh
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh
git commit -m "Add goodbye script"
git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh
git commit -m "Add goodbye script"
git push
git commit -m "Add goodbye script" git push
git commit -m "Add goodbye script"
git push
- Dans le dossier , créez le fichier en fonction des étapes décrites dans AUTOTITLE.
- Lorsque vous utilisez l’action, utilisez le chemin d’accès relatif vers le dossier où se trouve le fichier de l’action composite dans la clé . L’exemple ci-dessous suppose qu’il se trouve dans le dossier .
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v5
- id: foo
uses: ./.github/actions/hello-world-composite-action
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number "$RANDOM_NUMBER"
shell: bash
env:
RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v5
- id: foo
uses: ./.github/actions/hello-world-composite-action
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number "$RANDOM_NUMBER"
shell: bash
env:
RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
Exemple d’actions composites sur GitHub
Vous pouvez trouver de nombreux exemples d’actions composites sur GitHub.
- microsoft/action-python
- microsoft/gpt-review
- tailscale/github-action