Actions du Marketplace
Table des matières
- Comprendre les actions
- Actions officielles
- Actions populaires
- Créer une action
- Bonnes pratiques
- Exercices pratiques
1 - Comprendre les actions
Qu'est-ce qu'une action ?
Une action est un bloc réutilisable de code qui effectue une tâche spécifique.
Types d'actions
| Type | Langage | Fichier | Usage |
|---|---|---|---|
| JavaScript | Node.js | action.yml | Rapide, cross-platform |
| Docker | Any | Dockerfile | Environnement isolé |
| Composite | YAML | action.yml | Assemblage de steps |
Syntaxe uses
steps:
# Action du Marketplace
- uses: actions/checkout@v4
# Avec version spécifique
- uses: actions/setup-[email protected]
# Avec SHA (plus sécurisé)
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
# Action locale
- uses: ./.github/actions/my-action
# Action d'un autre repo
- uses: owner/repo/path@ref
Versioning
Utilisez des tags (@v4) pour la stabilité, ou des SHA pour la sécurité maximale.
🔝 Retour à la table des matières
2 - Actions officielles
actions/checkout
- uses: actions/checkout@v4
with:
# Branche/ref à checkout
ref: main
# Profondeur de l'historique (0 = tout)
fetch-depth: 0
# Token pour repos privés
token: ${{ secrets.PAT }}
# Submodules
submodules: recursive
# Autre repo
repository: owner/repo
path: other-repo
actions/setup-node
- uses: actions/setup-node@v4
with:
node-version: '18' # Version
node-version-file: '.nvmrc' # Depuis fichier
cache: 'npm' # Cache npm/yarn/pnpm
registry-url: 'https://npm.pkg.github.com'
actions/cache
- uses: actions/cache@v4
with:
path: |
~/.npm
node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
actions/upload-artifact / download-artifact
# Upload
- uses: actions/upload-artifact@v4
with:
name: build-output
path: dist/
retention-days: 5
# Download
- uses: actions/download-artifact@v4
with:
name: build-output
path: ./dist
Autres actions officielles
| Action | Usage |
|---|---|
actions/setup-python | Python |
actions/setup-java | Java |
actions/setup-go | Go |
actions/setup-dotnet | .NET |
actions/github-script | API GitHub |
actions/labeler | Auto-labeling PR |
🔝 Retour à la table des matières
3 - Actions populaires
Docker
# Login Docker Hub
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# Build et push
- uses: docker/build-push-action@v5
with:
context: .
push: true
tags: user/app:latest
cache-from: type=gha
cache-to: type=gha,mode=max
AWS
- uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- uses: aws-actions/amazon-ecr-login@v2
- uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: task-definition.json
service: my-service
cluster: my-cluster
Notifications
# Slack
- uses: slackapi/slack-github-action@v1
with:
channel-id: 'C0123456789'
slack-message: "Build ${{ job.status }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
# Discord
- uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ job.status }}
Code Quality
# SonarCloud
- uses: SonarSource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# CodeQL (sécurité)
- uses: github/codeql-action/init@v3
with:
languages: javascript, python
- uses: github/codeql-action/analyze@v3
Release
# Semantic Release
- uses: cycjimmy/semantic-release-action@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
# Create Release
- uses: softprops/action-gh-release@v1
with:
files: dist/*.zip
generate_release_notes: true
🔝 Retour à la table des matières
4 - Créer une action
Action Composite
# .github/actions/setup-project/action.yml
name: 'Setup Project'
description: 'Setup Node.js project with cache'
inputs:
node-version:
description: 'Node.js version'
required: false
default: '18'
outputs:
cache-hit:
description: 'Cache was hit'
value: ${{ steps.cache.outputs.cache-hit }}
runs:
using: 'composite'
steps:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- name: Cache dependencies
id: cache
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
shell: bash
run: npm ci
Utiliser l'action locale
# .github/workflows/ci.yml
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Project
uses: ./.github/actions/setup-project
with:
node-version: '20'
- run: npm run build
Action JavaScript
// index.js
const core = require('@actions/core');
const github = require('@actions/github');
async function run() {
try {
const name = core.getInput('name');
console.log(`Hello ${name}!`);
core.setOutput('greeting', `Hello ${name}!`);
} catch (error) {
core.setFailed(error.message);
}
}
run();
# action.yml
name: 'Hello Action'
description: 'Say hello'
inputs:
name:
description: 'Name to greet'
required: true
outputs:
greeting:
description: 'The greeting'
runs:
using: 'node20'
main: 'dist/index.js'
🔝 Retour à la table des matières
5 - Bonnes pratiques
Sécurité
# ✅ Bon : Version avec SHA
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
# ⚠️ Acceptable : Tag majeur
- uses: actions/checkout@v4
# ❌ Mauvais : Branche (peut changer)
- uses: actions/checkout@main
Vérifier les permissions
# Minimal permissions
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Évaluer une action
| Critère | Vérifier |
|---|---|
| Auteur | Organisation vérifiée ? |
| Stars | Popularité |
| Updates | Maintenance active ? |
| Issues | Problèmes connus ? |
| Code | Open source ? Lisible ? |
🔝 Retour à la table des matières
6 - Exercices pratiques
Exercice 1 : Setup Node avec cache
Créez un workflow avec setup-node et cache :
Solution
name: Build
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- run: npm ci
- run: npm run build
Exercice 2 : Action composite
Créez une action qui fait checkout + setup-node :
Solution
# .github/actions/setup/action.yml
name: 'Setup'
runs:
using: 'composite'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- run: npm ci
shell: bash
Quiz
Q1. Quelle est la méthode la plus sécurisée pour référencer une action ?
Réponse
Par SHA du commit : uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
🔝 Retour à la table des matières
Points clés à retenir
- Marketplace : +15000 actions disponibles
- Actions officielles :
actions/*sont maintenues par GitHub - Utiliser des tags ou SHA pour le versioning
- Composite actions : facile à créer en YAML
- Vérifier la sécurité avant d'utiliser une action tierce
- Permissions minimales : principe du moindre privilège
🔝 Retour à la table des matières
← Chapitre précédent | Chapitre suivant : Variables et secrets →