mirror of
https://github.com/armbian/build.git
synced 2025-09-10 16:21:37 +02:00
> How to use: > > `./compile.sh inventory` - does just the board inventory; look for output in `output/info` > > `./compile.sh targets-dashboard` - does inventory, targets compositing, and images info; look for output in `output/info`, read the instructions output by the command if you want to load the OpenSearch dashboards. > > `./compile.sh targets` - does the full targets compositing and artifacts, look for output in `output/info` > > If you don't have a `userpatches/targets.yaml`, _one will be provided for you_ defaulting to Jammy minimal CLI > and Jammy xfce desktop, for all boards in all branches. You can pass filters via `TARGETS_FILTER_INCLUDE=...` to narrow. > - board JSON inventory: - more generic regex parsing of variables from board files: - all top-level (non-indented) variables are parsed and included in the JSON board inventory - this allows us to add new variables to the board files without having to update the parser - variables can be bare, `export` or `declare -g`, but **_must_ be quoted** (single or double) and UPPER_CASE - some special treatment for certain variables: - `KERNEL_TARGET` is parsed as a _comma-separated_ list of valid BRANCH'es - `BOARD_MAINTAINER` is parsed as _space-separated_ list of valid maintainer GH usernames as `BOARD_MAINTAINERS: [...]` in the JSON - script complains if `BOARD_MAINTAINER` is not set in core boards. Empty is still allowed. - `HAS_VIDEO_OUTPUT="no"` causes `BOARD_HAS_VIDEO: false` in the JSON (for desktop-only inventorying, see below) - introduce `not-eos-with-video` in `items-from-inventory` at the targets compositor - the same as `not-eos`, but with added `BOARD_HAS_VIDEO: true` filter, see above - introduce `TARGETS_FILTER_INCLUDE` for targets compositor - this filters the targets _after_ compositing (but before getting image info), based on the board inventory data - it's a comma-separated list of `key:value` pairs, which are OR-ed together - new virtual info `BOARD_SLASH_BRANCH` post-compositing inventory for filtering of a specific BOARD/BRANCH combo (e.g. `odroidhc4/edge`) - some interesting possible filters: - `TARGETS_FILTER_INCLUDE="BOARD:odroidhc4"`: _only_ build a single board, all branches. JIRA [AR-1806] - `TARGETS_FILTER_INCLUDE="BOARD_SLASH_BRANCH:odroidhc4/current"`: _only_ build a single board/branch combo - `TARGETS_FILTER_INCLUDE="BOARD:odroidhc4,BOARD:odroidn2"`: _only_ build _two_ boards, all branches. - `TARGETS_FILTER_INCLUDE="BOARD_MAINTAINERS:rpardini"`: build all boards and branches where rpardini is a maintainer - `TARGETS_FILTER_INCLUDE="BOARDFAMILY:rockchip64"`: build all boards and branches in the rockchip64 family - image-info-only variables like `LINUXFAMILY` is **not** available for filtering at this stage - rename `config/templates` `targets-all-cli.yaml` to `targets-default.yaml` - this is used when no `userpatches/targets.yaml` is found - new default includes all boards vs branches for non-EOS boards - also desktop for all boards that _don't_ have `HAS_VIDEO_OUTPUT='no`` - introduce simplified `targets-dashboard` CLI: - does only inventory, compositing, and image info, but not artifact reducing, etc. - ignore desktop builds in the OpenSearch indexer - update the OpenSearch Dashboards, including new information now available - invert the logic used for `CLEAN_INFO` and `CLEAN_MATRIX` - defaults to `yes` now, so new users/CI don't get hit by stale caches by default - repo pipeline CLI stuff is usually run on saved/restored artifacts for `output/info`, so don't clean by default via the CLI
143 lines
7.1 KiB
Bash
143 lines
7.1 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Copyright (c) 2013-2023 Igor Pecovnik, igor@armbian.com
|
|
#
|
|
# This file is a part of the Armbian Build Framework
|
|
# https://github.com/armbian/build/
|
|
|
|
function armbian_register_commands() {
|
|
# More than one command can map to the same handler. In that case, use ARMBIAN_COMMANDS_TO_VARS_DICT for specific vars.
|
|
declare -g -A ARMBIAN_COMMANDS_TO_HANDLERS_DICT=(
|
|
["docker"]="docker" # thus requires cli_docker_pre_run and cli_docker_run
|
|
["docker-purge"]="docker"
|
|
["dockerpurge"]="docker"
|
|
["docker-shell"]="docker"
|
|
["dockershell"]="docker"
|
|
["generate-dockerfile"]="docker"
|
|
|
|
["requirements"]="requirements" # implemented in cli_requirements_pre_run and cli_requirements_run
|
|
|
|
# Given a board/config/exts, dump out the (non-userspace) JSON of configuration
|
|
["configdump"]="config_dump_json" # implemented in cli_config_dump_json_pre_run and cli_config_dump_json_run
|
|
["config-dump"]="config_dump_json" # implemented in cli_config_dump_json_pre_run and cli_config_dump_json_run
|
|
["config-dump-json"]="config_dump_json" # implemented in cli_config_dump_json_pre_run and cli_config_dump_json_run
|
|
["config-dump-no-json"]="config_dump_json" # implemented in cli_config_dump_json_pre_run and cli_config_dump_json_run
|
|
|
|
["inventory"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
["targets"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
["targets-dashboard"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
["debs-to-repo-json"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
["gha-matrix"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
["gha-workflow"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
["gha-template"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
|
|
# These probably should be in their own separate CLI commands file, but for now they're together in jsoninfo.
|
|
["debs-to-repo-download"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
["debs-to-repo-reprepro"]="json_info" # implemented in cli_json_info_pre_run and cli_json_info_run
|
|
|
|
["kernel-patches-to-git"]="patch_kernel" # implemented in cli_patch_kernel_pre_run and cli_patch_kernel_run
|
|
|
|
["build"]="standard_build" # implemented in cli_standard_build_pre_run and cli_standard_build_run
|
|
["distccd"]="distccd" # implemented in cli_distccd_pre_run and cli_distccd_run
|
|
["flash"]="flash" # implemented in cli_flash_pre_run and cli_flash_run
|
|
|
|
# external tooling, made easy.
|
|
["oras-upload"]="oras" # implemented in cli_oras_pre_run and cli_oras_run; up/down/info are the same, see vars below
|
|
|
|
# all-around artifact wrapper
|
|
["artifact"]="artifact" # implemented in cli_artifact_pre_run and cli_artifact_run
|
|
["artifact-config-dump-json"]="artifact" # implemented in cli_artifact_pre_run and cli_artifact_run
|
|
["download-artifact"]="artifact" # implemented in cli_artifact_pre_run and cli_artifact_run
|
|
|
|
# shortcuts, see vars set below. the use legacy single build, and try to control it via variables
|
|
["rootfs"]="artifact"
|
|
|
|
["kernel"]="artifact"
|
|
["kernel-patch"]="artifact"
|
|
["kernel-config"]="artifact"
|
|
|
|
["uboot"]="artifact"
|
|
["uboot-patch"]="artifact"
|
|
["atf-patch"]="artifact"
|
|
["crust-patch"]="artifact"
|
|
["uboot-config"]="artifact"
|
|
|
|
["firmware"]="artifact"
|
|
["firmware-full"]="artifact"
|
|
["armbian-config"]="artifact"
|
|
["armbian-zsh"]="artifact"
|
|
["armbian-plymouth-theme"]="artifact"
|
|
["fake-ubuntu-advantage-tools"]="artifact"
|
|
|
|
["armbian-base-files"]="artifact"
|
|
["armbian-bsp-cli"]="artifact"
|
|
["armbian-bsp-desktop"]="artifact"
|
|
["armbian-desktop"]="artifact"
|
|
|
|
["undecided"]="undecided" # implemented in cli_undecided_pre_run and cli_undecided_run - relaunches either build or docker
|
|
)
|
|
|
|
# common for all CLI-based artifact shortcuts
|
|
declare common_cli_artifact_vars=""
|
|
|
|
# common for interactive artifact shortcuts (configure, patch, etc)
|
|
declare common_cli_artifact_interactive_vars="ARTIFACT_WILL_NOT_BUILD='yes' ARTIFACT_BUILD_INTERACTIVE='yes' ARTIFACT_IGNORE_CACHE='yes'"
|
|
|
|
# Vars to be set for each command. Optional.
|
|
declare -g -A ARMBIAN_COMMANDS_TO_VARS_DICT=(
|
|
["docker-purge"]="DOCKER_SUBCMD='purge'"
|
|
["dockerpurge"]="DOCKER_SUBCMD='purge'"
|
|
["docker-shell"]="DOCKER_SUBCMD='shell'"
|
|
["dockershell"]="DOCKER_SUBCMD='shell'"
|
|
|
|
["generate-dockerfile"]="DOCKERFILE_GENERATE_ONLY='yes'"
|
|
|
|
["artifact-config-dump-json"]='CONFIG_DEFS_ONLY="yes"'
|
|
|
|
# repo pipeline stuff is usually run on saved/restored artifacts for output/info, so don't clean them by default
|
|
["debs-to-repo-download"]="CLEAN_MATRIX='no' CLEAN_INFO='no'"
|
|
["debs-to-repo-reprepro"]="CLEAN_MATRIX='no' CLEAN_INFO='no'"
|
|
|
|
# artifact shortcuts
|
|
["rootfs"]="WHAT='rootfs' ${common_cli_artifact_vars}"
|
|
|
|
["kernel"]="WHAT='kernel' ${common_cli_artifact_vars}"
|
|
["kernel-config"]="WHAT='kernel' KERNEL_CONFIGURE='yes' ${common_cli_artifact_interactive_vars} ${common_cli_artifact_vars}"
|
|
["kernel-patch"]="WHAT='kernel' CREATE_PATCHES='yes' ${common_cli_artifact_interactive_vars} ${common_cli_artifact_vars}"
|
|
|
|
["uboot"]="WHAT='uboot' ${common_cli_artifact_vars}"
|
|
["uboot-config"]="WHAT='uboot' UBOOT_CONFIGURE='yes' ${common_cli_artifact_interactive_vars} ${common_cli_artifact_vars}"
|
|
["uboot-patch"]="WHAT='uboot' CREATE_PATCHES='yes' ${common_cli_artifact_interactive_vars} ${common_cli_artifact_vars}"
|
|
["atf-patch"]="WHAT='uboot' CREATE_PATCHES_ATF='yes' ${common_cli_artifact_interactive_vars} ${common_cli_artifact_vars}"
|
|
["crust-patch"]="WHAT='uboot' CREATE_PATCHES_CRUST='yes' ${common_cli_artifact_interactive_vars} ${common_cli_artifact_vars}"
|
|
|
|
["firmware"]="WHAT='firmware' ${common_cli_artifact_vars}"
|
|
["firmware-full"]="WHAT='full_firmware' ${common_cli_artifact_vars}"
|
|
["armbian-config"]="WHAT='armbian-config' ${common_cli_artifact_vars}"
|
|
["armbian-zsh"]="WHAT='armbian-zsh' ${common_cli_artifact_vars}"
|
|
["armbian-plymouth-theme"]="WHAT='armbian-plymouth-theme' ${common_cli_artifact_vars}"
|
|
["fake-ubuntu-advantage-tools"]="WHAT='fake_ubuntu_advantage_tools' ${common_cli_artifact_vars}"
|
|
|
|
["armbian-base-files"]="WHAT='armbian-base-files' ${common_cli_artifact_vars}"
|
|
["armbian-bsp-cli"]="WHAT='armbian-bsp-cli' ${common_cli_artifact_vars}"
|
|
["armbian-bsp-desktop"]="WHAT='armbian-bsp-desktop' BUILD_DESKTOP='yes' ${common_cli_artifact_vars}"
|
|
["armbian-desktop"]="WHAT='armbian-desktop' BUILD_DESKTOP='yes' ${common_cli_artifact_vars}"
|
|
|
|
["oras-upload"]="ORAS_OPERATION='upload'"
|
|
|
|
["undecided"]="UNDECIDED='yes'"
|
|
)
|
|
# Override the LOG_CLI_ID to change the log file name.
|
|
# Will be set to ARMBIAN_COMMAND if not set after all pre-runs done.
|
|
declare -g ARMBIAN_LOG_CLI_ID
|
|
|
|
# Keep a running dict of params/variables. Can't repeat stuff here. Dict.
|
|
declare -g -A ARMBIAN_CLI_RELAUNCH_PARAMS=(["ARMBIAN_RELAUNCHED"]="yes")
|
|
declare -g -A ARMBIAN_CLI_RELAUNCH_ENVS=(["ARMBIAN_RELAUNCHED"]="yes")
|
|
|
|
# Keep a running array of config files needed for relaunch.
|
|
declare -g -a ARMBIAN_CLI_RELAUNCH_CONFIGS=()
|
|
}
|