Integración con GitHub Action de Droidwatch

Escanea APKs automáticamente en tu pipeline CI/CD y falla los builds cuando se
superan los umbrales de amenaza. La action está publicada en el
GitHub Marketplace
como Omar1123/droidwatch-scan@v1.


Workflow de ejemplo completo

Crea .github/workflows/apk-security-scan.yml en tu repositorio:

name: APK Security Scan

on:
  push:
    branches: [main, develop]
    paths:
      - '**.apk'
      - 'app/build/**'
  pull_request:
    branches: [main]
  workflow_dispatch:
    inputs:
      apk_path:
        description: 'Ruta al archivo APK'
        required: false
        default: 'app/build/outputs/apk/release/app-release.apk'

jobs:
  droidwatch-scan:
    name: Droidwatch APK Analysis
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Build APK
        run: ./gradlew assembleRelease

      - name: Droidwatch Security Scan
        id: scan
        uses: Omar1123/droidwatch-scan@v1
        with:
          apk_path: app/build/outputs/apk/release/app-release.apk
          api_key: ${{ secrets.DROIDWATCH_API_KEY }}
          fail_on_verdict: "Malicious|High Risk"

      - name: Imprimir resumen
        if: always()
        run: |
          echo "Veredicto : ${{ steps.scan.outputs.verdict }}"
          echo "Score     : ${{ steps.scan.outputs.score }}"
          echo "Reporte   : ${{ steps.scan.outputs.report_url }}"

Inputs

Input Requerido Default Descripción
apk_path Ruta al artefacto relativa a la raíz del workspace: .apk / .aab / .xapk / .dex / .ipa (iOS, análisis estático)
api_key API key con permisos de upload (dw_...). Genérala en Mi Perfil → API Keys
server_url No https://droidwatch.app URL base — apunta a tu instancia self-hosted si tienes una
fail_on_verdict No Malicious Veredictos separados por pipe que fallan el build, ej. Malicious\|High Risk\|Suspicious
timeout_seconds No 300 Cuánto esperar a que termine el análisis antes de abortar

Outputs

Output Descripción
verdict Veredicto del análisis: Malicious, High Risk, Suspicious o Benign
score Score de riesgo numérico (0–100)
run_id ID del run de Droidwatch para el reporte completo
report_url URL pública compartible del reporte interactivo

Cómo obtener una API key

  1. Inicia sesión en droidwatch.app (o tu instancia)
  2. Ve a Mi Perfil → API Keys
  3. Haz clic en Generate new key
  4. Copia la key — empieza con dw_ y se muestra una sola vez

Las API keys respetan los límites de tu plan y requieren un plan con acceso
API. Las keys Enterprise no tienen límite diario de uploads.


Cómo configurar los secrets

Nunca pongas tu API key directamente en el YAML del workflow. Guárdala como
secret cifrado de GitHub Actions:

  1. En tu repositorio de GitHub, ve a Settings → Secrets and variables → Actions
  2. Haz clic en New repository secret
  3. Crea DROIDWATCH_API_KEY con la key dw_... de Mi Perfil → API Keys

Para pipelines a nivel de organización, usa Organisation secrets para
compartir la key entre repositorios sin duplicarla.


Referencia de fail_on_verdict

Valor Falla cuando el veredicto es...
Malicious Solo Malicious
Malicious\|High Risk Malicious o High Risk
Malicious\|High Risk\|Suspicious Todo excepto Benign

Para pipelines de compliance fintech se recomienda
Malicious|High Risk|Suspicious. Para CI general, Malicious|High Risk
balancea seguridad con ruido de falsos positivos.


Manejo de datos

La action sube tu artefacto al servidor de Droidwatch configurado para
analizarlo — el archivo sale del runner de GitHub Actions. El análisis corre
en un sandbox aislado y la retención sigue la política de tu plan. Si tu
artefacto no puede salir de tu infraestructura, apunta server_url a una
instancia self-hosted (quickstart).


Droidwatch self-hosted

Apunta server_url: a la URL de tu instancia on-prem — sin más cambios.
La misma action funciona contra cualquier despliegue de Droidwatch.