# Migración de Travis CI a GitHub Actions

GitHub Actions y Travis CI comparte muchas similitudes, lo cual hace que el migrarse a GitHub Actions sea relativamente fácil.

## Introducción

Esta guía te ayuda a migrar de Travis CI a GitHub Actions. Aquí se comparan sus conceptos y sintaxis, se describen sus similitudes y se demuestran sus acercamientos distintos para las tareas comunes.

## Antes de comenzar

Antes de que comiences tu migración a GitHub Actions, sería útil familiarizarse con la forma en la que funciona:

* Para obtener un ejemplo rápido en el que se muestra un trabajo de GitHub Actions, consulta [Inicio rápido para GitHub Actions](/es/actions/quickstart).
* Para obtener información sobre los conceptos básicos de GitHub Actions, consulta [Descripción de GitHub Actions](/es/actions/learn-github-actions/understanding-github-actions).

## Comparar la ejecución de tareas

Para proporcionarle control sobre cuándo se ejecutan las tareas de CI, un *flujo de trabajo* de GitHub Actions usa *trabajos* que se ejecutan en paralelo de forma predeterminada. Cada trabajo contiene *pasos* que se ejecutan en una secuencia definida por usted. Si necesitas ejecutar acciones de configuración y limpieza para un job, puedes definir pasos en cada job para que esto se lleve a cabo.

## Similitudes Clave

GitHub Actions y Travis CI comparten algunas similitudes y entenderlas con anticipación puede ayudar a agilizar el proceso de migración.

### Utilizar la sintaxis de YAML

