GitHub Actions を使った再現可能なビルド
もくじ
SOURCE_DATE_EPOCH
は
標準化された環境変数 (standardized environment variable) であり、ビルドツールに対して再現可能なビルドを生成することを指示します。
ビルドの際にこの環境変数を設定しておくと、イメージインデックス、設定情報、ファイルメタデータの中にあるタイムスタンプを、指定された Unix 時間にすることができます。
GitHub Actions 内にて環境変数を設定するには、ビルドステップにおいてビルトインの env
プロパティを利用します。
Unix エポックのタイムスタンプ
以下の例では SOURCE_DATE_EPOCH
を Unix エポック時間の値 0 に設定します。
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build
uses: docker/build-push-action@v6
with:
tags: user/app:latest
env:
SOURCE_DATE_EPOCH: 0
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build
uses: docker/bake-action@v5
env:
SOURCE_DATE_EPOCH: 0
Git コミットのタイムスタンプ
以下の例では SOURCE_DATE_EPOCH
を Git コミットのタイムスタンプに設定します。
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Get Git commit timestamps
run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
- name: Build
uses: docker/build-push-action@v6
with:
tags: user/app:latest
env:
SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Get Git commit timestamps
run: echo "TIMESTAMP=$(git log -1 --pretty=%ct)" >> $GITHUB_ENV
- name: Build
uses: docker/bake-action@v5
env:
SOURCE_DATE_EPOCH: ${{ env.TIMESTAMP }}
さらなる情報
BuildKit における SOURCE_DATE_EPOCH
サポートの詳細は
BuildKit ドキュメント を参照してください。