mirror of
https://github.com/kernelkit/infix.git
synced 2026-08-06 23:43:20 +02:00
Redesign how GH actions are triggered. This new design uses a self-trigger to start jobs which are only started via workflow_calls. The main benefit of this is to be able to start workflows from various Infix Spins without needing to duplicate the workflow files in them. Upcoming patches are intended to parameterize to allow Spins to pass different architectures, brand names and such. Signed-off-by: Richard Alpe <richard@bit42.se>
152 lines
4.9 KiB
YAML
152 lines
4.9 KiB
YAML
name: Build Infix
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
minimal:
|
|
description: 'Build minimal defconfigs'
|
|
required: false
|
|
default: true
|
|
type: boolean
|
|
parallell:
|
|
description: 'Massive parallel build of each image'
|
|
required: false
|
|
default: true
|
|
type: boolean
|
|
|
|
workflow_call:
|
|
inputs:
|
|
target:
|
|
required: true
|
|
type: string
|
|
jobs:
|
|
build:
|
|
name: Build Infix ${{ inputs.target }}
|
|
runs-on: [ self-hosted, latest ]
|
|
strategy:
|
|
fail-fast: false
|
|
outputs:
|
|
build_id: ${{ steps.vars.outputs.INFIX_BUILD_ID }}
|
|
steps:
|
|
- name: Cleanup Build Folder
|
|
run: |
|
|
ls -la ./
|
|
rm -rf ./* || true
|
|
rm -rf ./.??* || true
|
|
ls -la ./
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
clean: true
|
|
fetch-depth: 0
|
|
submodules: recursive
|
|
|
|
- name: Set Build Variables
|
|
id: vars
|
|
run: |
|
|
if [ -n "${{ github.event.pull_request.head.sha }}" ]; then
|
|
# Since PRs are built from an internally generated merge
|
|
# commit, reverse lookups of PRs and/or commits from
|
|
# image version information are cumbersome. Therefore:
|
|
# explicitly set a build id that references both the PR
|
|
# and the commit.
|
|
printf "INFIX_BUILD_ID=pr%d.%.7s\n" \
|
|
"${{ github.event.number }}" "${{ github.event.pull_request.head.sha }}" \
|
|
| tee -a $GITHUB_OUTPUT $GITHUB_ENV
|
|
fi
|
|
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
|
|
if [ "${{ github.event.inputs.minimal }}" == "true" ]; then
|
|
flavor="_minimal"
|
|
fi
|
|
else
|
|
# Ensure 'release' job get the proper image when building main
|
|
if [ "$GITHUB_REF_NAME" != "main" ]; then
|
|
flavor="_minimal"
|
|
else
|
|
flavor=""
|
|
fi
|
|
if ${{ contains(github.event.pull_request.labels.*.name, 'ci:main') }}; then
|
|
flavor=""
|
|
fi
|
|
fi
|
|
target=${{ inputs.target }}
|
|
echo "dir=infix-$target" >> $GITHUB_OUTPUT
|
|
echo "tgz=infix-$target.tar.gz" >> $GITHUB_OUTPUT
|
|
echo "flv=$flavor" >> $GITHUB_OUTPUT
|
|
echo "Building target ${target}${flavor}_defconfig"
|
|
|
|
- name: Restore Cache of dl/
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: dl/
|
|
key: dl-${{ hashFiles('.git/modules/buildroot/HEAD', 'configs/*', 'package/*/*.hash') }}
|
|
restore-keys: |
|
|
dl-
|
|
|
|
- name: Restore Cache of .ccache/
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: .ccache/
|
|
key: ccache-${{ inputs.target }}-${{ hashFiles('.git/modules/buildroot/HEAD', 'package/*/*.hash') }}
|
|
restore-keys: |
|
|
ccache-${{ inputs.target }}-
|
|
ccache-
|
|
|
|
- name: Configure ${{ inputs.target }}${{ steps.vars.outputs.flv }}
|
|
run: |
|
|
make ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig
|
|
|
|
- name: Unit Test ${{ inputs.target }}
|
|
run: |
|
|
make test-unit
|
|
|
|
- name: Prepare parallel build
|
|
id: parallel
|
|
run: |
|
|
|
|
if [ "${{ ((github.event.inputs.parallel == 'true' && github.event_name == 'workflow_dispatch') || (github.ref_name != 'main' && github.event_name != 'workflow_dispatch')) }}" == "true" ]; then
|
|
echo "BR2_PER_PACKAGE_DIRECTORIES=y" >> output/.config
|
|
MAKE="make -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))"
|
|
echo "Building in parallel with -j$((`getconf _NPROCESSORS_ONLN` / 2 + 2))"
|
|
else
|
|
echo "Disabling parallel build"
|
|
MAKE="make"
|
|
fi
|
|
echo "MAKE=$MAKE" >> $GITHUB_OUTPUT
|
|
|
|
- name: Build ${{ inputs.target }}${{ steps.vars.outputs.flv }}
|
|
run: |
|
|
echo "Building ${{ inputs.target }}${{ steps.vars.outputs.flv }}_defconfig ..."
|
|
eval "${{ steps.parallel.outputs.MAKE }}"
|
|
|
|
- name: Check SBOM from Build
|
|
run: |
|
|
make legal-info
|
|
|
|
- name: Build test specification
|
|
run: |
|
|
make test-spec
|
|
|
|
- name: Resulting size of build
|
|
run: |
|
|
printf "Size of complete tree : "
|
|
du -sh .
|
|
printf "Size of output/ : "
|
|
du -sh output
|
|
printf "Size of dl/ : "
|
|
du -sh dl
|
|
printf "Size of output/images/: "
|
|
ls -l output/images/
|
|
|
|
- name: Prepare ${{ inputs.target }} Artifact
|
|
run: |
|
|
cd output/
|
|
mv images ${{ steps.vars.outputs.dir }}
|
|
ln -s ${{ steps.vars.outputs.dir }} images
|
|
tar cfz ${{ steps.vars.outputs.tgz }} ${{ steps.vars.outputs.dir }}
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
path: output/${{ steps.vars.outputs.tgz }}
|
|
name: artifact-${{ inputs.target }}
|