Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions .github/actions/fetchimages/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Pull images
descriptions: Fetches and loads images from the cache

inputs:
version:
description: key of the cache and tag of the images
required: true
type: string
flavor:
description: flavor of the OS image
required: false
type: string
toolkit:
description: fetch toolkit image
required: false
default: 'true'
type: 'boolean'
os:
description: fetch OS image
required: false
default: 'true'
type: 'boolean'

runs:
using: composite
steps:
- if: ${{ inputs.toolkit == 'true' }}
name: Fetch toolkit image
id: cache-toolkit
uses: actions/cache/restore@v4
env:
cache-name: pr-toolkit-build-x86_64
with:
path: /tmp/toolkit.tar
key: ${{ env.cache-name }}-${{ inputs.version }}
fail-on-cache-miss: true
- if: ${{ inputs.toolkit == 'true' }}
name: Load toolkit image
id: load-toolkit
shell: bash
run: |
docker load -i /tmp/toolkit.tar
- if: ${{ inputs.os == 'true' }}
name: Fetch OS image
id: cache-os
uses: actions/cache/restore@v4
env:
cache-name: pr-os-build-x86_64-${{ inputs.flavor }}
with:
path: /tmp/os.tar
key: ${{ env.cache-name }}-${{ inputs.version }}
fail-on-cache-miss: true
- if: ${{ inputs.os == 'true' }}
name: Load OS image
id: load-os
shell: bash
run: |
docker load -i /tmp/os.tar
63 changes: 37 additions & 26 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,23 +1,9 @@
name: Build
on:
pull_request:
push:
tags:
- v**
pull_request_target:
types:
- opened
- synchronize
- reopened
paths:
- tests/**
- make/**
- Makefile
- .github/**
- pkg/**
- cmd/**
- go.mod
- go.sum
- examples/**
branches:
- main

jobs:
detect:
Expand All @@ -41,29 +27,53 @@ jobs:

build-toolkit:
permissions:
packages: write
contents: read
needs:
- detect
runs-on: ubuntu-latest
env:
PLATFORM: ${{ needs.detect.outputs.platform }}
TOOLKIT_REPO: ghcr.io/${{github.repository}}/elemental-cli
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
ref: "${{ github.event.pull_request.head.sha }}"
- run: |
git fetch --prune --unshallow
- name: Log in to ghcr.io
uses: docker/login-action@v3
- name: Define version
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use version identifier and tag base on a hash from certain paths. This allows to re-use cache in case of PRs that are only touching parts that do not affect the build (e.g. tests code, workflows, etc.)

id: version
env:
hash: ${{ hashFiles('Dockerfile', '**/go.sum', '**/pkg/**', '**/examples/**', '**/cmd/**', '**/vendor/**', '**/Makefile', '**/main.go') }}
run: |
version="${{ env.hash }}"
version=${version::16}
echo "version=${version}" >> $GITHUB_OUTPUT
- name: Check cache for Toolkit image
id: cache-toolkit
uses: actions/cache/restore@v4
env:
cache-name: pr-toolkit-build-x86_64
lookup-only: true
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build toolkit
path: /tmp/toolkit.tar
key: ${{ env.cache-name }}-${{ steps.version.outputs.version }}
- if: ${{ steps.cache-toolkit.outputs.cache-hit != 'true' }}
name: Build toolkit
env:
VERSION: ${{ steps.version.outputs.version }}
run: |
make DOCKER_ARGS=--push build
make build-save
mv build/elemental-toolkit*.tar /tmp/toolkit.tar
- if: ${{ steps.cache-toolkit.outputs.cache-hit != 'true' }}
name: Save toolkit image in cache
id: save-toolkit
uses: actions/cache/save@v4
env:
cache-name: pr-toolkit-build-x86_64
with:
path: /tmp/toolkit.tar
key: ${{ env.cache-name }}-${{ steps.version.outputs.version }}

build-matrix:
needs:
Expand All @@ -76,3 +86,4 @@ jobs:
uses: ./.github/workflows/build_and_test_x86.yaml
with:
flavor: ${{ matrix.flavor }}
version: ${{ needs.build-toolkit.outputs.version }}
Loading