Aller au contenu
Publié

Dernière revue: 2026-07-28

GitHub Actions

Lancez des analyses CodeCleared depuis GitHub Actions avec service token protégé, résolution du dépôt et gestion sûre des délais.

Objectif

Lancez une analyse CodeCleared depuis GitHub Actions pour le commit qui a déclenché le workflow. Ce flux résout d’abord le dépôt connecté, puis crée l’analyse avec son UUID.

Pour qui

Un administrateur de dépôt configure le workflow et le secret. Un owner d’organisation active le dépôt et fournit le jeton API / service token au moindre privilège.

Prérequis

Offre éligible avec accès API, dépôt connecté, et jeton stocké comme secret GitHub Actions nommé CODECLEARED_TOKEN. Remplacez https://api.example par l’URL de base API client.

Étapes

name: CodeCleared scan
on:
  push:
    branches: [main]
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - name: Resolve, create, and wait
        env:
          API_BASE: https://api.example
          TOKEN: ${{ secrets.CODECLEARED_TOKEN }}
          REPOSITORY: ${{ github.repository }}
          COMMIT: ${{ github.sha }}
        run: |
          set -euo pipefail
          repo=$(curl --fail-with-body -sS -G "$API_BASE/v1/repositories/resolve" \
            -H "Authorization: Bearer $TOKEN" --data-urlencode "fullName=$REPOSITORY")
          repository_id=$(printf '%s' "$repo" | jq -r '.id')
          scan=$(curl --fail-with-body -sS -X POST "$API_BASE/v1/scans" \
            -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
            --data "{\"repositoryId\":\"$repository_id\",\"commitHash\":\"$COMMIT\",\"branch\":\"${{ github.ref_name }}\"}")
          scan_id=$(printf '%s' "$scan" | jq -r '.id')
          curl --fail-with-body -sS "$API_BASE/v1/scans/$scan_id/wait?timeout=300&interval=10" \
            -H "Authorization: Bearer $TOKEN"

Règles métier

Résolvez avec GET /v1/repositories/resolve?fullName=owner/repo. Créez avec POST /v1/scans en utilisant repositoryId (UUID) et commitHash ; branch, projectUnitId et scanTypes sont optionnels. L’attente vaut 300 secondes par défaut et ne peut dépasser 600 secondes.

Scénarios et cas limites

Fork ou dépôt renommé : résolvez la valeur réelle de github.repository et vérifiez qu’il est connecté. Wait expire : conservez l’ID d’analyse et demandez le statut plus tard ; ne supposez pas un échec. Pull request : choisissez délibérément le commit voulu — merge commit et head commit peuvent différer.

Limites

Ne loggez pas le token et ne l’embarquez pas dans le YAML. N’envoyez pas fullName ni commitSha à la création d’analyse. Un 402 indique un manque de crédits, de droit d’offre ou de licence MAU (seat_license_required), pas un JSON mal formé.

Erreurs courantes

  • Token absent de l’environnement parce que le secret n’est pas disponible pour l’événement.
  • jq renvoie un ID vide parce que la résolution du dépôt a échoué.
  • Répéter un 402 au lieu de revoir crédits, droits et licences.

Liens