Tanto Travis CI como GitHub Actions utilizan YAML para crear jobs y flujos de trabajo y estos archivos se almacenan en el repositorio del código. Para más información sobre cómo se usa YAML en GitHub Actions, consulta [Descripción de GitHub Actions](/es/actions/learn-github-actions/understanding-github-actions#create-an-example-workflow).

### Variables personalizadas

Travis CI te permite configurar variables y compartirlas entre etapas. De forma similar, GitHub Actions te permite definir las variables para un flujo de trabajo. Para más información, consulta [Almacenamiento de información en variables](/es/actions/learn-github-actions/variables).

### Variables predeterminadas

Tanto Travis CI como GitHub Actions incluyen variables de ambiente predeterminadas que puedes utilizar en tus archivos de YAML. Puedes ver las variables de GitHub Actions enumeradas en [Referencia de variables](/es/actions/reference/variables-reference#default-environment-variables).

### Procesamiento paralelo de trabajos

Travis CI puede usar `stages` para ejecutar trabajos en paralelo. Del mismo modo, GitHub Actions ejecuta `jobs` en paralelo. Para más información, consulta [Flujos de trabajo](/es/actions/using-workflows/about-workflows#creating-dependent-jobs).

### Insignias de estado

Tanto Travis CI como GitHub Actions son compatibles con las insignias de estado, lo cual te permite indicar si una compilación pasa o falla.
Para más información, consulta [Adición de un distintivo de estado de flujo de trabajo](/es/actions/monitoring-and-troubleshooting-workflows/adding-a-workflow-status-badge).

### Uso de una matriz

Tanto Travis CI como GitHub Actions son compatibles con matrices, lo cual te permite realizar pruebas mediante combinaciones de sistemas operativos y paquetes de software. Para más información, consulta [Ejecución de variaciones de trabajos en un flujo de trabajo](/es/actions/using-jobs/using-a-matrix-for-your-jobs).

A continuación, podrás encontrar un ejemplo que compara la sintaxis de cada sistema.

#### Sintaxis de Travis CI en una matriz

```yaml
matrix:
  include:
    - rvm: '2.5'
    - rvm: '2.6.3'
```

#### Sintaxis de GitHub Actions en una matriz

```yaml
jobs:
  build:
    strategy:
      matrix:
        ruby: ['2.5', '2.6.3']
```

### Apuntar a ramas específicas

Tanto Travis CI como GitHub Actions te permiten apuntar tu IC a una rama específica. Para más información, consulta [Sintaxis del flujo de trabajo para GitHub Actions](/es/actions/using-workflows/workflow-syntax-for-github-actions#onpushbranchestagsbranches-ignoretags-ignore).

A continuación encontrarás un ejemplo de la sintaxis para cada sistema.

#### Sintaxis de Travis CI para dirigirse a ramas específicas

```yaml
branches:
  only:
    - main
    - 'mona/octocat'
```

#### Sintaxis de GitHub Actions para dirigirse a ramas específicas

```yaml
on:
  push:
    branches:
      - main
      - 'mona/octocat'
```

### Verificar submódulos

Tanto Travis CI como GitHub Actions te permiten controlar si los submódulos se incluirán en los clones de los repositorios.

A continuación encontrarás un ejemplo de la sintaxis para cada sistema.

#### Sintaxis de Travis CI para extraer submódulos

```yaml
git:
  submodules: false
```

#### Sintaxis de GitHub Actions para restaurar submódulos

```yaml
- uses: actions/checkout@v6
  with:
    submodules: false
```

### Utilizar variables de ambiente en una matriz

Tanto GitHub Actions como Travis CI pueden agregar variables personalizadas a una matriz de pruebas, lo cual te permite referirte a la variable en un paso subsecuente.

En GitHub Actions, puede usar la clave `include` para agregar variables de entorno personalizadas a una matriz. En este ejemplo, las entradas de matriz de `node-version` se configuran a fin de usar otro valores para las variables de entorno `site` y `datacenter`. Después, el paso `Echo site details` usa `env: ${{ matrix.env }}` para hacer referencia a las variables personalizadas:

```yaml
name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
       include:
         - node-version: '14.x'
           site: "prod"
           datacenter: "site-a"
         - node-version: '16.x'
           site: "dev"
           datacenter: "site-b"
    steps:
      - name: Echo site details
        env:
          SITE: ${{ matrix.site }}
          DATACENTER: ${{ matrix.datacenter }}
        run: echo $SITE $DATACENTER
```

## Características clave en GitHub Actions

Al migrar desde Travis CI, considera las siguientes características clave en GitHub Actions:

### Almacenamiento de secretos

GitHub Actions te permite almacenar secretos y referenciarlos en tus jobs. Las organizaciones de GitHub Actions pueden limitar qué repositorios pueden acceder a sus secretos. Las reglas de protección de implementación pueden requerir aprobación manual para que un flujo de trabajo acceda a los secretos del ambiente. Para más información, consulta [Secretos](/es/actions/security-for-github-actions/security-guides/about-secrets).

### Compartir archivos entre tareas y flujos de trabajo

GitHub Actions incluye compatibilidad integrada para almacenamiento de artefactos, lo cual te permite compartir archivos entre jobs en un flujo de trabajo. También puedes guardar los archivos resultantes y compartirlos con otros flujos de trabajo. Para más información, consulta [Descripción de GitHub Actions](/es/actions/learn-github-actions/essential-features-of-github-actions#sharing-data-between-jobs).

### Alojar tus propios corredores

Si tus jobs requieren de hardware o software específico, GitHub Actions te permite almacenar tus propios ejecutores y enviar tus jobs para que éstos los procesen. GitHub Actions también te permite utilizar políticas para controlar cómo se accede a estos ejecutores, otorgando acceso a nivel de organización o de repositorio. Para más información, consulta [Administración de ejecutores autohospedados](/es/actions/how-tos/managing-self-hosted-runners).

### Trabajos concurrentes y tiempo de ejecución

Los trabajos simultáneos y los tiempos de ejecución de los flujos de trabajo en GitHub Actions pueden variar dependiendo del plan de tu GitHub. Para más información, consulta [Facturación y utilización](/es/actions/learn-github-actions/usage-limits-billing-and-administration).

### Utilizar lenguajes diferentes en GitHub Actions

Cuando trabajas con distintos idiomas en GitHub Actions, puedes crear un paso en tu tarea para configurar las dependencias de idioma. Para obtener más información acerca de cómo trabajar con un lenguaje en particular, consulta [Construir y probar tu código](/es/actions/use-cases-and-examples/building-and-testing).

## Ejecución de scripts

GitHub Actions puede usar pasos `run` para ejecutar scripts o comandos de shell. Para usar un shell determinado, puede especificar el tipo `shell` al proporcionar la ruta de acceso al script. Para más información, consulta [Sintaxis del flujo de trabajo para GitHub Actions](/es/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun).

Por ejemplo:

```yaml
steps:
  - name: Run build script
    run: ./.github/scripts/build.sh
    shell: bash
```

## Manejo de errores en GitHub Actions

Cuando te migras a GitHub Actions, hay varios acercamientos al manejo de errores que puede que necesites tener en mente.

### Manejo de errores en scripts

GitHub Actions detiene un job inmediatamente si alguno de los pasos regresa un código de error. Para más información, consulta [Sintaxis del flujo de trabajo para GitHub Actions](/es/actions/using-workflows/workflow-syntax-for-github-actions#exit-codes-and-error-action-preference).

### Manejo de errores en tareas

GitHub Actions usa condicionales `if` para ejecutar trabajos o pasos en ciertas situaciones. Por ejemplo, puede ejecutar un paso cuando otro paso da como resultado `failure()`. Para más información, consulta [Sintaxis del flujo de trabajo para GitHub Actions](/es/actions/using-workflows/workflow-syntax-for-github-actions#example-using-status-check-functions). También puede usar [`continue-on-error`](/es/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error) para evitar que una ejecución de flujo de trabajo se detenga cuando se produce un error en un trabajo.

## Sintaxis de migración para condicionales y expresiones

Para ejecutar trabajos con expresiones condicionales, Travis CI y GitHub Actions comparten una sintaxis de condición `if` similar. GitHub Actions permite usar el condicional `if` para evitar que un trabajo o un paso se ejecuten a menos que se cumpla una condición. Para más información, consulta [Evaluación de expresiones en flujos de trabajo y acciones](/es/actions/learn-github-actions/expressions).

En este ejemplo se muestra cómo un condicional `if` puede controlar si se ejecuta un paso:

```yaml
jobs:
  conditional:
    runs-on: ubuntu-latest
    steps:
      - run: echo "This step runs with str equals 'ABC' and num equals 123"
        if: env.str == 'ABC' && env.num == 123
```

## Migrar las fases a pasos

Donde Travis CI usa *fases* para ejecutar *pasos*, GitHub Actions tiene *pasos* que ejecutan *acciones*. Puede encontrar acciones precompiladas en [GitHub Marketplace](https://github.com/marketplace?type=actions), o bien puede crear sus propias acciones. Para más información, consulta [Reutilización de automatizaciones](/es/actions/creating-actions).

A continuación encontrarás un ejemplo de la sintaxis para cada sistema.

### Sintaxis de Travis CI para fases y pasos

```yaml
language: python
python:
  - "3.7"

script:
  - python script.py
```

### Sintaxis de GitHub Actions para pasos y acciones

```yaml
jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v5
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py
```

## Almacenar dependencias en caché

Travis CI y GitHub Actions te permiten guardar dependencias en caché manualmente para reutilizarlas posteriormente.

En estos ejemplos se muestra la sintaxis de caché de cada sistema.

### Sintaxis de Travis CI para el almacenamiento en caché

```yaml
language: node_js
cache: npm
```

### sintaxis de GitHub Actions para el almacenamiento en caché

```yaml
- name: Cache node modules
  uses: actions/cache@v4
  with:
    path: ~/.npm
    key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
    restore-keys: v1-npm-deps-
```

## Ejemplos de tareas comunes

Esta sección compara cómo GitHub Actions y Travis CI realizan tareas en común.

### Configurar variables de ambiente

Puedes crear variables de ambiente personalizadas en un job de GitHub Actions.

#### Sintaxis de Travis CI para una variable de entorno

```yaml
env:
  - MAVEN_PATH="/usr/local/maven"
```

#### Flujo de trabajo de GitHub Actions con una variable de entorno

```yaml
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'
```

### Compilar con Node.js

#### Travis CI para la compilación con Node.js

```yaml
install:
  - npm install
script:
  - npm run build
  - npm test
```

#### Flujo de trabajo de GitHub Actions para el desarrollo con Node.js

```yaml
name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '16.x'
      - run: npm install
      - run: npm run build
      - run: npm test
```

## Pasos siguientes

Para continuar el aprendizaje sobre las características principales de GitHub Actions, consulta [Escritura de flujos de trabajo](/es/actions/learn-github-actions).