# Compilaciones reproducibles con GitHub Actions


`SOURCE_DATE_EPOCH` es una [variable de entorno estandarizada][source_date_epoch]
para indicar a las herramientas de compilación que produzcan una salida reproducible.
Definir esta variable de entorno para una compilación hace que las marcas de tiempo en el
índice de la imagen, la configuración y los metadatos de los archivos reflejen el tiempo Unix especificado.

[source_date_epoch]: https://reproducible-builds.org/docs/source-date-epoch/

Para definir la variable de entorno en GitHub Actions,
utiliza la propiedad integrada `env` en el paso de compilación.

## Marcas de tiempo de la época Unix

El siguiente ejemplo establece la variable `SOURCE_DATE_EPOCH` a 0, la época Unix.

**`docker/build-push-action`**



```yaml
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Configurar Docker Buildx
        uses: docker/setup-buildx-action@v4

      - name: Compilar
        uses: docker/build-push-action@v7
        with:
          tags: user/app:latest
        env:
          SOURCE_DATE_EPOCH: 0
```

**`docker/bake-action`**



```yaml
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Configurar Docker Buildx
        uses: docker/setup-buildx-action@v4

      - name: Compilar
        uses: docker/bake-action@v7
        env:
          SOURCE_DATE_EPOCH: 0
```



## Marcas de tiempo de confirmaciones de Git

El siguiente ejemplo establece `SOURCE_DATE_EPOCH` a la marca de tiempo de la confirmación (commit) de Git.

**`docker/build-push-action`**



```yaml
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Configurar Docker Buildx
        uses: docker/setup-buildx-action@v4

      - name: Obtener marcas de tiempo de confirmaciones de Git
        run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV

      - name: Compilar
        uses: docker/build-push-action@v7
        with:
          tags: user/app:latest
        env:
          SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}
```

**`docker/bake-action`**



```yaml
name: ci

on:
  push:

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Configurar Docker Buildx
        uses: docker/setup-buildx-action@v4

      - name: Obtener marcas de tiempo de confirmaciones de Git
        run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV

      - name: Compilar
        uses: docker/bake-action@v7
        env:
          SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}
```



## Información adicional

Para obtener más información sobre el soporte de `SOURCE_DATE_EPOCH` en BuildKit,
consulta la [documentación de BuildKit](https://github.com/moby/buildkit/blob/master/docs/build-repro.md#source_date_epoch).

