Ă propos des commandes de workflow
Les actions peuvent communiquer avec la machine de lâexĂ©cuteur pour dĂ©finir des variables dâenvironnement, gĂ©nĂ©rer des valeurs utilisĂ©es par dâautres actions, ajouter des messages de dĂ©bogage aux journaux de sortie, entre autres tĂąches.
La plupart des commandes de workflow utilisent la commande echo
dans un format spĂ©cifique, tandis que dâautres sont appelĂ©es en Ă©crivant dans un fichier. Pour plus dâinformations, consultez Fichiers dâenvironnement.
Exemple de commande de workflow
echo "::workflow-command parameter1={data},parameter2={data}::{command value}"
echo "::workflow-command parameter1={data},parameter2={data}::{command value}"
Write-Output "::workflow-command parameter1={data},parameter2={data}::{command value}"
Write-Output "::workflow-command parameter1={data},parameter2={data}::{command value}"
Remarque
Les noms des commandes et des paramĂštres du flux de travail ne sont pas sensibles Ă la casse.
Avertissement
Si vous utilisez lâinvite de commandes, omettez les guillemets doubles ("
) lors de lâutilisation de commandes de workflow.
Utilisation de commandes de workflow pour accéder aux fonctions du kit de ressources
Les actions/le kit de ressources incluent un certain nombre de fonctions qui peuvent ĂȘtre exĂ©cutĂ©es en tant que commandes de workflow. Utilisez la syntaxe ::
pour exĂ©cuter les commandes de workflow dans votre fichier YAML. Ces commandes sont ensuite envoyĂ©es Ă lâexĂ©cuteur via stdout
.
Par exemple, au lieu dâutiliser du code pour crĂ©er une annotation dâerreur, comme indiquĂ© ci-dessous :
core.error('Missing semicolon', {file: 'app.js', startLine: 1})
core.error('Missing semicolon', {file: 'app.js', startLine: 1})
Exemple : CrĂ©ation dâune annotation pour une erreur
Vous pouvez utiliser la commande error
dans votre workflow pour crĂ©er la mĂȘme annotation dâerreur :
- name: Create annotation for build error run: echo "::error file=app.js,line=1::Missing semicolon"
- name: Create annotation for build error
run: echo "::error file=app.js,line=1::Missing semicolon"
- name: Create annotation for build error run: Write-Output "::error file=app.js,line=1::Missing semicolon"
- name: Create annotation for build error
run: Write-Output "::error file=app.js,line=1::Missing semicolon"
Le tableau suivant montre quelles fonctions du kit de ressources sont disponibles dans un workflow :
Fonction du kit de ressources | Commande de workflow équivalente |
---|---|
core.addPath | Accessible Ă lâaide du fichier dâenvironnement GITHUB_PATH |
core.debug | debug |
core.notice | notice |
core.error | error |
core.endGroup | endgroup |
core.exportVariable | Accessible Ă lâaide du fichier dâenvironnement GITHUB_ENV |
core.getInput | Accessible Ă lâaide de la variable dâenvironnement INPUT_{NAME} |
core.getState | Accessible Ă lâaide de la variable dâenvironnement STATE_{NAME} |
core.isDebug | Accessible Ă lâaide de la variable dâenvironnement RUNNER_DEBUG |
core.summary | Accessible Ă lâaide du fichier dâenvironnement GITHUB_STEP_SUMMARY |
core.saveState | Accessible Ă lâaide du fichier dâenvironnement GITHUB_STATE |
core.setCommandEcho | echo |
core.setFailed | Utilisé comme raccourci pour ::error et exit 1 |
core.setOutput | Accessible Ă lâaide du fichier dâenvironnement GITHUB_OUTPUT |
core.setSecret | add-mask |
core.startGroup | group |
core.warning | warning |
DĂ©finition dâun message de dĂ©bogage
Imprime un message de débogage dans le journal. Vous devez créer un secret nommé ACTIONS_STEP_DEBUG
avec la valeur true
pour afficher les messages de dĂ©bogage dĂ©finis par cette commande dans le journal. Pour plus dâinformations, consultez « Enabling debug logging ».
::debug::{message}
::debug::{message}
Exemple : DĂ©finition dâun message de dĂ©bogage
echo "::debug::Set the Octocat variable"
echo "::debug::Set the Octocat variable"
Write-Output "::debug::Set the Octocat variable"
Write-Output "::debug::Set the Octocat variable"
DĂ©finition dâun message de notification
CrĂ©e un message de notification et lâimprime dans le journal. Ce message crĂ©e une annotation, qui peut associer le message Ă un fichier particulier de votre dĂ©pĂŽt. Votre message peut Ă©ventuellement spĂ©cifier une position dans le fichier.
::notice file={name},line={line},endLine={endLine},title={title}::{message}
::notice file={name},line={line},endLine={endLine},title={title}::{message}
ParamÚtre | Valeur | Requis | Par défaut |
---|---|---|---|
title | Titre personnalisé | Non | Aucun(e) |
file | Nom du fichier | Non | .github |
col | Numéro de colonne, à partir de 1 | Non | Aucun(e) |
endColumn | Numéro de colonne de fin | Non | Aucun(e) |
line | Numéro de ligne, à partir de 1 | Non | 1 |
endLine | Numéro de ligne de fin | Non | 1 |
Exemple : DĂ©finition dâun message de notification
echo "::notice file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
echo "::notice file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
Write-Output "::notice file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::notice file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
DĂ©finition dâun message dâavertissement
CrĂ©e un message dâavertissement et lâimprime dans le journal. Ce message crĂ©e une annotation, qui peut associer le message Ă un fichier particulier de votre dĂ©pĂŽt. Votre message peut Ă©ventuellement spĂ©cifier une position dans le fichier.
::warning file={name},line={line},endLine={endLine},title={title}::{message}
::warning file={name},line={line},endLine={endLine},title={title}::{message}
ParamÚtre | Valeur | Requis | Par défaut |
---|---|---|---|
title | Titre personnalisé | Non | Aucun(e) |
file | Nom du fichier | Non | .github |
col | Numéro de colonne, à partir de 1 | Non | Aucun(e) |
endColumn | Numéro de colonne de fin | Non | Aucun(e) |
line | Numéro de ligne, à partir de 1 | Non | 1 |
endLine | Numéro de ligne de fin | Non | 1 |
Exemple : DĂ©finition dâun message dâavertissement
echo "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
echo "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
DĂ©finition dâun message dâerreur
CrĂ©e un message dâerreur et lâimprime dans le journal. Ce message crĂ©e une annotation, qui peut associer le message Ă un fichier particulier de votre dĂ©pĂŽt. Votre message peut Ă©ventuellement spĂ©cifier une position dans le fichier.
::error file={name},line={line},endLine={endLine},title={title}::{message}
::error file={name},line={line},endLine={endLine},title={title}::{message}
ParamÚtre | Valeur | Requis | Par défaut |
---|---|---|---|
title | Titre personnalisé | Non | Aucun(e) |
file | Nom du fichier | Non | .github |
col | Numéro de colonne, à partir de 1 | Non | Aucun(e) |
endColumn | Numéro de colonne de fin | Non | Aucun(e) |
line | Numéro de ligne, à partir de 1 | Non | 1 |
endLine | Numéro de ligne de fin | Non | 1 |
Exemple : DĂ©finition dâun message dâerreur
echo "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
echo "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Write-Output "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
Regroupement de lignes de journal
Crée un groupe extensible dans le journal. Pour créer un groupe, utilisez la commande group
et spécifiez un titre (title
). Tout ce que vous imprimez dans le journal entre les commandes group
et endgroup
est imbriqué dans une entrée extensible dans le journal.
::group::{title} ::endgroup::
::group::{title}
::endgroup::
Exemple : Regroupement de lignes de journal
jobs: bash-example: runs-on: ubuntu-latest steps: - name: Group of log lines run: | echo "::group::My title" echo "Inside group" echo "::endgroup::"
jobs:
bash-example:
runs-on: ubuntu-latest
steps:
- name: Group of log lines
run: |
echo "::group::My title"
echo "Inside group"
echo "::endgroup::"
jobs: powershell-example: runs-on: windows-latest steps: - name: Group of log lines run: | Write-Output "::group::My title" Write-Output "Inside group" Write-Output "::endgroup::"
jobs:
powershell-example:
runs-on: windows-latest
steps:
- name: Group of log lines
run: |
Write-Output "::group::My title"
Write-Output "Inside group"
Write-Output "::endgroup::"
Masquage dâune valeur dans un journal
::add-mask::{value}
::add-mask::{value}
Le masquage dâune valeur empĂȘche lâimpression dâune chaĂźne ou dâune variable dans le journal. Chaque mot masquĂ© sĂ©parĂ© par des espaces blancs est remplacĂ© par le caractĂšre *
. Vous pouvez utiliser une variable dâenvironnement ou une chaĂźne pour la valeur (value
) du masque. Lorsque vous masquez une valeur, elle est traitĂ©e comme un secret et est Ă©ditĂ©e sur lâexĂ©cuteur. Par exemple, aprĂšs avoir masquĂ© une valeur, vous ne pouvez pas dĂ©finir cette valeur en tant que sortie.
Exemple : Masquage dâune chaĂźne
Lorsque vous imprimez "Mona The Octocat"
dans le journal, vous voyez "***"
.
echo "::add-mask::Mona The Octocat"
echo "::add-mask::Mona The Octocat"
Write-Output "::add-mask::Mona The Octocat"
Write-Output "::add-mask::Mona The Octocat"
Avertissement
Veillez Ă inscrire le secret avec « add-mask » avant de lâafficher dans les journaux de gĂ©nĂ©ration ou de lâutiliser dans les autres commandes de workflow.
Exemple : Masquage dâune variable dâenvironnement
Lorsque vous imprimez la variable MY_NAME
ou la valeur "Mona The Octocat"
dans le journal, vous voyez "***"
au lieu de "Mona The Octocat"
.
jobs: bash-example: runs-on: ubuntu-latest env: MY_NAME: "Mona The Octocat" steps: - name: bash-version run: echo "::add-mask::$MY_NAME"
jobs:
bash-example:
runs-on: ubuntu-latest
env:
MY_NAME: "Mona The Octocat"
steps:
- name: bash-version
run: echo "::add-mask::$MY_NAME"
jobs: powershell-example: runs-on: windows-latest env: MY_NAME: "Mona The Octocat" steps: - name: powershell-version run: Write-Output "::add-mask::$env:MY_NAME"
jobs:
powershell-example:
runs-on: windows-latest
env:
MY_NAME: "Mona The Octocat"
steps:
- name: powershell-version
run: Write-Output "::add-mask::$env:MY_NAME"
Exemple : Masquage dâune sortie gĂ©nĂ©rĂ©e au sein dâun seul travail
Si vous nâavez pas besoin de passer votre secret dâun travail Ă un autre, vous pouvez :
- Générer le secret (sans le sortir).
- Le masquer avec
add-mask
. - Utiliser
GITHUB_OUTPUT
pour rendre le secret disponible pour dâautres Ă©tapes du travail.
on: push jobs: generate-a-secret-output: runs-on: ubuntu-latest steps: - id: sets-a-secret name: Generate, mask, and output a secret run: | the_secret=$((RANDOM)) echo "::add-mask::$the_secret" echo "secret-number=$the_secret" >> "$GITHUB_OUTPUT" - name: Use that secret output (protected by a mask) run: | echo "the secret number is ${{ steps.sets-a-secret.outputs.secret-number }}"
on: push
jobs:
generate-a-secret-output:
runs-on: ubuntu-latest
steps:
- id: sets-a-secret
name: Generate, mask, and output a secret
run: |
the_secret=$((RANDOM))
echo "::add-mask::$the_secret"
echo "secret-number=$the_secret" >> "$GITHUB_OUTPUT"
- name: Use that secret output (protected by a mask)
run: |
echo "the secret number is ${{ steps.sets-a-secret.outputs.secret-number }}"
on: push jobs: generate-a-secret-output: runs-on: ubuntu-latest steps: - id: sets-a-secret name: Generate, mask, and output a secret shell: pwsh run: | Set-Variable -Name TheSecret -Value (Get-Random) Write-Output "::add-mask::$TheSecret" "secret-number=$TheSecret" >> $env:GITHUB_OUTPUT - name: Use that secret output (protected by a mask) shell: pwsh run: | Write-Output "the secret number is ${{ steps.sets-a-secret.outputs.secret-number }}"
on: push
jobs:
generate-a-secret-output:
runs-on: ubuntu-latest
steps:
- id: sets-a-secret
name: Generate, mask, and output a secret
shell: pwsh
run: |
Set-Variable -Name TheSecret -Value (Get-Random)
Write-Output "::add-mask::$TheSecret"
"secret-number=$TheSecret" >> $env:GITHUB_OUTPUT
- name: Use that secret output (protected by a mask)
shell: pwsh
run: |
Write-Output "the secret number is ${{ steps.sets-a-secret.outputs.secret-number }}"
Exemple : Masquage et passage dâun secret entre des travaux ou des workflows
Si vous souhaitez passer un secret masqué entre des travaux ou des workflows, vous devez stocker le secret dans un magasin, puis le récupérer dans le travail ou le workflow suivant.
Programme dâinstallation
- Configurez un magasin de secrets pour stocker le secret que vous allez générer pendant votre workflow. Par exemple, Vault.
- GĂ©nĂ©rez une clĂ© pour la lecture et lâĂ©criture dans ce magasin de secrets. Stockez la clĂ© en tant que secret de dĂ©pĂŽt. Dans lâexemple de workflow suivant, le nom du secret est
SECRET_STORE_CREDENTIALS
. Pour plus dâinformations, consultez « Utilisation de secrets dans GitHub Actions ».
Workflow
Remarque
Ce flux de travail utilise un magasin de secrets imaginaire, secret-store
, qui a des commandes imaginaires, store-secret
et retrieve-secret
. some/secret-store@ 27b31702a0e7fc50959f5ad993c78deac1bdfc29
est une action imaginaire qui installe lâapplication secret-store
et la configure pour quâelle se connecte Ă une instance
avec des credentials
.
on: push jobs: secret-generator: runs-on: ubuntu-latest outputs: handle: ${{ steps.generate-secret.outputs.handle }} steps: - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29 with: credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }} instance: ${{ secrets.SECRET_STORE_INSTANCE }} - name: generate secret id: generate-secret shell: bash run: | GENERATED_SECRET=$((RANDOM)) echo "::add-mask::$GENERATED_SECRET" SECRET_HANDLE=$(secret-store store-secret "$GENERATED_SECRET") echo "handle=$SECRET_HANDLE" >> "$GITHUB_OUTPUT" secret-consumer: runs-on: macos-latest needs: secret-generator steps: - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29 with: credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }} instance: ${{ secrets.SECRET_STORE_INSTANCE }} - name: use secret shell: bash run: | SECRET_HANDLE="${{ needs.secret-generator.outputs.handle }}" RETRIEVED_SECRET=$(secret-store retrieve-secret "$SECRET_HANDLE") echo "::add-mask::$RETRIEVED_SECRET" echo "We retrieved our masked secret: $RETRIEVED_SECRET"
on: push
jobs:
secret-generator:
runs-on: ubuntu-latest
outputs:
handle: ${{ steps.generate-secret.outputs.handle }}
steps:
- uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
with:
credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
instance: ${{ secrets.SECRET_STORE_INSTANCE }}
- name: generate secret
id: generate-secret
shell: bash
run: |
GENERATED_SECRET=$((RANDOM))
echo "::add-mask::$GENERATED_SECRET"
SECRET_HANDLE=$(secret-store store-secret "$GENERATED_SECRET")
echo "handle=$SECRET_HANDLE" >> "$GITHUB_OUTPUT"
secret-consumer:
runs-on: macos-latest
needs: secret-generator
steps:
- uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
with:
credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
instance: ${{ secrets.SECRET_STORE_INSTANCE }}
- name: use secret
shell: bash
run: |
SECRET_HANDLE="${{ needs.secret-generator.outputs.handle }}"
RETRIEVED_SECRET=$(secret-store retrieve-secret "$SECRET_HANDLE")
echo "::add-mask::$RETRIEVED_SECRET"
echo "We retrieved our masked secret: $RETRIEVED_SECRET"
on: push jobs: secret-generator: runs-on: ubuntu-latest steps: - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29 with: credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }} instance: ${{ secrets.SECRET_STORE_INSTANCE }} - name: generate secret shell: pwsh run: | Set-Variable -Name Generated_Secret -Value (Get-Random) Write-Output "::add-mask::$Generated_Secret" Set-Variable -Name Secret_Handle -Value (Store-Secret "$Generated_Secret") "handle=$Secret_Handle" >> $env:GITHUB_OUTPUT secret-consumer: runs-on: macos-latest needs: secret-generator steps: - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29 with: credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }} instance: ${{ secrets.SECRET_STORE_INSTANCE }} - name: use secret shell: pwsh run: | Set-Variable -Name Secret_Handle -Value "${{ needs.secret-generator.outputs.handle }}" Set-Variable -Name Retrieved_Secret -Value (Retrieve-Secret "$Secret_Handle") echo "::add-mask::$Retrieved_Secret" echo "We retrieved our masked secret: $Retrieved_Secret"
on: push
jobs:
secret-generator:
runs-on: ubuntu-latest
steps:
- uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
with:
credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
instance: ${{ secrets.SECRET_STORE_INSTANCE }}
- name: generate secret
shell: pwsh
run: |
Set-Variable -Name Generated_Secret -Value (Get-Random)
Write-Output "::add-mask::$Generated_Secret"
Set-Variable -Name Secret_Handle -Value (Store-Secret "$Generated_Secret")
"handle=$Secret_Handle" >> $env:GITHUB_OUTPUT
secret-consumer:
runs-on: macos-latest
needs: secret-generator
steps:
- uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
with:
credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
instance: ${{ secrets.SECRET_STORE_INSTANCE }}
- name: use secret
shell: pwsh
run: |
Set-Variable -Name Secret_Handle -Value "${{ needs.secret-generator.outputs.handle }}"
Set-Variable -Name Retrieved_Secret -Value (Retrieve-Secret "$Secret_Handle")
echo "::add-mask::$Retrieved_Secret"
echo "We retrieved our masked secret: $Retrieved_Secret"
ArrĂȘt et dĂ©marrage de commandes de workflow
ArrĂȘte le traitement de toutes les commandes de workflow. Cette commande spĂ©ciale vous permet de tout journaliser sans exĂ©cuter accidentellement une commande de workflow. Par exemple, vous pouvez arrĂȘter la journalisation pour gĂ©nĂ©rer lâintĂ©gralitĂ© dâun script contenant des commentaires.
::stop-commands::{endtoken}
::stop-commands::{endtoken}
Pour arrĂȘter le traitement des commandes de workflow, passez un jeton unique Ă stop-commands
. Pour reprendre le traitement des commandes de workflow, passez le mĂȘme jeton que celui que vous avez utilisĂ© pour arrĂȘter les commandes de workflow.
Avertissement
Assurez-vous que le jeton que vous utilisez est gĂ©nĂ©rĂ© de maniĂšre alĂ©atoire et quâil est unique pour chaque exĂ©cution.
::{endtoken}::
::{endtoken}::
Exemple : ArrĂȘt et dĂ©marrage de commandes de workflow
jobs: workflow-command-job: runs-on: ubuntu-latest steps: - name: Disable workflow commands run: | echo '::warning:: This is a warning message, to demonstrate that commands are being processed.' stopMarker=$(uuidgen) echo "::stop-commands::$stopMarker" echo '::warning:: This will NOT be rendered as a warning, because stop-commands has been invoked.' echo "::$stopMarker::" echo '::warning:: This is a warning again, because stop-commands has been turned off.'
jobs:
workflow-command-job:
runs-on: ubuntu-latest
steps:
- name: Disable workflow commands
run: |
echo '::warning:: This is a warning message, to demonstrate that commands are being processed.'
stopMarker=$(uuidgen)
echo "::stop-commands::$stopMarker"
echo '::warning:: This will NOT be rendered as a warning, because stop-commands has been invoked.'
echo "::$stopMarker::"
echo '::warning:: This is a warning again, because stop-commands has been turned off.'
jobs: workflow-command-job: runs-on: windows-latest steps: - name: Disable workflow commands run: | Write-Output '::warning:: This is a warning message, to demonstrate that commands are being processed.' $stopMarker = New-Guid Write-Output "::stop-commands::$stopMarker" Write-Output '::warning:: This will NOT be rendered as a warning, because stop-commands has been invoked.' Write-Output "::$stopMarker::" Write-Output '::warning:: This is a warning again, because stop-commands has been turned off.'
jobs:
workflow-command-job:
runs-on: windows-latest
steps:
- name: Disable workflow commands
run: |
Write-Output '::warning:: This is a warning message, to demonstrate that commands are being processed.'
$stopMarker = New-Guid
Write-Output "::stop-commands::$stopMarker"
Write-Output '::warning:: This will NOT be rendered as a warning, because stop-commands has been invoked.'
Write-Output "::$stopMarker::"
Write-Output '::warning:: This is a warning again, because stop-commands has been turned off.'
Envoi de valeurs aux actions de préalables (pre) et ultérieures (post)
Vous pouvez créer des variables d'environnement à partager avec les actions pre:
ou post:
de votre flux de travail en écrivant dans le fichier situé à l'adresse GITHUB_STATE
. Par exemple, vous pouvez crĂ©er un fichier avec lâaction pre:
, passer lâemplacement du fichier Ă lâaction main:
, puis utiliser lâaction post:
pour supprimer le fichier. Vous pouvez Ă©galement crĂ©er un fichier avec lâaction main:
, passer lâemplacement du fichier Ă lâaction post:
, puis Ă©galement utiliser lâaction post:
pour supprimer le fichier.
Si vous avez plusieurs actions pre:
ou post:
, vous ne pouvez accĂ©der Ă la valeur sauvegardĂ©e que dans l'action oĂč elle a Ă©tĂ© Ă©crite dans GITHUB_STATE
. Pour plus dâinformations sur lâaction post:
, consultez « Référence syntaxique des métadonnées ».
Le fichier GITHUB_STATE
est disponible uniquement dans une action. La valeur enregistrĂ©e est stockĂ©e en tant que valeur dâenvironnement avec le prĂ©fixe STATE_
.
Cet exemple utilise JavaScript pour écrire dans le fichier GITHUB_STATE
. La variable dâenvironnement obtenue est nommĂ©e STATE_processID
avec la valeur 12345
:
import * as fs from 'fs' import * as os from 'os' fs.appendFileSync(process.env.GITHUB_STATE, `processID=12345${os.EOL}`, { encoding: 'utf8' })
import * as fs from 'fs'
import * as os from 'os'
fs.appendFileSync(process.env.GITHUB_STATE, `processID=12345${os.EOL}`, {
encoding: 'utf8'
})
La variable STATE_processID
est ensuite disponible exclusivement pour le script de nettoyage sâexĂ©cutant sous lâaction main
. Cet exemple sâexĂ©cute dans main
et utilise JavaScript pour afficher la valeur affectĂ©e Ă la variable dâenvironnement STATE_processID
:
console.log("The running PID from the main action is: " + process.env.STATE_processID);
console.log("The running PID from the main action is: " + process.env.STATE_processID);
Fichiers dâenvironnement
Pendant lâexĂ©cution dâun workflow, lâexĂ©cuteur gĂ©nĂšre des fichiers temporaires qui peuvent ĂȘtre utilisĂ©s pour effectuer certaines actions. Le chemin dâaccĂšs Ă ces fichiers peut ĂȘtre consultĂ© et modifiĂ© Ă lâaide des variables dâenvironnement par dĂ©faut de GitHub. Consultez RĂ©fĂ©rences des variables. Vous devez utiliser lâencodage UTF-8 lors de lâĂ©criture dans ces fichiers pour garantir le traitement appropriĂ© des commandes. Plusieurs commandes peuvent ĂȘtre Ă©crites dans le mĂȘme fichier, sĂ©parĂ©es par des sauts de ligne.
Pour utiliser des variables dâenvironnement dans une action GitHub, vous crĂ©ez ou modifiez des fichiers .env
Ă lâaide de commandes GitHub Actions spĂ©cifiques.
Voici comment procéder :
name: Example Workflow for Environment Files on: push jobs: set_and_use_env_vars: runs-on: ubuntu-latest steps: - name: Set environment variable run: echo "MY_ENV_VAR=myValue" >> $GITHUB_ENV - name: Use environment variable run: | echo "The value of MY_ENV_VAR is $MY_ENV_VAR"
name: Example Workflow for Environment Files
on: push
jobs:
set_and_use_env_vars:
runs-on: ubuntu-latest
steps:
- name: Set environment variable
run: echo "MY_ENV_VAR=myValue" >> $GITHUB_ENV
- name: Use environment variable
run: |
echo "The value of MY_ENV_VAR is $MY_ENV_VAR"
Un autre exemple serait de lâutiliser pour stocker des mĂ©tadonnĂ©es telles que des horodatages de build, des SHA de commits ou des noms dâartefacts :
steps: - name: Store build timestamp run: echo "BUILD_TIME=$(date +'%T')" >> $GITHUB_ENV - name: Deploy using stored timestamp run: echo "Deploying at $BUILD_TIME"
steps:
- name: Store build timestamp
run: echo "BUILD_TIME=$(date +'%T')" >> $GITHUB_ENV
- name: Deploy using stored timestamp
run: echo "Deploying at $BUILD_TIME"
Remarque
Les versions 5.1 et antérieures de PowerShell (shell: powershell
) nâutilisent pas UTF-8 par dĂ©faut. Vous devez donc spĂ©cifier lâencodage UTF-8. Par exemple :
jobs: legacy-powershell-example: runs-on: windows-latest steps: - shell: powershell run: | "mypath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
jobs:
legacy-powershell-example:
runs-on: windows-latest
steps:
- shell: powershell
run: |
"mypath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
PowerShell Core versions 6 et ultérieures (shell: pwsh
) utilisent UTF-8 par défaut. Par exemple :
jobs: powershell-core-example: runs-on: windows-latest steps: - shell: pwsh run: | "mypath" >> $env:GITHUB_PATH
jobs:
powershell-core-example:
runs-on: windows-latest
steps:
- shell: pwsh
run: |
"mypath" >> $env:GITHUB_PATH
DĂ©finition dâune variable dâenvironnement
Remarque
Pour Ă©viter les problĂšmes, il est recommandĂ© de traiter les variables dâenvironnement comme sensibles Ă la casse, quel que soit le comportement du systĂšme dâexploitation et de lâinterprĂ©teur de commandes que vous utilisez.
echo "{environment_variable_name}={value}" >> "$GITHUB_ENV"
echo "{environment_variable_name}={value}" >> "$GITHUB_ENV"
-
Utilisation de PowerShell version 6 et ultérieures :
PowerShell "{environment_variable_name}={value}" >> $env:GITHUB_ENV
"{environment_variable_name}={value}" >> $env:GITHUB_ENV
-
Utilisation de PowerShell version 5.1 et antérieures :
PowerShell "{environment_variable_name}={value}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
"{environment_variable_name}={value}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
Vous pouvez rendre une variable dâenvironnement disponible pour toutes les Ă©tapes suivantes dâun travail de workflow en dĂ©finissant ou en mettant Ă jour la variable dâenvironnement, puis en Ă©crivant ceci dans le fichier dâenvironnement GITHUB_ENV
. LâĂ©tape qui crĂ©e ou met Ă jour la variable dâenvironnement nâa pas accĂšs Ă la nouvelle valeur, mais toutes les Ă©tapes suivantes dâun travail y ont accĂšs.
Vous ne pouvez pas remplacer la valeur des variables dâenvironnement par dĂ©faut appelĂ©es GITHUB_*
et RUNNER_*
. Actuellement, vous pouvez remplacer la valeur de la variable CI
. Toutefois, il nâest pas garanti que cela sera toujours possible. Pour plus dâinformations sur les variables dâenvironnement par dĂ©faut, consultez « Stocker des informations dans des variables ».
Remarque
En raison de restrictions de sécurité, GITHUB_ENV
ne peut pas ĂȘtre utilisĂ© pour dĂ©finir la variable d'environnement NODE_OPTIONS
.
Exemple dâĂ©criture dâune variable dâenvironnement dans GITHUB_ENV
steps: - name: Set the value id: step_one run: | echo "action_state=yellow" >> "$GITHUB_ENV" - name: Use the value id: step_two run: | printf '%s\n' "$action_state" # This will output 'yellow'
steps:
- name: Set the value
id: step_one
run: |
echo "action_state=yellow" >> "$GITHUB_ENV"
- name: Use the value
id: step_two
run: |
printf '%s\n' "$action_state" # This will output 'yellow'
steps: - name: Set the value id: step_one run: | "action_state=yellow" >> $env:GITHUB_ENV - name: Use the value id: step_two run: | Write-Output "$env:action_state" # This will output 'yellow'
steps:
- name: Set the value
id: step_one
run: |
"action_state=yellow" >> $env:GITHUB_ENV
- name: Use the value
id: step_two
run: |
Write-Output "$env:action_state" # This will output 'yellow'
ChaĂźnes multilignes
Pour les chaßnes multilignes, vous pouvez utiliser un délimiteur avec la syntaxe suivante.
{name}<<{delimiter} {value} {delimiter}
{name}<<{delimiter}
{value}
{delimiter}
Avertissement
Assurez-vous que le dĂ©limiteur que vous utilisez ne se trouve pas sur une ligne Ă part dans la valeur. Si la valeur est complĂštement arbitraire, vous ne devez pas utiliser ce format. Ăcrivez plutĂŽt la valeur dans un fichier.
Exemple dâune chaĂźne multiligne
Cet exemple utilise EOF
comme dĂ©limiteur et dĂ©finit la variable dâenvironnement JSON_RESPONSE
sur la valeur de la réponse curl
.
steps: - name: Set the value in bash id: step_one run: | { echo 'JSON_RESPONSE<<EOF' curl https://example.com echo EOF } >> "$GITHUB_ENV"
steps:
- name: Set the value in bash
id: step_one
run: |
{
echo 'JSON_RESPONSE<<EOF'
curl https://example.com
echo EOF
} >> "$GITHUB_ENV"
steps: - name: Set the value in pwsh id: step_one run: | $EOF = (New-Guid).Guid "JSON_RESPONSE<<$EOF" >> $env:GITHUB_ENV (Invoke-WebRequest -Uri "https://example.com").Content >> $env:GITHUB_ENV "$EOF" >> $env:GITHUB_ENV shell: pwsh
steps:
- name: Set the value in pwsh
id: step_one
run: |
$EOF = (New-Guid).Guid
"JSON_RESPONSE<<$EOF" >> $env:GITHUB_ENV
(Invoke-WebRequest -Uri "https://example.com").Content >> $env:GITHUB_ENV
"$EOF" >> $env:GITHUB_ENV
shell: pwsh
DĂ©finition dâun paramĂštre de sortie
DĂ©finit le paramĂštre de sortie dâune Ă©tape. Notez que lâĂ©tape a besoin dâun id
pour ĂȘtre dĂ©finie afin de rĂ©cupĂ©rer ensuite la valeur de sortie. Vous pouvez dĂ©finir des valeurs de sortie multilignes en utilisant la mĂȘme technique que celle utilisĂ©e dans la section ChaĂźnes multilignes pour dĂ©finir des variables d'environnement multilignes.
echo "{name}={value}" >> "$GITHUB_OUTPUT"
echo "{name}={value}" >> "$GITHUB_OUTPUT"
"{name}=value" >> $env:GITHUB_OUTPUT
"{name}=value" >> $env:GITHUB_OUTPUT
Exemple de dĂ©finition dâun paramĂštre de sortie
Cet exemple montre comment définir le paramÚtre de sortie SELECTED_COLOR
pour le récupérer par la suite :
- name: Set color id: color-selector run: echo "SELECTED_COLOR=green" >> "$GITHUB_OUTPUT" - name: Get color env: SELECTED_COLOR: ${{ steps.color-selector.outputs.SELECTED_COLOR }} run: echo "The selected color is $SELECTED_COLOR"
- name: Set color
id: color-selector
run: echo "SELECTED_COLOR=green" >> "$GITHUB_OUTPUT"
- name: Get color
env:
SELECTED_COLOR: ${{ steps.color-selector.outputs.SELECTED_COLOR }}
run: echo "The selected color is $SELECTED_COLOR"
Cet exemple montre comment définir le paramÚtre de sortie SELECTED_COLOR
pour le récupérer par la suite :
- name: Set color id: color-selector run: | "SELECTED_COLOR=green" >> $env:GITHUB_OUTPUT - name: Get color env: SELECTED_COLOR: ${{ steps.color-selector.outputs.SELECTED_COLOR }} run: Write-Output "The selected color is $env:SELECTED_COLOR"
- name: Set color
id: color-selector
run: |
"SELECTED_COLOR=green" >> $env:GITHUB_OUTPUT
- name: Get color
env:
SELECTED_COLOR: ${{ steps.color-selector.outputs.SELECTED_COLOR }}
run: Write-Output "The selected color is $env:SELECTED_COLOR"
Ajout dâun rĂ©sumĂ© de travail
echo "{markdown content}" >> $GITHUB_STEP_SUMMARY
echo "{markdown content}" >> $GITHUB_STEP_SUMMARY
"{markdown content}" >> $env:GITHUB_STEP_SUMMARY
"{markdown content}" >> $env:GITHUB_STEP_SUMMARY
Vous pouvez dĂ©finir un Markdown personnalisĂ© pour chaque travail afin quâil sâaffiche sur la page RĂ©sumĂ© dâune exĂ©cution de workflow. Vous pouvez utiliser des rĂ©sumĂ©s de travaux pour afficher et regrouper du contenu unique, tel que des rĂ©sumĂ©s de rĂ©sultats de test, afin quâun utilisateur qui affiche le rĂ©sultat dâune exĂ©cution de workflow nâait pas besoin dâaccĂ©der aux journaux pour voir des informations importantes relatives Ă lâexĂ©cution, telles que les dĂ©faillances.
Les rĂ©sumĂ©s de travaux prennent en charge Markdown adaptĂ© GitHub et vous pouvez ajouter votre contenu Markdown pour une Ă©tape au fichier dâenvironnement GITHUB_STEP_SUMMARY
. GITHUB_STEP_SUMMARY
est unique pour chaque Ă©tape dâun travail. Pour plus dâinformations sur le fichier par Ă©tape auquel GITHUB_STEP_SUMMARY
fait rĂ©fĂ©rence, consultez « Fichiers dâenvironnement ».
Lorsquâun travail se termine, les rĂ©sumĂ©s de toutes les Ă©tapes dâun travail sont regroupĂ©s dans un rĂ©sumĂ© de travail unique et sont affichĂ©s sur la page rĂ©sumĂ© de lâexĂ©cution du workflow. Si plusieurs travaux gĂ©nĂšrent des rĂ©sumĂ©s, les rĂ©sumĂ©s des travaux sont classĂ©s par heure dâachĂšvement du travail.
Exemple dâajout dâun rĂ©sumĂ© de travail
echo "### Hello world! :rocket:" >> $GITHUB_STEP_SUMMARY
echo "### Hello world! :rocket:" >> $GITHUB_STEP_SUMMARY
"### Hello world! :rocket:" >> $env:GITHUB_STEP_SUMMARY
"### Hello world! :rocket:" >> $env:GITHUB_STEP_SUMMARY
Contenu Markdown multiligne
Pour le contenu Markdown multiligne, vous pouvez utiliser >>
pour ajouter en continu du contenu pour lâĂ©tape actuelle. Avec chaque opĂ©ration dâajout, un caractĂšre de nouvelle ligne est automatiquement ajoutĂ©.
Exemple de contenu Markdown multiligne
- name: Generate list using Markdown
run: |
echo "This is the lead in sentence for the list" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY # this is a blank line
echo "- Lets add a bullet point" >> $GITHUB_STEP_SUMMARY
echo "- Lets add a second bullet point" >> $GITHUB_STEP_SUMMARY
echo "- How about a third one?" >> $GITHUB_STEP_SUMMARY
- name: Generate list using Markdown
run: |
"This is the lead in sentence for the list" >> $env:GITHUB_STEP_SUMMARY
"" >> $env:GITHUB_STEP_SUMMARY # this is a blank line
"- Lets add a bullet point" >> $env:GITHUB_STEP_SUMMARY
"- Lets add a second bullet point" >> $env:GITHUB_STEP_SUMMARY
"- How about a third one?" >> $env:GITHUB_STEP_SUMMARY
Remplacement de résumés des travaux
Pour effacer tout le contenu de lâĂ©tape actuelle, vous pouvez utiliser >
pour remplacer tout contenu précédemment ajouté dans Bash, ou supprimez -Append
dans PowerShell.
Exemple de remplacement de résumés de travaux
- name: Overwrite Markdown
run: |
echo "Adding some Markdown content" >> $GITHUB_STEP_SUMMARY
echo "There was an error, we need to clear the previous Markdown with some new content." > $GITHUB_STEP_SUMMARY
- name: Overwrite Markdown
run: |
"Adding some Markdown content" >> $env:GITHUB_STEP_SUMMARY
"There was an error, we need to clear the previous Markdown with some new content." >> $env:GITHUB_STEP_SUMMARY
Suppression de résumés de travaux
Pour supprimer complĂštement un rĂ©sumĂ© de lâĂ©tape actuelle, le fichier auquel GITHUB_STEP_SUMMARY
fait rĂ©fĂ©rence peut ĂȘtre supprimĂ©.
Exemple de suppression de résumés de travaux
- name: Delete all summary content
run: |
echo "Adding Markdown content that we want to remove before the step ends" >> $GITHUB_STEP_SUMMARY
rm $GITHUB_STEP_SUMMARY
- name: Delete all summary content
run: |
"Adding Markdown content that we want to remove before the step ends" >> $env:GITHUB_STEP_SUMMARY
Remove-Item $env:GITHUB_STEP_SUMMARY
Une fois lâĂ©tape terminĂ©e, les rĂ©sumĂ©s des travaux sont chargĂ©s et les Ă©tapes suivantes ne peuvent pas modifier le contenu Markdown prĂ©cĂ©demment chargĂ©. Les rĂ©sumĂ©s masquent automatiquement les secrets qui peuvent avoir Ă©tĂ© ajoutĂ©s accidentellement. Si un rĂ©sumĂ© de travail contient des informations sensibles qui doivent ĂȘtre supprimĂ©es, vous pouvez supprimer lâexĂ©cution entiĂšre du workflow pour supprimer tous ses rĂ©sumĂ©s de travaux. Pour plus dâinformations, consultez « Suppression dâune exĂ©cution de workflow ».
Isolation et limites des étapes
Les rĂ©sumĂ©s de travaux sont isolĂ©s entre les Ă©tapes et chaque Ă©tape est limitĂ©e Ă une taille maximale de 1MiB. Lâisolation est appliquĂ©e entre les Ă©tapes afin que Markdown potentiellement mal formĂ© Ă partir dâune seule Ă©tape ne puisse pas interrompre le rendu Markdown pour les Ă©tapes suivantes. Si plus de 1MiB de contenu est ajoutĂ© pour une Ă©tape, le chargement de lâĂ©tape Ă©choue et une annotation dâerreur est créée. TĂ©lĂ©charger des dĂ©faillances de rĂ©sumĂ©s des travaux nâaffecte pas lâĂ©tat global dâune Ă©tape ou dâun travail. Un maximum de 20 rĂ©sumĂ©s de travaux Ă partir des Ă©tapes sâaffichent par travail.
Ajout dâun chemin systĂšme
Ajoute un répertoire à la variable systÚme PATH
et le rend automatiquement disponible pour toutes les actions suivantes dans le travail actuel. Lâaction en cours dâexĂ©cution ne peut pas accĂ©der Ă la variable de chemin mise Ă jour. Pour afficher les chemins actuellement dĂ©finis pour votre travail, vous pouvez utiliser echo "$PATH"
dans une étape ou une action.
Exemple dâajout dâun chemin systĂšme
Cet exemple montre comment ajouter le répertoire $HOME/.local/bin
de lâutilisateur Ă PATH
:
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
Cet exemple montre comment ajouter le répertoire $env:HOMEPATH/.local/bin
de lâutilisateur Ă PATH
:
"$env:HOMEPATH/.local/bin" | Out-File -FilePath "$env:GITHUB_PATH" -Append
"$env:HOMEPATH/.local/bin" | Out-File -FilePath "$env:GITHUB_PATH" -Append