mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-28 01:28:59 +00:00
02391a5e5a
Extract the building of OpenWrt into an own workflow which is then
triggered by the kernel.yml and packages.yml workflow with different
inputs. This allows us to share much of the code of the workflow.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 7c406a5f08
)
214 lines
6.8 KiB
YAML
214 lines
6.8 KiB
YAML
name: Build sub target
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
target:
|
|
required: true
|
|
type: string
|
|
include_feeds:
|
|
type: boolean
|
|
build_full:
|
|
type: boolean
|
|
build_all_modules:
|
|
type: boolean
|
|
build_all_kmods:
|
|
type: boolean
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
setup_build:
|
|
name: Setup build
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
owner_lc: ${{ steps.lower_owner.outputs.owner_lc }}
|
|
ccache_hash: ${{ steps.ccache_hash.outputs.ccache_hash }}
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Set lower case owner name
|
|
id: lower_owner
|
|
run: |
|
|
OWNER_LC=$(echo "${{ github.repository_owner }}" \
|
|
| tr '[:upper:]' '[:lower:]')
|
|
echo "owner_lc=$OWNER_LC" >> $GITHUB_OUTPUT
|
|
|
|
- name: Generate ccache hash
|
|
id: ccache_hash
|
|
run: |
|
|
CCACHE_HASH=$(md5sum include/kernel-* | awk '{ print $1 }' \
|
|
| md5sum | awk '{ print $1 }')
|
|
echo "ccache_hash=$CCACHE_HASH" >> $GITHUB_OUTPUT
|
|
|
|
build:
|
|
name: Build with external toolchain
|
|
needs: setup_build
|
|
runs-on: ubuntu-latest
|
|
|
|
container: ghcr.io/${{ needs.setup_build.outputs.owner_lc }}/tools:latest
|
|
|
|
permissions:
|
|
contents: read
|
|
packages: read
|
|
|
|
steps:
|
|
- name: Checkout master directory
|
|
uses: actions/checkout@v3
|
|
with:
|
|
path: openwrt
|
|
|
|
- name: Checkout packages feed
|
|
if: inputs.include_feeds == true
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: openwrt/packages
|
|
path: openwrt/feeds/packages
|
|
|
|
- name: Checkout luci feed
|
|
if: inputs.include_feeds == true
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: openwrt/luci
|
|
path: openwrt/feeds/luci
|
|
|
|
- name: Checkout routing feed
|
|
if: inputs.include_feeds == true
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: openwrt/routing
|
|
path: openwrt/feeds/routing
|
|
|
|
- name: Checkout telephony feed
|
|
if: inputs.include_feeds == true
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: openwrt/telephony
|
|
path: openwrt/feeds/telephony
|
|
|
|
- name: Fix permission
|
|
run: |
|
|
chown -R buildbot:buildbot openwrt
|
|
|
|
- name: Initialization environment
|
|
run: |
|
|
TARGET=$(echo ${{ inputs.target }} | cut -d "/" -f 1)
|
|
SUBTARGET=$(echo ${{ inputs.target }} | cut -d "/" -f 2)
|
|
echo "TARGET=$TARGET" >> "$GITHUB_ENV"
|
|
echo "SUBTARGET=$SUBTARGET" >> "$GITHUB_ENV"
|
|
|
|
- name: Update & Install feeds
|
|
if: inputs.include_feeds == true
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: |
|
|
./scripts/feeds update -a
|
|
./scripts/feeds install -a
|
|
|
|
- name: Parse toolchain file
|
|
working-directory: openwrt
|
|
run: |
|
|
TOOLCHAIN_STRING="$(curl "https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/sha256sums" \
|
|
| grep ".*openwrt-toolchain.*tar.xz")"
|
|
TOOLCHAIN_FILE=$(echo "$TOOLCHAIN_STRING" | sed -n -e 's/.*\(openwrt-toolchain.*\).tar.xz/\1/p')
|
|
TOOLCHAIN_SHA256=$(echo "$TOOLCHAIN_STRING" | cut -d ' ' -f 1)
|
|
|
|
echo "TOOLCHAIN_FILE=$TOOLCHAIN_FILE" >> "$GITHUB_ENV"
|
|
echo "TOOLCHAIN_SHA256=$TOOLCHAIN_SHA256" >> "$GITHUB_ENV"
|
|
|
|
- name: Cache external toolchain
|
|
id: cache-external-toolchain
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: openwrt/${{ env.TOOLCHAIN_FILE }}
|
|
key: ${{ env.TOOLCHAIN_FILE }}-${{ env.TOOLCHAIN_SHA256 }}
|
|
|
|
- name: Cache ccache
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: openwrt/.ccache
|
|
key: ccache-kernel-${{ env.TARGET }}/${{ env.SUBTARGET }}-${{ needs.setup_build.outputs.ccache_hash }}
|
|
restore-keys: |
|
|
ccache-kernel-${{ env.TARGET }}/${{ env.SUBTARGET }}-
|
|
|
|
- name: Download external toolchain
|
|
if: steps.cache-external-toolchain.outputs.cache-hit != 'true'
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: |
|
|
wget -O - https://downloads.cdn.openwrt.org/snapshots/targets/${{ env.TARGET }}/${{ env.SUBTARGET }}/${TOOLCHAIN_FILE}.tar.xz \
|
|
| tar --xz -xf -
|
|
|
|
- name: Extract prebuilt tools
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: ./scripts/ext-tools.sh --tools /tools.tar
|
|
|
|
- name: Configure all kernel modules
|
|
if: inputs.build_all_kmods == true
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: |
|
|
echo CONFIG_ALL_KMODS=y >> .config
|
|
|
|
- name: Configure all modules
|
|
if: inputs.build_all_modules == true
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: |
|
|
echo CONFIG_ALL=y >> .config
|
|
|
|
- name: Configure external toolchain
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: |
|
|
echo CONFIG_DEVEL=y >> .config
|
|
echo CONFIG_AUTOREMOVE=y >> .config
|
|
echo CONFIG_CCACHE=y >> .config
|
|
|
|
./scripts/ext-toolchain.sh \
|
|
--toolchain ${{ env.TOOLCHAIN_FILE }}/toolchain-* \
|
|
--overwrite-config \
|
|
--config ${{ env.TARGET }}/${{ env.SUBTARGET }}
|
|
|
|
- name: Show configuration
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: ./scripts/diffconfig.sh
|
|
|
|
- name: Build tools
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: make tools/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
|
|
|
|
- name: Build toolchain
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: make toolchain/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
|
|
|
|
- name: Build Kernel
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: make target/compile -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
|
|
|
|
- name: Build Kernel Kmods
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: make package/linux/compile -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
|
|
|
|
- name: Build everything
|
|
if: inputs.build_full == true
|
|
shell: su buildbot -c "sh -e {0}"
|
|
working-directory: openwrt
|
|
run: make -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh
|
|
|
|
- name: Upload logs
|
|
if: failure()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ${{ env.TARGET }}-${{ env.SUBTARGET }}-logs
|
|
path: "openwrt/logs"
|