Build OpenWrt #582
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#================================================= | |
# https://github.com/tete1030/openwrt-fastbuild-actions | |
# Description: FAST building OpenWrt with Github Actions and Docker! | |
# Lisence: MIT | |
# Author: Texot | |
#================================================= | |
env: | |
# DO NOT CHANGE the following here, set them only in forked repo's Settings->Secrets page | |
# You don't need to set docker_registry if you are using the default Docker Hub Settings->Secrets | |
DK_REGISTRY: ${{secrets.docker_registry}} | |
DK_USERNAME: ${{secrets.docker_username}} | |
DK_PASSWORD: ${{secrets.docker_password}} | |
SLACK_WEBHOOK_URL: ${{secrets.SLACK_WEBHOOK_URL}} | |
TMATE_ENCRYPT_PASSWORD: ${{secrets.TMATE_ENCRYPT_PASSWORD}} | |
ACTIONS_ALLOW_UNSECURE_COMMANDS: true | |
OPT_UPDATE_FEEDS: true | |
name: Build OpenWrt | |
on: | |
deployment: | |
repository_dispatch: | |
workflow_dispatch: | |
inputs: | |
OPT_REBUILD: | |
description: 'Rebuild from Scratch' | |
required: false | |
type: boolean | |
pull_request: | |
push: | |
paths: | |
- 'user/**' | |
# # For 'schedule', see examples in: https://crontab.guru/examples.html | |
# # e.g. every sunday midnight: '0 0 * * 0' every midnight: '0 0 * * *' | |
# schedule: | |
# - cron: '0 0 * * 0' | |
# watch: | |
# types: [started] | |
jobs: | |
build: | |
runs-on: ubuntu-22.04 | |
# For `github.event`'s structure, see: https://developer.github.com/v3/activity/events/types/ | |
# Do not modify the trigger methods here, customize them in the `on` section | |
if: | | |
github.event_name == 'push' | |
|| github.event_name == 'pull_request' | |
|| github.event_name == 'repository_dispatch' | |
|| github.event_name == 'workflow_dispatch' | |
|| github.event_name == 'deployment' | |
|| (github.event_name == 'watch' && github.event.action == 'started' && github.event.repository.owner.id == github.event.sender.id) | |
|| github.event_name == 'schedule' | |
name: ${{matrix.title}} ${{matrix.target}} | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- normal | |
- test | |
# ########### Add your target name below ########### | |
# E.g. target: [x86_64, wdr4310v1] | |
target: | |
# - 19.07.7 | |
# - 19.07.8 | |
# - 19.07.10 | |
# - 21.02.0 | |
# - 21.02.1 | |
# - 21.02.2 | |
# - 21.02.3 | |
# - 21.02.5 | |
# - 21.02.6 | |
# - 21.02.7 | |
# - 21.02.1-ha | |
# - 22.03.0 | |
# - 22.03.2 | |
# - 22.03.3 | |
# - 22.03.4 | |
# - 22.03.5 | |
#- 22.03.6 | |
# - 23.05.0 | |
# - 23.05.2 | |
# - 23.05.3 | |
# - 23.05.4 | |
- 23.05.5 | |
# - snapshot | |
include: | |
- mode: normal | |
title: Build | |
- mode: test | |
title: Fast check | |
env: | |
HOST_WORK_DIR: ${{github.workspace}} | |
BUILD_MODE: ${{matrix.mode}} | |
BUILD_TARGET: ${{matrix.target}} | |
OPT_REBUILD: ${{ inputs.OPT_REBUILD }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Init build env | |
run: scripts/cisteps/build-openwrt/01-init_env.sh | |
- name: Check if skip this job | |
run: scripts/cisteps/build-openwrt/02-check_target.sh | |
- name: Clean up for extra space | |
if: env.SKIP_TARGET == '0' && env.TEST != '1' | |
run: scripts/cisteps/build-openwrt/03-clean_up.sh | |
# https://github.com/docker/setup-qemu-action | |
- name: Set up QEMU | |
id: buildx-qemu | |
if: env.SKIP_TARGET == '0' | |
uses: docker/setup-qemu-action@v3 | |
# https://github.com/docker/setup-buildx-action | |
- name: Set up Docker Buildx | |
id: buildx | |
if: env.SKIP_TARGET == '0' | |
uses: docker/setup-buildx-action@v3 | |
- name: Configure docker | |
if: env.SKIP_TARGET == '0' | |
run: scripts/cisteps/build-openwrt/04-configure_docker.sh | |
- name: Check status of builders | |
if: env.SKIP_TARGET == '0' | |
run: scripts/cisteps/build-openwrt/05-check_builders.sh | |
- name: '[Debug] Wait for SSH connection (timeout 5min)' | |
if: env.SKIP_TARGET == '0' && env.OPT_DEBUG == '1' && env.TEST != '1' | |
env: | |
TIMEOUT_MIN: 5 | |
uses: openlumi/safe-debugger-action@dev | |
- name: 'Get key-build' | |
run: 'echo "$OPENWRT_BUILD_KEY" > $HOST_WORK_DIR/key-build;echo "$OPENWRT_BUILD_KEY_PUB" > $HOST_WORK_DIR/key-build.pub' | |
if: env.SKIP_TARGET == '0' && env.TEST != '1' | |
shell: bash | |
env: | |
HOST_WORK_DIR: ${{github.workspace}} | |
OPENWRT_BUILD_KEY: ${{secrets.OPENWRT_BUILD_KEY}} | |
OPENWRT_BUILD_KEY_PUB: ${{secrets.OPENWRT_BUILD_KEY_PUB}} | |
- name: Get builder | |
if: env.SKIP_TARGET == '0' | |
run: scripts/cisteps/build-openwrt/06-get_builder.sh | |
- name: Clone/update OpenWrt | |
if: env.SKIP_TARGET == '0' | |
run: scripts/cisteps/build-openwrt/07-download_openwrt.sh | |
- name: Apply customizations | |
if: env.SKIP_TARGET == '0' | |
run: scripts/cisteps/build-openwrt/08-customize.sh | |
# Allow intermediate customization | |
- name: '[Debug/Menuconfig] Wait for SSH connection (timeout 30min)' | |
if: env.SKIP_TARGET == '0' && env.OPT_DEBUG == '1' && env.TEST != '1' | |
env: | |
TMATE_DOCKER_CONTAINER: ${{env.BUILDER_CONTAINER_ID}} | |
uses: openlumi/safe-debugger-action@dev | |
- name: Prepare config file | |
if: env.SKIP_TARGET == '0' | |
run: scripts/cisteps/build-openwrt/09-prepare_config.sh | |
- name: Download packages | |
if: env.SKIP_TARGET == '0' | |
run: scripts/cisteps/build-openwrt/10-download_packages.sh | |
- name: Print disk space | |
if: env.SKIP_TARGET == '0' | |
run: df -h | |
- name: Compile firmware and packages with multiple threads | |
id: mtcompile | |
if: env.SKIP_TARGET == '0' | |
continue-on-error: true | |
run: scripts/cisteps/build-openwrt/11-compile_multi.sh | |
- name: Compile firmware and packages with single threads when failed | |
id: stcompile | |
if: env.SKIP_TARGET == '0' && steps.mtcompile.outputs.started == '1' && steps.mtcompile.outputs.status != 'success' | |
run: scripts/cisteps/build-openwrt/12-compile_single.sh | |
- name: Print disk space | |
if: env.SKIP_TARGET == '0' | |
run: df -h | |
# failure checking | |
- name: '[Failure/Debug] Wait for SSH connection (timeout 30min)' | |
if: | | |
env.SKIP_TARGET == '0' && !cancelled() | |
&& (job.status == 'failure' || (env.OPT_DEBUG == '1' && env.TEST != '1')) | |
env: | |
TMATE_DOCKER_CONTAINER: ${{env.BUILDER_CONTAINER_ID}} | |
uses: openlumi/safe-debugger-action@dev | |
# - name: Upload bin directory | |
# uses: actions/upload-artifact@master | |
# if: env.SKIP_TARGET == '0' && !cancelled() | |
# with: | |
# name: OpenWrt_bin_${{env.BUILD_TARGET}} | |
# path: ${{env.HOST_BIN_DIR}} | |
- name: Organize files | |
id: organize | |
if: env.SKIP_TARGET == '0' && !cancelled() && ( steps.mtcompile.outputs.status == 'success' || steps.stcompile.outputs.status == 'success' ) | |
run: scripts/cisteps/build-openwrt/14-organize_files.sh | |
- name: Upload firmware | |
uses: actions/upload-artifact@master | |
if: env.SKIP_TARGET == '0' && env.TEST != '1' && env.OPT_PACKAGE_ONLY != '1' && steps.organize.outputs.status == 'success' && !cancelled() | |
with: | |
name: OpenWrt_firmware_${{env.BUILD_TARGET}} | |
path: openwrt_firmware | |
- name: Upload packages | |
uses: actions/upload-artifact@master | |
if: env.SKIP_TARGET == '0' && env.TEST != '1' && steps.organize.outputs.status == 'success' && !cancelled() | |
with: | |
name: OpenWrt_packages_${{env.BUILD_TARGET}} | |
path: ${{env.HOST_BIN_DIR}} | |
- name: Checkout tools repo | |
uses: actions/checkout@v4 | |
if: env.SKIP_TARGET == '0' && env.TEST != '1' && steps.organize.outputs.status == 'success' && !cancelled() && github.ref == 'refs/heads/master' | |
with: | |
repository: openlumi/releases | |
path: ${{ env.HOST_WORK_DIR }}/releases | |
ref: gh-pages | |
token: ${{ secrets.GH_TOKEN }} | |
- name: Copy files into Git branch | |
if: env.SKIP_TARGET == '0' && env.TEST != '1' && steps.organize.outputs.status == 'success' && !cancelled() && github.ref == 'refs/heads/master' | |
run: | | |
mkdir -p ${{env.HOST_WORK_DIR}}/releases/${{env.BUILD_TARGET}} | |
cp -r ${{env.HOST_BIN_DIR}}/* ${{env.HOST_WORK_DIR}}/releases/${{env.BUILD_TARGET}} | |
scripts/make-index-html.sh ${{env.HOST_WORK_DIR}}/releases || true | |
- name: Commit files | |
if: env.SKIP_TARGET == '0' && env.TEST != '1' && steps.organize.outputs.status == 'success' && !cancelled() && github.ref == 'refs/heads/master' | |
run: | | |
cd ${{ env.HOST_WORK_DIR }}/releases | |
git status | |
git add -A | |
git config --local user.email "[email protected]" | |
git config --local user.name "GitHub Action" | |
git commit -m "Updates files from build ${{env.BUILD_TARGET}}" -m "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" -a | |
git push | |
# - name: Create Pull Request | |
# if: env.SKIP_TARGET == '0' && env.TEST != '1' && steps.organize.outputs.status == 'success' && !cancelled() | |
# uses: peter-evans/create-pull-request@v3 | |
# with: | |
# token: ${{ secrets.GH_TOKEN }} | |
# path: ${{ env.HOST_WORK_DIR }}/releases | |
# branch: pr-pages | |
# base: gh-pages | |
# title: 'Updates files from latest Actions build' | |
- name: Upload builder | |
if: | | |
env.SKIP_TARGET == '0' && !cancelled() && ( | |
job.status == 'success' | |
|| env.OPT_PUSH_WHEN_FAIL == '1' | |
) && github.ref == 'refs/heads/master' | |
run: scripts/cisteps/build-openwrt/13-upload_builder.sh | |
# failure checking | |
- name: '[Failure/Debug] wait for SSH connection (timeout 30min. You are safe to cancel the job now.)' | |
if: | | |
env.SKIP_TARGET == '0' && !cancelled() | |
&& (job.status == 'failure' || (env.OPT_DEBUG == '1' && env.TEST != '1')) | |
uses: openlumi/safe-debugger-action@dev |