Skip to content

Commit

Permalink
Only rebuild images on request, or once 14 days old
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew-Whitlock committed Nov 14, 2024
1 parent 848e50e commit 45c3156
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 39 deletions.
99 changes: 99 additions & 0 deletions .github/workflows/build-env.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Build Fenix's Environment Image

on:
# workflow_call = called by another workflow
workflow_call:
inputs:
ompi_version:
description: "Open MPI version to build"
type: string
required: true
max_age:
description: "Maximum image age before rebuild, in days"
type: number
required: false
default: 14
# workflow_dispatch = manual trigger
workflow_dispatch:
inputs:
ompi_version:
description: "Open MPI version to build"
type: string
required: true
max_age:
description: "Maximum image age before rebuild, in days"
type: number
required: false
default: 0

env:
IMAGE_NAME: ghcr.io/sandialabs/fenix/env

jobs:
detect_image:
runs-on: ubuntu-latest
outputs:
found: ${{ steps.outputs.found }}
steps:
- name: Check for valid image
run: |
IMG=${{ env.IMAGE_NAME }}:${{ inputs.ompi_version }}
docker image rm -f $IMG; docker pull $IMG || true
IMG_CREATED=$(docker inspect --type=image --format '{{.Created}}' $IMG 2>/dev/null)
if [ -z "$IMG_CREATED" ]; then
echo "found=false" >> $GITHUB_OUTPUT
exit 0
fi
IMG_AGE=$(( ($(date +%s) - $(date -d "$IMG_CREATED" +%s)) / (60*60*24) ))
if [ "$IMG_AGE" -lt ${{ inputs.max_age }} ]; then
echo "found=true" >> $GITHUB_OUTPUT
else
echo "found=false" >> $GITHUB_OUTPUT
fi
build_image:
runs-on: ubuntu-latest
needs: detect_image
if: needs.detect_image.outputs.found == 'false'
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Log in to GHCR container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Bake the bootstrap docker image
uses: docker/bake-action@v5
with:
files: .github/docker-compose.yml
targets: bootstrap
workdir: .
set: |
*.output=type=docker,name=bootstrap
*.cache-from=type=gha,scope=bootstrap/${{ matrix.ompi_version }}
*.cache-to=type=gha,mode=max,scope=bootstrap/${{ matrix.ompi_version }}
*.args.OMPI_VERSION=${{ matrix.ompi_version }}
- name: Bootstrap the environment Dockerfile
run: docker run -v ${GITHUB_WORKSPACE}/.github:/configs bootstrap

- name: Build the environment
uses: docker/bake-action@v5
with:
files: .github/docker-compose.yml
targets: env
workdir: .
pull: true
set: |
*.cache-from=type=gha,scope=env/${{ matrix.ompi_version }}
*.cache-to=type=gha,mode=max,scope=env/${{ matrix.ompi_version }}
env.tags=ghcr.io/sandialabs/fenix/env:${{ matrix.ompi_version }}
env.output=type=registry,name=ghcr.io/sandialabs/fenix/env:${{ matrix.ompi_version }}
43 changes: 4 additions & 39 deletions .github/workflows/ci_checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,54 +19,19 @@ jobs:
- 5.0.3

steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Build the environment image
uses: ./.github/workflows/build-env
with:
ompi_version: ${{ matrix.ompi_version }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Log in to GHCR container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Bake the bootstrap docker image
uses: docker/bake-action@v5
with:
files: .github/docker-compose.yml
targets: bootstrap
workdir: .
set: |
*.output=type=docker,name=bootstrap
*.cache-from=type=gha,scope=bootstrap/${{ matrix.ompi_version }}
*.cache-to=type=gha,mode=max,scope=bootstrap/${{ matrix.ompi_version }}
*.args.OMPI_VERSION=${{ matrix.ompi_version }}
- name: Bootstrap the environment Dockerfile
run: docker run -v ${GITHUB_WORKSPACE}/.github:/configs bootstrap

- name: Build the environment
uses: docker/bake-action@v5
with:
files: .github/docker-compose.yml
targets: env
workdir: .
pull: true
set: |
*.cache-from=type=gha,scope=env/${{ matrix.ompi_version }}
*.cache-to=type=gha,mode=max,scope=env/${{ matrix.ompi_version }}
env.tags=ghcr.io/sandialabs/fenix/env:${{ matrix.ompi_version }}
env.output=type=registry,name=ghcr.io/sandialabs/fenix/env:${{ matrix.ompi_version }}
- name: Build Fenix
uses: docker/bake-action@v5
with:
source: .
files: .github/docker-compose.yml
targets: fenix
workdir: .
set: |
*.output=type=docker,name=fenix
*.args.OMPI_VERSION=${{ matrix.ompi_version }}
Expand Down

0 comments on commit 45c3156

Please sign in to comment.